그 전까지 알던 패치되기 전 unlink 취약점이 아닌,
패치 된 후에도 터지는 unsafe unlink 취약점 이당.
이거 이해하는거 너무 시간 오래 잡아먹었따 ㅠㅠ
심지어 아직 익스는 안된다 짜증난다 진짜 왜그러지. how2heap 처럼 코드로 짜는건 fake chunk 만들고 쓱싹 되는데 익스로 짜면
전역변수에 저장된 주소가 안바뀐다. 자고일어나면 다시 해봐야지.
heap 2 개 할당해놓는다. 이떄 처음 할당한 애는 전역변수에 주소 저장해서 포인터로 관리.
heap1 안에다가 fake chunk 를 만들어 놓는다 (prev, size =0, fd = 전역변수addr - 0x18, bk = 전역변수addr - 0x10)
이런식으로 해놓으면 보호기법이 해제된다.
heap overflow 를 통해서 heap2의 chunk header 를 조작한다 (prev size = fake chunk 닿을 정도, size = PREV_INUSE 해제)
그리고 heap2 를 free 시키면
짜잔 전역변수addr 에 저장된 주소가 fake chunk 의 fd 로 바뀌어 버린당.
근데 fd 에는 전역변수 - 0x18 만큼 넣었었다.
그럼
[ fd_addr ] [ 전역변수 (값 : fd_addr) ]
꼴이 되니 scanf("%s", heap1) 할때 전역변수 주소를 got 같은걸로 바꿀수도 있겠고 하겠다.
그리고 scanf("%s",heap1) 한번더 하면? got 가 덮이겠지.
libc 릭도 이런식으로 해서 got 로 덮어놓고 출력하면 릭이 될것이고
그렇다.... 조건만 맞춰주면 거의 최강 기법....
'Pwnable > Heap' 카테고리의 다른 글
Unsortedbin attack (0) | 2018.02.23 |
---|---|
[HITCON-Trainning] lab 11 (0) | 2018.02.19 |
House of Top (0) | 2018.01.09 |
Fastbin Consolidate (0) | 2017.12.18 |
The House of Spirit (0) | 2017.10.12 |