注意:本文分享给安全从业人员,网站开发人员和运维人员在日常工作中使用和防范恶意攻击, 请勿恶意使用下面描述技术进行非法操作。
[TOC]
注意:本文分享给安全从业人员,网站开发人员和运维人员在日常工作中使用和防范恶意攻击, 请勿恶意使用下面描述技术进行非法操作。
[TOC]
注意:本文分享给安全从业人员,网站开发人员和运维人员在日常工作中使用和防范恶意攻击, 请勿恶意使用下面描述技术进行非法操作。
[TOC]
本文主要以浅谈SQL注入漏洞进行学习总结,帮助新入门安全学习的小白快速入门SQL注入基础;
在安全圈里总所周知,注入攻击是一个非常传统的攻击方式, 且SQL注入方式与手段变化多端;在日常漏洞中SQL注入占比约10%在OWASP Top榜单曾一度位居第一,虽不算高占比但其危害极大,业内企业因此蒙受损失的新闻层出不穷。
Q: SQL注入的定义?
答: SQL Injection 是这样的一种漏洞应用程序向后台数据库传递
SQL(Structured Query Language-结构化的查询语言)
时候,如果攻击者提供了影响该查询的能力便会引发SQL注入安全问题;
简单的说就是攻击者通过影响传递给数据库的内容来修改SQL自身的语法和功能,并且会影响SQL所支持的数据库和操作系统的功能和灵活性;
SQL注入漏洞原理:
描述:脚本攻击主要是针对动态网站进行的攻击,其原因是在建立动态网页的过程中没有对用户的输入输出进行有效的合法性验证,使应用程序存在安全隐患。用户可以提交一段数据库查询代码, 根据程序返回的结果,获得某些他想得知的数据或进行数据库操作;
SQL注入漏洞危害:
例如数据库被拖库,管理员和重要人员信息泄露,甚至还能通过SQL注入漏洞直接获取webshell或者执行命令导致服务器系统权限被获取等等。
Q:目前所掌握的注入漏洞种类,出现频率较高有哪些?
比如:盲注,time 时间盲注,报错注入,union注入(在不影响正常服务的情况下,拼接查询算最高危害的,接下来就是union);
Q:比较易被检测出来的有哪些?
比如:盲注,time 时间盲注,报错注入等;
Q:关于注入的位置常常有那些?
常发生于用户和服务交互处(增删改查操作),AJAX,API接口等等,用这个检测报错注入,比较方便。
整型注入
测试方法:
1 | http://host/test.php?id=100 and 1=1 返回成功 |
字符型注入
测试方法:1
2
3http://host/test.php?name=rainman' and '1'='1 返回成功
http://host/test.php?name=rainman' and '1'='2 返回失败
产生原因:sqlstr = "select * from news where id = '"+ request.getParameter("name") + "'"
搜索型注入
测试方法:
1 | http://host/test.php?keyword=test%' and '%'=' 返回test查询相同结果 |
盲注型注入
内联式SQL注入
内联注入是指查询注入SQL代码后,原来的查询仍然全部执行;
1 | Sqlstr = "select * from admin where username ='"+username+"' and password = '"+password+"'" |
终止式SQL注入
终止式SQL语句注入是指攻击者在注入SQL代码时,通过注释剩下的查询来成功结束该语句,被注释的查询不会被执行;
1 | username = ‚' or ''='' --‚ |
1 | Select colum1,colum2,colum3,…,columN from table1 Union Select colum1,colum2,colum3,…,columN from table2 |
Union语句的构建
Q:Union不适用的地方有那些?
A:注入语句无法截断,且不清楚完整的SQL查询语句;Web页面中有两个SQL查询语句,查询语句的列数不同;
1 | Mssql --#命令执行 |
4.2) 基于boolen注入
MSSQL:如果用户属于sysadmin, id = 12/1 返回正常页面,否则返回错误页面 http://host/products.asp?id=12/is_srvrolemember('sysadmin')
• 返回正常页面,判断成立
• 返回错误页面,判断失败
要成功的发动SQL注入攻击,最重要的是知道应用正在使用的DBMS,没有这一信息就不可能向查询注入信息并提取自己所感兴趣的数据.
原因:不同数据库之间存在语法差异和特性;
1 | 注入点:http://xx.xxx.xx.xx/playnews.asp?id=772' and '1=1 |
1 | --#报错信息:[Microsoft][ODBC SQL ServerDriver][SQL Server] 字符串''之前有未闭合的引号 |
1 | --#报错:Mysql: ERROR 1064 (42000): You have anerror in your SQL syntax; check the manualthat corresponds to your MySQL serverversion for the right syntax to use near |
1 | #报错:Oracle: ORA-01756: 括号内的字符串没有正确结束 |
2) 了解代码使用的框架或者代码结构,看代码对请求进行路由和分发的方式,路由分发方式的设计和实现是否存在隐患,记录一下再看看是否有一些统一的安全filter,记录下他的特性(任何统一的安全filter都会因为不了解后端调用的场景而产生绕过),然后再看看是否有基础的DB库,这个库是否实现了安全的SQL操作。
3) 了解业务实现的方式,设计的思路,这样黑盒看到同类网站,就可以知道怎么下手知识面越广也越容易发现更多的技巧,了解搭配的数据库版本(MYSQL,MSSQL,Sybase,Oracle,Access)
最好的防御,是内部先发现做策略,开发时过滤特殊字符: 单引号、双引号、斜杠、反斜杠、冒号、 空字符等的字符 ;
过滤的对象: 用户的输入 | 提交的URL请求中的参数部分 | 从cookie中得到的数据 ;
监测方面目前大多都是日志监控+WAF(统一的filter),部署防SQL注入系统或脚本 ;
数据库日志容易解析,语法出错的、语法读Info表的建立黑白名单机制,都明确是黑客嘛;
你好看友,欢迎关注博主微信公众号哟! ❤
这将是我持续更新文章的动力源泉,谢谢支持!(๑′ᴗ‵๑)
温馨提示: 未解锁的用户不能粘贴复制文章内容哟!
方式1.请访问本博主的B站【WeiyiGeek】首页关注UP主,
将自动随机获取解锁验证码。
Method 2.Please visit 【My Twitter】. There is an article verification code in the homepage.
方式3.扫一扫下方二维码,关注本站官方公众号
回复:验证码
将获取解锁(有效期7天)本站所有技术文章哟!
@WeiyiGeek - 为了能到远方,脚下的每一步都不能少
欢迎各位志同道合的朋友一起学习交流,如文章有误请在下方留下您宝贵的经验知识,个人邮箱地址【master#weiyigeek.top】
或者个人公众号【WeiyiGeek】
联系我。
更多文章来源于【WeiyiGeek Blog - 为了能到远方,脚下的每一步都不能少】, 个人首页地址( https://weiyigeek.top )
专栏书写不易,如果您觉得这个专栏还不错的,请给这篇专栏 【点个赞、投个币、收个藏、关个注、转个发、赞个助】,这将对我的肯定,我将持续整理发布更多优质原创文章!。
最后更新时间:
文章原始路径:_posts/网安大类/OWASPTOP/SQLInject/SQL注入类型危害及防御.md
转载注明出处,原文地址:https://blog.weiyigeek.top/2019/3-28-384.html
本站文章内容遵循 知识共享 署名 - 非商业性 - 相同方式共享 4.0 国际协议