'special comment'에 해당되는 글 1건

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

,