profile image

L o a d i n g . . .

1. 문제

simple_overflow_ver_2 파일을 몇 번 실행시켜보았다. 

 

1. 먼저 데이터 입력을 받는다.

2. buf 의 주소를 출력하고 입력받은 데이터도 출력한다.

3. 다시 실행할 건지 묻는다.

4. y를 입력하면 다시 데이터를 입력받게 되고, 동일한 주소를 출력한다.

5. 프로그램을 종료하고 다시 실행시키면 버퍼의 주소가 다르게 나온다.

 

 

2. 문제 의도 파악하기

ida로 파일을 연 모습이다.

 

scanf 입력 시 입력값 검증을 하지 않기에 bof를 일으켜 RET를 변경하면 될 것 같다.

즉 payload는 다음과 같을 것이다.

Payload = "Shell code" + dummy 값 + buf의 주소

그리고 프로그램이 실행될 때 buf의 주소가 leak이 되기 때문에 exploit 코드에서 구해서 전달하면 될 것이다.

 

 

그렇다면 이제 offset을 구해서 중간에 그만큼의 dummy 값을 주면 된다.

버퍼 s의 주소는 ebp-0x88 부터 이므로 ebp로부터 0x88 즉, 136 byte만큼 떨어져있다.

따라서 payload는 다음과 같을 것이다.

payload = shellcode(23) + "A"*(0x88-23) +"B"*4 +buf의 주소

 

 

3. payload 작성하기

1. "Data : " 까지 받은 뒤 buf의 주소를 얻기 위해 "AAAA"(아무거나)를 보낸다.

2. 10byte 만큼 buf의 주소를 받은 뒤 16진수로 변환한다.

3. ":" 까지 받은 뒤 "y" 를 보낸다.

4. payload를 (shellcode + "A"*113 + "B"*4 + buf_addr)로 작성한다.

5. 또 "Data : "까지 문자열을 받은 뒤 payload를 보낸다.

 

 

성공적으로 쉘을 획득하고 flag 까지 획득하였다!!

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

[HackCTF] x64 Simple_size_BOF  (0) 2021.03.19
[HackCTF] Basic_FSB  (0) 2021.03.19
[HackCTF] Basic_Bof #2  (0) 2021.03.19
[HackCTF] Basic_Bof - 내 버퍼가 흘러넘친다!!!  (0) 2021.03.11
[HackCTF] Basic_Bof #1  (0) 2021.03.04
복사했습니다!