https://dreamhack.io/wargame/challenges/3/ basic_exploitation_001 문제 풀이

 

 

위와 같이 다운받은 파일에 실행 권한을 준 후 실행시키면 값을 입력받도록 하고 있고, 

아무런 값을 입력했더니 프로그램이 그냥 종료되는 것을 확인할 수 있었다.

 

소스코드의 내용을 살펴보자.

 

 

먼저, alarm_handler() 함수는 puts() 함수를 통해 TIME OUT을 출력하고 함수를 종료시키는데, 

이는 파일 실행 후 너무 오랜 시간 입력값을 받지 않으면 프로그램을 종료시키는 함수이다.

다음으로, 메인 함수에서 buf를 해당 크기만큼 할당하고, initialize() 함수를 실행시킨 후 gets() 함수로 입력받는다.

또한, read_flag() 함수를 통해 flag를 출력해주기 때문에 이 부분의 해당 주소값이 넣어진다면 문제가 해결될 것이다. 

 

gdb를 통해 파일을 실행시켜보자.

 

 

위와 같이 info function 명령어를 통해 read_flag의 주소값이 0x080485b9인 것을 확인할 수 있다.

이때 스택 버퍼의 크기는 0x80이었고, 스택은 ret/sfp/buf로 구성되어 있을 것이기 때문에

ret에 read_flag() 함수의 주소를 넣으면 해결될 것이다.

또한, sfp는 4바이트이므로 0x80+4=132바이트라는 것을 구할 수 있다.

 

이렇게 계산한 값을 pwntools를 이용하여 코드를 작성해보자.

 

 

접속 정보는 위와 같이 문제에서 확인할 수 있다.

 

 

아까 위에서 구한 값인 132만큼 a를 입력해준 후 read_flag() 함수의 주소에 해당하는 0x080485b9를

위와 같이 리틀 엔디안 방식으로 더해 payload를 전달해준다.

 

 

파일 저장 후 python 명령어로 실행시켜보면 위와 같이 플래그가 잘 출력되는 것을 확인할 수 있다.

'2021-1 STUDY > Pwnable Study' 카테고리의 다른 글

Week06_프로세스4  (0) 2021.08.28
Week05_BOF  (0) 2021.05.19
Week04_GDB 분석  (0) 2021.05.12
Week03_collision  (0) 2021.05.05
Week03_setuid  (0) 2021.05.05

+ Recent posts