pwnable 3번 문제인 Basic_FSB 이다.
대충 입력받고 그 내용 그대로 출력하는 프로그램인가보다.
파일을 뜯어보자.
딱히 보호기법은 적용된게 없다.
main문에서 바로 vuln함수를 실행
흠..1024만큼 s에 입력을 때려박는다.
그리고 format에 1024만큼 s의 값을 출력하고, 그 값을 출력하는것을 리턴시킨다.
한번 서식문자를 입력에 때려박아봤다.
두번째 서식문자부터 출력되는 것을 볼 수 있다.
즉, 앞쪽 값으로 printf@got 주소를 쓰고, 더미값을 채우고 뭔가 쉘을 주는 함수를 넣고 %x로 출력..하면 될거라 생각했지만 값을 입력받는 사이즈를 보니 %n과 같은 입력값 사이즈를 출력하는 서식문자로 처리하는게 좋을 것 같았다.
자, 이제 쉘을 줄 다른 함수를 찾아봤다.
함수들을 보니 뭔가 flag가 있다.
쉘을 준다.
자 이제 우리는 printf@got함수와 flag의 함수가 필요합니다.
자 그러면 우리가 이제 해야할일
1. payload에 리틀엔디안으로 printf@got의 주소 0x804A00C을 넣는다.
2. 그리고 이제 아까 생각한대로 %n을 통해 flag의 주소를 넣을 건데, 그말은 즉 첫번째 인자로 인식되는 값이 0x80485B4이여야합니다.
3. 0x80485B4=134514100(10), 즉 첫번째 인자의 길이를 134514100로 주고 두번째 인자로 %n을 줘야한다.
4. 우리가 맨 처음에 printf@got의 주소를 넣었으니 4바이트를 빼주어야한다.
5. 134514100 - 4 = 134514096
6. 즉 payload는 "\x0C\xA0\x04\x08" + "%134514096x" + "%n"
좋아 익스코드를 짜보자.
처음 풀어보는 포맷 스트링 버그를 이용한 문제였다.
재밌고만
반찬이 마음에 든다.
성공적으로 익스플로잇이 된다.
'HackCTF > Pwnable' 카테고리의 다른 글
[HackCTF] Pwnable - x64 Simple_size_BOF (0) | 2020.07.08 |
---|---|
[HackCTF] Pwnable - x64 Buffer Overflow (0) | 2020.07.08 |
[HackCTF] Pwnable - 내 버퍼가 흘러넘친다!!! (1) | 2020.07.07 |
[HackCTF] Pwnable - Basic_BOF #2 (0) | 2020.06.25 |
[HackCTF] Pwnable - Basic_BOF #1 (0) | 2020.06.25 |