Hackctf Basic_FSB
자 이번에는 3번째 문제인 Bsic_fsb를 풀어보도록 하겠다.
문제가 fsb인만큼 format string bug일 가능성이 높다~!
프로그램을 실행하니 input:hello를 치니 hello를 출력하고 프로그램이 꺼진다.
함수를 보면 매인함수는 vuln함수로 넘어가고
vuln함수에서 맨 아래에 return printf(&format); 에서 FSB가 터지는것을 볼 수 있다.
또한 그사이에 flag 함수에는 /bin/sh가 들어있는것을 확인할 수 있다.
그렇다면 우리가 flag를 얻기 위해서는 flag 함수 주소를
vuln ret에다가 fsb를 이용하여 덮어쓰는 방식을 쓴다면?>??????? shell 을 획득할 수 있을것이다.
우리는 여기서 PLT와 GOT의 개념을 알고가는것이 좋다.
##추후에 따로 정리할것이니 간단하게 말하고 가겟다.
함수를 호출한다면 즉 PLT를 호출하는것인데 이 PLT는 GOT로 점프하게되고 GOT에는 함수의
실제 주소가 적혀져있다.
따라서 우리는 GOT의 주소에다가 flag함수 주소를 덮어쓴다면?? exploit이 가능해질것이다.
첫번째로 printf 의 got추소를 찾는방법은 ida로 분석
printf함수에 마우스 커서를 갖다대면 주소가 jump한 주소가 나온다
그리고 gdb로 알아볼수도 있다.
3번째는 python 으로 짠느건데 아래에 코드를 만들때는 3번째로 가겠다...
두번째로 우리는 flag함수 주소를 찾아야한다.
요기잉네 0x080485b4이다.
그리고 우리는 fsb를 이용하여 공격할 부분을 찾아봐야하는데
%p를 삽입하여 알아보도록 하겠따 (%p는 포인터의 주소를 알려줌)
2번째에 입력한 aaaa 즉 0x61616161이 들어가있다. 모든 준비는 끝났다..
정리하면 printf의 got 주소 + % 플래그 함수 주소(10진수로 바꾼거)x%n 정도가 되겠다
payload
pwn을 사용하여 printf의 got을 32bit로 패킹 후
flag의 주소값 0x80485b0을 10진수로 변환 134514100 - 4(printf의got 주소인 4byte를 빼준것)
그러면
짜쟈잔~
\
갠적으로 FSB 핵어렵다.
따로 정리해서 올려놔야겠다
역시 쓰면서 하니깐 공부가 짱잘된다 ~~
피드백 대환영 ㅠㅠ 모르는게 너무 많다.