- A+
由于Python比较容易上手,白帽子提交的插件代码上的错误也并不多;错误多体现在误报或是漏报上,下面就罗列下几种出现次数较多的错误,共同学习、共同进步!
一、误报类
这里有两处错误:
1、使用33作为关键字去判断是否存在注入,存在较大的误报风险!
解决方案:使用mysql的md5()函数计算出一个md5值作为判断的关键字(…999.9+union+select+11,22,md5(9527)%23,然后判断返回数据中有无9527的md5值52569c045dc348f12dfc4c85000ad832即可有效地解决误报问题)
2、self.result.description给出的验证结果不够详细,仅仅给出有注入这个信息,无法知道是不是误报!
解决方案:将某个注入结果包含到self.result.description中,如mysql的version、user等信息(…999.9+union+select+111,222,concat(0x7e7e7e,user(),0x7e7e7e)%23,使用re匹配出user()信息,包含到self.result.description中)
这里也有两处错误:
1、使用固定的文件名作为上传的文件名(要考虑到再次上传是否可以覆盖,所以最好使用随机文件名)
2、验证文件是否上传成功要考虑到是否解析(asp:<%response.write(1+95201313)%>、php:<?php print(1+95201313);?>、JSP:<%out.print(1+95201313);%>,访问上传后的文件地址,返回结果中判断有无95201314关键字即可)
二、漏报类
这里有两处错误:
1、通过判断当前用户的第一个字母是不是r(ascii码为114)来判断是否存在注入,肯定会导致漏报!(不是所有的网站数据库当前用户都是root)
2、延时的时间设定为2,大大增加了误报的风险!要考虑到一些网站在访问时网络不稳定等因素,尽量把延时时间设置的长一些。(线上测试过一些注入,总体上设置延时时间在5-8秒范围内结果还是让人满意的)
这个某任意文件下载漏洞的插件表面看上去并没有什么问题,而实际扫描中遇到过几次这样的情况,xml文件中有特殊字符,导致代码报错!其实漏洞是存在的,因为特殊字符导致了此漏洞未被检测到。所以最好的做法是使用re匹配出xml中的一段内容在self.result.description中展示。
经常写插件的同学也可以把你们经常犯的错误或是遇到的坑发出来,共同学习,共同进步!
欢迎各位白帽子来TangScan提交插件!不仅可以学习Python、交到基友,还可以赚取汤圆兑换RMB哦!