安全Web日记文件下载漏洞&逻辑越权漏洞&密码爆破&WebGoat靶场
- 1、文件下载漏洞
- 2、逻辑越权漏洞
- 3、密码爆破
- 4、WebGoat靶场
- 4.1、WebGoat靶场搭建
- [4.2、HTTP Basics-Http基础](#4.2、HTTP Basics-Http基础)
- [4.3、HTTP Proxies-Http协议](#4.3、HTTP Proxies-Http协议)
- [4.4、Developer Tools-开发工具](#4.4、Developer Tools-开发工具)
- [4.5、Crypto Basics-加密基础](#4.5、Crypto Basics-加密基础)
- [4.6、JWT tokens](#4.6、JWT tokens)
- [4.6.1、题4-Decoding a JWT token](#4.6.1、题4-Decoding a JWT token)
- [4.6.2、题6-JWT signing -重置空加密算法](#4.6.2、题6-JWT signing -重置空加密算法)
- [4.6.3、题11-JWT cracking-暴力破解](#4.6.3、题11-JWT cracking-暴力破解)
- [4.7、Path traversal-路径绕过](#4.7、Path traversal-路径绕过)
- [4.8、Insecure Direct Object References-不安全的直接对象引用](#4.8、Insecure Direct Object References-不安全的直接对象引用)
1、文件下载漏洞
1.1、pikachu


对比:
bash
请求地址:http://pikachu.shifa23.com/vul/unsafedownload/execdownload.php?filename=kb.png
存放地址:http://pikachu.shifa23.com/vul/unsafedownload/download/kb.png
# 通过上面两个地址我们可以测试文件下载漏洞
下载漏洞:http://pikachu.shifa23.com/vul/unsafedownload/execdownload.php?filename=../execdownload.php
根据上面的分析通过链接下载到了文件execdownload.php
2、逻辑越权漏洞
越权漏洞是比较常见的漏洞类型,越权漏洞可以理解为,一个正常的用户A通常只能够对自己的一些信息进行增删改查,但是由于程序员的一时疏忽未对信息进行增删改查的时候没有进行一个判断,判断所需要操作的信息是否属于对应的用户,可以导致用户A可以操作其他人的信息。
- 水平越权(同级别越权):也叫作访问控制攻击。A 账号获取(修改等)B 账号数据
- 垂直越权(跨机别越权):垂直权限攻击又叫做权限提升攻击。使用低权限身份的账号,发送高权限账号才能有的请求,获得其高权限的操作

2.1、水平越权
- 登录账号:
lili/123456
,点击查看个人信息

- 将数据包的用户名从
lili
改为kobe

发现查询到了kobe的信息,存在水平越权。
2.2、垂直越权
使用管理员的cookie,来替换普通用户cookie构造数据包,就可以达到垂直越权。
不过目前校验使用token的话,就比较难来使用到垂直越权了。
Tips:第35天-Web漏洞-逻辑越权之找回机制及接口安全
笔记:https://www.yuque.com/weiker/xiaodi/anrxmi27wou62ada
3、密码爆破
这里我以若依不分离为例:
- 登录若依,启用BP抓包,将包发送到
intruder
,在 password 处添加 payload

- 点击payload,可以设置字典,如果需要设置密码MD5加密,也可以设置

- 开始攻击

其实在这块发现返回的状态码都是200,查看响应,对于正确的响应code显示是0,错误的是500,可以作一个区分。
4、WebGoat靶场
4.1、WebGoat靶场搭建
可以采用Docker搭建,也可以采用Windows搭建,这里记录下Windows搭建记录:
- 电脑需具备jdk17或者jdk21
- 下载jar包
- 运行jar包
bash
java -Dfile.encoding=UTF-8 -jar webgoat-2023.8.jar
访问:
- WebGoat靶场:127.0.0.1:8080/WebGoat/login
- WebWolf靶场:127.0.0.1:9090/WebWolf/login

进来后先注册账户。superadmin/superadmin
4.2、HTTP Basics-Http基础
4.2.1、题3
本题介绍查看请求使用了什么类型的HTTP命令。解题方式如下:
- F12打开浏览器开发者工具,选择Network,点一次Go,查看attack2的请求方式和请求参数
- 请求方式为Post
- 从请求数据包里面可以看到 magic_num 的值



4.3、HTTP Proxies-Http协议
4.3.1、题5
- 点击 Submit,BP抓包。
- 将请求方法改为 GET
- 添加请求头:
x-request-intercepted:true
- 将请求体的 changeMe 的值改为
Requests are tampered easily

4.4、Developer Tools-开发工具
4.4.1、题4
- F12打开开发者工具,切换到 console,输入
webgoat.customjs.phoneHome()
,回车 - 获得随机的 phoneHome Response 数值,填入输入框
- 点击Submit,即可通关

4.4.2、题6
- F12打开开发者工具,切换到 network,点击Go
- 查看 network 的请求,从 payload 中找到 networknumbber
- 填入输入框,点击check,即可通关

4.5、Crypto Basics-加密基础
4.5.1、题2
题目是一个base64解密,给了Authorization: Basic c3VwZXJhZG1pbjpwYXNzd29yZA==
,我们只需要复制Basic之后的那段进行解密,就可以得到答案。
4.6、JWT tokens
4.6.1、题4-Decoding a JWT token
使用Base64解码token即可。
4.6.2、题6-JWT signing -重置空加密算法
尝试更改token,并通过更改token成为管理员用户。
- 选择一个用户(Tom),点一下右边的回收站按钮(重置)。获得重置请求的链接。发送到repeater

- 将请求数据包的
access_token
提取出:
bash
eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE3MjU1MjE5OTIsImFkbWluIjoiZmFsc2UiLCJ1c2VyIjoiVG9tIn0.Ro48zaBh7maFkhbpJRAYCsURYaHfqFbfPEZGgXTPK-d7FyFsOGH2EpF4fCn_X4jMb3CgeSkQoTPbeqvgwMwtbw
Base64反解码出第一段头部header和第二段声明claims,第三段是签名:
bash
# header
{"alg":"HS512"}
# claims
{"iat":1725521992,"admin":"false","user":"Tom"}
alg的值是可以为none的,也就是不加密签名,这样签名的值就可以留空。将claims的admin
改为true
bash
# header
{"alg":"none"}
# Base64编码后得到
eyJhbGciOiJub25lIn0=
bash
# claims
{"iat":1725521992,"admin":"true","user":"Tom"}
# Base64编码后得到
eyJpYXQiOjE3MjU1MjE5OTIsImFkbWluIjoidHJ1ZSIsInVzZXIiOiJUb20ifQ==
编码解码网站:https://jwt.io/#encoded-jwt
二者组合,注意将=
等号均删掉,并且按照JWT的结构加上点.
bash
# 注意最后那个点不能少
eyJhbGciOiJub25lIn0.eyJpYXQiOjE3MjU1MjE5OTIsImFkbWluIjoidHJ1ZSIsInVzZXIiOiJUb20ifQ.

4.6.3、题11-JWT cracking-暴力破解
给出了一个jwt的token,让修改token里面的账户为WebGoat然后重新加密后提交,因为token的第三部分是header和payload的base64然后加上秘钥hash的结果,hash的算法通过header部分就只能得到,所以需要爆破秘钥
- token的第三部分签名,需要用到hashcat工具来暴力破解。我所在的环境是Windows环境,介绍下Windows环境下的hashcat工具的使用。首先进入github下载:hashcat v6.2.6

- 暴力破解肯定得爆破的字典密钥,这里可以使用 google 提供的作为字典:google-10000-english

- 解压下载的hashcat,进入目录,将
20k.txt
复制进去,并且新建hash.txt
,将我们需要爆破的token写入

- 在hashcat的目录下进入cmd
bash
hashcat.exe -m 16500 hash.txt -a 3 -w 3 20k.txt --force
-m 16500
:这里的16500对应的就是jwt的token爆破-a 3
:代表蛮力破解-w 3
:高速破解hash.txt
: 存放需要爆破的token20k.txt
:字典
我这里爆破了四千多还没成功,就不爆破了,拿到密钥后写入,生产的token提交即可。

4.7、Path traversal-路径绕过
4.7.1、题2
这关要求传个文件到目录C:\Users\Augenestern/.webgoat-2023.8/PathTraversal
下,自己上传的话其实会上传到C:\Users\Administrator\.webgoat-8.1.0\PathTraversal\fancyele
,比我们的目标路径多一级目录fancyele
。
- 可以尝试将照片的名字 Full Name 改为
../xxx.jpg
,然后点击 update,这样就可以把这张图片传到上级文件夹PathTraversal下
4.7.2、题3
这关的要求和上一关一样,要传个文件到目录C:\Users\Administrator\.webgoat-8.1.0\PathTraversal
下面,但是提示../
会被删除掉。看到删除,一下子就想到双写绕过,在Full Name处构造双写:..././xxx.png
。
4.7.3、题4
还是要求传个文件到目录C:\Users\Administrator\.webgoat-8.1.0\PathTraversal
下面,但是这次上传发现文件名是固定的,和 Full Name 的值没有关系。
-
随便上传图片,使用BP抓包
-
修改filename,
../profile.jpg
,过关

4.8、Insecure Direct Object References-不安全的直接对象引用
4.8.1、题3
这个题的意思是返回的部分东西显示在浏览器,但是还有其他未显示在浏览器,让我们找到未显示的部分。可以观察到只有5个属性,只有role 和userid是隐藏未显示的属性。

后面的关就不打了,参考几个大佬文章: