前端代码一共分为两部分,upload.html负责表单,upload.php负责上传处理
upload.html
<html>
<head>
<title>图片上传</title>
<script type="text/javascript">
function checkFile(){
var flag = false;//是否可以上传的标志位
var str = document.getElementById("file").value;//获取文件名
str = str.substring(str.lastIndexOf('.')+1);//得到扩展名
var arr = new Array('png','bmp','gif','jpg');//允许上传的扩展名
for (var i=0;i<arr.length;i++){
if(str==arr[i]){
flag = true;
}
}
if(!flag){
alert('文件不合法!');
}
return flag;
}
</script>
</head>
<body>
<form action="upload.php" method="post" οnsubmit="checkFile()" enctype="multipart/form-data">
<input type="file" name="file" id="file"/><br/>
<input type="submit" value="提交" name="submit" />
</form>
</body>
</html>
<?php
if(isset($_POST["submit"])){
$name = $_FILE['file']['name']; //接收文件名
$name = md5(date('Y-m-d h:m:s')).strrchr($name,".");//文件重命名操作,保留原有扩展名
$size = $_FILES['file']['size'];//接收文件大小
$tmp = $_FILES['file']['tmp_name'];//临时路径
move_uploaded_file($tmp,$name);//移动临时文件到当前文件目录
echo "文件上传成功!path:".$name;
}
?>
首先先上传一个图片文件,检测程序的功能
图片上传成功
接下来直接上传php文件,检验前端程序对文件的检查
程序检测出上传文件不是图片文件,显示文件非法
直接查看网页源代码,可以看见前端检查非法文件的javascript代码
接下来使用FireBug工具,删除οnsubmit="checkFile()",使得检验函数失效
上传php文件,结果成功
接下来利用Burp来绕过检查,先将php文件的后缀改为jpg
通过检查后,把后缀名改回来,改成php
结果上传成功
实验结束