보통 많은 개발자들이 SQL Injection을 막기위해 Magic_Quotes_gpc라는 PHP의 옵션을 사용했었다.
'나 sql injection에 사용되는 특수문자의 앞에 \를 추가해서 필터링 하는 방식이었다.
하지만 magic_quotes_gpc에는 취약점이 많았다.
GET/POST/Cookie로 받는 방식만 필터링을 했었다. 또한 DB에서 가져오는 값에서는 escaping 되지 않았기
때문에 많은 사람들이 magic_quotes_gpc기능을 끄고 mysql_real_escape_string함수를 사용하는 편이 더 안전하다고 추천한다. 하지만 아직은 많은 사람들이 magic_quotes_gpc를 믿고 있다. 또한 많은 개발자들이
magic_quotes_gpc만 믿어서 그런진 몰라도 PHP 5.4 부터는 아예 삭제되었다.
magic_quotes_gpc를 우회하는 가장 쉬운방법은 멀티바이트 인코딩을 사용하는 것이다.
mb_convert_encoding이라는 함수를 사용하는 환경에서만 가능하다. 언어셋을 바꾸는 함수이다.
만약 magic_quotes_gpc가 on 되어있는 서버에 인젝션을 날리게 되면
1\' 이렇게 인식한다.
그런데 여기에다가 %bf%5C라는 값을 넣어주면은 우회가 된다.
%bf%5c라는 값을 한글자로 인식해버린다. %5c는 \이다 %bf%5c%27에서 \를 무시해버려서 우회가 가능하다.
addslashes()라는 함수도 있다. 하지만 이 함수도 비슷한 방법으로 우회가 가능하다.
때문에 인젝션을 막을떄는 addslashes()나 magic_quotes_gpc등을 믿지말고
mysql_real_escap_string함수를 사용하는 것이 가장 안전하다.
그외에도 다양한 내용이 있지만 기억나는대로 추가하겠습니다.
'Web Hacking' 카테고리의 다른 글
useful MYSQL Functions (0) | 2015.08.24 |
---|---|
Time Base SQL Injection (0) | 2015.08.24 |
Blind SQL Injection (0) | 2015.08.24 |
Union SQL Injection (0) | 2015.08.24 |
SQL Injection 1 (0) | 2015.08.15 |