다들 아시다시피 php 에는 특수문자 공격 방지를 위한 magic_qoutes_gpc() 기능이 존재합니다.



# 기본 인젝션 구문

test' or 'a'='a'--


# magic_qoutes_gpc() 적용 후

test\' or \'a\'=\'a\'--



위와같이 자동으로 '," 등에 \ 을 삽입하여 문자열로 인식시키기 때문에 일반적인 SQL Injection 을 쉽게 방어할 


수 있게 됩니다. (%bf 우회 등 특수만 몇몇 경우 제외) 


이 옵션이 켜져 있는 php 기반 웹사이트의 경우 인젝션을 성공시키기 어렵습니다. 


주로 숫자필드를 찾아 char(), 0x 등으로 우회하게 되죠.


하지만 이 magic_qoutes_gpc() 가 동작하지 않는 경우가 있습니다. 정확히 말하면 동작하기 전이죠.



바로 getenv() 함수로 아파치 변수를 직접 가져올 때입니다. 아파치는 몇몇 주요 변수들을 직접 저장해서 php 


에서 활용할 수 있도록 하고 있는데, 이런 경우 php 를 거치기 전이므로 \' 처리가 되기 전입니다.



# 취약 예제


$agent=getenv("HTTP_USER_AGENT");

$q=@mysql_query("insert into test values('$agent','$ip')"



이와 같은 경우 uger-agent 필드에 인젝션이 가능하게 됩니다. 또한 쿠키에도 해당 기능이 동작하지 않으므로 동일하게 인젝션


이 가능합니다.



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

mysql 우회 기법 정리  (0) 2014.02.05
SQL Injection(MySQL) - procedure analyze()  (2) 2014.02.04
md5 를 raw_input 으로 비교할 시 취약점  (0) 2014.02.01
필드명 sql injection  (0) 2014.02.01
BlindSQL Injection 소스  (1) 2014.02.01

+ Recent posts