감자 텃밭

Basic_BOF#1 본문

my_study/HackCTF

Basic_BOF#1

g2h 2021. 5. 17. 20:42

HackCTF의 포 너블 문제 Basic_BOF#1 문제

파일을 실행한 모습

해당 파일의 동작을 확인하기 위해 실행시켜보았는데 실행시켰을 때 무언가를 입력받기를 기다렸다

입력했을 시 버퍼에 저장하고 해당 버퍼의 주소를 나타낸다고 추측하였다.

gdb를 이용해서 분석을 시도해보자!!

흠... 분석을 해보면 일단

처음 ebp-0xc위치에 4030201을 넣고 34번 줄에서 ebp-0x34의 주소를 eax에 넣은 후 fgets의 인자 값으로 받는 걸 볼 수 있다. 또한 86,95,120번 줄에서 비교를 한다 만약 ebp-0xc위치에 deadbeef문자열이 있을 경우 153번의 시스템 함수를 실행시키며 그렇지 않을 경우 177번으로 이동하여 해당 프로그램이 종료된다. 이로서 대충 0x34에서 입력을 받아 fgets의 입력값 인증 취약점을 이용하여 버퍼오버플로우를 일으켜 0xc의 위치에 deadbeef를 삽입하여 시스템 함수를 실행시켜 쉘을 획득하는 것이라고 추측하였다.

확인해 본 결과 역시 system 함수의 인자 값으로는 /bin/dash 쉘이 들어간다 이로서 추측이 맞았다. 이제 버퍼오버플로우를 일으키기 위해 0x34와 0xc의 거리를 구해야 한다.

0x34와 0xc의 오프셋 위치를 구해 거리 차이를 구하였다. 0 xffffd07c를 보면 0x04030201이 입력되어 있는 걸 볼 수 있다. 이로서 거리는 40바이트의 거리가 있고 그 후 0 xffffd07c부분에

deadbeef를 삽입하면 된다. 이제 모든 준비는 끝났으므로 payload를 작성하러 가자!!!

해당 payload는 이렇게 짰다 일단 로컬에서 먼저 실행시켜보기 위헤 process를 통해 파일을 실행시키고

0x34와 0xc의 거리인 40만큼 nop(\x90)으로 채운 후 ffffd07 c(0xc) 위치에 시스템 함수를 실행시키기 위해 필요한 문자열

deadbeef를 리틀애 디안 방식으로 삽입 후 전송하는 방식으로 만들었다 이제 실험을 해보자!

성공적으로 실행된 모습

성공적으로 실행되었다!! 이제 본격 서버로 보내어 쉘을 획득해보자

remote로 변경
성공!!!!!!!!!!!!!!!

성공적으로 쉘을 획득하고 flag를 획득한 모습!!!! 

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

Simple_overflow_bof_ver_2  (0) 2021.05.21
Simple_size_bof  (0) 2021.05.21
64bof_basic  (0) 2021.05.21
내 버퍼가 흘러넘친다!!  (0) 2021.05.18
Basic_BOF#2  (1) 2021.05.17