PicoCTF - ropfu
Background
- ROP Chain
- x86 Calling Convention:
- Linux System Call Table
Source code
1 | |
Recon
1 | |
這一題很明顯要開個shell,我以為會像1[^0x12_rop++]這兩題一樣,事實上概念完全一樣,但換到x86的32bits版本就不知道為啥一直沒有成功,後來有想到是忽略了calling convention的問題,和x86-64的版本不一樣,另外指令的選擇上也不太一樣,像64bits的system call會用syscall,但x86會用int 0x80處理2,另外寫入/bin/sh\x00的方式也和之前的不一樣,之前是call __libc_read function之前把暫存器的部分擺好,就直接跳到__libc_read的地方去,但在這邊是沒辦法成功的,看了其他人的wp3,大部分的做法都是直接用rop把值寫到對應的section中,詳細如下:
pop edx -> bss address
pop eax -> 0x6e69622f -> /bin
mov DWORD PTR [edx] eax
pop edx -> bss address
pop eax -> 0x0068732f -> /sh\x00
mov DWORD PTR [edx] eax
寫完/bin/sh\x00就直接call execve的syscall開shell
Exploit - ROP Chain
1 | |
Flag: picoCTF{5n47ch_7h3_5h311_1b5a4b40}