y0u_bat
[CodeGate2014] Angry_Doraemon 도라에몽!! 풀이 본문
[CodeGate2014] Angry_Doraemon] 도라에몽!! 풀이
바이너리 파일을 뒤지다.
버퍼오버플로우에 취약한곳을 찾았습니다.
read(fd,&buf,0x6E); 에서 버퍼오버플로우가 일어납니다.
버퍼의 크기는 16-c인데요 계산해보면 10이 나오는걸 볼 수 있습니다.
한번 입력해보았습니다.
보니까 스택 스매싱 뜨는걸 볼 수 있는데요.
SSP 보호기법이 걸려 있는 문제이네요.
카나리를 구해줘야되는데 이 문제같은경우는 fork 때문에 카나리가 고정되어 있습니다.
여기서 카나리는 int v8가 카나리 입니다.
여기서 메모리 릭으로 카나리를 구해 줄 수 있습니다.
sprintf같은경우 0x00을 만날때까지만 출력해줍니다.
그런데 카나리의 첫번째 글자는 0x00이구요.
그런데 저희가 그 널을 다른걸로 덮어주면 널이 없어지기 때문에 그 뒤까지 출력되겠죠?
그러면 그뒤에 있는 카나리 3바이트를 구할 수 있습니다.
보면 11글자 입력하면, 저기 이상한 문자가 뜬걸 볼수있는데요.
이걸 제대로 보기 위해 코딩해서 헥스값으로 봐야됩니다.
대충 코딩해서 한번 결과를 봅시다.
결과를 보니 이렇게 나옵니다.
여기서 y는 헥스값으로 79입니다.
보면 79그 맨뒤부분 보면 39b448 입니다. 이게 카나리 3바이트인데
0039b448 이네여. -> 0x48b43900이라는 소리
y * 10 + 카나리 이렇게 한번 보내봤습니다.
보니까 스택 스매싱이 안뜨는걸 보실수 있습니다.
즉 카나리값을 정확히 구한거예여
이제 rop 하시면 됩니다.
write를 릭해온다음 write@libc + mprotect off로 mprotect함수만들어준다음 bss영역에 권한7로 줍니다.
그다음 read로 bss에 리버스쉘 입력해주면 끄읏
그리고 nc -l 9000(리버스쉘에 해놓은 포트) 이렇게 해둔다음.
익스플로잇코드 실행해본다음 nc -l 9000한곳에 id쳐보면 쉘이 따진걸 볼수 있어요.
클리어..!!
'CTF' 카테고리의 다른 글
[CodeGate2014] nuclear 뉴클리어 풀이 (0) | 2015.09.17 |
---|---|
순천향대 YISF Misc 50 롸업(풀이) (0) | 2015.08.09 |
순천향대 YISF Reversing 50 롸업(풀이) (0) | 2015.08.09 |
순천향대 YISF Forensic 50 롸업(풀이) (0) | 2015.08.09 |
순천향대 YISF 2015 Crypto 50 롸업(풀이) (0) | 2015.08.09 |