완료됨
주소, 형식 지정자 순서
이전에 figure 4에서는 임의 주소에 쓸 때 (쓸 주소 + %N$n)로 했는데 이후에 figure 6,7 은 이렇게 해도 안되는 이유가 혹시 scanf 널바이트 문제 때문인가요?
6, 7에서는 (%N
그리고 널바이트 문제가 맞다면 6, 7에서 쓰거나 읽을 주소 중간에 00이 없어서 저렇게 가능했을것 같은데 만약 쓰거나 읽을 주소 중간에 Null 이 있으면 어떻게 하나요? ex) 0x55cf91210054
#시스템_해킹
#기초
#포맷_스트링_버그
작성자 정보
답변
1
믕믕이부하
대표 업적 없음
이해하신 내용이 맞습니다. Null 바이트를 처리하기 위해 %N$n + 주소와 같은 방식으로 포맷 스트링을 작성합니다. 쓰거나 읽을 주소에 Null 바이트가 있다면 하위 값만큼만 덮어씌워주면 됩니다.
0x00007fffffff1212: 0x0000000012121212
메모리에 다음과 같은 값이 들어가 있을때 해당 메모리를 포맷 스트링 버그를 통해 다음과 같이 255만큼 조작한다면 [0x00007fffffff1212]%247d%N$n
메모리에 들어가게되는 값은 0x00000000000000ff
가 됩니다. 이런식으로 조작한 값보다 상위 바이트는 전부 Null 바이트가 됩니다. 만약 메모리의 하위 바이트에 Null 바이트를 넣고 싶다면 일단 상위 바이트에 대한 메모리 조작을 한 이후 %N