BOF 원정대의 bugbear를 잡아보자!

* 소스코드 분석



(bugbear.c)


소스코드를 보니 스택을 사용하지 못할 것 같다.
ret 주소에 bf로 시작하는 주소를 입력하면 빠져나오게 되있는 코드를 볼 수 있다.

그렇다면? 문제의 의도대로 RTL ( Return To Library ) 를 이용해보겠다.
내가 사용할 라이브러리 함수는 system 함수이다.

system 함수를 이용하여 shell을 실행시킬 것이다.
나의 계획은 
더미(44바이트) +  system주소 + 더미(4바이트) + system 주소 인자 + "/bin/sh"
이렇다.
맨 뒤 /bin/sh 문자열은 system 주소의 인자로 넘겨주기 위한 문자열이다. 이 위치의 주소를 알아내어 system 주소 인자 위치에 넣어줄 것이다.

먼저 system 주소의 위치를 파악한다.



(system 주소 확인)



자 이제 system 주소 인자의 위치인 /bin/sh 문자열의 시작위치를 찾아야한다. 일단 주소를 D 4개로 채워넣은 후 실행하여 확인해본다.



(주소 확인)


D 4개가 보이고 그 다음 부터 문자열이 시작된다.
저 주소는 바로 0xbffffaa8이다. 이 주소를 D 4개 넣었던 곳에 넣으면 된다.



(최종 확인)



문자열과 문자열 주소가 잘 들어간 것을 확인해 볼 수 있다.

실제에서는 0x10 바이트 차이가 날 수 있으므로 앞뒤로 왔다갔다하면 찾을 수 있다.



(공격 성공)



쉘 획득

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

(31/500) Lord of the BOF - assassin  (0) 2017.06.23
(30/500) Lord of the BOF - giant  (0) 2017.06.21
(28/500) Lord of the BOF - darkknight  (0) 2017.06.20
(27/500) Lord of the BOF - golem  (0) 2017.06.20
(26/500) Lord of the BOF - skeleton  (0) 2017.06.20

+ Recent posts