线上教学upload

xss

Posted by mr_king on August 11, 2020

常见的几种文件上传漏洞方法。

1.前端Javascript绕过-upload-1

查看源码,发现白名单,只容许jpg、png、gif格式文件上传。

2.对数据包的mime进行检测 upload-2

查看源码,发现它对数据包的mime进行了白名单检测,所以我们只需要抓包将content-type进行修改,改为它所容许的文件类型。

3.文件后缀绕过(是否解析其他文件名)upload-3

查看源码,发现黑名单,不容许asp、aspx、PHP、jsp文件上传。所以我们可以猜想他是否容许其他文件格式在服务器上解析。

默认apache是不解析php3及phtml的。

4.大小写绕过()upload-5

查看源码,发现未对后缀的的大小写检查,且没过滤大写PHP,可以直接将文件名改为大写,绕过他的过滤。

5.空格绕过(Windows绕过)upload-6

windows会自动将后缀名后的空格去掉,可以利用这个特性,绕过过滤,查看源码,发现没有对后缀名空格的去处,上传时,在后缀加空格。

6.加点绕过(windows绕过)upload-7

windows会自动将后缀名最后的点去掉,所以可以通过加.的方式绕过过滤,

7.加::$DATA绕过(Windows特性)upload-8

查看源码,没有对后缀名中的’::$DATA’进行过滤。在php+windows的情况下:如果文件名+”::$DATA”会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持”::$DATA”之前的文件名。利用windows特性,可在后缀名中加” ::$DATA”绕过:

8.点加空格加点绕过(windows特性)upload-9

代码先是去除文件名前后的空格,再去除文件名最后所有的.,再通过strrchar函数来寻找.来确认文件名的后缀,但是最后保存文件的时候没有重命名而使用的原始的文件名,导致可以利用1.php. .(点+空格+点)来绕过(windows自动去掉文件最后的点)

9.双写绕过 upload-10

trim — 去除字符串首尾处的空白字符(或者其他字符) str_ireplace—该函数返回一个字符串或者数组。该字符串或数组是将 subject 中全部的 search 都被 replace 替换(忽略大小写)之后的结果 过滤了一遍php,不考虑大小写,pphphp

10.%00截断()upload-11

利用条件:php版本小于5.3.4,php的配置文件php-ini的magic_quotes_gpc为OFF状态 在url中%00表示ascll码中的0,在有些函数处理时,会把这个字符当做结束符。

在上传地址那加%00,用于截断绕过

11.验证图片头+文件包含(验证图片头)-upload-13

查看源码,发现通过验证文件头的前两位来验证文件的文件类型,制作图片马,然后利用文件包含,解析图片马。

这种的还有一种类型 用getimagesize()进行图片的验证 getimagesize()函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型及图片高度与宽度。 所以我们可以直接用一张真实的图片,后面进行添加马,然后利用文件包含漏洞解析它。

12.条件竞争()upload-17

从源码来看,服务器先是将上传的文件保存下来,然后将文件的后缀名同白名单对比,如果是jpg、png、gif中的一种,就将文件进行重命名。如果不符合的话,unlink()函数就会删除该文件。