golem 코드
Egghunter가 사라져 환경변수 입력이 가능하나 프로그램 종료 전에 buffer부터 0xbfffffff까지 RET주소 들어있는 부분을 제외하고는 전부 다 0으로 초기화
전부 다 초기화시키니까 살아남는게 없다.
공유라이브러리를 이용하면 된다.
+)공유라이브러리?
심볼(함수,변수)등을 프로그램이 시작하기전에 로드하여 필요할 때 마다 연동되는 동적 라이브러리
이해하기 쉽게 말하면 원래 컴파일 할 때 libc.so.6이라는 라이브러리에서 심볼의 정 보를 적재하며 컴파일하고 프로그램이 실행되는데 그 전에 attack.so를 우선적으로 들 어가도록 환경변수를 설정하고 그 안의 내용을 쉘코드로 하면 된다는 것.
http://agz.es/Reverse-Engineering/Buffer-Overflow/BOF%20(Buffer%20OverFlow)%20%5BYumere%5D.pdf 의 18페이지 참고
공유 라이브러리는 프로그램이 시작되기 전 심볼들을 로드하여 필요할 때마다 사용하 는 동적 라이브러리 이다. 임의의 실행파일을 공유 라이브러리를 사용하여 컴파일 하 면, 링커가 실행파일에 ‘이 파일이 실행 될 때 이 라이브러리를 로딩한다’라는 표시 를 해둔다. 파일이 실행되어 공유 라이브러리를 사용하면, 그 후 공유 라이브러리를 사용하는 모든 프로그램은 만들어진 라이브러리를 사용하게 된다. LD_PRELOAD를 통해 라이브러리를 공유 라이브러리 역에 올리는게 가능하다. 결론적으로, 라이브러 리 명을 올릴 수 있다.
우선 attack이라는 파일을 만들어주고
공유라이브러리 명으로 쉘코드를 올려주고
이거를 환경변수에 등록한다.
그리고 gdb로 라이브러리 이름이 어디에 들어가 있는지 확인하고 RET값에 라이브러리 이름이 들어간 곳의 주소로 덮으면 된다.
그래서 gdb로 확인하려는데 golem을 까면 어차피 golem은 다 초기화되니까 확인할 것도 없고..그래서 뭘 까야하는걸까
그래서 우선 이렇게 해봤는데 이건 아니고
그리고 이렇게도 해봤는데 이것도 아니고
일단 잠시 쉬자.
아 golem를 까서 확인해야하는데 일단 main+167에 브레이크포인트를 걸고 r `python –c ‘print“\xbf”*48’`을 실행시키고 esp를 확인하면
이렇게 0xbffffa0c부터 다 0으로 초기화되어있다.
일단 환경변수든 메모리에 올라가야 실행이 되니까 스택의 어딘가에 있을 것이다. 0xbffffa0c니까 더 낮은 주소에서부터 확인을 해보면
x/50x $esp-4000
짠 nop부터 쉘코드가 올라가져있다.
'LOB' 카테고리의 다른 글
LOB 13번 (darkknight → bugbear) (0) | 2016.10.13 |
---|---|
LOB 12번 (golem → darknight) (0) | 2016.10.06 |
LOB 10번(vampire → skeleton) (0) | 2016.10.04 |
LOB 9번(troll → vampire) (0) | 2016.10.04 |
LOB 8번(orege → troll) (0) | 2016.10.04 |