bss bufferoverflow 정리

2018. 8. 8. 23:350x04 pwnable

728x90

 우선 bss 영역에 들어가는 조건이 초기화 되지 않은 전역변수

bss overflow 취약점이 생기는 이유 :

bss영역과 어떤 함수의 주소(example)를 비교해보면 몇 바이트 차이가 나지 않음. 그렇다면 만약 bss영역이 0x801040번지고 특정 함수 부분이 0x80104A번지라고 가정 했을 때 A(10bytes)밖에 차이가 나지 않음 

그렇다면, 11bytes가 되었을 때 정상적인 행위를 하는 그 함수에 침범하게 될 것 임((OOB Write)가 가능하다는 의미) 그러면 그 함수의 주소에 41이 들어가게 되면서 참조 되지 않은 영역이기 때문에 segmentation fault가 뜰 것임. 


우리는 포너블을 진행할 때 segmentation fault가 떴다면, EIP를 조작할 수 있음을 유추할 수 있음. 자 그렇다면, 11바이트 대신에 14바이트를 넣었다면 32비트(4바이트)전부를 덮을 수 있다. 우리가 풀어야 하는 로직에서 만약 system("/bin/sh")이 있는 주소가 0x12345678이라면 우리는 


11바이트 위치에 78

12바이트 위치에 56

13바이트 위치에 34

14바이트 위치에 12 를 넣으면 정상적으로 eip를 조작하여 system("/bin/sh")에 들어갈 수 있다. 


즉, bss overflow는 초기화 되지 않은 전역변수가 들어가는 주소와 특별한 함수 포인터의 주소 차이를 릭을 통해 비교할 수 있을 때 (혹은 디버거로 비교할 수 있을 때) 포맷스트링 버그처럼 거리 차를 이용하여 잘 가지고 놀면 EIP를 조작할 수 있음.

'0x04 pwnable' 카테고리의 다른 글

[Rootme] ARM Stack Buffer Overflow  (1) 2019.01.29
DirtyCOW CVE 2016-5195  (0) 2018.06.15
xinetd.d 세팅  (0) 2018.05.16
Core Dump  (0) 2018.05.15
unbounded latency 공부중..  (0) 2018.05.04