촉촉한초코칩
[Dreamhack] ssp_001 writeup 본문
먼저 코드를 살펴본다.
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) 값을 알아야 알 수 있을 것같다.
공격 코드
참고
'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 |