Hitcon Training
LAB 5 - 미완성
Rasser
2021. 7. 25. 18:38
728x90
Mitigation
Code
RTL 관련 문제이다.
RTL이란 Return-To-Library의 약자로, NX bit가 걸려 있을때(메모리나 스택에 쉘코드를 올려도 실행이 되지 않음) NX bit을 우회하기 위해 고안된 방법이다.
이 방법은 libc내에 있는 system함수나 execve함수등을 이용하여 직접적으로 쉘을 실행시킬 수 있다.
이를 위해서는 Gadget이 필요함.
중간의 strtol 함수는
long strtol(const char *restrict str, char **endptr, int base);
의 형태이고, char * str = 정수로 변환할 문자열, char **endptr은 숫자로 변경하지 못하는 문자열의 시작 위치, int base는 문자열이 가지고 있는 숫자의 진수 (2~32)을 의미한다.
strtol 함수의 반환 값은 10진수 long형 정수 값을 반환한다.
소스코드의 로직
- read함수를 통해 문자열을 입력 받는다.
- strtol함수를 통해, 문자열을 10진수 long형 정수 값으로 변환후 addr변수에 저장
- See_something함수에 addr을 인자로 넣고, 주소를 출력
- read함수를 통해 message를 입력 받고, Print_message 함수의 인자로 전달
- 이때 strcpy함수에서 취약점이 터진다 → buf는 48byte이지만 mesg의 길이를 검증하지 않기 때문
728x90