免责声明
本文章仅用于信息安全防御技术分享,因用于其他用途而产生不良后果,作者不承担任何法律责任,请严格遵循中华人民共和国相关法律法规,禁止做一切违法犯罪行为。
由于传播、利用本公众号所发布的而造成的任何直接或者间接的后果及损失,均由使用者本人承担。威零科技公众号及原文章作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
文中涉及漏洞均以提交至相关漏洞平台,禁止打再次复现主意
本文章完全是为了水证书,分享一个快速打法,不喜勿喷,感谢大佬们的指正。
前言
催更一:
催更二:
最近出差,忙得飞起...催更的宝子又来咯!!不得不满足一下了。
有想进交流群讨论学习的宝子可以看文章末尾方式哦~~~
留下一个小问题:当网页出现报错时,但是页面没有爆出你想要的数据,这个时候可以怎么做呢?
0x01 资产发现
还是通过谷歌语法(公众号后台回复谷歌语法即可获得此成就)搜集到该学校资产,测试一些搜索框,传参数的地方等等,比如下面这个资产
肉眼可见的一个搜索框,那必须得“1'”进行测试一下。
0x02 漏洞发现
这里我多讲一下哈~ 测试注入的思路,一般就是先判断数据类型,就比如这里的搜索框一般就是字符型,我们就可以简简单单的输入一个单引号看看会发生什么。
此时可以发现,一个单引号页面进行了报错,这里有一个小细节不知道大家发现了没有,没有就接着看文章哈!
然后接着输入两个单引号看页面会不会回显正常
两个单引号回显正常,这里基本上可以判断存在注入了,而且注入类型是报错注入
现在揭露一下细节,正如文字标题说的是个伪静态的注入,注意看url,后缀是.html的。很多宝子们,大多数看见html页面的就直接“跑路”“下一个”,所以细节决定成败!
0x03 漏洞利用
既然知道了是报错注入,那直接丢报错注入payload: '-convert(int,user)-'
为啥可以这样用呢?首先这里我们可以判断数据库是sqlserver
因为网站框架是asp.net,所以猜测是sqlserver数据库
其次,convert函数是一个日期转换函数,不懂的宝子可以去百度一下;
随后,报错注入原理convert(int,user) 这里的意思是将user(数据库用户)转换为int类型,因为user转换不了,所以在转换为int类型会报错,指出“SQL查询结果”⽆法转换为“int”类型,这样的话攻击者从报错信息中就输出了数据库用户的用户名。
这里丢入payload之后提示长度小于0,这个时候,还是没有出来我们想要的。不要跑路哈,你已经成功了50%了,要考虑是不是对相关的函数或者字符进行了过滤,我们可以挨个尝试一下。
于是将-替换为/,页面返回
这里说明可能对-号有过滤,但是还是没有注出来
通过页面我们可以发现是 'Title~' ,转换成数据类型 int 时失败
我们发现url中刚好有存在一个Title~,我当时已经完全没有思路了,索性将它删掉试试,我猜测这里的Title~,影响了报错函数的执行
删掉之后呢,直接得到了用户名。确实也是靠了7分运气!!
0x04 漏洞修复建议
防范SQL注入,标准方案为输入验证与参数化查询相结合。
输入验证分为白名单和黑名单两种方式,通常在系统中是结合到一起来完成输入验证,具体实现通过正则表达式来完成。需要注意以下几方面:
(1)在可信系统(比如:服务器)上执行所有的数据验证。
(2)验证所有来自不可信数据源(比如:数据库,文件流,等)的数据。
(3)应当为应用程序应提供一个集中的输入验证机制和规则。
(4)为所有输入明确恰当的字符集,比如:UTF-8。在输入验证前,将数据按照常用字符进行编码(规范化)。如果进行关键字的验证,请先统一大小写。
(5)验证的不仅是参数,包含所有来自客户端的数据,包括:所有参数、URL、HTTP头信息(比如:cookie名字和数据值)。
(6)验证正确的数据类型、验证数据范围、验证数据长度。
(7)请考虑是否允许输入常见危险字符。部分常见的危险字符包括:< > " ' % ( ) + \ \' \" 。
(8)特殊字符单独验证:空字节 (%00);换行符 (%0d, %0a, \r, \n);路径替代字符“点-点-斜杠”(../或 ..\)。验证替代字符:%c0%ae%c0%ae/ (使用规范化 验证双编码或其他类型的编码攻击)。
★
欢 迎 加 入 星 球 !
代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员
进成员内部群
星球的最近主题和星球内部工具一些展示
关 注 有 礼
还在等什么?赶紧点击下方名片关注学习吧!
推荐阅读