小迪安全21WEB 攻防-JavaWeb 项目JWT 身份攻击组件安全访问控制

#知识点:

1JavaWeb 常见安全及代码逻辑

2、目录遍历&身份验证&逻辑&JWT

3、访问控制&安全组件&越权&三方组件


Java:大部分都是第三方插件出现漏洞

webgoat的搭建:——java靶场

JDK版本要求:11.0以上

需先启动webgoat-server:java -jar webgoat-server-8.1.0.jar --server.port=8080

然后访问http://127.0.0.1:8080/WebGoat,进行登录/创建

账号:atwood

Pw:123456


通过路径注入进行说明

本题只:需上传图片,路径需要再指定的路径下

通过直接上传,得知,上传的文件位置

通过bp进行抓包

通过对应的url中的地址,找到对应的文件

.jar:也是一个封装模式

通过反编译,可以获得从中的文件

先看文件中的配置文件

再看包,找到对映的包,点击添加到库,即将包解压开

找到配置文件,发现与POST中的地址一样,因此可知道此页面为数据文件

对数据的操作的代码

查看bp,进行对照

再根据直接上传的文件进行分析得知,我们输入的Fullname会直接为文件名进行上传,若要上传到指定的文件位置的话,可以进行数据更改

更改成功,因此完成本题要求

需要往前进2个文件../test

还有些对其进行了一定的过滤

可通过双写绕过等


身份验证

根据POST中的文件路径进行查找

验证结果(静态)

分析:

验证问题:

Question1:xxx?

Question2:xxx?

以字典的形式进行传送,接收键名 键值

即:question1=xx&question2=xx——先是键名正确,后键值正确——验证成功

固定的接受数据:question1、question2判断验证数据

不固定的:

写入问题本身以外的:

Question3=xxx&Question4=xxx——不存在

数据库会判断他们为question3=null&question4=null

若数据库没有对数据值为null进行异常捕获,则会直接通过

正常输入

进行参数更改

通过


JWT缺陷

Json web令牌进行身份验证——通常是对JAVA、Python的web应用程序进行运用

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

jwt由三个部分组成:header.payload.signature

如果判断网站用JWT进行验证

通过bp抓取数据包,看Cookie头,由.连接的三段字符串组成。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.

eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ

.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

以base64加密

解密地址:JSON Web Tokens - jwt.io

若要成为管理员账户,则需对admin的值改为true,并加密将此值放到bp中替换掉以前的参数——这种思路是不对的,要考虑到签名之类的

攻击方式一:

空密钥算法破解:

将对alg的值改为None,即让此算法失效,只有两段有效字符串(header+'.'+payload,去掉了'.'+signature字段)

JWT是支持None值的,一般都用来进行调试。

生成字符串:算法模式+密匙

每一个字符串的生成都会伴随着一些密钥、签名等,所以如果我们直接对admin的值进行更改,是改不成的,因为我们没有密钥;那么我们可以不要密钥去生成,需要服务器的支持,这就是空密钥算法加密

如何判断服务器是否支持空密钥呢?

Bp抓包,查后端文件,进行分析

最后对alg值设为None,admin值为true,再进行base64加密

2.爆破

对JWT解析

得到后,发现密钥是不知道的,只有找到了正确的密钥,字符串生成才是正确的

利用相关工具进行破解(一般是字典爆破):

a.一个脚本

b.相关工具:c-jwt-cracker

破解之后,

查看文件中显示已经设置好的算法密钥

c.KID攻击

Kid是JWT header中的一个可选参数,用于指定加密算法的密钥

从而暴漏出了三个漏洞安全:

A.任意文件读取

B.SQL注入

C.命令注入

https://www.cnblogs.com/HAN91/p/14585449.html


安全组件:

组件:java库和JavaScript库等

通过bp抓包,查找对应的文件位置

查看对应的组件:

判断是第三方库还是java自身的库

1.这种就明显为java自身的库了

2.这种则为第三方库

查看第三方库,收集信息

查到历史漏洞

CVE 2013-7285 Poc——对其漏洞进行利用:对此服务器进行植入木马

<sorted-set><string>foo</string><dynamic-proxy><interface>java.lang.Comparable</interface><handler class="java.beans.EventHandler"><target class="java.lang.ProcessBuilder"><command><string>calc.exe</string> ——启动服务器的计算器</command></target><action>start</action></handler></dynamic-proxy></sorted-set>

如:最近的Log4j2

访问控制:

-隐藏属性:前端页面的自卫限制显示

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

Java通常都是爆中低危的漏洞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/434628.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[01 LinuxShell ] 清华大学电子系科协软件部2023暑期培训

