Tryhackme Upload Vulnerabilities靶场
(1)这个靶场是让我们访问jewel.uploadvulns.thm,在此之前先在本地配置域名解析,在以下文件:
windows:C:\Windows\System32\drivers\etc\hosts
linux:/etc/hosts
添加以下字段:
<你的ip> jewel.uploadvulns.thm
或者:在代理软件如burpsuite里添加域名解析,这里不再赘述
(2)下载题目给出的文件名列表,后面要用

2.解题思路
首先用gobuster扫描网站后台

发现几个有用的目录,这里主要看admin可以访问,看提示框应该是执行上传的文件

再看网站主页的源码查看有没有前端校验
发现引用了以下js代码,这样的话就先考虑客户端绕过
$(document).ready(function(){let errorTimeout;const fadeSpeed=1000;function setResponseMsg(responseTxt,colour){$("#responseMsg").text(responseTxt);if(!$("#responseMsg").is(":visible")){$("#responseMsg").css({"color":colour}).fadeIn(fadeSpeed)}else{$("#responseMsg").animate({color:colour},fadeSpeed)}clearTimeout(errorTimeout);errorTimeout=setTimeout(()=>{$("#responseMsg").fadeOut(fadeSpeed)},5000)}$("#uploadBtn").click(function(){$("#fileSelect").click()});$("#fileSelect").change(function(){const fileBox=document.getElementById("fileSelect").files[0];const reader=new FileReader();reader.readAsDataURL(fileBox);reader.onload=function(event){ const text={success:"File successfully uploaded",failure:"No file selected",invalid:"Invalid file type"};$.ajax("/",{data:JSON.stringify({name:fileBox.name,type:fileBox.type,file:event.target.result}),contentType:"application/json",type:"POST",success:function(data){let colour="";switch(data){case "success":colour="green";break;case "failure":case "invalid":colour="red";break}setResponseMsg(text[data],colour)}})}})});
绕过方式:首先用burp抓包,然后刷新,注意:这里有个要点,当抓包刷新页面时最好用ctrl+f5强制刷新(为了不使用本地缓存),否则会返回304状态码表示使用本地缓存,下面先给出错误示范
这步是正确流程

但如果抓的包是直接刷新(如在搜索栏直接回车),出现以下情况抓不了下一次系统的响应包,就拦截和修改不了响应包
点击一次放包出现以下情况

正确操作是点击抓包后,ctrl+f5强制刷新页面

还有一点,这里的upload上传文件的js不能直接删除,这会影响上传逻辑从而无法上传文件,所以我们需要修改js删除过滤,但保留上传功能,burp默认不抓js后缀的响应包我们需要设置抓js包
添加以下配置

在我们放完上一个包后,后面就会紧跟所有js文件,如下(受环境影响可能会抓一些其他包,根据自己环境只看我们想要的域名相关的包

重点关注upload那个包,删除以下内容,然后就可以放完所有包了,也可以直接关闭抓包

接下来,生成webshell,我用的是msfvenom生成的,如下

cp复制一份shell如下

注意这里不能在内容里加图片文件头,好像nodejs只会处理符合其语法格式的文件,反而不会根据某些后缀解析(当然也要根据解析器的具体解析方式来判断)
接下来直接上传文件,也不用更改后缀名
上传后用gobuster爆破content目录下我们上传的文件名,由于上传到后台后,服务器给我们随机命名了,所以要用到题目给出的字典,如下:(可以根据自己的环境调线程,用-x筛选jpg格式文件)

这里有很多图片是我前面测试使用的,根据我前面错误上传的没用的文件对比,这里我成功的能被正确解析的文件是TVZ.jpg
接下来就是解析执行问题了
首先用nc开启一个监听端口(根据自己创建的shell脚本监听):

然后找到先前爆破的可以执行文件的目录admin下,这里由于是在admin下,admin和content都是二级目录,我们用../来目录遍历到上一级目录,再输入content进入到想要查询的目录

执行即可反弹shell获取flag

最后环境还提示还原我们前面编辑的域名解析文件
在 Linux 或 MacOS 上:
sudo sed -i '$d' /etc/hosts
在 Windows 上:
(GC C:\Windows\System32\drivers\etc\hosts | select -Skiplast 1) | SC C:\Windows\System32\drivers\etc\hosts

浙公网安备 33010602011771号