一、注入原理
SQL 注入漏洞的产生需要满足以下两个条件
1 、参数用户可控:从前端传给后端的参数内容是用户可以控制的;
2 、参数带入数据库查询:传入的参数拼接到 SQL 语句,且带入数据库查询。
当用户传入参数为 1 '的时候,在数据库执行如下所示。
select * from users where id=1'
此 SQL 语句不符合语法规则就会报错。
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' ' at line 1
当用户传入参数为 1 and 1 = 1 时,
select * from users where id= 1 and 1 = 1
因为 1 = 1 为真,id= 1 也是真,and 两边均为真,所以页面会返回 id= 1 的结果。
如果用户传入参数为 1 and 1 = 2 时,
因为 1 = 2 为假,id= 1 为真,and 两边有一个为假,所以页面返回与 id= 1 不一样的结果。
由此可以初步判断存在 SQL 注入漏洞,攻击者可以进一步拼接 SQL 攻击语句,进行攻击,致使信息泄露,甚至获取服务器权限。
二、判断是否存在注入
回显是指页面有数据信息返回。
id = 1 and 1 = 1
id = 1 and 1 = 2
id = 1 or 1 = 1
id = '1' or '1' = '1'
id= " 1 " or "1" = "1"
无回显是指根据输入的语句,页面没有任何变化,或者没有数据库中的内容显示到网页中。
vince' and ' 1 '=' 1
vince' and ' 1 '=' 2
vince' and sleep ( 5 ) -- +
三、三种 sql 注释符
-- 空格 单行注释:注意为短线短线空格。
多行注释:至少存在两处的注入,常用来作为空格
四、注入流程
1 、是否存在注入并且判断注入类型
2 、判断字段数 order by
3 、确定回显点 union select 1 , 2
4 、查询数据库信息 @@version @@datadir
5 、查询用户名,数据库名 user ( ) database ( )
6 、文件读取 union select 1 , load_file ( 'C:\\wondows\\win.ini' )
7 、写入 webshell select. . into outfile...
8 、补充一点,使用 sql 注入遇到转义字符串的单引号或者双引号,可使用 HEX 编码绕过