우선 이번 문제의 이름은 Basic FSB이다. FSB가 무엇인지 먼저 공부를 해보자.
먼저 FSB는 Format String Bug의 줄임말이다.
포맷스트링 버그는 이전에 공부를 해본적이 있다. (엄청 예전에 ....)
우선 문제를 풀면서 복습을 해보자.
📖 1) 문제 파악
이렇게 기본적으로 aa를 넣는다면 aa가 출력이 되지만, 서식문자를 집어넣는다면, 그에 해당하는 값을 출력하게 된다.
좀 더 자세히 알기 위해 gdb와 IDA를 통해 까보도록 하자.
어셈블리 코드는 꽤 간단하다. vuln함수를 좀 더 알아보자.
그렇군.... ??
IDA로도 열어보자.
먼저, main 함수이다. 마찬가지로 vuln 함수를 좀 더 까보자.
흠....ㅁ..ㅁ.ㅁ.ㅁ.ㅁ.ㅁ,ㅁ,ㅁ,ㅁ,ㅁ,ㅁ,ㅁ,ㅁ,ㅁ,ㅁ,ㅁ,ㅁ,ㅁ,ㅁ,ㅁ,ㅁ,ㅁ,,
flag() 함수를 실행시킬 방법을 찾아보아야 하겠다.
📖 2) 문제 분석
뭘 어떻게 접근해야 할까. fgets에서 포맷 스트링을 넘겨주면 그걸 통째로 format에 넣어주게 된다.
개인적으로 printf(format) 부분을 flag()로 바꿀 수만 있으면 된다고 생각한다. 물론 아닐 수도 있겠지만. ..
우선 Got Overwrite에 대하여 알 필요가 있다. ( 이 부분은 따로 공부해보도록 하자. )
간단하게 설명하자면, plt는 got을 가리킨다. 그리고 got에는 실제 함수 주소가 들어있다.
이 때 got을 원하는 함수의 주소로 변경할 수만 있다면, 공격하는데 성공한다.
우선 해당 프로그램을 가지고 좀 더 놀아보도록 하자.
즉 처음에 넣은 값이 뒤에서 참조된다? 정도로 생각해주면 될 것 같다.
조금만 더 가지고 놀아보자...
이런 발상이 된 것이다. 그래서 이를 이용한 공격 중 하나가 Format String Bug 인 것이고, 문제 제목인 것이다.
자, 그럼 다시 0x61616161에 어떻게 우리가 원하는 값을 넣을 수 있을까.
바로 %n 이라는 포맷을 이용하는것이다.
이런 과정을 좀 더 살펴보자.
먼저 %n은 바이트를 다 계산하고, 출력 포맷이라고 생각했던 곳에 주소를 집어넣게 된다.(0x61616161에 ...)
만약 이렇게 입력을 하였다면, %n 이 뜨기 전 까지는 4바이트 + 공백 + 4바이트 +공백이 나오게 된다.
즉, 10바이트가 계산되고, 이것은 %n에 위치한 값인 0x61616161에 들어가게 된다.
그럼 바이트 수를 flag()함수의 주소만큼, %n이 오는 주소를 printf_got으로 설정해주면 되겠다.
먼저 flag함수는 0x080485b4 에 위치해있다. 10진수로 나타내면 134514100이다.
그리고, printf_got은 0x804a00c 이다.
이제, 페이로드를 작성해보자.
📖 3) 문제 풀이
먼저 억지로 집어넣어야 하는 바이트를 계산해야 한다.
134514096 만큼 넣어주어야 한다. ( flag위치를 10진수로 나타낸 134514100 - 4 )
이런 경우는 그냥 %134514096x 로 처리해주면 된다.
#printf_got = 804a00c = \x0C\xA0\x04\x08
#flag = 080485b4 #BYTE =
from pwn import *
p = remote("ctf.j0n9hyun.xyz", 3002)
payload = "\x0C\xA0\x04\x08" + "%134514096x%n"
p.recvuntil("input : ")
p.sendline(payload)
p.interactive()
이렇게 파이썬 코드를 작성해주자.
📖 4) 문제 해결, 느낀 점
매우매우 재미있다 헤헤헤헤ㅔ헤
'스터디 그룹 > ProjectH4C' 카테고리의 다른 글
ProjectH4C 3개월 1주차 과제(Dreamhack - basic_exploitation_000) (0) | 2021.03.21 |
---|---|
ProjectH4C 3개월 1주차 과제(HackCTF - 내 버퍼가 흘러넘친다!!!) (0) | 2021.03.21 |
ProjectH4C 3개월 1주차 과제(HackCTF - Basic BOF#2) (0) | 2021.03.18 |
ProjectH4C 3개월 1주차 과제(HackCTF - Basic BOF#1) (0) | 2021.03.18 |
ProjectH4C 2개월 4주차 과제 (우리집에 GDB 있는데… 메모리 보고갈래?) (0) | 2021.03.14 |