今天的题目主要以字符编码为主,几乎每一道都有涉及,感谢大家支持。
下载题目文件,是个pcapng日志文件,用wireshark打开开始分析。发现流量很大,而且大多数都是404。这里通过“http.response.code==200”过滤响应码是200的日志,发现结果如下。
最后一条看起来比较特殊,右键选择追踪HTTP流,发现是请求到了一个lsass.dmp文件。该文件一般存放的是主机的凭证,一般可以从中得到用户信息比如密码,在取证中经常用到。
这里就尝试下载该文件,然后用kali中内置的“pypykatz”来提取文件中的关键信息。下载仅需要工具栏中选择“文件”-“导出对象”-“HTTP”就可以直接看到所有文件。
下载后放入kali运行下面的命令,运行结果中发现了一串密码,“W3lc0meToD0g3”,但是暂时不知道该密码的用处。
pypykatz lsa minidump lsass.dmp
在Misc类型题目中,很多方式可以用到密码,比如图片隐写、压缩包、加解密、程序判断等,但能够导出的所有文件中并没有类似的文件。所以尝试binwalk拆分看看能否得到关键文件。
binwalk -e Attack.pcapng
因为文件类型是pcapng,binwalk的结果非常的多这里就不展示了,其中一个结果是个加密的压缩包,其中就有答案,而刚刚得到的密码就是用于解压这个压缩包。另外,这个flag在flag.txt的最底部,需要拖动到结尾,这里我就编辑到一起了。
类型 | 日志分析、取证 |
---|---|
工具 | wireshark、pypykatz、binwalk |
Flag | flag{3466b11de8894198af3636c5bd1efce2} |
下载题目文件,一张图片和一个网站前端代码的压缩包。先看网站前端代码,其中有个html文件,在其中发现了一个字符串,放进CyberChef自动解析是base32编码,得到“suctf{hAHaha_Fak3_F1ag}”,可惜得到的并不是真正的flag。
接下来看图片,直接放进随波逐流工具,发现LSB通道下存在数据,并且以RGB作为位平面顺序时存在一个类似密文的字符串。
打开Stegsolve并选择Data extract,配置好LSB通道后预览结果。
把开头这部分像是某种编码的字符串放进CyberChef,没有自动识别出来,尝试用base64解码,发现开头是salted。
这是一种标准的文件格式头,用于表明该文件是使用 OpenSSL 兼容的工具(如命令行 openssl enc 命令)加密的,并且加密过程中使用了“盐值”。而具体使用的是哪种加密算法(如 AES、3DES、Blowfish 等),则由加密时使用的命令参数决定。
这里我们需要尝试是具体哪种加密方式,最好的做法就是都解密一遍,其中解密过程需要密钥,而密钥就用前面得到的fake flag。最终发现加密方式是3DES,因为这里用上面的密钥进行3DES解密可以得到一个flag,这里解密可以用这个在线工具。
类型 | 图片隐写、加密解密 |
---|---|
工具 | CyberChef、随波逐流工具、Stegsolve、在线3DES解密工具 |
Flag | flag{U_F0und_1t} |
下载题目文件,包含两个文件,一个压缩包和一个ftm文件。先看压缩包,里面有一个文本文件,可惜啥也没有。想着看看有没有NTFS备用数据流隐写,用WinRAR解压缩结果出现了报错。报错显示压缩包内还有一个png图片但是文件头出错了。
这里就把该压缩包放进010editor尝试修复文件头。010editor工具很清晰的把内置文件区分开,其中可以看到png文件头表示目录的位被改为了7A,选中这个位就能看到其具体信息,这里应该要改为表示文件头的74。关于rar压缩文件的文件头标识信息,比如各个位具体代表什么意思,可以参考这篇文章。
修复后保存文件,重新解压缩得到了一个png图片。把图片放进随波逐流工具,发现LSB存在信息,放进stegsolve中开始分析,最后发现在蓝色0通道时有一个二维码。
这里得到的一串类似flag形式的字符串,可惜这个不是flag。有了flag的形式但不是flag就考虑是否是移位密码或者替换密码。这里尝试了一部分解密方法但始终得不到原文。想到有可能是维吉尼亚密码,需要一个key才能解出。(比赛遇到维吉尼亚没有key并且另外一部分找key的题目不会不用慌,也可以尝试爆破key,这里推荐一个网站。)
开始分析ftm文件,在kali中用binwalk时发现分离出了一个pcap文件。
用wireshark打开该文件,发现文件流量都是USB流量。这里就需要USB流量分析了。常见的flag隐藏方式是键盘敲击和鼠标移动点击来表示flag。这里先用这个工具脚本看是不是键盘流量。这里跑脚本也是直接出现了key。
用这个key去解前面可能是维吉尼亚的密文,用这个在线工具,解完后就得到了原文,但可惜这个原文好像还是经过了加密。
把该编码放进随波逐流工具并使用一键解码,跑出答案。
类型 | 文件修复、图片隐写、加密解密、USB流量隐写 |
---|---|
工具 | 010editor、stegsolve、qr_research、binwalk、工具脚本、随波逐流工具 |
Flag | flag{vig3ne2e_is_c00l} |
下载题目文件,其中包含两个压缩包,先看这个“虚假的压缩包”,把该压缩包放进随波逐流工具,显示为伪加密,工具自动输出修复后的压缩文件,解压缩后里面有个文本文件。
文本内容如下:
数学题
n = 33
e = 3
解26
-------------------------
答案是
这里像是RSA,最方便的方式是直接问ai,这里全部复制下来给deepseek做,得到答案是5。
这个地方卡了我很久,数字5不是另外一个压缩包的密码,另外一个压缩包也不是伪加密或者别的隐写。最后看了别的大佬的wp,发现压缩包的密码是“答案是5”这一串文字,出题者家里要请高人了。
“真实的压缩包”解压后包含两个文件,一个文本文件如下,是一串数字,分析后发现没有什么实际意义。
另外一个jpg图片直接放进随波逐流工具,发现存在CRC错误,是被修改了宽高,工具自动修复后得到原图如下。
这里有个^5的符号应该是指用前面我们看不懂的字符串和5进行异或,这里写一个简单脚本。
import base64
with open('亦真亦假', 'r') as f:
xor_data = f.read().strip()
dec_data = ''.join(hex(int(char, 16) ^ 5)[2:] for char in xor_data)
with open('./data.txt', 'wb') as f:
f.write(base64.b16decode(dec_data.upper()))
这里主要是不知道输出的是什么,所以先已txt格式输出。输出后放进kali使用exiftool发现类型为doc文档。
这里把后缀改为doc后重新打开文件。搜索后发现flag在结尾但是文字颜色是白色所以刚进去看不到,调整颜色后得到flag。
类型 | 伪加密、加密算法、字符编码 |
---|---|
工具 | 随波逐流工具、exiftool |
Flag | flag{_th2_7ru8_2iP_} |
题目已经提示了是明文攻击,就比较简单了,直接下载题目文件,解压缩后有两个文件,一个是带有密码的压缩文件,还有一个jpg格式的图片。把jpg图片放进随波逐流工具,工具显示图片末尾有其它字符。
这里我们把这些字符复制并放入CyberChef,发现好像是一个缺少了文件头的压缩文件。这里通过在开头加“504b”修复文件。
将输出保存为压缩文件在本地,里面同样有一个flag.txt文本文件,但其中不包含任何有用信息。这个时候我们需要得到的是另外一个有密码的压缩文件中的内容。通过预览我们知道其中也有一个flag.txt,通过大小可以猜测这两个文件是相同的。而我们的目的是得到secret.txt,这种时候就可以尝试使用明文攻击了。
这里还是使用ARCHPR作为明文攻击的工具。明文攻击的时间会比较长,需要耐心等待,等待期间可以先完成后面的题目。配置和最后的结果如下(明文文件路径要选择之前修复好的压缩包文件路径)。
我这里就一直放着没管,后面发现不停止会一直跑,可以看到我这里也跑了1个多小时。
找到后点击上面的确定,然后就会选择保存解密文件,保存后解压缩就能看到其中的文本文件了,答案就在secret.txt文本文件中。
类型 | 图片隐写、文件修复、压缩文件明文攻击 |
---|---|
工具 | 随波逐流工具、CyberChef、ARCHPR |
Flag | flag{3te9_nbb_ahh8} |
直接查看题目文件,是个可以直接预览的txt文本文件,内容如下。
cs pu lt 90 fd 500 rt 90 pd fd 100 rt 90 repeat 18[fd 5 rt 10] lt 135 fd 50 lt 135 pu bk 100 pd setcolor pick [ red orange yellow green blue violet ] repeat 18[fd 5 rt 10] rt 90 fd 60 rt 90 bk 30 rt 90 fd 60 pu lt 90 fd 100 pd rt 90 fd 50 bk 50 setcolor pick [ red orange yellow green blue violet ] lt 90 fd 50 rt 90 fd 50 pu fd 50 pd fd 25 bk 50 fd 25 rt 90 fd 50 pu setcolor pick [ red orange yellow green blue violet ] fd 100 rt 90 fd 30 rt 45 pd fd 50 bk 50 rt 90 fd 50 bk 100 fd 50 rt 45 pu fd 50 lt 90 pd fd 50 bk 50 rt 90 setcolor pick [ red orange yellow green blue violet ] fd 50 pu lt 90 fd 100 pd fd 50 rt 90 fd 25 bk 25 lt 90 bk 25 rt 90 fd 25 setcolor pick [ red orange yellow green blue violet ] pu fd 25 lt 90 bk 30 pd rt 90 fd 25 pu fd 25 lt 90 pd fd 50 bk 25 rt 90 fd 25 lt 90 fd 25 bk 50 pu bk 100 lt 90 setcolor pick [ red orange yellow green blue violet ] fd 100 pd rt 90 arc 360 20 pu rt 90 fd 50 pd arc 360 15 pu fd 15 setcolor pick [ red orange yellow green blue violet ] lt 90 pd bk 50 lt 90 fd 25 pu home bk 100 lt 90 fd 100 pd arc 360 20 pu home
遇到不懂的字符直接问ai,deepseek告诉我这串字符串是logo语言绘制命令,并且提供了一个在线绘图网站地址(https://calormen.com/jslogo/)。命令输进去并允许就得到了答案。
类型 | 字符编码 |
---|---|
工具 | ai、在线工具 |
Flag | flag{RCTF_HeyLogo} |
下载题目文件,是个pcapng日志文件,放进wireshark中进行分析。总体流量不大,所以想着看看有哪些文件,选择“文件”-“导出对象”-“HTTP”发现所有文件都是tmpshell的php文件,这里全部下载到本地看看具体文件内容。
现在下载后发现每个文件大小还不同,直接从最大文件开始看起,放进CyberChef之后发现该文件实际为/etc/passwd。
开始尝试用同样方法解析其它文件,在从大到小排第四个文件中发现了以下字符串。有一点像是每一行的字符顺序被颠倒了。
这里为了解析,可以在CyberChef中搜索reverse函数,为了每一行单独reverse,需要两次函数配置,最后结果再进行base64解码就行,类似我这里的配置,最终就可以得到一串重复处理的flag。
ffllaagg{{}}WWeellcc))[删除] [删除] 00mmee__GGkkCC44FF__mm11ssiiCCCCCCCCCCCC!!
这里的flag只需要我们去除重复字符就可以得到最后答案了。
类型 | 日志分析、字符编码 |
---|---|
工具 | wireshark、CyberChef |
Flag | flag{Welc0me_GkC4F_m1siCCCCCC!} |
上面那道根本不是什么签到题,这才是真签到题。下载题目文件,pcapng日志文件,用wireshark打开。流量非常少,直接选中一个然后右键追踪HTTP流,发现一个password。
放进CyberChef,得到flag。
类型 | 日志分析、字符编码 |
---|---|
工具 | wireshark、CyberChef |
Flag | flag{1ns3cur3_l0g0n} |
题目文件是个可以直接查看的文本文件,内容如下。
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus quis tempus ante, nec vehicula mi. Aliquam nec nisi ut neque interdum auctor. Aliquam felis orci, vestibulum sit amet ante at, consectetur lobortis eros. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In finibus magna mauris, quis auctor libero congue quis. Duis sagittis consequat urna non tristique. Pellentesque eu lorem id quam vestibulum ultricies vel ac purus.
这个看起来像是零宽字符隐写,关于零宽字符隐写的原理可以参考这篇文章。有个好用的在线工具。把原文放入后先encode再decode就可以得到flag。
类型 | 零宽字符隐写 |
---|---|
工具 | 在线工具 |
Flag | flag{whyNOT@sc11_4927aajbqk14} |
题目文件是个可以直接查看的文本文件,文件行数很多,每一行都有一个单独的数字。
通过观察可以发现每个数字都不超过255,并且种类只有固定的四种,像是使用了TTL加密,这里的TTL和网络命令ping的回显中的TTL表示的是相同意思。简单来说,所有的数字都可以用8位2进制表示,并且这些数字的主要区别都是前面的两位,所以这个加密就是通过没四个数字组成一组,也就是每个数字前面的两位加起来,八位组成一个全新的字节。
63 127 191 255
00111111 01111111 10111111 11111111
00 01 10 11
可以通过脚本把上面的密文解密为十六进制,这里转换为十六进制后发现开头是PK也就是zip格式压缩包,这里脚本直接把密文转换为压缩包输出了。
import binascii
mapping = {'63': '00', '127': '01', '191': '10', '255': '11'}
binary_str = ''.join(mapping[line.strip()] for line in open('attachment.txt') if line.strip() in mapping)
hex_str = ''.join(chr(int(binary_str[i:i+8], 2)) for i in range(0, len(binary_str), 8))
open('flag.zip', 'wb').write(binascii.unhexlify(hex_str))
输出后发现压缩包中有一个flag.txt文本文件,但是需要密码才能打开,这里把压缩包丢进随波逐流工具发现是伪加密。
工具自动修复后解压缩该压缩包,发现其中的flag.txt文本内容是一个长串的base64,放进CyberChef后发现可以进行多次的base64解码,这里写个脚本快一点。
import base64
with open('flag.txt', 'r') as f:
data = f.readline().strip()
while True:
data = base64.b64decode(data)
if b'{' in data:
print(data.decode())
break
类型 | 加密算法、字符编码、伪加密 |
---|---|
工具 | 随波逐流工具、CyberChef |
Flag | flag{189ff9e5b743ae95f940a6ccc6dbd9ab} |
下载题目文件,其中包含一个png格式图片和一个加密的rar压缩包。先把图片放进随波逐流工具,通过输出发现了两点,一是文件末尾还有别的字符并且是504b开头应该是个zip压缩包,其次LSB发现有特殊字符出现。
把zip压缩包单独分离出来,可以把工具输出的末尾字符复制到CyberChef中,然后下载输出的文件为zip到本地保存。
该zip也需要密码且不是伪加密。这里回到图片上,仔细看随波逐流工具分析结果,发现LSB虽然有字符但是不可读,但是RG0和R00显示有PNG开头的图片。R00是指GB无显示,只显示R。
这里打开stegsolve并配置R为最高位发现,把结果以png格式保存,从而得到zip压缩文件的密码。
用该字符串解压zip压缩文件,得到的文本内容,发现内容又是上一题同样的TTL加密。
这里还是使用脚本,但是和上次输出为zip不同,这里直接输出为ASCII。
with open('out.txt','r') as f:
res = ''.join('{:08b}'.format(int(line))[:-6] for line in f)
print(''.join(chr(int(res[i:i+8],2)) for i in range(0,len(res),8)))
用该密码对原来题目给的加密rar文件进行解压缩,得到了又一个zip文件,预览该压缩文件会发现这就是docx文件改后缀名成的zip。这里我们手动更改后缀名为docx,然后打开文档。
打开后会发现结尾有一大段空白字符,通过调整颜色从而显示出来。
每一行都是一串base64编码,通过CyberChef一行行解码后得到如下由0和1组成的字符集合。
110110111111110011110111111111111111111111111111101110000001111111111001101
110110110001101011110111111111111111111111111111111101111111111111110110011
110000101110111011110111111100011111111111001001101110000011111000011111111
110110100001111011110111111011101111111110110110101111111100110111111111111
110110101111111011110111101011101111111110110110101101111100110111111111111
110110100001100000110000001100011100000110110110101110000001111000011111111
字符二进制本身没有什么意义,但是把其中的1换成空格后就会出现由0表示的字符了,这个组合在一起就是答案。
类型 | 图片隐写、加密算法、字符编码 |
---|---|
工具 | 随波逐流工具、CyberChef、stegsolve |
Flag | flag{He1Lo_mi5c~} |
题目文件是个可以直接预览的文本文件,直接看发现什么都没有,通过ctrl+A发现存在空白字符。
把全部选中后放进Notepad++,发现全部都是由空格组成的,并且只有两种格式。一种长一点的一种短一点的。
所以这里可以全部二分化,长的算是1,短的算是0。可以写个脚本来判断,脚本这里旧不具体演示了,最后得到的字符串如下。
011101110110001101110100011001100011001000110000001100100011000001111011011010000011001101110010011001010101111100110001011100110101111101111001001100000111010101110010010111110110011001101100010000000110011101011111011100110011000101111000010111110111001100110001011110000101111101110011001100010111100001111101
放进CyberChef,直接得到答案。
类型 | 字符编码 |
---|---|
工具 | CyberChef、Notepad++ |
Flag | flag{h3re_1s_y0ur_fl@g_s1x_s1x_s1x} |
感谢大家观看。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。