mysql에서는 SQL Injection을 통해 파일 다운로드 취약점, 파일 업로드 취약점으로 나아갈 수 있는 방법이 있다. 이는 바로 load_file 구문과 into outfile 구문을 이용하는 것이다.
해당 구문을 이용한 취약점에 대해서는 구글링할 것을 추천하고 해당 포스팅에서는 SQL Injection 이후 해당 구문들을 사용할 수 있는지 확인하는 것에 포커스를 두었다.
1. SQL Injection을 통해 DB 정보 획득
- user명 : select user();
- version 정보 : select @@version;
만약 버전 5.1.17 이상이라면 file-priv 옵션이 존재하므로 load_file과 into outfile을 진행하기 위해서는 해당 옵션이 현재 user에 Y로 설정되어있는지 확인이 필요함.
- file-priv 옵션 : select user, file_priv from mysql.user;
만약 file_priv 값이 N으로 설정되어 있다면 load_file과 into outfile은 불가하다.
2. secure-file-priv
- 현재 user에게 file-priv 옵션이 Y로 지정되어있다라도 secure-file-priv 옵션이 지정되어있으면 해당 디렉토리 이외에는 읽기/쓰기가 불가능하다.
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
만약 위와 같은 에러가 떴다면, 이는 secure-file-priv로 지정한 디렉토리 이외의 디렉토리에 존재하는 파일을 읽거나 쓰려고 했기 때문이다.
- MYSQL 5.6.34 이후의 버전에서는 보안 문제로 인해 secure-file-priv 옵션이 지정되어 있지 않을 경우에도 위와 같은 에러문이 출력되며 load_file과 into outfile 구문을 사용할 수 없다.
※ secure-file-priv 확인 방법
* 명령어 : SHOW VARIABLES LIKE 'secure_file%';
* 옵션 설정 파일 예시
- 리눅스 : /etc/my.cnf or /etc/mysql/my.cnf
- 윈도우 : C:\ProgramData\MySQL\MySQL Server 5.6\my.ini
'Hacking > Web' 카테고리의 다른 글
Indirect SQL Injection (0) | 2019.08.11 |
---|---|
Controller Location In Spring Framework (0) | 2019.07.29 |
[JAVA] AES256 decrypt Code (0) | 2019.04.25 |
[Websec.fr] level 8 Writeup (0) | 2019.04.11 |
[websec.fr] level 25 writeup with parse_url bug (0) | 2019.04.07 |