Wargame/HackCTF

[HackCTF] 1996

핏디 2021. 8. 23. 12:10
SMALL

[문제]

 

 


[풀이]

바이너리를 실행해보면 환경 변수를 입력 받아 실행하는 것으로 보인다. 

 

file을 확인해보니 64bit 바이너리이다.

 

RELRO가 Partial이고, NX bit가 걸려있는 것으로 보아 쉘코드 삽입은 불가하고 GOT Overwrite는 가능할 것으로 보인다.

 

main함수를 확인해보면 getenv 함수를 통해 입력 값을 받고 있다. 

 

* getenv() 함수

char *getenv(const char *name);

:환경 변수 값 구함
-> 입력 값에 대한 길이 검증 X BOF 취약점

spawn_shell 함수를 확인해보면 쉘을 실행시켜주고 있다. 즉, getenv 함수로 BOF를 발생시켜 spawn_shell 함수 주소로 ret 주소를 overwrite하면 exploit 할 수 있을 것으로 보인다.

 

gdb를 실행하여 getenv 함수에 bp를 걸어 임의의 입력 값(a)을 입력해보면 

 

0x7fffffffdb90부터 저장된다는 것을 알 수 있다.

 

ret 주소를 찾기 위해 실행해보면 0x7fffffffdfa8에 저장된다는 것을 알 수 있다. 이에 둘 사이의 offset을 구해보면 0x418(1048)이다. 

 

 

LIST

'Wargame > HackCTF' 카테고리의 다른 글

[HackCTF] Random_key  (1) 2021.08.23
[HackCTF] Poet  (0) 2021.08.22
[HackCTF] yes_or_no  (0) 2021.08.15
[HackCTF] BOF_PIE  (0) 2021.07.26
[HackCTF] Offset  (0) 2021.07.25