文件上传类:-任意文件上传
知识回顾:
前端入门须知:轻松学会form表单制作
前端HTML基础之form表单
1、自己写的上传代码
HTML 中有个上传表单, PHP的$FILES函数会得到上传的文件的全部信息
文件上传后还需要移动文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form id="upload-form"action="" method="post" enctype="multipart/form-data">
<input type="file" name="upload" id="upload">
<input type="submit" value="Upload">
</form>
</body>
</html>
<?php
$name=$_FILES['upload']['name'];
$type=$_FILES['upload']['type'];
$size=$_FILES['upload']['size'];
$tmp_name=$_FILES['upload']['tmp_name'];
$error=$_FILES['upload']['error'];
echo $name."<br>";
echo $type."<br>";
echo $size."<br>";
echo $tmp_name."<br>";
echo $error."<br>";
?>
输出的是上传文件的各种属性。
把文件验证并进行移动
代码审计角度看是否有漏洞,就是看其验证过程是否完整
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form id="upload-form"action="" method="post" enctype="multipart/form-data">
<input type="file" name="upload" id="upload">
<input type="submit" value="Upload">
</form>
</body>
</html>
<?php
$name=$_FILES['upload']['name'];
$type=$_FILES['upload']['type'];
$size=$_FILES['upload']['size'];
$tmp_name=$_FILES['upload']['tmp_name'];
$error=$_FILES['upload']['error'];
echo $name."<br>";
echo $type."<br>";
echo $size."<br>";
echo $tmp_name."<br>";
echo $error."<br>";
//移动文件 ==== 进一步思考,先验证文件,再移动文件
if($type=='image/png'){
if(!move_uploaded_file($tmp_name,'upload/'.$name)){
echo "文件移动失败";
}else{
echo "文件移动成功";
echo '/upload/'.$name;
}
}else{
echo "文件类型不正确";
}
?>
PHP $_FILES函数详解
2、编辑器默认上传功能,如UEditor等
网站只是引用编辑器而已,核心的验证代码是属于编辑器本身的,如果编辑器本身没有漏洞,那就没办法了。框架与其类似,核心代码都是别人写好了的,并不是自己写的,那就得看编辑器或者框架本身有无漏洞了。老版本也许有。渗透测试的时候,先搞清楚,上传功能是编辑器呢还是框架还是自己写的,前者是公开发布的产品,后者是自己写的,每个人写来的都不一样,需要自己挨个测
文件上传类
1、自写代码验证上传 // 验证核心在代码里
2、引用外部编辑器实现上传 // 验证核心在编辑器
3、引用外部框架实现上传 //验证核心在框架
#文件下载类:-任意文件下载
1、直连 URL 访问
2、传参头部修改
#文件删除类-任意文件删除
1、文件删除
2、文件夹删除
#文件内容操作类-任意文件读取&写入
1、文件读取
2、文件写入
#文件包含-任意文件包含
1、本地文件包含
2、远程文件包含
#Web 漏洞核心:
1、可控变量
2、特定函数-函数的多样化