实验环境:php和burp suite
实验步骤:
一、文件上传——js验证
html代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<meta charset="utf-8">
</head>
<body>
<form action="fileupload.php" onsubmit="return checkupload();" method="POST"enctype="multipart/form-data">
<input type="file" id="uploadfile" name="uploadfile">
<input type="submit">
</form>
<script type="text/javascript">
function checkupload(){
//判断文件类型
//1.获取文件名
//document.getElementById 在html中通过id属性获取标签
var filetag=document.getElementById("uploadfile")
var filename=filetag.value;
//2.从文件名上截取后缀名
//a.获取最后一个点出现的位置
var lastpos=filename.lastIndexOf(".");
//b.通过.截取文件
var ext = filename.substring(lastpos+1);
//3.判断后缀名,如果不是jpg 阻止表单的提交
if (ext !="jpg"){
alert("文件类型错误,上传失败");
return false;
}
}
php代码如下:
<?php
header("Content-Type:text/html;charset=utf-8");
if (isset($_FILES["uploadfile"])){
$uploadfile=$_FILES["uploadfile"];
//将上传的文件从临时目录移动到当前web目录(当前目录下的uoload目录)
$filename=$uploadfile["tmp_name"];
$destination="upload/".$uploadfile["name"];
//上传中文件名乱码 将文件名从utf-8编码转换为gbk编码
$destination=iconv("utf-8","gbk",$destination);
//问题2 上传一些文件报错 上传的路径采用绝对路径
move_uploaded_file($filename,$destination);
}
执行html代码
1.上传的是jpg格式的文件:
运行结果如下,图片成功上传:
2.如果上传php文件
运行结果如下,文件上传失败:
二、如何绕过js验证,成功上传php文件
方法一:打开火狐浏览器,输入about:config,点击显示全部
输入java,找到javascript.enabled,双击true,改为false,如下图所示:
再次上传php文件,上传成功
方法二:利用bp抓包,修改数据
首先可先将php文件的后缀改成jpg格式,让其通过前端的验证
打开bp,进行抓包,抓包成功,并将文件后缀名改为php,按forwars按钮,即可上传成功