2021-09-09 · 2분
[시스템해킹] Buffer Overflow(BOF)
설정되어 있는 버퍼의 크기보다 크게 입력을 받을 수 있을 때 생기는 취약점입니다.
2021-09-09 · 2분
이 글은 작성된 지 2년이 넘었어요. 내용이 오래됐을 수 있어요.
FSB(Format String Bug)
FSB(Format String Bug)란 버퍼 오버플로우 해킹 기법중 하나이며 사용자의 입력을 통해 프로그램의 흐름을 바꿀 수 있는 취약점이다.

printf("%d", 변수); 와 printf("%d")
오른쪽으로 상황에서는 FSB취약점이 발생하여 main 함수 스택의 내용을 모두 노출 시킬 수 있습니다.

2번째에 AAAA에 들어간 모습이다
위와 같이 입력하게 되면 다음 스택의 메모리를 유출시킬수 있습니다. 위에선 두번째 %p에 우리가 입력한 AAAA가 들어간 모습을 확인할 수 있습니다. 이때 offset는 2입니다.
<table style="border-collapse: collapse; width: 100%; height: 180px;" border="1" data-ke-align="alignLeft"><tbody><tr style="height: 20px;"><td style="width: 50%; text-align: left; height: 20px;">%s</td><td style="width: 50%; text-align: left; height: 20px;">문자열 '\0'를 만날때 까지 출력</td></tr><tr style="height: 20px;"><td style="width: 50%; height: 20px;">%c</td><td style="width: 50%; height: 20px;">문자 1개</td></tr><tr style="height: 20px;"><td style="width: 50%; height: 20px;">%d</td><td style="width: 50%; height: 20px;">+/- 부호 있는 정수형</td></tr><tr style="height: 20px;"><td style="width: 50%; height: 20px;">%x</td><td style="width: 50%; height: 20px;">정수를 16진수 소문자로</td></tr><tr style="height: 20px;"><td style="width: 50%; height: 20px;">%p</td><td style="width: 50%; height: 20px;">0x ~형태의 포인터값 출력 %lx와 같음</td></tr><tr style="height: 20px;"><td style="width: 50%; height: 20px;">%lx</td><td style="width: 50%; height: 20px;">8byte 16진수 출력</td></tr><tr style="height: 20px;"><td style="width: 50%; height: 20px;">%ld</td><td style="width: 50%; height: 20px;">long 정수 형</td></tr><tr style="height: 20px;"><td style="width: 50%; height: 20px;">%f</td><td style="width: 50%; height: 20px;">실수형</td></tr><tr style="height: 20px;"><td style="width: 50%; height: 20px;">%u</td><td style="width: 50%; height: 20px;">부호 없는 정수 </td></tr></tbody></table>
실제 fsb코드에서는 매우 복잡해 지는데 이를 파이썬 pwntools에서 쉽게 해결할 수 있습니다.
fmtstr_payload(offset, writes) 를 사용하게 되면 아주 간단하게 fsb를 할 수 있습니다.
fmtstr_payload(6, {e.got['printf']:e.symbols['win']})
위와 같이 적으면 offset이 6일때 printf가 win함수가 되게 만들 수 있습니다.
참고
더보기
원문: tistory — 2021-09-09 발행, 이 블로그로 이전됨.
…