소스이다.
buffer의 주소부터 44바이트만큼을 0으로 초기화한다.
다행히, 주소부분은 초기화하지 않는다.
그리고 buffer+48바이트부터 스택의 끝까지 0으로 초기화한다.
여기서보면, buffer+45~48 의 4바이트만 제외하고 모두 0으로 초기화한다.
환경변수는 초기화하지 않는걸 보니 환경변수를 써보자
main 맨 처음에 브레이크를 건 모습
맨 마지막까지 실행하고, 스택을 본 모습
역시 리턴주소 부분만 제외하고는 전부 0으로 초기화되었다.
그럼, 이 리턴주소를 환경변수로 돌리면 되지 않을까?
환경변수가 저장된 스택의 주소
하지만 저 스택주소도 결국 모두 0으로 초기화된다.
어떻게 해야할까..
저 프로그램이 사용하는 스택주소 아래쪽에 쉘코드가 저장이 되어 있어야 한다.
스택 바로 아래에는 공유 라이브러리 영역이 존재한다.
여기에 쉘코드를 넣으면 될 거 같다.
-그림 출처:해커스쿨
그럼 공유 라이브러리에 쉘코드를 올려놓고
그 주소로 리턴해주면 된다고 한다.
공유 라이브러리에 쉘코드를 올리는 방법
gdb로 살펴보면 저 스택주소 부분에 공유 라이브러리가 저장되어 있다.
리턴주소를 저쪽으로 돌리니
쉘을 얻었다.
'WarGame > HackerSchool_LOB' 카테고리의 다른 글
HackerSchool LOB Level13 (0) | 2014.08.15 |
---|---|
HackerSchool LOB Level12 (0) | 2014.07.31 |
HackerSchool LOB Level9 (0) | 2014.07.30 |
HackerSchool LOB Level8 (0) | 2014.07.29 |
HackerSchool LOB Level7 (0) | 2014.07.29 |