
Binary Ninja 플러그인으로, 제어 흐름과 스택 포인터를 하이재킹할 수 있는 FSOP 코드 경로를 찾기 위해 glibc libio를 스캔하여 힙 익스플로잇 연구를 지원합니다.
GLIBC Libio에서 제어 흐름과 스택 포인터를 하이재킹할 수 있는 FSOP 코드 경로를 찾습니다.
libc.so.6을 열고 Tools -> Plugins -> Find FSOP code path를 클릭합니다Log 창에서 결과를 확인할 수 있습니다// GLIBC 2.34-0ubuntu3.2
3. _IO_wfile_underflow_mmap@0x86030 -> _IO_wdoallocbuf@0x83be0
0x8614d: call(0x83be0)
RIP/RDI DATAFLOW:
rbx = rdi -> rdi = rbx -> call(0x83be0)
RBP DATAFLOW:
rbp = [rdi + 0x98].q
CODE PATH:
eax = [rdi].d
=> [condition] (al & 4) == 0
rax = [rdi + 0xa0].q
rdx = [rax].q
=> [condition] rdx u>= [rax + 8].q
rdx = [rdi + 8].q
=> [condition] rdx u< [rdi + 0x10].q
rdi = [rax + 0x40].q
=> [condition] rdi == 0
0x83c0b: call([rax + 0x68].q)
RIP/RDI DATAFLOW:
rax = [rdi + 0xa0].q -> rax = [rax + 0xe0].q -> call([rax + 0x68].q)
RBP DATAFLOW:
(N/A)
CODE PATH:
rax = [rdi + 0xa0].q
=> [condition] [rax + 0x30].q == 0
=> [condition] ([rdi].b & 2) == 0
([0x216020] is the location of _IO_wfile_underflow_mmap in __libc_IO_vtables)
단일 FSOP 공격으로 스택 마이그레이션을 수행하는 데 사용할 수 있는 FSOP 코드 경로로, GLIBC 2.24+에서 사용 가능합니다. 이는 roderick01이 독립적으로 발견한 house of apple2로도 알려져 있습니다.
저는 사실 이 코드 경로를 몇 주 전에 발견했지만, 요즘 다른 일들로 바빠서 이미 누군가 이 코드 경로를 공개했다는 것을 눈치채지 못했습니다 X(
이 플러그인은 MIT 라이선스에 따라 배포됩니다.