overlapping chunk
overlap technique으로 fastbin attack을 이용해도 되겠지만, 이게 더 간단하다.
Poison null byte와 동일하게 off-by-one error만 발생하는 환경에서도 사용할 수 있다.
다만 overflow 되는 것이 null byte 뿐 이라면 사용할 수 없으므로 이 경우 poison null byte를 사용해야 한다.
Case 1
먼저 ``c free(chunk)``하고 `` chunk.size``를 변경
1. free(p2) and then change p2.size
p1 | prev_size | 0x111 |
|
| |
|
| |
| prev_size | 0x111 → 0x1a1 |
|
| |
|
| |
p3 | prev_size | 0x90 |
|
Note ) size를 변경하면 bins가 달라지는데 이 chunk가 할당이 될까 싶지만 unsorted bin에 들어있기 때문에 된다.
next size check (fast) / next size check (normal)는 ``c free()``에서 수행하는 check이므로 신경쓰지 않아도 된다.
따라서, 굳이 ``c 0x1a1``이 아니라 다른 size로 변경해도 된다.
2. p4 = malloc(0x198)
Case 2
1. change p2.size and then free(p2)
p1 | prev_size | 0x111 |
|
| |
|
| |
p2 | prev_size | 0x111 → 0x1a1 |
|
| |
|
| |
p3 | prev_size | 0x91 |
| ||
top size |
Note ) 먼저 ``c p2.size``를 변경하고 ``c free(p2)``하게 되므로 next size check에 걸리게 된다. 따라서 ``c p2.size``에 아무 값이나 입력할 수는 없고, ``c p2.size`` 번지의 값이 반드시 next size check를 통과할 수 있는 값이어야만 한다.
`` size``를 따로 만들어주어도 되지만 보통 `` top size``나 `` pn.size``( n > 3 )를 사용하는게 편하다.
Note ) `` top size``를 사용하는 경우, top chunk가 `` p2``까지 내려오기 때문에 어떤 size를 ``c malloc(size)``하든 chunk가 `` p2``부터 시작한다.
2. p4 = malloc(0x198)
'Security > System Exploit' 카테고리의 다른 글
The House of Spirit (0) | 2017.08.15 |
---|---|
Poison null byte (0) | 2017.08.15 |
one_gadget / libc-database (0) | 2017.08.13 |
pwntools (0) | 2017.08.13 |
Shellcode (0) | 2017.07.26 |