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"

 

좋아 익스코드를 짜보자.

 

처음 풀어보는 포맷 스트링 버그를 이용한 문제였다.

재밌고만

 

반찬이 마음에 든다.

성공적으로 익스플로잇이 된다.

+ Recent posts