FSB 공부를 하며 FSB에 관한 문제를 더 풀어보고 정리하고 싶어서 메모에다가 남긴다.

 

먼저, 파일을 다운받고 IDA로 열어서 코드를 확인해보자.

 

main()
init()

main함수에 printf(&buf) 부분에서 FSB 취약점이 터지는걸 확인할 수 있다.

 

함수를 살펴보면,

 

hide()

hide라고 아주 수상하게 생긴 함수가 존재한다.

 

/bin/sh

hide 함수를 이용해서 해결하면 될 것 같다.

 

우분투에서 한번 실행해보자.

 

처음 입력한 AAAA가 포맷 스트링을 입력한 후로 4번째에 hex 값으로 출력이 되었다.

 

그렇다면, 순서는 이렇다.

 

1. read 함수로 입력을 받을 때 앞 부분에 exit 함수의 GOT 주소를 넣어준다.

 

2. %hn (%n)을 활용해서 처음에 넣은 exit_GOT 주소위치에 hide 함수의 주소를 넣도록 조작한다.

 

※ %hn은 %n과 다르게 2byte씩 들어간다.

 

 

먼저, hide의 주소와 exit의 GOT주소를 구해보자.

hide() address
exit() GOT address 

두 개의 주소를 구했다.

 

3가지 방법으로 익스를 짜볼 것이다.. 

 

먼저, %n을 써서 짜보자!

 

 

hide 주소인 0x080485b3을 10진수로 바꿔주고 앞에 got 주소가 4byte였기 때문에 -4를 해준다.

 

그리고 %4$n에서 4$는 오프셋이다.

 

이렇게 익스를 하면 시간이 조금 걸린다.

 

flag

 

 

두 번째로 %hn을 써서 익스를 짜보자.

 

기본 문자열 개수는 GOT - 2와 GOT 주소인 "\x16\xa0\x04\x08" + "\x18\xa0\x04\x08" = 8byte 이다.

 

잘 이해가 되지 않는다면 이 글을 보면 도움이 될 것 같다..

 

http://kaspyx.tistory.com/82

 

포맷 스트링 버그(format string bug) 공격시에 플래그(flag)사용하기

/* written by kaspy (kaspyx@gmail.com) */ 이전에 잠시 공부한적이 있지만, 까먹고있다가 이참에 공부해서 정리하게되었다. 포맷 스트링 버그 취약점을 가진 프로그램이 있을때, $-flag를 이용한 공격이 기

kaspyx.tistory.com

flag

똑같이 익스가 터진걸 볼 수 있다.

 

 

 

세 번째로는 pwntools가 제공하는 FSB 저격 함수를 사용해서 익스를 짜보자!

 

이 함수를 알고난 뒤로는 웬만해서는 앞의 방법들로 FSB 문제를 풀지 않을 것 같다.

 

익스를 짜보자.

 

fmtstr_payload()

정말,, fmtstr_payload() 함수가 귀찮은 일들을 한번에 다 해결 해준다..

 

fmtstr_payload() 함수에 대해 더 자세히 알고싶다면 pwntools 기술문서에 가서 더 알아보자.

 

docs.pwntools.com/en/stable/fmtstr.html#pwnlib.fmtstr.fmtstr_payload

 

pwnlib.fmtstr — Format string bug exploitation tools — pwntools 4.3.1 documentation

A tuple (score, value, mask) where score equals the number of matching bytes between the returned value and target.

docs.pwntools.com

 

성공적으로 익스가 됐다.

 

플래그는 YCTF{S1mPl3_1s_tH3_b3sT} 이다.

 

 

'메모용' 카테고리의 다른 글

ASLR 정리  (0) 2021.08.24
메모리 보호 기법 [ NX-Bit(MS : DEP) ]  (0) 2020.12.18
PLT & GOT 간단하게 정리.  (0) 2020.08.21

+ Recent posts