vi gremlin.c
BOF가 가능한 대표적인 함수 strcpy
disas main
어떻게 문제를 풀어갈까?
0x8048433 <main+3>: sub $0x100,%esp → 256byte
메모리구조 LOW | buffer(256byte) | SFP(4byte) | RET(4byte) | HIGHT
환경변수에 쉘을 등록 → 환경변수의 주소를 불러옴 → gremlin 실행 시 글자를 260byte 만큼 넣어줌
strcpy 함수에 들어갈 두 인수를 불러오고 함수
strcpy함수 다음에 브레이크포인트? → 브레이크포인트 건 곳 전까지 실행
'hack'이란 이름의 환경변수를 만들 것인데 환경변수의 주소를 찾는 코드
환경변수 'hack'을 만들고 확인 후 주소를 찾음
계획대로라면 gremlin으로 넘어가야 되는데 왜 argv error가 뜰까?
+)nop(\x90)넣어주는 이유
linux를 통해 주소값을 확인하는 것도 뭘 하든 우리가 직접 확인하는 것이 아니라 무엇을 통해 확인하는 것이므로 100%정확하지 않다. 따라서 환경변수 주소를 찾을 때 정확한 지점을 찾을 수 있도록 앞에 nop를 넣어주는데 nop가 환경변수 주소 찾을 때 만약 nop 부분을 집으면 아무것도 실행하지 않고 주르륵 내려가다가 쉘코드를 만나면 쉘코드를 실행시킨다. 그러니까 처음부터 정확히 환경변수의 주솔르 집는 게 아니라 여유분으로 nop를 넣어준다.
환경변수 hack으로는 문제가 안풀리니 test란 환경변수를 추가시키고 이 환경변수에는 앞 뒤로 nop를 넣어준다.
bof가 발생하면서 gate → gremlin이 된다.
my-pass : passwd 확인
'LOB' 카테고리의 다른 글
LOB 6번 (wolfman → darkelf) (0) | 2016.10.04 |
---|---|
LOB 5번 (orc → wolfman) (0) | 2016.07.13 |
LOB 4번 (goblin → orc) (0) | 2016.07.13 |
LOB 3번 (cobolt → goblin) (0) | 2016.07.13 |
LOB 2번 (gremlin → cobolt) (0) | 2016.07.13 |