LOB level 5
LOB (orc -> wolfman )
1. cat 명령어를 통하여 wolfman.c 의 소스 코드를 확인합니다.
2. 소스코드 분석
1. char 형 buffer [40] 선언
2. argc 가 2 미만일 경우는 오류 메시지 출력 후 종료
3. 에그 헌터 환경 변수 사용 금지.
4. argv[1][47]과 "\xbf"와 같지 않다면 오류 메시지 출력 후 종료
5.strcpy 함수 : argv[1]에 있는 것을 buffer에 복사 합니다.
6.printf 로 buffer를 출력 합니다.
7.memset 으로 buffer를 40까지 0으로 초기화 합니다.
3. gdb 권한 문제를 우회하기 위해 tmp에 복사합니다.
4. tmp 로 이동 하여 gdb wolfman 명령어를 입력합니다.
disas main 으로 main을 어세믈리어로 확인합니다.
5. 공격 방법
1. argv[2]에 쉘코드를 넣습니다.
2. gdb로 argv[2]가 메모리에 올라오는 주소를 찾습니다.
3. buffer(40)+ebp(4)+argv[2]의 주솟값 (return adress)
gdb로 argv[2]가 시작되는 주소를 찾습니다.
일단 우회해야하는 것은 argv[1][47]!="\xbf" 입니다.
배열은 0 부터 시작되기 때문에 47을 채우고 "\bf"를 채우면 47의 자리에
는 bf가 들어가게 됩니다.
그후 제가 실제로 쉘코드를 넣어줄 장소에는 B라는 문자를 넣어줍니다.
x/1000x $esp명령어로 확인 하실 수 있습니다.
자그럼 42(B)가 시작하는 주소를 찾을 수 있습니다.
넉넉하게 0xbfffc30으로 잡아 줍니다.
그렇다면 아까 위에서 했던 것 처럼
40(buffer)+4(ebp)+argv[2]의 주소) argv[2](쉘코드)
(쉘코드= 주소값의 오차를 제거하기위해 nop을 사용합니다.)
이렇게 입력주면 되겠습니다.
'Study > lob' 카테고리의 다른 글
LOB 5 (darkelf -> orge) (0) | 2017.06.12 |
---|---|
LOB level6 (wolfman->darkelf) (0) | 2016.09.13 |
LOB level 4 (goblin -> orc) (1) | 2016.08.01 |
LOB level 3 (cobolt -> goblin) (0) | 2016.08.01 |
LOB level 2 (gremlin -> cobolt) (0) | 2016.08.01 |
댓글