y0u_bat

[how2heap] House of Spirit 본문

System

[how2heap] House of Spirit

유뱃 2017. 1. 25. 16:06

[how2heap] House of Spirit

 
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
  void *a = malloc (32);
  char buf[8];
  read(0,buf,0x100);
  
  free(a);
  malloc(32);
  
  return 0;
}


간단하게 설명하면, overflow를 통해서 a 포인터 값을 조작해서 "원하는 주소"의 free를 시키고,

다시 할당할때 "원하는 주소"를 할당하는 기술이다.

buf에 fake chunk 청크를 만들고, a 포인터를 buf 주소로 덮어버리면 free(buf)가 된다.

free할때 glibc 부분을 보면, free하는 청크의 뒤에 청크의 크기를 검사한다.

chunk_at_offset(p,size)->size <= 2* SIZE_SZ || chunksize (chunk_at_offset (p,size)) >= av->system_mem


SIZE_SZ*2 보다 작거나 av->system_mem 보다 크지만 않으면 된다.

즉 너무 작거나 너무 크지만 않으면 상관 없다.

buf 에 fake chunk 만들때 사이즈를 0x20 정도로 한다치면 그뒤 청크의 사이즈 를 지정해주면 된다.

free하면 fastbin에 가짜청크 주소가 박혀있는걸 볼수있다.

malloc(32)하면 가짜청크 주소로 할당되는것을 볼 수 있다.

'System' 카테고리의 다른 글

Whitehat 2018 Final PAC - 500pt  (0) 2018.07.31
A case study of JavaScriptCore and CVE-2016-4622  (0) 2017.06.12
Double Free Bug Vulnerability  (0) 2017.01.09
[heap] fastbin_dup_into_stack.c  (0) 2016.11.02
[heap] how2heap first_fit.c  (0) 2016.10.20
Comments