一、文件上传漏洞
1、跨目录脚本执行
上传的脚本文件在网站存放上传文件的目录下被限制执行,于是我们把上传的脚本文件放到根目录去执行。
靶场情况:

如上图所示,假设的根目录为C:\Users\Administrator/.webgoat-2023.4/PathTraversal ,上传的图片目录为C:\Users\Administrator/.webgoat-2023.4/PathTraversal\cc12301 ,要求我们把图片test上传到根目录。
(1)查看源码发现没有过滤…\,那么尝试改图片保存时的名称为…\test,如下图

放行后图片被存入根目录,如下图(提示成功)

(2)查看源码有,\过滤,将…\过滤为空格,那么我们双写即可,如下图

二、身份验证
1、认证绕过
假设设置两个问题来验证身份,如下
seqQuetion1:1+1=?
seqQuetion12:1+2=?
当post请求提交 Q1=2&Q2=3时验证通过
问题所在:验证时同时接受键名和键值,来进行比对
绕过:那如果我们提交两个不存在的键值对呢?提交seqQuetion13=null&seqQuetion14=null,数据库里没有seqQuetion13和seqQuetion14,即值为null,此时验证通过,如下图

2、JWT token
JWT原理即使用:https://www.cnblogs.com/ryxiong-blog/p/12074556.html
JWT加解密:https://jwt.io/
(1)、如果后端代码支持,则可用空加密算法方式攻击
将alg(加密算法)字段改为none,将admin字段改为true,签名部分为空,将生成的JWT发回服务器
{
“alg”: “HS512”
}
{
“iat”: 1688404554,
“admin”: “false”,
“user”: “Tom”
}
{
算法、密钥
}
(2)后端验证签名的情况下,我们采取爆破密钥的方法
使用密钥字典和python脚本爆破密钥

有密钥以后即可修改其它字段,将生成的jwt发回服务器达到目的

(3)修改kid字段
header部分可能包括
{
“alg”: “HS256”
“type”: “jwt”
“kid” : “etc/passwd”
}
其中kid字段表示密钥存放文件
- 如果我们改路径,则导致任意文件读取
- 如果构造sql语句,则可能导致sql注入
- 如果通过某些函数来读取kid参数,则可能造成,命令注入
















