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

 

 

 

 

p2

 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)

`` p4``가 `` p3``를 포함하는 chunk가 되기 때문에, `` p4``에 접근하여 `` p3``를 수정할 수 있다.

Case 2

* p4, p5는 주석처리해도 동작함.
``c chunk.size``를 변경하고 나서 ``c free(chunk)``


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)

위에 적어놓았듯 `` top size``를 사용하는 경우 size가 어떻든 상관 없이 `` p2``에 할당된다.


'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