首页
社区
课程
招聘
[原创]KCTF2024-第九关
发表于: 2024-9-3 22:46 3195

[原创]KCTF2024-第九关

2024-9-3 22:46
3195

这道题感觉主要考一个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"]
然后就只需要简单的爆破一下

得到flag为hellocatx202112050a3b1c4d29

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)
import hashlib
flag="hellocat"
flag1="202112050"
flag2=["a3b1c4d29","a3b4c1d29","a2b1c4d39","a2b4c1d39"]
box="abcdefghizklmnopqrstuvwxyz1234567890"

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//