帕鲁CTFwp

0x01MISC

上周第一次参加了正式的ctf比赛,学到了很多东西,特意记录一下自己的wp与复现

这一题我们直接将其放至谷歌地图搜索

可以看到显示为武汉江汉路,再看左边的新金珠宝,就可以定位到武汉市新金珠宝江汉路店,再地图上搜索就可有找到具体位置了

这样就可以得到flag:flag{湖北省武汉市江汉二路与江汉路步行街交叉路口}

FM145.8

这一题首先去查看频谱仪跟查看是否为音频隐写,都不是这里就想到了另一种方法用声音传输图片,这里我们使用RX sstv来解决这题,在使用是应将声音的输入与输出都转为虚拟声卡也可以用手机的Robot36

所以可以得到答案:flag{19b4dD77bF3c66f9ic23F5A25Bc314CB}

另一种解法是使用QSSTV在kali中输入sudo apt-get install qsstv

安装qstv,之后qsstv->Options->Configration->Sound->from file

但是Qsstv对音频有格式要求必须是wav格式且采样率必须为48000

而本题的采样率为41400,这里可以使用Audacity去导出48000hz采样率的音频

再使用Qsstv即会产生图像

Misc-签到

这一题打开是一个文档然后是一堆数字,这里就是将十进制数字的字符串转换成相应的 Unicode 字符串

这里写一个python脚本

1
2
3
4
5
6
string = "27880 30693 25915 21892 38450 23454 39564 23460 21457 36865 112 108 98 99 116 102 33719 21462 21069 27573 102 108 97 103 20851 27880 79 110 101 45 70 111 120 23433 20840 22242 38431 22238 22797 112 108 98 99 116 102 33719 21462 21518 27573 102 108 97 103"
decimals = map(int, decimal_string.split())

chinese_chars = ''.join([chr(decimal) for decimal in decimals])
print(chinese_chars)

最后运行就可以得到我们想要的结果

ez_misc

这一题给了一张图片与一个需要密码的压缩包文件

这里我们用010 Editor打开,在文件末尾发现一提示字符

我们将后面的空格与点复制出来,但是并不会显现我们可以考虑一下snow隐写,将后面的字符复制粘贴在一个新建文本上

可以得到压缩包密码Carefree and carefree

最终得到flag:flag{b220116fc6ca827ecf3cb6c6c06dac26}

350x350

这一题给了我们一张图片加有密码的压缩包

按惯例我们用010Editor去查看,发现后面缺少结束标志,判断有可能在里面塞了压缩包

我们打开kali利用binwalk工具查看

可以看见里面藏了多个xml文件,用foremost将其分离可以得到一个压缩包文件我们将其以word的方式打开

很显然是隐藏了文字我们将隐藏文字的勾去掉就能显现文字了

把这段文字放到网上搜索显示为64周易,可能为一种加密方式,这里就不用传统的解密方式,解密字典如下

1
2
3
4
5
6
乾:111111 坤:000000 屯:010001 蒙:100010 需:010111 讼:111010 师:000010 比:010000 小畜:110111 履:111011 泰:000111 否:111000
同人:111101 大有:101111 谦:000100 豫:001000 随:011001 蛊:100110 临:000011 观:110000 噬嗑:101001 贲:100101 剥:100000 复:000001
无妄:111001 大畜:100111 颐:100001 大过:011110 坎:010010 离:101101 咸:011100恒:001110遁:111100 大壮:001111
晋:101000 明夷:000101 家人:110101 睽:101011 蹇:010100 解:001010 损:100011 益:110001 夬:011111 姤:111110 萃:011000 升:000110
困:011010 井:010110 革:011101 鼎:101110 震:001001 艮:100100 渐:110100 归妹:001011 丰:001101 旅:101100 巽:110110 兑:011011
涣:110010 节:010011 中孚:110011 小过:001100 既济:010101 未济:101010 阳:1 阴:0

我们这里使用随波逐流工具箱直接解密出密文

我们将密码填入压缩包又得到了一张图片:

老规矩用010editor打开看一看

依旧没有尾部标志,使用binwalk+foremost可以分离出两张图片

0x02RE

Auth System

对于这题我们再进行查壳后首先使用x64debug进行调试可以发现有一行直接跳至‘This computer is not authorized’的指令再动态调试后发现他最后都会执行这一条汇编指令,所以我们可以对其修改,使其跳向输出flag的命令行

我们对4016F1这行汇编指令进行修改,填充汇编指令使其跳转至4016FA使其能够输出flag

改完之后我们再调试运行一遍(图片地址由于本人写wp昏头了为错误位置,正确位置为4016FA)

最终可以在终端得到我们的flag:flag{ASCII_ART_IS_FUN}

帕鲁被病毒感染了

一进来是一个压缩包加一张png图片,初看这张图片很有可能存在一个高宽隐写,这里我们使用CRC32校验,去爆破出正确的宽高

使用python爆破脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import os
import binascii
import struct

crcbp = open("D:\paluctf\帕鲁被病毒感染了\帕鲁被病毒攻击了\帕鲁帕鲁.png", "rb").read() #打开图片
for i in range(2000):
for j in range(2000):
data = crcbp[12:16] + \
struct.pack('>i', i)+struct.pack('>i', j)+crcbp[24:29]
crc32 = binascii.crc32(data) & 0xffffffff
if(crc32 == 0x8857b020): #图片当前CRC
print(i, j)
print('hex:', hex(i), hex(j))


得到正确的宽高

在010修改宽高就可以得到完整的图片

得到压缩包的密码:palubei@2024#01

打开压缩包之后我们可以发现有三个文件夹加3个文本文件

我们解析manifest.json中的代码发现其实是一个关于docker容器的部署,三个文件夹为layer层

所以我们逐个分析三个分析

在第二个文件夹的lay.tar中找到一个名为cat文件

用010打开cat发现其实一个在Linux的可执行elf文件

再往后翻就翻到了出题人给的flag

最终得到flag:flag{0n3_n00b_ru1n5_0n3_hundr3d_pr05}

这一题拿到程序先查壳

可以看见是一个无壳的x64可执行文件,将其放入ida静态分析

初步分析是将用户输入的字符与内部的字符进行加密比对,如果字符是对的则输出成功提示,这里再用x64dbg动态调试一下,搜素全部字符可以看到提示再试一遍的提示我们再其地方下一个断点

单步调试运行,看见指针指到”Is_This_TEA?”这一段字符串处,继续单步运行

之后就会发现”Is_This_TEA?”在寄存器中逐渐变小,直至只剩下“TEA?”可以猜测这串字符的前部分被拿去对比加密

在”Is_This_TEA?”还有两串字符串

其中字符串”SGludDogSW1wcm92ZSBvZiBTYWxzYTIw“很像一串base64编码,用在线解密解密一下

可以看见提示说是Salsa20的改进算法,因此可以想到chacha20算法,正好也符合题目名字(滑稽)

1
2
3
4
5
6
7
8
9
10
11
from Crypto.Cipher import ChaCha20

enc_data = bytes.fromhex("f568c48912eed6dc520c7164f44b6378e1d0d3e248914fa8847b405a131f")


key = b"SGludDogSW1wcm92ZSBvZiBTYWxzYTIw"
nonce = b"Is_This_"

cc = ChaCha20.new(key=key, nonce=nonce)

print(cc.decrypt(enc_data))

cha7

得到flag:flag{But_I_Like_ChaCha20_More}

结语:因为才结束几天,官方wp还没有陆续放出来,等放出来会陆续更新