ENSUPERB'S BLOG

XCTF-Misc 进阶 0x01+1

字数统计: 829阅读时长: 3 min
2020/12/08 Share

Misc 进阶 0x01


神奇的Modbus

wireshark过滤包为modbus,对modbus的数据流进行跟踪。找到flag。

1
PVÀ)#|EYx7@@<À¨À¨öó«##ùýÿpfPå9+(sctf{Easy_Mdbus}

提交时对Modbus字符串补全。

Refer:Modbus zh wiki

something_in_image

直接使用Strings.exe工具扫描镜像内的可打印字符串。

reverseMe

将图片放入word或者PS进行水平垂直翻转各一次。

wireshark-1

过滤得http报文,跟踪user.php的http流,搜寻关键字password

pure_color

在线的stegonline有时候确实香,不过真要更加细节的操作需要Stegsolve。便宜到Grey Bit可以见到清晰的FLAG。

Aesop_secret

GIF放进photoshop,使所有图层可见,得到可见字符串ISCC。再放进十六进制查看器里,观察到文件尾部有疑似Base64的字符串,后了解到是AES密文,放入这个网站连续解密两次。


Misc 进阶 0x02


a_good_idea

此题有不同解法。

以压缩包的方式打开a_very_good_idea.jpg文件,发现有两张图:to.png \ to_do.png

开始我用盲水印工具无法解出。

方案一

先导入to.png

再使用stegsolve的image combiner导入to_do.png进行比较,偏移到XOR模式。导入PS把曝光拉到最高(+20)。

方案二

两张图丢进beyond Compare

方案三

先导入to_do.png

再使用stegsolve的image combiner导入to.png进行比较,偏移到SUB模式。

方案四

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from PIL import Image
img1 = Image.open("to.png")
img2 = Image.open("to_do.png")
weight,height = img1.size # 获取图片长宽
p1 = img1.load()
p2 = img2.load()

new_img = Image.new('RGB',(weight,height))
p = new_img.load()

for i in range(weight):
for j in range(height):
# 控制解释:对比两张图像素,不一样的像素输出为白色。
if p1[i, j] != p2[i, j]:
p[i,j] = (255,255,255)
new_img.show()

Refer: Introduction to Image Analysis – CTF-Wiki

Training-Stegano-1

用十六进制软件打开,结束。

can_has_stdio

Brainfuck,前往在线工具得解。

符号
> increment pointer / 指针加一
< decrement pointer / 指针减一
+ increment value at pointer / 指针指向的字节的值加一
- decrement value at pointer / 指针指向的字节的值减一
[ begin loop (continues while value at pointer is non-zero) / 如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处
] end loop / 如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处
, read one character from input into value at pointer / 输入内容到指针指向的单元(ASCII码)
. print value at pointer to output as a character / 输出指针指向的单元内容(ASCII码
# display debugging info (in debug mode)
Any other characters are ignored. —-

János-the-Ripper

没有ZIP伪加密,使用工具ARCHPR进行密钥找回。

Test-flag-please-ignore

以为是md5,转念一想应该是Hex转ASCII。

1
2
3
4
5
6
7
string = "666c61677b68656c6c6f5f776f726c647d"
step = int(len(string)/2)
b_string = ""
for i in range(0,step):
tmp = chr(int(string[i*2:i*2+2],16))
b_string += tmp
print(b_string)

What-is-this

这题看到有两张图第一直觉是盲水印,但是发现这两张图即使是表面上看起来也不是一样的,然后第二直觉是丢进PS里使用混合模式,出flag。

这道题实际上两张图片对应的像素是互补的,则我们可以使用脚本让他们点对点相加试试。

1
2
3
4
5
6
7
8
img1 = Image.open("pic1.jpg")
img2 = Image.open("pic2.jpg")
width, height = img1.size

if img1.size == img2.size:
for x in range(width):
for y in range(height):
img1.putpixel((x,y), (img1.getpixel((x, y)) + img2.getpixel((x,y)) )) # 对像素位的操作
CATALOG
  1. 1. Misc 进阶 0x01
    1. 1.1. 神奇的Modbus
    2. 1.2. something_in_image
    3. 1.3. reverseMe
    4. 1.4. wireshark-1
    5. 1.5. pure_color
    6. 1.6. Aesop_secret
  2. 2. Misc 进阶 0x02
    1. 2.1. a_good_idea
    2. 2.2. Training-Stegano-1
    3. 2.3. can_has_stdio
    4. 2.4. János-the-Ripper
    5. 2.5. Test-flag-please-ignore
    6. 2.6. What-is-this