2018. 8. 8. 23:35ㆍ0x04 pwnable
우선 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 |