불균등 한 따옴표에 관해서는; 고려 문
SELECT * FROM admin WHERE username='$_GET["user"]' and password='$_GET["pass"]'
다음 나는 유효한 사용자가 '관리자'는 것을 알고 있다면 내가
다음가는,
'or 1=1
를 삽입 - 코더는 작은 따옴표와 같은 위험한 문자에 대한 사용자 입력을 소독하지 않은 경우 SQL 주입이 발생합니다
SELECT * FROM admin WHERE username='admin' and password='something' or 1=1
이렇게하면 암호 값에 관계없이 식의 왼쪽이 항상 참이므로 쿼리를 항상 반환하게됩니다.
은 SQL 주입의 가장 간단한 예를 들어, 당신은 공격자가 같은 --
또는 /*
구분 코멘트와 함께 쿼리의 나머지 부분을 전혀 따옴표를 사용하거나 어쩌면 언급 할 필요가 없습니다 것을 발견 할 것이다 ofter , 주입 지점 이후에 더 많은 매개 변수가 전달 된 경우.
16 진수 인코딩의 경우 필터링을 피할 수있는 몇 가지 이유가있을 수 있습니다. 쿼리에서 모든 값을 인용 할 필요가 없으므로 16 진수로 인코딩 된 값을 사용하는 것이 간단합니다. , 3 행을 제공하는 것입니다
inject.php?id=1 and 1=0 union select 1,2,concat(username,0x3a3a,password) from admin
표시 하나입니다 isntance admin::admin
에 대한 반환 : 당신과 같이 두 개의 필드 함께-표기하기 공동 concat
을 사용하려는 경우 이것은 예를 유용입니다. 나는 진수 인코딩을 사용하지 않은 경우, 나는이 작업을 수행해야합니다 :
는
inject.php?id=1 and 1=0 union select 1,2,concat(username,'::',password) from admin
이 상기 addslashes
기능에 문제가 될 수 있지만, 당신은 매우 복잡한 쿼리가있는 경우도와 제대로 정규식 위생 기능을 서면 또는 수 있습니다.
SQL 주입은 매우 광범위한 주제이며, 소개 한 내용은 거의 소개하지 않습니다.
좋은 질문입니다. 슬프게도 나는 SQL 인젝션 익스플로잇에서이 기술을 실제로 사용했다는 것을 알았습니다. – rook