一、注入原理
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 注释符
# 单行注释:注意与 url 中的#区分,常编码为%23
--空格 单行注释:注意为短线短线空格。
/*()*/ 多行注释:至少存在两处的注入,/**/常用来作为空格
四、注入流程
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 编码绕过
版权声明:本文为weixin_51730169原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。