用Python挖漏洞,挖掘最舒服的漏洞一点是:你不需要等厂商发补丁,也不用管什么CVE编号。挖掘脚本一跑,漏洞结果就出来了。挖掘去年我帮朋友看一个CMS,漏洞后台登录处有个很明显的挖掘SQL注入点,手工测了两次确认能绕过后,漏洞我直接写了个Python脚本,挖掘遍历了30万条字典,漏洞不到二十分钟就拿到了管理员密码的挖掘哈希。这就是漏洞Python在漏洞挖掘里的真实样子——它不神奇,但足够快,挖掘足够脏,漏洞足够好用。挖掘
很多人以为挖漏洞得靠Burp Suite或者AWVS这类工具,点几下按钮就完事。工具确实省事,但遇到逻辑漏洞或者需要组合利用的场景,工具就笨了。比如某个电商网站,优惠券可以无限叠加,Burp的Repeater手动改包能测,可你要测100种组合呢?写个Python脚本,用requests库循环发请求,把参数排列组合扔进去,几分钟就能跑完。有一次我碰到个签到功能,连续签到7天送会员,但服务器只校验了天数没校验日期。我写了个循环,把系统时间往前调,一天之内领了三年会员。这种漏洞,扫描器根本发现不了。
Python挖漏洞的核心就三件事:发请求、解析响应、判断异常。requests负责发,BeautifulSoup或者正则负责解析,剩下的就是你的脑洞。我见过有人用Python写了个爬虫,专门爬GitHub上的commit记录,找那些不小心提交的API密钥。还有人写脚本监控厂商的更新日志,一有新版本就自动diff,找补丁对应的漏洞点。这些活,用Java或者Go也能干,但Python写起来就是快。你不需要编译,改一行跑一行,调试成本极低。
具体说个案例。某次我拿到一个目标,是个小型的物联网设备管理后台。登录处有验证码,但验证码是前端生成的,后端只检查了cookie里的一个标志位。我打开浏览器开发者工具,看了下请求,发现验证码的校验逻辑完全在JS里。也就是说,我只要把cookie里的captcha_verified改成true,就能绕过验证码。用Python写个脚本,先请求登录页面拿cookie,然后修改cookie值,再暴力破解密码。字典跑了5分钟,密码是admin123。进去之后发现设备固件上传功能没有文件类型校验,直接传了个PHP webshell,服务器权限就到手了。
当然,Python也不是万能的。有些漏洞需要处理复杂的加密和签名,比如某些APP的API,请求参数用AES加密,还带时间戳和nonce。这时候你得先把加密逻辑逆向出来,再用Python实现一遍。我做过一个,APP用了魔改的Base64,把字母表打乱了。逆向APK花了两小时,写Python解密脚本花了半小时,最后跑字典又花了半小时。整个过程很枯燥,但拿到数据的那一刻,值了。
还有一点,别用Python去挖大厂的漏洞。大厂有WAF,有风控,你脚本跑太快直接IP被封。我一般会加个随机延时,或者用代理池。但代理池也不便宜,所以更多时候是手工测逻辑漏洞,Python只用来做重复性的验证。比如发现一个越权,手动确认后,写个脚本遍历所有用户ID,看看能拉到多少人的数据。这种活,Python干最合适。
最后说个坑。Python的requests库默认会跟随重定向,有时候你发个POST,它给你转成GET,参数全丢了。得手动设置allow_redirects=False。还有,有些网站会检查User-Agent和Referer,不加就返回403。这些细节,写脚本的时候不注意,跑半天都出不来结果。我习惯在脚本开头定义好headers,把常见的浏览器头都带上。省事。
挖漏洞这件事,工具只是辅助,思路才是关键。Python给了你一把趁手的刀,但往哪砍,得你自己判断。别指望一个脚本通杀所有站,那不现实。多动手,多踩坑,慢慢就有感觉了。