文件上传漏洞基础
简介
简介
简介
简介
前端JS过滤绕过
文件名过滤绕过
1
Content-type过滤绕过
1
文件头过滤绕过
1
112222
.htaccess文件上传
htaccess上传是利用.htacess文件对web服务器进行配置的功能,实现将扩展名.jpg、.png等文件当作PHP文件解析的过程
.htaccess基础
.htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。
.htaccess是web服务器的一个配置文件,可以通过.htaccess文件实现web服务器中的文件的解析方式、重定向等配置
开启.htaccess配置
1.修改配置文件httpd.conf
Options FollowSymLinks AllowOverride None 修改为: Options FollowSymLinks AllowOverride All
2.去掉mod_rewrite.so的注释,开启rewrite模块
# LoadModule foo_module modules/mod_foo.so
漏洞复现
漏洞代码

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Upload Labs</title> </head> <body> <h2>Upload Labs</h2> <form action="index.php" method="post" enctype="multipart/form-data"> <label for="file">文件名:</label> <input type="file" name="upfile" id="file"><br> <input type="submit" name="upload" value="提交"> </form> <hr> <center>榆林学院信息安全协会 2020/2/29</center> </body> </html> <?php if(isset($_POST["upload"])){ $upfile=$_FILES["upfile"];</span><span style="color: #800080;">$name</span>=<span style="color: #800080;">$upfile</span>["name"]; <span style="color: #008000;">//</span><span style="color: #008000;">获取上传文件的文件名</span> <span style="color: #800080;">$type</span>=<span style="color: #008080;">substr</span>(<span style="color: #800080;">$name</span>,<span style="color: #008080;">strrpos</span>(<span style="color: #800080;">$name</span>,'.')+1); <span style="color: #008000;">//</span><span style="color: #008000;">获取上传文件的后缀</span> <span style="color: #800080;">$size</span>=<span style="color: #800080;">$upfile</span>["size"]; <span style="color: #008000;">//</span><span style="color: #008000;">获取上传文件的大小</span> <span style="color: #800080;">$tmp_name</span>=<span style="color: #800080;">$upfile</span>["tmp_name"]; <span style="color: #008000;">//</span><span style="color: #008000;">获取上传文件的临时存放路径 //通过正则表达式黑名单过滤php、php1、pjp3等但是我们可以上传.htaccess文件</span> <span style="color: #0000ff;">if</span>(<span style="color: #008080;">preg_match</span>('/php.*/i',<span style="color: #800080;">$type</span><span style="color: #000000;">)){ </span><span style="color: #0000ff;">echo</span> "<script>alert('不能上传php文件!');</script>"<span style="color: #000000;">; </span><span style="color: #0000ff;">die</span><span style="color: #000000;">(); }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{ </span><span style="color: #800080;">$error</span>=<span style="color: #800080;">$upfile</span>["error"<span style="color: #000000;">]; </span><span style="color: #0000ff;">echo</span> "====================<br>"<span style="color: #000000;">; </span><span style="color: #0000ff;">echo</span> "上传文件名称是:".<span style="color: #800080;">$name</span>."<br>"<span style="color: #000000;">; </span><span style="color: #0000ff;">echo</span> "上传文件类型是:".<span style="color: #800080;">$type</span>."<br>"<span style="color: #000000;">; </span><span style="color: #0000ff;">echo</span> "上传文件大小是:".<span style="color: #800080;">$size</span>."<br>"<span style="color: #000000;">; </span><span style="color: #0000ff;">echo</span> "上传后系统返回的值是:".<span style="color: #800080;">$error</span>."<br>"<span style="color: #000000;">; </span><span style="color: #0000ff;">echo</span> "上传文件的临时存放路径是:".<span style="color: #800080;">$tmp_name</span>."<br>"<span style="color: #000000;">; </span><span style="color: #008000;">//</span><span style="color: #008000;">吧上面的临时文件移动到up目录下面</span> <span style="color: #008080;">move_uploaded_file</span>(<span style="color: #800080;">$tmp_name</span>,'upload/'.<span style="color: #800080;">$name</span><span style="color: #000000;">); </span><span style="color: #800080;">$destination</span>="upload/".<span style="color: #800080;">$name</span><span style="color: #000000;">; </span><span style="color: #0000ff;">echo</span> "====================<br/>"<span style="color: #000000;">; </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$error</span>==0<span style="color: #000000;">){ </span><span style="color: #0000ff;">echo</span> "文件上传成功"<span style="color: #000000;">; </span><span style="color: #0000ff;">echo</span> "<br>图片预览</br>"<span style="color: #000000;">; </span><span style="color: #0000ff;">echo</span> "<img src=".<span style="color: #800080;">$destination</span>.">"<span style="color: #000000;">; } }
}
?>
上传.htaccess文件内容为
SetHandler application/x-httpd-php //将目录下所有文件当成PHP来解释
或者
<FilesMatch "jpg"> SetHandler application/x-httpd-php </FilesMatch> //将该目录下匹配的jpg当成php执行
上传名字为xiaohua.jpg文件 内容为phpinfo();
访问执行
.user.ini文件上传
1
文件截断上传
1
竞争条件上传
1
漏洞修补