一个事实
在信息收集的过程中,一个常见的规律是,无论企业规模多大,其系统的细枝末节处都可能会存在安全隐患,尤其是最基本的弱口令问题。
开发目的
而如何在海量网站中快速寻找存在弱口令的网站,从而节省攻击者的精力以及时间成本成为本篇文章的开发目的。
思路
经过海量网站筛选,发现大部分网站登录页面的输入的地方都是input元素,我们只需准确定位用户名输入的input元素和密码输入的input的元素以及登录按钮元素,即可实现大部分无验证码网站登录。虽然是无验证码网站,但是也有许多小细节值得我们探讨。
实战
大概设计了一个工具流程便开始写这个工具。
个人使用browsermob-proxy这个工具用来充当http拦截器,用来获取登陆后网站的发包情况;使用selenium来控制浏览器模拟浏览器登录。
要点
-
打开网站一般会有个跳转,如果你直接使用requests库来请求根目录可能得不到登录网站的页面元素,所以需要使用工具控制浏览器模拟打开网站,通过current_url方法来定位登录页面,然后再通过page_source获取登录页面源代码。
-
通过BeautifulSoup来解析网站源码,获取页面中所有input元素,然后使用type属性以及如username、account、用户名等关键字来定位用户元素,定位元素后再获取该元素属性作为后续自动登录寻找元素的锚。通过同样的方法定位密码元素及登录按钮。
-
通过browsermob-proxy抓取的请求包定位具体的登录http请求包,然后替换其中输入的或明文或加密的字符串,使用requests库对他们进行重组发包,即可实现自动爆破。
-
通过黑白名单以及返回包大小的方法来确定是否爆破成功。
案例
http://124.*.*.134:8001
http://124.*.*.244:88
后续需完善
经过持续完善,该脚本已可以覆盖无验证码的网站达到十之八九,网站千奇百怪寄望于一个工具完全识别实在是开玩笑。误报率更不能说有多低,不过已经将未爆破成功网站重新加入一个新的列表中,使工具不至于漏报。
完善点
- 增加验证码识别(这种识别似乎好像不算难做,毕竟有开源的ddddocr,难做的是千奇百怪的验证码返回方式)
- 可以增加专门在浏览器中输入进行爆破选项,针对加密密码。
- 其他细节完善。