上传点:真正可以用来上传文件的地方。 move_uploaded_file()函数    $_FILES全局数组

 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

 

 

 学习环境 upload-lobs

1.

文件上传漏洞学习 随笔 第1张

 

pass-01:  

关键词:前端上传绕过;客户端js检查

浏览器禁用网页的javascript即可 上传phpinfo.php文件

文件上传漏洞学习 随笔 第2张

 

 代码只是在客户端使用js对不合法图片进行检查

 

pass-02:服务端对数据包的MIME检查

 白名单

代码

$is_upload = false; $msg = null; if (isset($_POST['submit'])) { if (file_exists(UPLOAD_PATH)) { if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) { $temp_file = $_FILES['upload_file']['tmp_name']; $img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name'] if (move_uploaded_file($temp_file, $img_path)) { $is_upload = true; } else { $msg = '上传出错!'; } } else { $msg = '文件类型不正确,请重新上传!'; } } else { $msg = UPLOAD_PATH.'文件夹不存在,请手工创建!'; } }

只允许jpeg,png,gif的格式上传,否则不执行上传
用burpsuite 抓包修改MIME头,改为image/jpeg或image/png或image/gif
文件上传漏洞学习 随笔 第3张

文件上传漏洞学习 随笔 第4张

 

MIME:多用途互联网邮件扩展,它是一个互联网标准,在1992年最早应用于电子邮件系统,但后来也应用到浏览器服务器会将它们发送的多媒体数据的类型告诉浏览器,而通知手段就是说明该多媒体数据的MIME类型,从而让浏览器知道接收到的信息哪些是MP3文件,哪些是Shockwave文件等等。服务器将MIME标志符放入传送的数据中来告诉浏览器使用哪种插件读取相关文件

 

pass-03:黑名单  上传特殊可解析后缀

 

禁止.asp   .aspx    .php    .jsp为后缀名的文件

文件上传漏洞学习 随笔 第5张

 

 

用burpsuit抓包  将上传文件后缀名改为.phtml   上传后也可执行文件内容

 

原理:

Apache的配置文件原因

打开方法phpstudy->其他选项菜单->打开配置文件->httpd-conf

 

AddType application/x-httpd-php .php .php3 .phtml

这句话  说明如果上传.php  .php3  .phtml 的文件 都会当作php来解析,所以把我们上传的phtml文件当作php文件

 

 

pass-04:   .htaccess绕过原理

 

 

文件上传漏洞学习 随笔 第6张

 

 

 

.htaccess绕过原理           这三行代码:将所有   .jpg文件当作php文件解析

<FilesMatch "*.jpg">

  SetHandler application/x-httpd-php

</FilesMatch>

或 AddType application/x-httpd-php .jpg  (Apache) 

 

用burp抓包  修改上传文件文件名

 

(1)首先抓包后,将上传文件名改为1.jpg  原来是phpinfo.php

文件上传漏洞学习 随笔 第7张

上传成功

但是内容无法解析

文件上传漏洞学习 随笔 第8张

 

 (2)第二次将文件名改为.htaccess

内容改为

<FilesMatch "1.jpg">                           注意这里是1.jpg

  SetHandler application/x-httpd-php

</FilesMatch>

 文件上传漏洞学习 随笔 第9张

上传成功

文件上传漏洞学习 随笔 第10张

 

 

 可以解析了

1.jpg这个文件 就被当成了php的文件来解析

 

pass-05:文件名后缀名大小写绕过

这次不给上传.htaccess文件了

把文件名php改成phP  就能上传并解析了

pass-04中的代码  把后缀名都该成小写的了而05没有改

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