18번째 문제 풀이이다.! :)

cobolt를 풀어보자!



(홈디렉토리)



파일이 2개 들어있다.
먼저 C코드를 확인해본다.



(C코드)



C코드를 보니 그렘린 문제와 비슷한데 다른점이 버퍼의 크기가 작다는 것이다..
16바이트. 우리의 쉘코드는 32바이트이다.

우리의 쉘코드를 줄이던가 다른 방법이 필요하다.



(메모리 구조)



그렇게 생각하던 도중 스택의 더 높은 주소를 쓰는게 어떨까 하는 생각이 들었다.
문제의 버퍼는 배열이므로 높은 주소방향으로 채워진다. 즉 긴~ 문자열을 입력하면 RET주소를 넘어 그 아래까지 덮어 쓸수 있다는 것이다.
그래서 나는 버퍼를 A로 가득 채운후 Saved EBP 범위까지 A로 채우고
그 다음 RET주소에 RET+4주소로 덮어 쓸것이다. 그 후 RET+4 주소에 우리의 쉘코드를 올릴 것이다.

그렇게 되면 쉘을 떨어뜨리는데는 문제가 없을 것이다.!



(BOF)



주소부분을 C로 채워보았고 그 그 오른쪽 주소부터 쉘코드가 올라가는 지점이다.

쉘코드의 주소 EBP+8을 확인해보자.



(쉘코드 위치)



쉘코드의 위치를 확인한다.

이제 실제 주소값을 넣어보고 잘 넣어지는지 확인해본다.




(테스트)



확인해보니 주소도 잘 들어갔고 쉘코드 또한 잘 들어갔다. :)

이제 실제 프로그램에서 공격해보면 된다.




(공격화면)



공격을 해보니 바로 쉘이 떨어지는 것을 확인 할 수 있었다.



(문제 해결)

'WarGame > 500 Project' 카테고리의 다른 글

(20/500) Lord of the BOF - orc  (0) 2017.06.20
(19/500) Lord of the BOF - goblin  (0) 2017.05.07
(17/500) Lord of the BOF - gremlin  (0) 2017.05.05
(16/500) Wargame.kr - ip log table  (0) 2017.04.20
(15/500) Wargame.kr - lonely guys  (0) 2017.04.18

+ Recent posts