이번에 got_overwrite를 하면서 알게 된 사실인데
.got.plt 주소 간격을 보면 64비트 기준으로 8바이트씩 매우 빡빡하게 차있는 것을 볼 수 있다.
여기서 만약 strcpy에 맨 뒤에 NULL byte를 포함시키는 cin과 같은 함수로 got_overwrite를 통하여 p64(0x8)을 보내면?
위와 같이 strcpy의 got는 성공적으로 overwrite됐지만 그 다음에 있는 got가 NULL로 1바이트 덮여버린다.
이 경우 나는 해당 함수의 canary가 변조되어 stack_smashing_detected 오류가 발생하였다. 직접 손으로 돌려가며 찾아야 하는 부분이라 오래 걸린다..
이를 방지하는 방법은 p64(0x8).rstrip('\x00').ljust(7,'\x00')을 하면 된다.
'system > material' 카테고리의 다른 글
c++ std::string (0) | 2019.01.22 |
---|---|
fastbin dup consolidate 정리 (0) | 2019.01.22 |
x86, x64 srop 정리 (0) | 2019.01.21 |
glibc 2.26 tcache 동작 분석 및 exploit (how2heap) (2) | 2019.01.15 |
unsorted bin free 동작.. (0) | 2018.12.26 |