힙에 대한 개념이 부족한 상태에서 문제 그냥 부딪혀 보는데, 이것도 나름 재밌다.
how2heap이나 다른 블로그 구글링 해가면서 코드 취약점/상황에 맞는 공격 기법 찾는게 묘미다.
House of botcake(glibc 2.35 기준)
unsorted bin을 이용해서 tcache와 unsorted bin에 각각 동일한 freed chunk가 들어가도록 할 수 있다.
fastbin 범위에 들어가지 않도록 size 0x100의 청크를 기준으로 진행한다.
1. 0x100 크기의 청크를 10개 할당한다.
- tcache 들어갈 chunk 7개
- prev chunk 1개
- target chunk 1개
- dummy chunk 1개(병합 방지용이므로 크기는 상관 없다.)
2. 청크 7개를 해제하여 tcache를 다 채운다.
3. target chunk를 해제한다. 이 때, unsorted bin으로 들어간다.
4. prev chunk를 해제한다. 이 때, prev chunk와 target chunk는 unsorted bin에 병합된 상태로 존재한다.
5. 청크를 하나 할당하여 tcache에 자리를 하나 만든다.
6. target chunk를 해제한다.
-> target chunk는 unsorted bin에서 병합된 상태로 존재하면서 동시에 tcache에도 존재하게 된다.
malloc의 size를 지정할 수 있는 경우, 0x100보다 큰 사이즈의 청크를 할당받으면 unsorted bin에서 청크를 분할받아 가져오는데,
이는 target chunk와 overlap 되어있는 상태이다. 적절히 오프셋을 확인하여 데이터를 보내면, DFB된 target chunk의 fd를 조작할 수 있어 tcache poisoning 공격이 가능하다.
'PWN > 개념' 카테고리의 다른 글
| _IO_cleanup, _chain 조작을 통한 FSOP (0) | 2025.12.12 |
|---|---|
| calloc without memset .. (0) | 2025.10.27 |
| docker process에 gdb attach 방법 그 외 (0) | 2025.09.30 |
| fflush() 이용한 libc leak, 그 외 (0) | 2025.09.11 |
| fastbin attack시의 size check (0) | 2025.09.08 |