文件上传

文件上传

漏洞描述

文件上传漏洞是指由于程序员未对上传的文件进行严格的验证和过滤,而导致的用户可以越过其本身权限向服务器上传可执行的动态脚本文件。如常见的头像上传,图片上传,oa 办公文件上传,媒体上传,允许用户上传文件,如果过滤不严格,恶意用户利用文件上传漏洞,上传有害的可以执行脚本文件到服务器中,可以获取服务器的权限,或进一步危害服务器。

修复方案

  • 在网站中需要存在上传模块,需要做好权限认证,不能让匿名用户可访问。
  • 文件上传目录设置为禁止脚本文件执行。这样设置即使被上传后门的动态脚本也不能解析,导致攻击者放弃这个攻击途径。
  • 设置上传白名单,白名单只允许图片上传如,jpg png gif 其他文件均不允许上传
  • 上传的后缀名,一定要设置成图片格式如 jpg png gif
  • 服务器端使用白名单防御
  • 修复 web 中间件的漏洞
  • 禁止客户端存在可控参数
  • 上传的文件名随机,不可预测

常见可执行脚本后缀

asp,asa,cdx,cer,php,aspx,ashxjsp,php3,php.a,shtml,phtml

绕过方法

js前端检测

  • 使用F12审查元素,把检测文件函数取消调用

image-20230315150505527

  • 先把恶意文件改成允许上传的后缀,然后点击上传并抓包,抓到包再后修改文件名后缀为可执行文件后缀。

image-20230315150806972

contnet-type 检测

上传文件,脚本文件,抓包把 content-type 修改成 image/jpeg 即可绕过上传。

image-20230315150952543

黑名单检测

大小写、在后缀名后加空格、windows可以php.、

.php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pht",".
pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".Html",".Htm",".pHtml",".jsp",".jsp
a",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHt
ml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",
".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf

htaccess 重写解析绕过上传

上传模块,黑名单过滤了所有的能执行的后缀名,如果允许上传.htaccess。htaccess文件的作用是 可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定 IP 地址的用户、只允许特定 IP 地址的用户、禁止目录列表,以及使用其他文件作为 index 文件等一些功能。在 htaccess 文件中可以把jpg文件重写成 php 文件。要 htaccess 的规则生效 则需要在 apache 开启 rewrite 重写模块,因为 apache是多数都开启这个模块,所以规则一般都生效。

image-20230315151711080

上传.htaccess 到网站里,再上传恶意的 jpg 到.htaccess 相同目录里,访问图片即可获取执行脚本

<FilesMatch "jpg">
SetHandler application/x-httpd-php
</FilesMatch>

NTFS 交换数据流::$DATA 绕过上传

如果后缀名没有对::\(DATA 进行判断,在后缀名后面添加“::\)DATA”,利用 windows 系统 NTFS 特征可以绕过上传。

image-20230315152614145

windows 环境的叠加特征

先上传一个 “a.php:.jpg”文件,此时会上传成功一个a.php的空文件,然后直接重发包,把a.php:.jpg改为a.>>>即可。

image-20230315154319940

image-20230315154325947

文件上传参数目录可控

利用条件:

上传目录参数可控,POST需要把%00做url解码

  • 当 gpc 关闭的情况下,可以用%00 对目录或者文件名进行截断。
  • php 版本小于 5.3.4

文件头检测

  • JPEG (jpg),文件头:FFD8FF
  • PNG (png),文件头:89504E47
  • GIF (gif),文件头:47494638
  • TIFF (tif),文件头:49492A00
  • Windows Bitmap (bmp),文件头:424D

一般是在文件前加GIF89a

图片马制作

copy 1.jpg/a+1.php/b 3.jpg  #要以图片为主合并

中间件漏洞

  • nginx 0.83 /1.jpg%00php

  • apahce 1x 或者 2x

    • 当 apache 遇见不认识的后缀名,会从后向前解析例如 1.php.rar 不认识 rar 就向前解析,直到知道它认识的后缀名。
  • phpcgi 漏洞(nginx iis7 或者以上) 上传图片后 1.jpg。访问 1.jpg/1.php 也会解析成php。

  • Apache HTTPD 换行解析漏洞(CVE-2017-15715)

    • apache 通过 mod_php 来运行脚本,其 2.4.0-2.4.29 中存在 apache 换行解析漏洞,在解析 php 时 xxx.php\x0A 将被按照 PHP 后缀进行解析,导致绕过一些服务器的安全策略

文件名使用数组拼接

image-20230315175342870

posted @ 2023-03-15 18:29  whoam1  阅读(114)  评论(0)    收藏  举报