-
-
[原创]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"
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
看原图
赞赏
雪币:
留言: