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 |