Pwnable/Hackerschool
[F.T.Z] Hackerschool FTZ Level 9
와븨
2023. 11. 11. 00:01
- buffer의 크기는 10인데, 40만큼의 입력이 들어오면 overflow가 발생한다.
- buf2가 buf보다 먼저 선언되었으므로, buf의 입력값이 10 이상이면 buf2로 넘어간다. 이때, buf에 go를 입력하면 level10의 권한을 얻을 수 있다.
tmp 디렉토리로 이동해서 힌트의 소스코드를 복사해 bof.c 파일을 새로 만들어줬다.
bof 실행 파일을 만들고,
gdb로 buf에 몇바이트를 입력해야 buf2의 값으로 넘어가는지 확인해보자.
(gdb) disas main
Dump of assembler code for function main:
0x08048420 <main+0>: push ebp
0x08048421 <main+1>: mov ebp,esp
0x08048423 <main+3>: sub esp,0x28
0x08048426 <main+6>: and esp,0xfffffff0
0x08048429 <main+9>: mov eax,0x0
0x0804842e <main+14>: sub esp,eax
0x08048430 <main+16>: sub esp,0xc
0x08048433 <main+19>: push 0x8048554
0x08048438 <main+24>: call 0x8048350 <printf>
0x0804843d <main+29>: add esp,0x10
0x08048440 <main+32>: sub esp,0x4
0x08048443 <main+35>: push ds:0x8049698
0x08048449 <main+41>: push 0x28
0x0804844b <main+43>: lea eax,[ebp-40]
0x0804844e <main+46>: push eax
0x0804844f <main+47>: call 0x8048320 <fgets>
0x08048454 <main+52>: add esp,0x10
0x08048457 <main+55>: sub esp,0x4
0x0804845a <main+58>: push 0x2
0x0804845c <main+60>: push 0x804856a
0x08048461 <main+65>: lea eax,[ebp-24]
0x08048464 <main+68>: push eax
0x08048465 <main+69>: call 0x8048330 <strncmp>
0x0804846a <main+74>: add esp,0x10
0x0804846d <main+77>: test eax,eax
0x0804846f <main+79>: jne 0x80484a6 <main+134>
0x08048471 <main+81>: sub esp,0xc
0x08048474 <main+84>: push 0x804856d
0x08048479 <main+89>: call 0x8048350 <printf>
0x0804847e <main+94>: add esp,0x10
0x08048481 <main+97>: sub esp,0x8
0x08048484 <main+100>: push 0xbc2
0x08048489 <main+105>: push 0xbc2
0x0804848e <main+110>: call 0x8048360 <setreuid>
0x08048493 <main+115>: add esp,0x10
0x08048496 <main+118>: sub esp,0xc
0x08048499 <main+121>: push 0x804857a
0x0804849e <main+126>: call 0x8048310 <system>
0x080484a3 <main+131>: add esp,0x10
0x080484a6 <main+134>: leave
buf의 시작점이 ebp-40, buf2의 시작점이 ebp-24 이므로,
buf에 16바이트 이상의 입력값을 입력하면 buf2의 값으로 넘어간다.
/usr/bin 으로 이동해 bof를 실행하고, 16바이트 이상 입력 후 go를 써주면 성공!
level10 권한을 얻을 수 있다.
level10 권한을 얻었으니 my-pass로 level10의 패스워드를 확인할 수 있다.