IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> ctfshow中Misc入门WP -> 正文阅读

[Python知识库]ctfshow中Misc入门WP

misc42

misc43

提示:错误中隐藏着通往正确答案的道路
猜测与crc错误有关。
利用PCRT提取
PCRT:一款自动化检测修复PNG损坏的取证工具
可以在kali中安装PCRT:git clone https://github.com/sherlly/PCRT.git
然后 python PCRT.py -y -v -i misc44.png > 666.txt
在这里插入图片描述
把错误的code提出来用hex转字符
将这些提取出来,然后转16进制就可以。
E59387E5 93A62E63 74667368 6F777B36 65623235 38396666 66663565 33393066 65366238 37353034 64626330 3839327D

import binascii
str='E59387E593A62E63746673686F777B36656232353839666666663565333930666536623837353034646263303839327D'
print(binascii.a2b_hex(str))

b’\xe5\x93\x87\xe5\x93\xa6.ctfshow{6eb2589ffff5e390fe6b87504dbc0892}’

misc44

提示:错误中还隐藏着坑
一种CRC32隐写,错误的CRC32和正确的CRC32分别代表着01,再8位一组转字符,劝大家不要拖进tweakpng,因为会有几百个弹窗。。。
至于如何提取正确和错误的CRC32,我的做法是用PCRT识别再放入txt,再写个脚本,就比较容易
PCRT:一款自动化检测修复PNG损坏的取证工具
可以在kali中安装PCRT:git clone https://github.com/sherlly/PCRT.git
然后 python PCRT.py -y -v -i misc44.png > 666.txt
python脚本代码:

f = open('666.txt')
res = ''
while 1:
    c = f.readline()
    if c:
        if 'chunk crc' in c:
            # print(c)
            res+='0'
        elif 'Correct IDAT CRC' in c:
            res+='1'
    else:
        break

print(res)
print(len(res))
for i in range(len(res)//8):
    a = res[i*8:i*8+8]
    try:
        print(chr(int(a,2)),end='')
    except:
        pass

ctfshow{cc1af32bf96308fc1263231be783f69e}

misc45

提示:有时候也需要换一换思维格式
一个新的知识点。
具体做法就是:先把图片从png格式转为bmp格式,然后直接binwalk提取就能得到flag.png了。
我是matlab转的图片格式,两行代码就可以哦,当然大家也可以去在线网站转换格式。
matlab代码:

I=imread('misc45.png');
imwrite(I,'d:\455.bmp');

先读取png图片,然后重写转换图片格式为bmp,路径大家自行调整即可。
在这里插入图片描述
然后我们用binwalk 455.bmp -e 分离文件即可。
在这里插入图片描述

在这里插入图片描述

misc46

用gif每一帧的偏移量作为坐标来画图即可,这里gif的偏移量我是用identify命令直接获取的
kali中的identify需要安装一下,在root权限下:apt-get install imagemagick
identify misc46.gif > 2.txt
在这里插入图片描述
再写个脚本画图即可(首次使用,要安装一下matplotlib 用命令pip install matplotlib)

from PIL import Image
import matplotlib.pyplot as plt
f = open('2.txt')
pp = []
while 1:
    c = f.readline()
    if c:
        s = eval(c.split('+')[1]+','+c.split('+')[2][:2])
        pp.append(s)
        print(s)
        # print(c)
    else:
        break

img = Image.new('RGB',(400,70),(255,255,255))
for i in pp:
    new = Image.new('RGB',(1,1),(0,0,0))
    img.paste(new,i)
plt.imshow(img)
plt.show()

在这里插入图片描述
ctfshow{05906b3be8742a13a93898186bc5802f}

misc47

给了一个png,打开发现没内容,用浏览器打开,确认是apng
简单来说就是每一个IDAT块前面都会有一个fcTL块,它其中就包含水平垂直偏移量
如下

import struct
from PIL import Image
import matplotlib.pyplot as plt
f = open('misc47.png','rb')
c = f.read()
c = c[c.index(bytes.fromhex('6663544C00000001')):]
pp = []
for i in range(1,1124,2):
    start = c.index(bytes.fromhex('6663544C0000')+struct.pack('>h',i))
    # start = c.index(bytes.fromhex('6663544C000000'+hex(i)[2:]))
    # print(start)
    fc = c[start:start+30]
    print(fc[18:20],fc[22:24])
    print(struct.unpack('>h',fc[18:20])+struct.unpack('>h',fc[22:24]))
    pp.append(struct.unpack('>h',fc[18:20])+struct.unpack('>h',fc[22:24]))
    # print(fc.index(b'\xb6'),fc.index(b'\x34'))
# print(c[:100])
img = Image.new('RGB',(400,70),(255,255,255))
for i in pp:
    new = Image.new('RGB',(1,1),(0,0,0))
    img.paste(new,i)
plt.imshow(img)
plt.show()

在这里插入图片描述

ctfshow{6d51f85b45a0061754a2776a32cf26c4}

misc48

用winhex打开,发现右侧文本信息有提示
1、统计FF的数量,再减去1
2、ctfshow{}中包含32个字符
在这里插入图片描述
在这里插入图片描述

第一条提示,其实指的是统计每两个有意义块之间的FF的数量再减一
图中紫色的就是,开头的那个FF也算,因为只有一个,减去1后就是0;接下来是12、11、0…
因为flag长度是32位,所以只统计前32个,即:
0 12 11 0 7 10 13 13 9 0 9 13 0 13 6 0 10 9 2 1 0 1 10 8 11 5 12 7 2 2 3 10
用小脚本跑一下

s = '0 12 11 0 7 10 13 13 9 0 9 13 0 13 6 0 10 9 2 1 0 1 10 8 11 5 12 7 2 2 3 10'
d = '0123456789abcdef'
for i in s.split(' '):
    print(d[int(i)],end='')

0cb07add909d0d60a92101a8b5c7223a
ctfshow{0cb07add909d0d60a92101a8b5c7223a}

misc49

提示:它们一来就是十六种。本题略脑洞,可跳过
用winhex打开,能看到很多字符串
在这里插入图片描述
重点是这些字符串前面,都出现过FFE? 这种格式的数据,搜索一下发现有挺多的

在这里插入图片描述
把所有十六进制数保存在1.txt中,用一个小脚本处理一下
如果带有\x,在记事本中直接替换掉所有的即可。

f=open("1.txt","r")
txt=f.read().replace("\n","")
f.close()

l=txt.split("FFE")
flag=""
for i in range(1,len(l)):
    flag += l[i][0]
print(flag.lower()[:32]) #结果套上ctfshow{}

其实就是把FFE后面的那个字符提取出来,再连接在一起,一共32位(),这就是flag。
ctfshow{0c618671a153f5da3948fdb2a2238e44}

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 00:14:13  更:2021-07-28 00:14:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 19:12:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码