FSB
printf 계열 함수 (snprintf 등), warnx와 같이 Fromat string을 사용하는 함수에서 발생하는 취약점 이다.
스택에 있는 값을 leak 할 수 있고, 특정 서식 문자를 이용해 AAW(임의의 주소쓰기), AAR(임의의 주소읽기) 할 수 있다.
스택을 릭하거나 덮어쓸 떄 주의 할점 이 있는데, 이는 6개의 인자를 레지스터에 먼저 저장하고, 그 이상의 인자를 스택에 저장 시키기 때문에 offset은 6이상이 될 수 밖에 없지만.,... 문제마다(사용하는 함수마다) 이는 다르다.
결국 AAAA. %x%x%x%x를 여러번 써 보면서 이 값 중 내가 첫번째에 입력한 값이 어느번째에 있는지를 파악하는것이 제 1관문, 즉 1 stage 이다.
포맷 스트링의 구조는 다음과 같다
; %[parameter][flags][width][.precision][length]type
width(%[]s) —> width
Parameter
End Mark: $
printf(”%2$d, %1$d”, 2, 1) —> “1, 2”
주의 할점
- printf(”%n”, &num); —> 이는 num에 앞에 출력한 값만큼 그 길이를 넣는 것인데, 이때 num의 주소가 필요하다는 것을 명심.
익스 시나리오
(드림핵 문제라 검열 ㄹㄹ )
FmtStr 란 매우 유용한 툴이 있으니, overwrite 페이 짜느라 시간 보내지 말고 언능 사용하자^^7
또한 got overwrite는 got_jump(변수)에서 일어나는거지, got(코드 주소)에서 일어나는 것이 아니다.
'Pwnable > Tech' 카테고리의 다른 글
no longer existing hook (0) | 2023.02.18 |
---|---|
Stack pivoting (2) | 2023.02.18 |
house of lore 간단 설명 (0) | 2023.01.30 |
OOB - Out of Bounds (0) | 2022.02.14 |
SHA - Master Canary (0) | 2022.02.11 |