bof 원정대의 troll을 잡아보자!

*소스코드 분석


(troll.c)



소스코드를 보면 우리가 늘 사용하던 인자영역이 초기화 되는 코드가 추가된 것을 확인 할 수 있다.
하지만 argv[0]은 초기화가 안되는데 이점을 이용해서 전 문제에서 풀던것 처럼 풀수가 있다.

실제로 사용할 메모리 주소먼저 확인해본다.



(gdb를 통한 실행)




(초기화된 부분)



늘 사용하던 argv[1] 영역이 0으로 초기화 된것을 확인 할 수 있다.

하 지만!



(argv[0] 영역)


argv[0]영역을 보면 뭔가가 있다. 바로 프로그램명(경로) 이다! 확인해보면


(프로그램명)



프로그램 이름(경로)인 것을 확인 할 수 있다.
그러면 전에 문제처럼 링크를 걸어서!

경로 먼저 생성해준다. \x2f가 경로의 구분자로 사용되기 때문에


(경로 생성)


그 후 링크!


(링크 생성)



Nop이 200개 정도니 충분하겠지? 바로 공격해본다.



(Segmentation Fault)


Segmentation Fault가 난다.. 이런.. 확인해봐야겠다. tromy 라고 내가 복사시킨 복사본을 가지고 링크를 똑같이 생성한 후 메모리를 확인해본다.



(링크생성(복사본에게))



(메모리 모습)



아하 조금 달랐다. 프로그램 이름이 길어져서 메모리 주소가 조금 바뀌었나보다.

다시 원본에 링크를 걸어주고!



(링크 생성(원본))



(공격)



공격! 은.. 또 실패!
Segmentation Fault...
뭐지!!!! 다시 복사본으로 링크를 만든 후 core 파일을 열어보았다. ( 복사본 링크과정은 똑같아서 생략했다.)



(core 파일)



음... 위치가 또 다르네..
어쨋건 nop영역의 주소를 하나 가져다가 공격!



(공격 성공)



쉘 획득!

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

(26/500) Lord of the BOF - skeleton  (0) 2017.06.20
(25/500) Lord of the BOF - vampire  (0) 2017.06.20
(23/500) Lord of the BOF - orge  (0) 2017.06.20
(22/500) Lord of the BOF - darkelf  (0) 2017.06.20
(21/500) Lord of the BOF - wolfman  (0) 2017.06.20

+ Recent posts