phpMyAdmin 之弱口令爆破~
前言
在网上找了一圈,发现phpMyAdmin的弱口令爆破工具已经是好几年前的了:phpMyAdmin多线程破解工具,比较新的版本根本无法使用,并且存在无法自定义路径字典,无法多线程爆破等等问题
既然网上找的工具不顺手,那么直接自己写一个(Cursor)!此篇仅用作记载,并非奇技淫巧,毫无技术含量,主要太久没update了
分析
这里先拿phpStudy下载的phpMyAdmin4.8.5进行分析
可以看出首页没有什么变化的,但我们查看一下网页源码,发现
在所有的js文件后面存在?v=4.8.5
,这个就是phpMyAdmin具体的版本了
我们还可以通过访问/doc/html/index.html
获取版本信息:
相关的路径还有:
1 | /README |
等等,但不同版本可能存在差异
爆破逻辑
看一下登录成功的请求包
这里有一个参数token,很经典的CSRF防御:
每次加载登录页面时 token 都会改变。如果你的爆破脚本没有在每次尝试前先获取这个最新的 token 并随表单提交,那么所有的登录请求都会因“令牌错误”而失败,即我们再次请求就会发现登录失败了:
我们可以得到信息
1 | 登录成功的状态码:302 |
注意这里的requests需要设置allow_redirects=False
,获取跳转前的状态码
通过正则匹配获取到token和session
1 | token = re.search(r'(?<=name="token" value=")[^"]+', r.text) |
然后传参登录即可,这里的token有特殊字符,需要使用html.unescape
转义一下
phpmyadmin历史版本:https://www.phpmyadmin.net/files/
通过遍历,我们可以发现是在4.8.0之后增加了set_session参数,而在这之前是只有token的
phpMyAdmin-4.6.6:
phpMyAdmin-4.8.5:
这样我们区分一下版本,然后不同版本用不同的POST请求就可以了?
哪有这么简单,在测试版本phpMyAdmin-4.1.10的时候发现,在登录的时候不管正确与否都是直接302跳转的。。。
解决方案其实也很简单,在登录之后抓取这四个Cookie字段和token,传入302跳转中
如果响应中存在后台的一些敏感字段,则账号密码正确
未授权逻辑
我们需要先判断是否为未授权,然后再去执行爆破,我们看一下phpmyadmin后台的界面
这里给出当前的检测方案
1 | def check_unauthorized_access(self, response_text: str) -> bool: |
其实就是登录后的判断逻辑,检测关键词,如果存在则说明进入了后台界面,为未授权访问
总结
目前就到这里了,如果后续碰到了其他特殊版本再更新
工具:https://github.com/bmth666/phpMyAdminCrack
测了2天,修修补补,最终感觉还行,跑500个站,能跑出来1~2个弱口令。。。