LOB_번외.bash2의 함정.
해킹/LOB 2016. 1. 29. 20:00
http://satanel001.tistory.com/98
위 포스팅의 darkknight->bugbear를 풀면서 나타났던 문제다.
결론부터 얘기하자면 bash2를 실행시킨 뒤 그 폴더에서 바로 공격을 했을때와 cd 명령어를 한번이라도 실행했을 때 주소에 차이가 나게된다.
1.cd를 한번도 안하고 tmp 폴더에서 bash2를 키고 공격했을 때 /home/darkknight/tmp/bugbear 코어 파일의 buffer 주소:0xbffffa90
2.cd ..을 해서 /home/darkknight/bugbear(원본)공격을 시도한 후 다시 cd tmp로 돌아왔을 때 /home/darkknight/tmp/bugbear(사본) 코어파일의 buffer 주소: 0xbffffa70
이런식으로 같은 파일인데도 불구하고 bash2를 실행시키고 즉시 공격했을 때와 cd..으로 원본 공격을 시도하고 cd tmp로 돌아왔을 때 주소에 차이가 생긴다..
심지 이부분에서 더 헤맸던 이유는 system 함수가 실행되면서 buffer 부분을 덮어버려 core파일 분석도 어려웠기 때문인데...
결론은 cd 명령어를 한번이라도 실행한 후에는 buffer의 주소가 바뀐다.
원인은 이거였다. bash를 처음 실행하고는 export 했을때 OLDPWD라는 환경변수가 없지만 cd ..으로 내려갔다가 돌아왔을 때는 캡쳐에 보이는것 처럼 OLDPWD라는 환경변수가 생겨났다.
저 환경변수의 길이만큼 스택이 밀려났기 때문에 주소에 차이가 생겼던것...
그리고 이상태에서 주소를 구한 뒤에 cd ..으로 아래로 내려가면
PWD="/home/darkknight/tmp"
OLDPWD="/home/darkknight"
에서
PWD="/home/darkknight"
OLDPWD="/home/darkknight/tmp"
로
이렇게 서로 위치만 바뀌기 때문에 원본파일에서도 buffer의 주소가 같아진다.
이렇게 aslr이 걸려있지 않은 환경에서 주소 오차의 주요 원인은 PWD와 OLDPWD이다.
혹시 주소 오차가 나는데 분석이 불가능한 상태라면 이부분을 체크해보자.
'해킹 > LOB' 카테고리의 다른 글
LOB_15.giant->assassin (0) | 2016.01.31 |
---|---|
LOB_14.bugbear->giant (0) | 2016.01.31 |
LOB_13.darkknight->bugbear (0) | 2016.01.29 |
LOB_12.golem->darkknight (0) | 2016.01.28 |
LOB_번외.my-pass파일을 공격해서 한번에 마지막까지 뚫기 (0) | 2016.01.27 |