본문 바로가기

system/material

got_overwrite stack_smashing_detected

got_overwrite

이번에 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