2019. 3. 13. 23:51ㆍSystem Hacking/[LOB] Hacker School
안녕하세요!
오늘은 LOB 3번
Cobolt 문제를 풀어보도록 하겠습니다!
문제에 들어가니
아래와 같은 소스코드가
주어지네요!
근데 사실 바로 직전 문제
gremlin과 달라진 게 별로 없습니다!
달라진 게 있다면
gremlin: argv 형식으로 입력을 받았다
cobolt: stdin(standard input)으로 입력을 받는다
이게 끝이에요....
입력 방식만 차이가 있지
풀이나 exploit은 똑같아요
왜냐면 소스코드를 보시면
버퍼가 16byte가 있죠?
그리고 gets 함수로 입력을 받고
그 값을 버퍼에 저장
다음에 버퍼에 저장된 값을 printf 함수로 출력!
여기서 취약점은 마찬가지로 gets 함수가
얼만큼 읽을지 크기를 안정해줘서
오버플로우가 발생하는 것이죠?
즉 gremlin과 마찬가지로
main 함수의 ret addr을
system으로 바꾸고
system 함수의 인자로 /bin/sh
넣으면 되겠죠?
[스택]
buffer (16 byte)
EBP (4byte)
ret_addr(4byte) =>시스템 함수 주소
aaaa
/bin/sh주소
그래서 바로 아래와 같이 payload를 작성했습니다!
gremlin과 달라진 점은 딱 하나입니다!
| 이걸 통해서 stdin 으로 입력한 거요!
a로 EBP까지 채우고
system함수 주소로 return
system함수 ret_addr은 aaaa로 설정
그리고 /bin/sh의 주소
일부러 nm 이랑 strings명령어로 system함수 주소와 /bin/sh 주소
찾는 것은 생략했습니다
궁금하신 분들은
바로 직전 gremlin에 있으니 보고 참고하시면 될 것 같아요!
(이미 많이 했어서요 :) )
고생하셨습니다!
'System Hacking > [LOB] Hacker School' 카테고리의 다른 글
[어설픈] LOB 6번 wolfman 문제풀이 (0) | 2019.03.19 |
---|---|
[어설픈] LOB 5번 orc 문제풀이 (0) | 2019.03.17 |
[어설픈] LOB 4번 goblin 문제풀이 (0) | 2019.03.15 |
[어설픈] LOB 2번 gremlin 문제풀이 (0) | 2019.03.11 |
[어설픈] LOB 1번 gate 문제풀이 (0) | 2019.03.04 |