ii4gsp
FTZ - Level9 본문
힌트를 보니 /usr/bin/bof의 소스코드를 보여주고 level10의 권한을 얻으라고 한다.
fgets함수에서 버퍼 오버플로우 취약점이 발생한다.
buf가 10칸 할당받았는데 fgets에서 40만큼 입력을받기때문에 buf공간이 넘쳐 buf2영역까지 인자를 전달하여
buf2의 첫 두글자가 go가 되게하면 쉘을 획득 할수있을것이다.
hint의 소스코드를 /tmp 디렉토리에 bof.c라고 저장하였다.
저장된 bof.c를 vi 에디터로 열어 한글을 제거하였다.
gcc로 컴파일해주고
gdb로 disas main 명령어를 실행해보니
<main+43> 0xffffffd8은 1101 1000에서 1의 보수를 해주면 0010 0111(39)이 되는데 2의 보수로인해 +1이 됨으로써 40이된다.
[ebp-40] 만큼 문자열을 입력받는다.
아래 <main+65>부분 0xffffffe8도 1110 1000에서 1의 보수를 구하면 0001 0111(23)이 되는데 2의 보수로인해 +1이 됨으로써 24이다.
[ebp-24]에서 문자열을 비교한다.
즉, [ebp-40]는 buf의 위치, [ebp-24]는 buf2의 위치가 된다.
[ebp-40] - [ebp-24] = 16
16만큼의 문자열을 넣고 go를 넣어주면 buf2의 첫 두글자가 go가 될것이다.
payload
(python -c 'print "\x90" * 16 + "go"';cat) | /usr/bin/bof
'시스템 해킹 > FTZ' 카테고리의 다른 글
FTZ - Level15 (0) | 2020.01.10 |
---|---|
FTZ - Level14 (0) | 2020.01.09 |
FTZ - Level13 (0) | 2020.01.08 |
FTZ - Level12 (0) | 2020.01.08 |
FTZ - Level11 (0) | 2020.01.07 |
Comments