小伙伴们大家好!本期为大家带来的文件上传之绕过JS前端验证。
目录
这里我是自己写了两段代码做的一个小靶场,通过这个案例来讲解文件上传如何绕过JS的前端验证。
源码:
1.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JS检查文件后缀</title>
</head>
<body>
<script type="text/javascript">
function selectFile(file) {
var filename = file.value;
var mime = filename.toLowerCase().substr(filename.lastIndexOf("."));
if (mime != ".png") {
alert("请选择png格式的照片上传");
file.outerHTML = file.outerHTML
}
}
</script>
<center>
<form action="file01.php" method="post" enctype="multipart/form-data">
<label for="file">请上传png格式图片:</label>
<input type="file" name="file" id="file" onchange="selectFile(this)"/><br/>
<input type="submit" name="submit" value="上传" />
</form>
</center>
</body>
</html>
file01.php
<?php
if ($_FILES["file"]["error"] > 0) {
echo "Return Code:".$_FILES["file"]["error"]."<br/>";
} else {
echo "<center><br/>";
echo "upload: ".$_FILES["file"]["name"]."<br/>";
echo "type: ".$_FILES["file"]["type"]."<br/>";
echo "size: ".($_FILES["file"]["size"] / 1024)."<br/>";
echo "Temp file: ".$_FILES["file"]["tmp_name"]."<br/>";
if (file_exists("upload/".$_FILES["file"]["name"])) {
echo $_FILES["file"]["name"]." already exists. ";
} else {
move_uploaded_file($_FILES["file"]["tmp_name"],"upload/".$_FILES["file"]["name"]);
echo "Stored in: "."upload/".$_FILES["file"]["name"];
}
echo "</center>";
}
测试网站的功能是否正常
我们首先检查该网站的功能是否正常,看是否能够顺利的上传文件。
我们这里先上传一张png格式的图片
OK网站的功能正常可以成功实现文件上传。
尝试上传webshell
我们上传一下php类型的文件试一下,文件的内容为一句话木马。
通过抓包绕过JS验证
这样我们可以通过burpsuite抓包,修改数据包中的数据来绕过前端的JS验证。
我们先将2.php的后缀改为png格式,即:2.png
然后我们开启burpsuite抓包,选择文件上传。
这时候我们只需要将2.png再重新改为2.php就可以顺利绕过前端的JS验证了。
然后点击forward发送就行了。
回到浏览器我们看到,我们上传的php文件已经正常的上传成功。
通过修改前端的代码绕过JS验证
这里呢,我们还有另外一种方法,修改审查元素中的html的代码,将验证的那段代码删除掉即可。
使用webshell连接工具进行连接
接下来我们就可以使用中国菜刀或者中国蚁剑来接我们写的一句话木马(webshell)。
我这里使用的中国蚁剑。
我们输入上传的php文件的路径,填上连接密码即eval()函数里$_POST[x]接受的参数名x。然后测试一下连接,看是否连接成功,如果连接成功就代表我们成功拿到了目标站点的shell权限。
连接成功!选择添加,之后点进去。
成功的拿下站点。我们可以对里面的文件做任意操作。
总结
其实绕过前端JS验证非常的简单,因为前端只是规定了我们上传文件的格式类型即文件的后缀,我们只需要将我们想要上传的webshell文件的后缀名先改为前端允许的后缀名,然后通过抓包工具抓取数据包,在数据包的内容里再将文件的后缀名改为我们想要上传的文件后缀名即可。webshell上传成功之后,使用webshell连接工具(例如中国蚁剑、菜刀、冰蝎等...)进行测试连接,连接成功之后我们就顺利通过文件上传漏洞拿到了站点的权限。