web弱口令扫描工具

去年冬天帮一个客户做内网渗透测试,口令扫到一台测试服务器,扫描SSH端口开着,工具用户名是口令admin,密码是扫描admin123。整个过程不到十秒。工具客户的口令技术负责人当场脸色就变了——这台机器上跑着他们内部CI/CD的构建脚本,里面硬编码了生产环境的扫描数据库连接串。

这就是工具弱口令的可怕之处。它不需要什么0day漏洞,口令不需要复杂的扫描利用链,甚至不需要工具用得多熟练。工具一个字典,口令一点耐心,扫描就能捅穿大部分防守。工具

弱口令扫描工具到底在扫什么

很多人以为弱口令扫描就是拿个大字典暴力跑。不完全是。真正实用的工具会做几件事:协议识别、认证接口探测、字典策略匹配、并发控制、结果去重。少了哪一环,要么扫得慢,要么误报多,要么直接把目标服务打挂。

常见的协议覆盖包括SSH、RDP、MySQL、Redis、MongoDB、FTP、Telnet、SMTP、POP3,以及HTTP Basic Auth和各类Web后台登录表单。每种协议的认证流程不一样,工具需要针对性地实现握手和认证逻辑。比如Redis压根没有用户名概念,直接AUTH password就行;而MySQL要处理挑战-响应机制,不能简单发个明文密码过去。

Web表单类的扫描更麻烦。你得先抓登录请求,分析参数名、提交方式、有没有CSRF token、有没有验证码。有些站点登录失败三次就封IP,工具还得支持代理池和请求间隔控制。我见过一个工具因为没处理JSESSIONID的Cookie保持,扫了三千次全是失败——服务端每次返回新Session,认证状态根本没维持住。

字典的质量决定一切

工具本身只是管道,字典才是子弹。网上流传的所谓“Top 1000弱口令”列表,实际命中率低得可怜。真正好用的字典是分场景的:

  • 设备默认口令:admin/admin、root/root、cisco/cisco、ubnt/ubnt
  • 国内企业常见:admin/123456、admin/admin888、test/test123
  • 年份+特殊字符:Company@2023、Company@2024
  • 键盘模式:qwerty、1qaz2wsx、zxcvbnm

我自己的习惯是先用小字典快速过一遍(大概200条),命中的目标再单独记录。然后根据目标暴露的服务和页面特征,生成针对性字典。比如后台页面标题写着“XX管理系统”,那密码很可能包含“xxgl”或“xxadmin”这类拼音缩写。

几个容易踩的坑

并发数别开太高。SSH默认MaxStartups是10,你开50个并发,后面的连接直接被拒,工具会误判为密码错误。MySQL也有max_connections限制。我一般SSH用5-8个线程,Web表单用3-5个,Redis可以稍微高一点。

日志和告警要留意。很多WAF和IDS对高频401/403响应有阈值告警。扫描前最好确认目标有没有部署这类设备,否则扫到一半IP被封,后面全白干。有个取巧的办法:把扫描源IP设成内网地址,很多WAF对内网流量默认放行。

结果验证不能省。工具报“成功”不代表真能登录。有些服务在认证失败时返回的响应和成功时极其相似,工具靠关键字匹配容易误判。我一般会让工具把成功的结果单独输出,然后手动用ssh或mysql客户端连一次确认。

自己写一个还是用现成的

现成工具里,Hydra、Medusa、Ncrack都是老牌选手,协议覆盖广,但Web表单支持一般。SharpHydra和GoScan是近几年比较活跃的,GoScan的插件化设计对Web场景更友好。如果你只是偶尔扫扫内网,Hydra够用了。如果要集成到自动化流程里,建议用Python的Paramiko和Requests库自己写——逻辑可控,误报好排查,加个企业微信告警也就是几行代码的事。

我自己的扫描脚本大概三百行,核心就是一个协议适配层加一个结果输出模块。字典放在外部文件里,每扫完一个C段就自动去重、排序、生成报告。跑一晚上,第二天早上看结果就行。

弱口令这东西,说到底拼的不是工具多高级,而是对目标业务的理解和对细节的耐心。字典里加一个“公司名+年份”的规则,可能比换三个扫描器都管用。

百科
上一篇:数据库渗透工具
下一篇:端口映射内部端口和外部端口教程