촉촉한초코칩

[Dreamhack] ssp_001 writeup 본문

Study/System

[Dreamhack] ssp_001 writeup

햄친구베이컨 2024. 5. 19. 12:21

 

먼저 코드를 살펴본다.

F를 입력하면 box에 입력받는다.

P를 입력하면 idx를 입력받고 print_box 함수를 통해  해당 인덱스 값을 출력한다.
> 만약, box보다 큰 값이 들어온다면 오버플로우가 일어날 수 있다.

E를 입력하면 name_len의 값을 입력받고 name에 그 값을 넣는다. 
> 만약, name보다 큰 값이 들어오면 오버플로우가 일어날 수 있다.

get_shell() 함수에 닿으면 flag를 얻을 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

디버깅

117번째 줄에서 select를 입력받는다.

그리고 그 값에 따라 F면 155, P면 192, E면 249번째 줄이 실행된다.

 

 

 

F 입력 시

 

 

 

 

P 입력 시 

idx를 입력받고 print_box를 실행한다.

print_box의 주소 값은 eax에 있다는 것을 알 수 있다.

 

 

 

E 입력 시

xor 연산을 통해 두 값이 동일하지 않으면 __stack_chk_fail 함수가 실행되고 프로세스가 종료된다. 

그렇다면 ebp-0x8에 카나리 값이 들어있음을 알 수 있고, ebp와 카나리 사이에 4byte의 ebp-0x4 dummy 값이 존재함을 알 수 있다.  

쉘을 얻기 위해서는 box(0x40) + name(0x40) + canary(0x4) + dummy(0x4) + ebp(0x4) 값을 알아야 알 수 있을 것같다.  

 

공격 코드

 

참고

https://velog.io/@silvergun8291/Dreamhack-ssp001

'Study > System' 카테고리의 다른 글

[Dreamhack] rop  (0) 2024.05.26
[Dreamhack] **Return to Library  (0) 2024.05.26
[Dreamhack] Canary 생성 과정 동적 분석  (0) 2024.05.19
[Dreamhack] Canary 실습 동적 분석  (0) 2024.05.19
[Dreamhack] shell_basic (**다시 해보기...)  (0) 2024.05.13