剛好昨天聽說某單位內部比賽,然後跑來求救XD
有在群組拿到求救的五個題目(都是 ARM in PWN) 和一個Python 沙箱逃逸
所以,昨天整天在看一下 ARM 下怎麼打 PWN (以前只碰過 x86/x64 0.0)
順手有解四個,是說不知道他們比賽哪時結束,所以應該也不會在這邊寫 write up
(( 話說他們跑去問外部的人本身就已經...XD
今天這邊先簡單介紹一下知識
函數的第一個到第四個參數會分別保存在 r0 ~ r3 ,剩下的參數由右到左壓入 stack
函數返回值存在 r0
call system call 在 x86 是 int 0x80 ,在 ARM 是 svc 0x80 / svc 0x0
r0 - r3 分別保存函數的第一個到第四個參數
r4 - r9 作為臨時變數
r7 存 syscall number
r13 指向 stack 頂端
r15 指向下一條執行指令的位址
sp(r13) 等於 x86 的 esp
fp(r11) 等於 x86 的 ebp
pc(r15) 等於 x86 的 eip
所以以前打 x86/x64 要 rop 需要控制 eip/rip ,在 ARM 下要去看 pc
上面講的基本知道後,一般 get shell 都是用: execve('/bin/sh', 0, 0)
ARM 下:
r0 = '/bin/sh'
r1 = 0
r2 = 0
r7 = 11 (syscall number)
svc #0 (調用 syscall)