小迪安全笔记-21

第21天:WEB攻防-JavaWeb项目&JWT身份攻击&组件安全&访问控制

知识点:

1.JavaWeb常见安全及代码逻辑
通过URL信息来对应源码文件。没有代码的情况下很难渗透。
2.目录遍历&身份验证&逻辑&JWT
3.访问控制&安全组件&越权&三方组件

JavaWeb-WebGoat8靶场搭建使用

• 下载地址:https://github.com/WebGoat/WebGoat/releases,下载webgoat-server-8.2.2.jar

• 压缩到jar包里面。
• 如何启动:安装jdk,运行 java -jar webgoat-server-8.1.0.jar –server.port=8091
• 访问127.0.0.1:9091/WebGoat/login,注册账号登录就可以了。

安全问题-目录遍历

第二关

关键代码:

1
2
3
publicAttackResultuploadFileHandler(@RequestParam("uploadedFile")MultipartFilefile,@RequestParam(value="fullName",required=false)StringfullName){
returnsuper.execute(file,fullName);
}

修改上传数据包:

1.png

第三关:

../ 被过滤,之前讲过,可以双写绕过

关键代码:

2.png

把fullname修改为:…/./test

安全问题 - 身份认证

3.png

键名—键值,从多个问题中随机选出2个问题来验证:

问题s0:你的名字?—刘迪

问题s1:你的出生地?—湖北

给服务器发送数据 s0=xiaodi&s1=湖北 则验证通过

绕过:

不固定的接收数据:数据库存在s0和s1的键名,数据库不存在s3和s4,攻击者通过s3=null&s4=null发送数据,因为s3 s4本来就为空,相当于NULL,那么就能进行绕过。

4.png

固定的接收数据:如果服务器只接收固定键名,s1和s1,再判断s0和s1的值,就没法绕过

安全问题 - JWT

使用JSON Web令牌(JWT)进行身份验证(java和python运用较多)

https://www.cnblogs.com/yokan/p/14468030.html

JWT 令牌由三个部分组成,分别是 标头(Header)、有效载荷(Payload)、签名(Signature),并且由 “.” 分割.

类似于 xxxx.yyyy.zzzzz ,也就是 Header.Payload.Signature

jwt解密平台:

https://jwt.io/

JWT的攻击方式:

1.空加密算法

2.爆破

3.KID

空加密算法

空加密算法的设计初衷是用于调试的,但是如果某天开发人员脑阔瓦特了,在生产环境中开启了空加密算法,缺少签名算法,jwt保证信息不被篡改的功能就失效了。

空加密算法,可以在header中指定alg为None,把签名设置为空(即不添加signature字段),这需要服务器(后端代码)支持不要秘钥签名(空模式加密)

5.png

密钥爆破

直接找工具

https://github.com/ticarpi/jwt_tool

修改KID参数

jwt.jpg

安全问题-访问控制&安全组件-第三方组件

在百度查找相关漏洞,进行测试

6.png

访问控制

隐藏属性:前端页面选择性的展示某些信息(隐藏某些重要的信息)

水平越权:同一级别用户权限的查看