공부/JUN STUDY

fsb 이젠 좀 이해하기 (어떻게 arbitrary write가 되는가?)

JUNFUTURE 2024. 9. 27. 22:18

fsb의 무시무시한 점은

1. 임의주소에
2. 원하는 값을

쓸 수 있다는 것이다. 

 

임의 주소에 쓸 수 있는 이유는 %187c%11$hhn 덕분이고

원하는 값을 쓸 수 있는 이유는 %187c%11$hhn 덕분이다.

 

여기서 또 레전드인게 임의주소인 이유는 %11$인자 위치에 있는
'그 주소에' 값을 쓸 수 있기 때문이다. (&의 개념 -> printf("%s", buf) 처럼. %s는 buf(char *) 를 참조한다.)

 

따라서 %11$ 위치에 원하는 주소를 입력하고 
%(원하는 값)c 이용해서 원하는 값을 만들면 된다.

 

fmtstr_payload의 start index는 주소 참조할 인덱스 계산할때 단순히 더해지는 효과.