'MySQL'에 해당되는 글 2건

Mysql Special Comment

Hacking/Web 2019. 11. 20. 10:10
반응형

Mysql에는 특별한 주석이 존재한다.


그것은 바로 버전 별로 주석이 동작하는 /*! */ 형태이다.


아래 몇가지 형태를 보자.


현재 쿼리를 실행하는 버전은 5.7.12 버전이다.


1) select * from test2 from id=1 or id=2

 - 해당 쿼리를 통해 test2 테이블에 id가 1인 데이터와 2인 데이터가 존재함을 확인


2) select * from test2 from id=1 /*! or id=2*/

 - 이 경우 MySQL의 버전에 상관없이 항상 /!* */ 부분의 쿼리가 실행된다.

 - 만약 필터링이 union select와 같이 연결하여 설정되어 있을 경우 union/*!select*/으로 우회가 가능하다.


3) select * from test2 from id=1 /*!50000 or id=2*/

 - 이 경우 MySQL 버전이 5 이하 경우에만 주석이 실행된다. 현재 쿼리를 실행한 Mysql은 5.7.12버전이기 때문에 주석이 실행되지 않아 id=2인 데이터까지 출력이 된다.

 -현재 버전이 5. /*!60000 */로 변경할 경우 쿼리를 실행한 버전이 5.X이기 떄문에 6 이하이기 때문에 해당 주석이 실행되어 id=1인 데이터만 출력이 된다.

 - 결론 : /*![버전] */ 일 때 해당 데이터베이스가 해당 버전 이하일 경우에만 주석처리가 된다!

       


4) select /*!50000 1/0, */1 from test2

 - 해당 경우 실제 웹 어플리케이션에서 조회하는 부분에 이용할 수 있는 쿼리이다.

 - 좌측의 쿼리는 버전이 5.0 이하가 아니기 때문에 주석이 실행되지 않아 NULL이 출력되며, 우측의 쿼리는 버전이 6.0 이하이기 때문에 주석이 실행되어 정상적으로 1만 출력됨을 볼 수 있다.


- 이를 조금 더 나아가면 50000 부분을 조금씩 수정해가며 응답을 봐서 데이터베이스의 정확한 버전정보를 알 수 있다. 아래 쿼리들 처럼 정확히 현재 DB의 버전이 5.07.12임을 확인할 수 있다.


       






반응형

'Hacking > Web' 카테고리의 다른 글

데이터 평문전송 대응방안  (2) 2019.12.06
0.0.0.0 의 의미  (0) 2019.11.20
JWT algorithm modify code  (0) 2019.11.19
Webtob + Jeus 설정파일 리스트  (0) 2019.11.01
Subquery를 이용한 Error based Injection  (0) 2019.10.10
블로그 이미지

rootable

,
반응형

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
블로그 이미지

rootable

,