sysmalloc_mmap의 코드 일부다.
malloc 할 때 일반적으로 큰 사이즈를 요청하면, brk나 sbrk로 program break를 쭉 늘리거나 감당할만하면, 탑 청크에서 떼주는데, malloc(0x200000) 이런 식으로 엄청 크게 줘버리면, 위 sysmalloc_mmap을 통해 mmap syscall을 부른다.
이때 커널에서 리턴받은 메모리와 libc가 로드된 주소와의 오프셋이 일정하다는 특징을 통해 libc leak이 가능하다.
libc 바로 앞에 딱 달라붙어있는게 mmap으로 할당받은 곳이다.
임의 크기로 malloc이 가능하고, free를 쓸 수 없어서 릭 벡터가 안 보이면 한 번쯤 생각해볼 만한 트릭인 것 같다.
'SYSTEM HACKING' 카테고리의 다른 글
2022 사이버공격방어대회 CCE 예선 write-ups (1) | 2022.09.24 |
---|---|
도커 공유 디렉토리 연결 (0) | 2022.08.11 |
libc에서 /bin/sh 오프셋 찾기 (0) | 2022.08.05 |
EFLAGS OF(Overflow Flag) VS CF(Carry Flag) (0) | 2022.07.31 |
stdin, stdout, stderr bss segment 할당 및 _IO_FILE (0) | 2022.07.22 |