이번엔 skeleton에서 사용했던 방식을 사용할 수 없도록 버퍼에서부터 스택 끝부분까지를 전부 0으로 초기화한다.
이럴 때는 공유 라이브러리에 원하는 코드를 올려서 사용하면 된다.
스택 영역 바로 아랫부분에 공유 라이브러리 영역이 있는 것을 확인할 수 있다.
(이미지 출처 : http://lapislazull.tistory.com/61)
문제에서 0으로 초기화하는 부분은 스택에서 윗부분이므로 아랫부분인 공유 라이브러리 부분은 그대로이다.
아무 컴파일 가능한 c 파일을 하나 만들어서 컴파일을 하는데,
옵션으로 shared와 fPIC를 준다.
shared는 말 그대로 공유 라이브러리를 먼저 참조하라는 의미이고, fPIC는 심볼이 어느 위치에 있건 동작이 가능하도록 컴파일하라는 옵션이라고 한다.
만들어질 파일 명을 NOP와 쉘코드를 포함하여 만들고,
LD_PRELOAD 환경변수에 등록한다.
LD_PRELOAD는 파일 실행 시 Dynamic Linker가 선택된 파일을 무조건 선적재한다.
따라서 이렇게 환경변수에 올려주면 공유 라이브러리로 무조건 해당 파일이 올라온다.
메모리상에서 NOP+SHELLCODE의 주소를 찾아냈고,
해당 주소를 넣어주어 공격에 성공했다.
'Wargame > Lord of Buffer overflow' 카테고리의 다른 글
LOB Redhat : darkknight > bugbear (0) | 2015.11.02 |
---|---|
LOB Redhat : golem > darkknight (0) | 2015.10.17 |
LOB Redhat : vampire > skeleton (0) | 2015.10.15 |
LOB Redhat : troll > vampire (0) | 2015.10.15 |
LOB Redhat : orge > troll (0) | 2015.10.13 |