一、判断SQL注入漏洞
- 参数带入数据库查询:传入的参数拼接到SQL语句,然后写入数据库查询。
- 例如:用户传入的参数为
1':select * from users where id=1'
- 因为这个SQL语句不符合语法规则,所以导致报错(有报错就说明有可能存在SQL注入漏洞)
- 例如:用户传入的参数为
判断原理
-
- 当用户传入的参数为
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"
- 为了演示方便,先在数字型注入里查看一下用户名,然后在字符型(用户名是字符型)注入里传参进行判断
- 用单引号判断,发现报错,则可能存在注入
- 也可以通过传参进行判断:
lucy'and '1'='1
:后面不加引号是因为页面里会拼接SQL语句;输入lucy'and '1'='2
就发现页面会有相应变化
- 无回显情况判断是否存在注入:根据输入的语句,页面没有发生任何变化,或者没有将数据库中的内容显示到网页中
- 可以用sleep()来判断是否可以注入
lucy'and sleep(5)--
(注意:--后面要加一个空格),发现页面没有任何变化sleep(5)
:大于5秒再返回页面--
:用注释符注释页面拼接的单引号和后面的查询语句
二、注入流程概述
- 先判断是否存在注入,然后判断注入类型
- 判断字段数:
order by
- 确定回显点:
union select 1,2
- 查询数据库信息:
@@version @@datadir
- 查询用户名:user()
- 查询数据库名:
database()
- 文件读取:
union select 1,load_file('C:\\wondows\\win.ini')#
- 写入 webshell:
select..into outfile...
- 使用 sql 注入遇到转义字符串的单引号或者双引号,可以用HEX编绕过
- source:securepulse.website
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论