[网站安全] [实战分享]WEB漏洞挖掘的一些经验分享
WEB漏洞有很多种,比如SQL注入,比如XSS,比如文件包含,比如越权访问查看,比如目录遍历等等等等,漏洞带来的危害有很多,信息泄露,文件上传到GETSHELL,一直到内网渗透,这里我想分享的最主要的是SQL注入,因为尽管过去了很多年,SQL注入依然是现在最大的一个问题,我们打开wooyun,看看已经注册的乌云厂商,其中能看到厂商漏洞分布的一个饼状图,其中占领面积最大的就是SQL注入,那么SQL注入带来的危害有很多了,比如最后的GETSHELL,比如百万级用户信息泄露的基础都是SQL注入,我接触WEB漏洞挖掘的时间也不长,大概从今年5月份开始研究,所以只是分享这半年时间的一些经验,谈不上教学。
![](http://bbs.ichunqiu.com/data/attachment/forum/201511/03/130843i6cx7z9u67vvxvcq.jpg)
那些年我用到的一些好用的工具
sqlmap,第一个要说的就是神器sqlmap,之所以好用,第一点就是它是开源的,能自己添加payload修改payload,当然,得有一定的python基础,这里我顺道要强烈推荐一下《python黑帽子》这本书,非常适合刚刚接触python的朋友们,而且sqlmap非常智能,测试种类特别多,具体的使用方法我就不说了,网上一搜一大堆。
AWVS,其实现在扫描目录的工具有很多,nikto也很不错只不过是linux下的,kali中使用nikto也不错,AWVS是一个扫描目录的工具,其实我现在用到它也不是很多,太消耗内存了,不过对于我们更直观的查看目标网站结构有很大的帮助,它也能识别出很多XSS和SQL注入,当然不能全部识别,真正还是得靠自己。
FireFox,一般我做web漏洞的时候要用到firefox浏览器,不得不说,火狐浏览器是专门为白帽子准备的,它的插件实在太强大了!这里我用的比较多的两个插件一个是hackbar,一个是live http headers,hackbar的好处在于可以通过URL构造GET包和POST包,而且能做一些base64的加解密,通过这种方法可以很好的手工测试注入点是否存在,再根据具体情况放到sqlmap里或者自己的payload里跑数据了,live http headers有点像fiddle,它会对于浏览器发出的数据包进行截获,这样很容易帮助我们查看访问一个页面时发出的请求包,也是有助于我们寻找注入点的。
burpsuite,神器中的神器,我们可以通过设置代理,用burpsuite截获数据包,通过修改数据包的内容实现类似于中间人攻击的方法,很多密码重置漏洞,撞库,甚至getshell都是用它完成的,这里我多撤一点,比如密码重置漏洞,是利用burpsuite把用户名A修改成用户名B,从而达到本来是想重置用户名A的密码,而改成了重置用户名B的密码,这样就能登录用户名B了,比如撞库,现在很多的撞库事件或者某某系统或后台弱口令都可用burpsuite做到,只要你握有一定量的用户名密码字典。
那些年我愁于寻找的注入点
无论对谁来说,注入点是最难寻找的,很多人都说到google hack或者别的什么,很多入门级的教程都说直接baidu inurl:asp?id=,其实这只是注入的一种形式,常规的注入就是GET注入和POST注入,当然,还有很多猥琐的Cookie注入,referer注入,总之就是HTTP HEADER注入,这些都是SQL注入的基础,仍然是网上一搜一大堆,这里不做赘述,我来讲一下我是如何寻找注入点的,首先每个人目标的选定都不太同,比如有的人可能是因为这个银行员工的服务态度不好,我就想搞它们,比如有的人想单纯的搞破坏,比如我是根据补天的活动或者注册厂商来弄,这样能得到更多的奖励等等,首先我们选定了一个目标网站后要对这个网站整体结构有一定的认识,比如访问一些链接观察URL,现在越来越多的网站使用的是静态页面,形如 www.xxoo.com/item/131.html的格式,而有些还是动态URL请求,比如www.xxoo.com/item.asp?id=2,那么我们就可以从GET请求开始做测试了。
不放过任何一个细节
其实现在网站的防护越来越好,而且就算是动态请求的页面,也有可能因为一些php防护,比如replace或者intval之类的方法导致无法注入,但这不是关键,百密总有一疏,如果你能去sebug看那里的通用型漏洞的分析的话,你就能看到一个asp或者php页面里总有参数没有得到过滤,或者如果你去wooyun看那些安全狗的bypass的话,总有一些方法能绕过,这里要说的就是不放过任何一个细节,一个页面请求里,会有不止一个数据包,当前URL的GET包或许不存在SQL注入,但其中的一些GET请求,就很有可能存在SQL注入,这需要我们使用Live http header来获取一个页面请求的所有数据包,再一个一个试。
不仅如此,一个静态页面也有可能存在sql注入,一般我们管这个叫伪静态页面,也就是形如www.xxoo.com/item/133,这样的URL看上去是一个静态页面,但实际上它仍然是一个动态请求的过程,会利用item=133这个方法去动态请求页面中的内容。
还有就是POST数据,这里要专门提到经常出现漏洞的位置,首当其中的就是登陆框,其次还有搜索框,还有各种订阅,查询的信息,跟查询相关的登陆框都可以做SQL注入的尝试。
关于数据返回,绝大多数人看到输入单引号报错的时候都很兴奋,但有些人看到单引号后页面没有报错信息就放过了,其实不要放弃,盲注就是为没有回显的注入存在的,所以说任何一个细节都不要放过,比如在http header中的各种参数,去测试,总会有惊喜。
那些年我专注的Bypass
当你找到一个注入点,就要面临bypass了,有些网站利用建站程序搭建,或者部署了360或者安全狗,一般测试的人看到被拦截就放弃了,其实如果网站管理者没有及时更新防护程序的话,是可以使用各种方法绕过的,绕过方法最好自己测,这也是不推荐直接用工具的原因,我们要了解为什么会被拦截,是单引号引起的?逗号引起的?还是union,select等等引起的?然后根据具体的情况,这里最好巧用到以前的案例,根据案例中的漏洞注入方法,来构造自己的bypass。
最后要说web漏洞挖掘要有信息,越大的网站漏洞价值越大,难度也越大,所需的时间也越大,还有就是多看别人的漏洞,wooyun是个绝佳的平台,很多公开漏洞的细节都值得每个人学习,经常会有各种猥琐的方法,绝对安全的网站是不存在的,哪怕是BAT3,都一定有漏洞存在。
祝大家挖洞愉快,欢迎交流!