https://dreamhack.io/wargame/challenges/33
ssp_001
Description 이 문제는 작동하고 있는 서비스(ssp_001)의 바이너리와 소스코드가 주어집니다. 프로그램의 취약점을 찾고 SSP 방어 기법을 우회하여 익스플로잇해 셸을 획득한 후, "flag" 파일을 읽으세
dreamhack.io

canary와 nx보호기법이 걸려있음
c파일을 열어보자

P: print box함수를 호출하여 해당 인덱스의값 출력
E: name_len변수에 이름의 크기를 입력 받고 name변수에 해당하는 크기 만큼 입력 받음 => BOF발생 가능
스택 내 실행권한이 없으므로 조합하면 shellcode는 사용이 불가능하지만 get_shell함수가 존재하므로 bof를 이용하여 RET을 조작

main+117: select입력은 ebp-0x8a(=138)에 저장됨

main+179 :'F' box의 위치가 ebp-0x88(=136)임을 알 수 있음

main+217: 'P' 사용자가 입력하는 idx 값은 ebp-0x94(=148)에 저장

main+274: 'E' 사용자가 입력하는 name의 크기는 ebp-0x90(=144)에 저장

main+308: 'E' 사용자가 입력해야 하는 name값은 ebp-0x48(=72)에 저장

추가로 ebp-0x8의 값과 gs:0x14값이 같지 않을 경우를 체크하는 것을 보아 ebp-8의 위치에 canary가 위치함을 알수 있음 ebp와 canary사이에 4byte dummy가 존재함을 알 수 있음
stack구조를 생각해보면
RET[4] SFP[4] dummy[4] Canary[4] name[64] box[64] select[2] name의 크기[6] idx[4]
=> box의 128번째 인덱스를 leak하면 canary를 얻을 수 있다
get_shell()의 주소를 알아보자

0x80486b9가 메모리 주소
익스플로잇코드를 짜보자

flag가 나온다

'CTF > Pwnable' 카테고리의 다른 글
| [DreamHack] Bypass SECCOMP-1 Write-up (0) | 2024.03.23 |
|---|---|
| [DreamHack] rop Write-up (0) | 2024.03.16 |
| [DreamHack] basic_exploitation_000 Write-up (0) | 2024.03.10 |
| [DreamHack] memory_leakage Write-up (0) | 2024.03.10 |
| [DreamHack] basic_exploitation_001 Write-up (0) | 2024.03.10 |