清华大学电子系科协软件部2023暑期培训_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV11N4y187ZE/?spm_id_from333.1007.top_right_bar_window_custom_collection.content.click&vd_source3ef6540f8473c7367625a53b7b77fd66 本视频为清华大学电子系科协软件部2023…

领域驱动设计(Domain-Driven Design DDD)——通过重构找到深层次模型1

一、概述 重构就是在不改变软件功能的前提下重新设计它。开发人员无需在着手开发之前做出详细的设计决策&#xff0c;只需要在开发过程中不断小幅调整设计即可&#xff0c;这不但能够保证软件原有的功能不变&#xff0c;还可使整个设计更加灵活易懂。 我们面临的真正挑战是找到…

Vue3中的ref和shallowRef、reactive和shallowReactive

一&#xff1a;ref、reactive简介 ref和reactive是Vue3中定义响应式数据的一种方式。ref通常用来定义基础类型数据。reactive通常用来定义复杂类型数据。 二、shallowRef、shallowReactive简介 shallowRef和shallowReactive是Vue3中定义浅层次响应式数据的方式 三、Api使用对比…

套接字的多种可选项(修改IO缓冲区大小及TCP_NODELAY)

标题套接字的多种可选项 我们进行套接字编程时往往只关注数据通信&#xff0c;而忽略了套接字具有的不同特性。但是&#xff0c;理解这些特性并根据实际需要进行更改也十分重要。 从上表可以看出&#xff0c;套接字可选项是分层的。IPPROTOIP层可选项是IP协议相关事项&#x…

【JavaSE篇】——数组的定义与使用

目录 本章的目标&#xff1a; &#x1f388;数组的基本概念 &#x1f36d;创建数组 &#x1f36d;数组的初始化 &#x1f36d;数组的使用 &#x1f449;数组中元素访问 &#x1f449;遍历数组 &#x1f388;数组是引用类型 &#x1f36d;初始JVM的内存分布 &#x1f…

2024017期传足14场胜负前瞻

2024017期赛事由亚洲杯2场、英总杯2场、德甲2场、意甲4场、西甲4场组成。售止时间为1月28日&#xff08;周日&#xff09;19点00分&#xff0c;敬请留意&#xff1a; 本期深盘场次同样适中&#xff0c;1.5以下赔率3场&#xff0c;1.5-2.0赔率6场&#xff0c;其他场次基本皆是平…

Java复习系列之阶段二:数据库

1. 基础语法 1.1 DQL&#xff08;数据查询语句&#xff09; 执行顺序&#xff1a; from、join 、on、where、group by、having、select、distinct、order by、limit 1.2 DML&#xff08;数据修改语言&#xff09; 对数据表的增删改 insert into update set delete form 1.…

javax.servlet.http包

javax.servlet.http包 javax.srvlet.http包是对javax.servlet包的扩展。该包的类和接口处理使用HTTP进行通信的servlet。这些servlet也称为HTTP Servlet。您需要扩展HttpServlet类来开发HTTP Servlet。javax.servlet.http包经常使用的接口包括: HttpServletRequest接口HttpSe…

Java 基础 - 反射

Java 基础 - 反射 文章目录 Java 基础 - 反射1 什么是类对象2 获取类对象的方法3 反射通用操作【重点】3.1 常见方法3.2 通用操作 4 内省 1 什么是类对象 类的对象&#xff1a;基于某个类 new 出来的对象&#xff0c;也称为实例对象。 类对象&#xff1a;类加载的产物&#x…

第9章 多线程

第9章 多线程 学习目标 了解进程和线程的区别 能够理解并发与并行的区别 能够使用继承类的方式创建多线程 能够使用实现接口的方式创建多线程 能够说出实现接口方式的好处 能够解释安全问题的出现的原因 能够使用同步代码块解决线程安全问题 能够使用同步方法解决线程安全问题…

滴水逆向三期笔记与作业——02C语言——10 Switch语句反汇编

滴水逆向三期笔记与作业——02C语言——10 Switch语句反汇编 一、Switch语句1、switch语句 是if语句的简写2、break加与不加有什么特点?default语句可以省略吗&#xff1f;3、游戏中的switch语句&#xff08;示例&#xff09;4、添加case后面的值&#xff0c;一个一个增加&…

Java笔记 --- 二、Stream流

二、Stream流 结合Lambda表达式&#xff0c;简化集合、数组的操作 获取Stream流对象 单列集合获取Stream流 双列集合获取Stream流 数组获取Stream流 一堆零散的数据获取Stream流 Stream流的静态方法of的形参是一个可变参数&#xff0c;可以传递零散数据&#xff0c;也可以传递…