题目提示
打无密码的mysql为什么是无密码呢? https://paper.seebug.org/510/ MySQL客户端连接并登录服务器时存在两种情况:
需要密码认证以及无需密码认证。当需要密码认证时使用挑战应答模式,
服务器先发送salt然后客户端使用salt加密密码然后验证;当无需密码认证时直接发送TCP/IP数据包即可。
所以在非交互模式下登录并操作MySQL只能在无需密码认证,未授权情况下进行,
本文利用SSRF漏洞攻击MySQL也是在其未授权情况下进行的。
首先打开题目发现是登录框,理所当然抓个包看看
可以看到有两个可以利用到的参数
利用returl参数请求一下百度发现可以
一般 SSRF 打内网应用主要还是通过协议,比如用的比较多的是 gopher
具体怎么做呢?
细心的同学可能发现,无论是用 gopher 攻击 redis、mysql、还是 ftp,这些主要都是基于 tcp 协议为主。这和 gopher 协议的基本格式有关
gopher://<host>:<port>/<gopher-path>_后接TCP数据流
因为,如果想要打 MySQL 就需要知道 MySQL 通信时的 TCP 数据流,才能知道要怎么和 MySQL 通信,这里可以通过 Wireshark 抓包来分析
不过这里有个更好用的工具
https://github.com/tarunkant/Gopherus
他包含常见的应用 gopher 数据包的格式构造, 原理也是通过 Wireshark 抓包分析,然后写脚本。
当然,除了满足MySQL未授权外,还需要MySQL开启允许导出文件以及知道网站根目录,本漏洞才能成功利用,缺一不可。
这个 <font style="color:rgb(232, 62, 140);background-color:rgb(246, 246, 246);">/var/www/html</font>
目录是如何知道的呢?应该是爆破的…
生成的 POC 里,<font style="color:rgb(232, 62, 140);background-color:rgb(246, 246, 246);">_</font>
字符后面的内容还要 URL编码一次,因为 PHP接收到POST或GET请求数据,会自动进行一次URL解码,然后,比如 %00 解码后,PHP会直接截断。。