티스토리 뷰
Lob 1번문제 gate입니다.
gremlin.c 파일을 열어보았습니다.
char 형 배열 buffer의 크기는 256byte 이고, argc 의 갯수. 즉, 명령어 인자의 갯수가
2개이상이 되면 argv error를 띄우고 프로그램을 종료시킵니다.
strcpy로 argv[1]의 값을 buffer로 복사합니다.
임시 파일인 tmp로 이동하여 gdb로 gremlin을 디버깅 해보겠습니다.
main 함수를 disassemble 해보니 16진수로 0x100 만큼 esp를 이동시켰습니다.
즉, 0x100만큼 char형 변수 buffer에 크기를 할당해 주었다는 것 입니다.
16진수로 100은 10진수로 256이므로 buffer의 크기는 쓰레기 값 없이 256byte입니다.
메모리 구조를 한번 그려보면 대략 이런 식으로 그려집니다.
buffer 256byte, sfp 4byte, ret 4byte 입니다.(buffer를 buf라고 잘못 적었습니다. ㅠ)
buffer와 sfp를 nop(\x90)으로 덮고 ret에 shell코드가 들어있는 주소를 넣어주면
될 것같습니다.
쉘코드를 등록 합니다.
환경변수의 주소값을 알아내기 위해 getit.c라는 c코드를 작성합니다.
그리고 getit.c를 gcc로 컴파일 하고 getit을 실행하여 환경변수의 주소값을 알아냅니다.
이제 환경변수의 주소까지 알아냈으니 그림에 그려진대로 페이로드를 작성하면
될 것 같습니다.
익스플로잇 하였습니다.
'Pwnable > Lob' 카테고리의 다른 글
Lob wolfman(6) (0) | 2017.12.20 |
---|---|
Lob orc(5) (0) | 2017.12.20 |
Lob goblin(4) (0) | 2017.12.20 |
Lob cobolt(3) (0) | 2017.12.20 |
Lob gremlin(2) (0) | 2017.12.20 |