-
level 20. 풀이System hacking training/Hackerschool F.T.Z 2018. 1. 20. 23:02
F.T.Z 올클했습니다.
계속 bof 문제가 나오다가 FSB가 나와 고생했습니다.
먼저 로그인 후 hint 파일을 확인해보니 bof 공격이 먹지 않습니다.
이유는 fgets 함수를 보면 알 수 있습니다.
이 프로그램은 간단히 입력한 값을 다시 출력해 주는 기능을 합니다.
하지만 이 문제는 format string bug 가 존재하는데
개발자의 실수 혹은 편의에 의해 생겨난 취약점입니다.
setuid는 걸려있으니 메모리를 조작하여 쉘을 띄우면 될것같습니다.
[과정]
입력값을 그대로 출력해주지만 여기에 %x 라는 형식지정자를 넣어보면..!
이런식으로 AAAA 의 값을 다시 한번 출력해주는 것을 확인함으로서 더미값이 3개가 들어가 있는것과 포맷스트링 공격 가능성을 확인할 수 있습니다.
FSB또한 memory corruption 즉, 메모리의 값을 변경하여 공격할 수 있는 취약점이므로
gdb를 통해 ret주소를 확인하려 하였으나 심볼을 다 지워놓았기 때문에 ret주소를 찾을 수가 없습니다.
ret주소를 바꿀 수 없다면 다른 방법이 있죠..
.dtors의 주소를 바꾸는 방법이 있습니다.
.dtors의 주소를 확인하는 방법은 위와 같이 objdump 로 확인 할 수 있습니다.
이제 쉘코드를 환경변수에 올려주고
환경변수의 주소를 구해주는 프로그램을 만들어줍니다.
그리고 쉘코드의 주소를 확인해보면 0xbffffc31이네요.
이제 페이로드를 작성해주면 되는데
shellcode 주소 : bffffc31
dtors 주소 : 08049594 + 4 -> 08049598 //.dtors의 시작주소에 +4한 값에 쉘 코드의 주소를 write해야 합니다.
페이로드입니다.
AAAA+[.dtors의 주소(낮은주소)]+AAAA+[.dtors의 주소(높은주소)] + %8x%8x%8x(dummy) + %(쉘코드의 10진수 주소(fc31) - (현재까지 쓴 바이트길이))c%n%(쉘코드의 10진수 주소(bfff) - (현재까지 쓴 바이트 길이))c%n
설명을 잘하고 싶은데 FSB에 대한 전반적인 지식이 없는 분들은 이해못하실겁니다..
이상입니다.
반응형'System hacking training > Hackerschool F.T.Z' 카테고리의 다른 글
level 19. 풀이 (0) 2018.01.06 level 18. 풀이 (0) 2017.12.24 level 17. 풀이 (0) 2017.12.03 level 16. 풀이 (0) 2017.12.03 level 15. 풀이 (2) 2017.11.26