systemhacking/practice

lob vampire->skeleton

qkqhxla1 2015. 1. 17. 15:39

cp skeleton.c skeleto1.c로 복사 후 복사한 파일에 dumpcode를 넣고, exit되는 부분은 다 주석처리 후


맨 아래에 dumpcode(buffer,2000);을 넣고 실행해보면 원래 skeleton.c소스에는 argc만큼 다


돌아가면서 argv부분을 전부 다 무력화시켜버리는데 dumpcode로 확인해보면 맨 아래에 실행파일


이름인 ./skeleto1이 남아있다.(결국 원래의 argv[0]말고 스택의 맨 아래에 하나 더 있다는 소리.)


그러면 여기를 공략하기위해 링크를 쉘코드로 건다. 안전을 기하기 위해 앞뒤로 nop을 100개씩


채워주자.




근데 위의 사진에서도 확인할수 있듯이 원래 써왔던 쉘코드인


\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는 안먹히고 다형성 쉘코드라는 변형된걸 써야된다.


찾아보니 \x2f('/')가 들어가면 또 복잡해진다고 함. 그래서 이 쉘코드를 쓴다.


\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


결과 잘 링크됨을 위의 사진에서 확인 가능.




위 사진처럼 ./링크건 파일명(쉘코드) a*44+리턴주소변조 확인용으로 입력해보면 맨 아래에 


위에서 우리가 확인했듯이 argv[0] 즉 프로그램이름이 그대로 남아있는걸 확인할수 있다. 


(00 2e 2f 90 90~~부분.) 그러면 저 부분인 \x01\xff\xff\xbf로 리턴주소를 잡고 공격해보면.



와 같이 공격하면 쉘이 뜨는걸 확인할수 있다. skeleto1로 쉘이 뜨는걸 확인했으니 이제 원래의


문제인 skeleton을 위와 똑같이 링크시켜서 공격하면 된다.




'systemhacking > practice' 카테고리의 다른 글

lob golem->darkknight (1바이트변조)  (0) 2015.01.21
lob skeleton->goelm (LD_PRELOAD)  (0) 2015.01.18
lob orge->troll  (0) 2015.01.15
lob darkelf->orge  (0) 2015.01.09
lob wolfman->darkelf  (0) 2015.01.05