ToB企服应用市场:ToB评测及商务社交产业平台

标题: 文件上传学习 [打印本页]

作者: 怀念夏天    时间: 2022-10-28 04:18
标题: 文件上传学习
一、编写一个文件上传的页面

代码参考菜鸟教程:https://www.runoob.com/php/php-file-upload.html
结构:
test
|-----upload # 文件上传的目录
|-----form.html # 表单文件
|-----upload_file.php # php 上传代码
创建文件上传表单
  1. <html>
  2. <head>
  3. <meta charset="utf-8">
  4. <title>文件上了个传</title>
  5. </head>
  6. <body>
  7. <form action="upload_file.php" method="post" enctype="multipart/form-data">
  8.     <label for="file">文件名:</label>
  9.     <input type="file" name="file" id="file"><br>
  10.     <input type="submit" name="submit" value="提交">
  11. </form>
  12. </body>
  13. </html>
复制代码
创建文件上传脚本
  1. [/code]测试:
  2. [img]https://cdn.nlark.com/yuque/0/2022/png/29626537/1666773832469-f52ebc39-bb51-453d-9ed9-fa45386ae239.png[/img]
  3. [img]https://cdn.nlark.com/yuque/0/2022/png/29626537/1666774873115-c901e69e-70c4-45e6-844c-0830672ed148.png[/img]
  4. [img]https://cdn.nlark.com/yuque/0/2022/png/29626537/1666774903717-68714e8a-0edf-4058-8d40-783d865dcaba.png[/img]
  5. [size=6]二、对上传的文件进行验证[/size]
  6. [size=5]1.文件名验证[/size]
  7. [code]
复制代码
测试功能:上传一个PHP文件试试


发现不允许PHP文件上传
2.文件头验证

 
[code][/code]测试:
尝试上传异常gif文件失败


将.php文件添加头GIF89a,成功上传


三、文件上传结合解析漏洞

1.apache解析漏洞

(1)从右往左解析
Apache解析文件的时候是从右往左开始解析文件名,
比如test.php.abc.def
由于从右往左解析,遇到不支持的文件后缀名的时候继续往左解析,所以的话就会把该文件解析成test.php
(2)Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
比如:1.php上传被过滤之后可以burp抓包,然后更改为1.php\x0a可以上传成功。
(3).htaccess文件实现
如果当你上传文件的时候发现你的脚本文件被阻止上传,你可以尝试上传.htaccess文件。在.htaccess文件里面将你的文件扩展名映射到可执行MIME类型。只需要添加一句话:
AddType application/x-httpd-php .html(则html文件也能执行.php文件)
AddType application/x-httpd-php .txt(则普通的文本文档也能执行.php文件)

2.IIS解析漏洞

(1)IIS6.0
路径解析
原理:在.asp、.asa目录下的任意文件都会以asp格式解析
文件解析(;截断)。
原理:在IIS 6.0下,服务器默认不解析;后面的内容。
上传test.asp;.jpg会被解析为asp。
解析文件类型
原理:IIS 6.0默认的可执行文件除了asp还包含asa、cer、cdx,会将这三种扩展名文件解析为asp文件。
(2)IIS7.5
利用条件:
Fast-CGI运行模式
php.ini里cgi.fix_pathinfo=1
取消勾选php-cgi.exe程序的"invoke handler only if request is mapped to"。也就是取消勾选模块映射中的请求限制。
利用方式:在上传的文件名后面加上/.php,可以被作为PHP文件解析。

3.nginx解析漏洞

上传一个图片马,当中间件的版本是nginx的时候,增加/.php后缀,被解析成PHP文件。
比如上传1.png。访问upload/1.png/.php会把1.png当作php文件执行。
将.php结尾的文件都会交给fastcgi来执行,/uploadfiles/nginx.png/a.php也会交给fastcgi解析,fastcgi在解析".php"文件时发现文件并不存在,这时php.ini配置文件中的cig.fix_pathinfo就发挥作用了,ccgi.fix_pathinfo是默认开启的,当php遇到文件路径/aaa.xxx/bbb.yyy/ccc.zzz时,若/aaa.xxx/bbb.yyy/ccc.zzz不存在,则会去掉最后的/ccc.zzz,然后判断/aaa.xxx/bbb.yyy是否存在,若存在,则把/aaa.xxx/bbb.yyy文件当作文件/aaa.xxx/bbb.yyy/ccc.zzz解析,若/aaa.xxx/bbb.yyy仍不存在,则继续去掉/bbb.yyy,以此类推。那么fastcgi到底能解析哪些文件呢,这个由php-fpm.conf中的security.limit_extensions参数决定的,
四、文件上传绕过

1.绕过黑名单验证

黑名单:不允许上传出现在名单中的文件后缀
白名单:只允许上传出现在名单中的文件后缀
方法:
2.绕过白名单验证

3.二次渲染绕过

五、文件上传防御

1.运行阶段的防御

2.开发阶段防御

对文件上传漏洞来说,最好能在客户端和服务器端对用户上传的文件名和文件路径等项目分别进行严格的检查。客户端的检查虽然对技术较好的攻击者来说可以借助工具绕过,但是这也可以阻挡一些基本的试探。服务器端的检查最好使用白名单过滤的方法,这样能防止大小写等方式的绕过,同时还需对%00截断符进行检测,对HTTP包头的content-type也和上传文件的大小也需要进行检查。
3.维护阶段防御

出处:http://www.cnblogs.com/-xiaopeng1/本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4