【CTF对抗-KCTF2024-第九关】此文章归类为:CTF对抗。
这道题感觉主要考一个strcpy溢出,刚上来逻辑特别清晰,flag的长度是三的倍数,由小写字母与数字组成,将flag的分成三段,用三个函数校验,最后判断md5 。
第一个函数判断是判断前八字节是不是hellocat。
第二个函数先将字符串逆序,然后求各位和判断等于0xd,以及转成int之后×3判断是否等于150633606
第三个函数将输入的前八个字节。先比较偶数下标,然后建立一个4x4的矩阵,对输入每两个一组放入矩阵内,判断是不是在对角线,以及flag是不是在同一排同一列。如果是就进行运算。
前两个都好说,主要是最后一个验证,乍一看这些数据全是偶数,不太可能通过或跟异或运算出0x10000039。但是这里有个细节,str与dword_531E9C地址联系,而且还使用了,就可以想到strcpy的溢出。通过溢出覆盖dword_531E9C的低字节为0x39。然后让他只进行一次或0x10000000就可以了。
所以显然第三段flag的长度应该是9个字节,其他两个也是9个字节。
所以第一段flag是hellocat?
第二段flag是202112050
第三段flag是["a3b1c4d29","a3b4c1d29","a2b1c4d39","a2b4c1d39"]
然后就只需要简单的爆破一下
1 2 3 4 5 6 7 8 9 10 11 12 | import hashlib
flag = "hellocat"
flag1 = "202112050"
flag2 = [ "a3b1c4d29" , "a3b4c1d29" , "a2b1c4d39" , "a2b4c1d39" ]
box = "abcdefghizklmnopqrstuvwxyz1234567890"
for a1 in box:
tmp1 = flag + a1
for a2 in flag2:
tmp = tmp1 + flag1 + a2
if hashlib.md5(tmp.encode()).hexdigest() = = "40d511825ecbc207eb6ef9a7b1c6e34b" :
print (tmp)
exit( 0 )
|
得到flag为hellocatx202112050a3b1c4d29
更多【CTF对抗-KCTF2024-第九关】相关视频教程:www.yxfzedu.com