sql注入点判断
简单判断是否存在SQL注入
单引号判断
$id参数左右有数字型(无)、单引号、双引号、括号等方式组成闭合;
最为经典的==单引号判断法:==在参数后面加上单引号’比如:
http://xxx/abc.php?id=1'
如果页面返回错误,则存在 Sql 注入。 原因是无论字符型还是整型都会因为
单引号个数不匹配
而报错。
万能语句:
如果我们传入的 username 为 1’ or 1=1 #,随意输入 password,那么传入后端验证时,sql语句就是
*%23为#注释符的url编码*
select * from table_name where username='1' or 1=1 # ' and password='xxxxxx'
通常 Sql 注入漏洞分为 2 种类型:
数字型
字符型
数字型判断:
当输入的参 x 为整型时,通常 123.php 中 Sql 语句类型大致如下:
select * from <表名> where id = x
这种类型可以使用经典的 and 1=1 和 and 1=2 来判断:
Url 地址中输入 http://xxx/abc.php?id= x and 1=1 页面依旧运行正常,继续进行下一步。(说明sql语句执行了,语句语法及逻辑判断正确,因此不报错)
Url 地址中继续输入
http://xxx/abc.php?id= x **and 1=2**
页面运行错误,则说明此 Sql 注入为数字型注入。
语句解释
当输入 and 1=1时,后台执行 Sql 语句:
select * from <表名> where id = x and 1=1
当输入 and 1=2时,后台执行 Sql 语句:
select * from <表名> where id = x and 1=2
没有语法错误但是逻辑判断为假,所以返回错误。
我们再使用==假设法:==如果这是字符型注入的话,我们输入以上语句之后应该出现如下情况:
select * from <表名> where id = 'x **and 1=1**' select * from <表名> where id = 'x **and 1=2**'
查询语句将 and 语句全部转换为了字符串,并没有进行 and 的逻辑判断,所以不会出现以上结果,故假设是不成立的。
字符型判断:
当输入的参 x 为字符型时,通常 123.php 中 SQL 语句类型大致如下: select * from <表名> where id = ‘x’ 这种类型我们同样可以使用 and ‘1’=’1 和 and ‘1’=’2来判断:
Url 地址中输入 http://xxx/abc.php?id= x**' and '1'='1**
页面运行正常,继续进行下一步。
Url 地址中继续输入 http://xxx/abc.php?id= x**' and '1'='2**
页面运行错误,则说明此 Sql 注入为字符型注入。
语句解释
‘ 的作用是使语句闭合,否则整个语句将被当作字符串处理