- JavaWeb常见安全及代码逻辑:
- 通过URL信息来对应源码文件,没有代码的情况下很难渗透。
- 目录遍历、身份验证、逻辑和JWT是常见的安全问题。
- 目录遍历攻击:
- 解决问题:当前目录不能执行,上传至别的目录进行执行脚本。
- 上传上去的地址和目标地址需要仔细考虑。
- JWT身份攻击:
- JWT(Json Web Token)遵循JSON格式,将用户信息加密到token里,服务端不保存用户信息,只保存密钥信息。
- 对比cookie解密平台:JWT.io。
- 访问控制和安全组件:
- 固定接受的数据:s0、s1判断你的数据正常。
- 不固定:s2、s3不在数据库或者变量内,攻击者就能测试。
- URL触发连接,访问地址:auth-bypass/verify-account。
- 第三方组件安全:
- Log4j2漏洞。
JWT原理及常见攻击方式
JWT的全称是Json Web Token。它遵循JSON格式,将用户信息加密到token里,服务器不保存任何用户信息,只保存密钥信息,通过使用特定加密算法验证token,通过token验证用户身份。基于token的身份验证可以替代传统的cookie+session身份验证方法。
JSON Web Tokens 由三部分组成,用点(.)分隔,它们是:
- Header
- Payload
- Signature
因此,JWT 通常如下所示。
xxxxx.yyyyy.zzzzz
其中,xxxxx是头部,yyyyy是载荷,zzzzz是签名部分。
生成规则如下:
1、Header:
通常包含令牌类型(JWT)和所使用的签名算法(例如HMAC SHA256或RSA)。
例如:
{ "alg": "HS256", "typ": "JWT" }
然后,将此 JSON 进行 Base64Url 编码,形成 JWT 的第一部分。
2、Payload:
包含声明(claims)。声明是关于实体(通常是用户)和其他数据的陈述。有三种类型的声明:注册声明、公共声明和私有声明。
- Registered claims(注册声明):这些是一组预定义的声明,虽然不是强制性的,但建议使用,以提供一组有用且可互操作的声明。其中一些包括:iss(发行者)、exp(过期时间)、sub(主题)、aud(受众)等。请注意,声明名称仅为三个字符,因为JWT旨在紧凑。
- Public claims(公共声明):这些可以由使用JWT的人自行定义。为避免冲突,它们应在IANA JSON Web Token Registry中定义,或者定义为包含抗冲突命名空间的URI。
- Private claims(私有声明):这些是自定义的声明,用于特定应用场景,不会与其他人冲突
例如:
{ "sub": "1234567890", "name": "John Doe", "admin": true }
然后对Payload进行 Base64Url 编码,形成 JSON Web 令牌的第二部分。
3、Signature :
把前两段的base密文通过.
拼接起来,然后对其进行HS256加密,再然后对hs256密文进行base64url加密,最终得到token的第三段。
例如,如果您想要使用 HMAC SHA256 算法,签名将按以下方式创建:
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret(密钥))
最后将三段字符串通过 .
拼接起来就生成了jwt的token
以下显示了一个 JWT,其中包含先前 header和payload的编码,并使用秘钥进行签名。
JWT的攻击方式:
JWT原理及常见攻击方式 - yokan - 博客园 (cnblogs.com):JavaWeb项目&JWT身份攻击&组件安全&访问控制JavaWeb靶场
WebGoat基于JAVA开发,当前提供的训练课程有30多个,其中包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操作隐藏字段、操纵参数、弱会话cookie、SQL盲注、数字型SQL注入、字符串型SQL注入、WEB服务、Open Authentication失效、危险的HTML注释等等。
WebGoat提供了一系列WEB安全学习的教程,某些课程也给出了视频演示,指导用户利用这些漏洞进行攻击。
环境下载地址GitHub - WebGoat/WebGoat: WebGoat is a deliberately insecure application
Comments NOTHING