Hacking/Web.

mysql false based sql injection

2017. 11. 1. 21:00

 MySQL은 PHP만큼 자유도가 정말 높은 프로그래밍 도구이다. 그래서 PHP와 마찬가지로 `타입 저글링`이 가능하다. 이 때 취약점도 같이 생기게 된다. 그 취약점이 바로 `False Based SQL Injection`이라는 것이다. 일단 예제로 MySQL의 타입 저글링을 이해해보자.


mysql> select 'some text'=0;

+---------------+

| 'some text'=0 |

+---------------+

|             1 |

+---------------+

1 row in set, 1 warning (0.00 sec)


mysql> select '1st prize'=1;

+---------------+

| '1st prize'=1 |

+---------------+

|             1 |

+---------------+

1 row in set, 1 warning (0.00 sec)


mysql> select '1024 is 2^10'=1024;

+---------------------+

| '1024 is 2^10'=1024 |

+---------------------+

|                   1 |

+---------------------+

1 row in set, 1 warning (0.00 sec)


이 세 개의 쿼리에서 봤듯이, 원래는 0 (False)가 떠야하는 쿼리들이 1 (True)이 뜬다는 것이다. String 과 Int 형을 비교할 때는 String 형의 앞에 있는 숫자가 비교 된다. 그래서 저 쿼리들의 결과가 모두 1 (True)인 것이다. 


그럼 만약에 앞에 숫자가 없는 스트링들이 저장되어 있는 테이블에서 쿼리를 날릴 때 ` ' or 1=1-- - ` 말고도 ` '+0 `, ` '^1 ` 과 같은 쿼리로도 같은 결과를 할 수 있다는 것이다. 


MySQL의 이러한 원리를 사용하는 것 문제도 소개해주겠다. ch4n3 world 에 이 기법과 관련된 문제가 있다. 찾아서 풀어보라.  


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

SQL Injection Tricks  (0) 2017.11.04
webhacking.kr 41번 write up  (0) 2017.11.03
LFI exploit with php wrappers  (0) 2017.10.18
Markdown에서 XSS  (0) 2017.10.18
웃긴대학 XSS 취약점 제보  (0) 2017.10.16