文件上传(一)基于后端代码

利用思路:

常规类:扫描获取上传、会员中心上传、后台系统上传、各种途径上传
CMS类:已知CMS源码
编译器类:ckeditor、fckeditor、kindeditor、xxxxeditor
其他类/CVE:代码审计、平台/第三方应用

常见检测方法:

1.前端JS检测

1,使用JavaScript Switcher禁止加载JS代码


2.修改前端代码,添加需要上传的脚本语言扩展名
3.先将文件后缀名改为.jpg,再通过用bp抓包进行修改

2.MIME类型检测(检测POST内容的Content-Type字段)

先上传正常的文件类型,抓取数据包里的Content-Type数据,然后再上传木马,修改木马的Content-Type类型

黑名单:

3.明确禁止上传类型

可以将文件后缀修改为.php5、.phtml、.phps、.pht文件进行上传

4.上传配置文件.htaccess,在对指定图片文件进行解析(仅限于Apache)

<FilesMatch "a.png">
SetHandler application/x-httpd-php
</FilesMatch>	

5.上传.user.ini

前提条件:(1)服务器脚本语言为PHP
         (2)服务器使用CGI/FastCGI模式
         (3)上传目录下要有可执行的php文件

//跟.htaccess后门比,适用范围更广,nginx/apache/IIS都有效,而.htaccess只适用于apache

方法

先上传.user.ini文件(代码:auto_prepend_file=a.jpg  //该目录下所有的php文件都自动包含指定的文件,在php页面顶部加载文件)
再上传有后门代码的a.jpg,等候5分钟,再查看该目录下的php是否加载了phpinfo或者用蚁剑去连接后门代码
//php-ini配置文件中参数user_ini.cache_ttl = 300,默认5分钟

绕过新姿势

上传.user.ini包含日志:auto_prepend_file=/var/log/nginx/access.log

6.大小写绕过

将后缀名改为.Php、.phP

7.加空格绕过、加点绕过

用bp在后缀名最后加空格(windows系统会自动清除末尾的空格)
用bp在后缀名最后加.(原理同上,通常联合加点加空格一起绕过)
//常见用法:a.php. .

8.::$DATA

用bp在后缀名最后加::$DATA
//在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名

白名单

9.00截断

(1)%00截断

要求:php版本低于5.3.4、magic_quotes_gpc=Off
GET请求:直接在文件名后面加%00
POST请求:在文件名后加%00,再对%00进行URL解密

(2)0x00截断

0x00是十六进制表示方法,表示ASCII码为0的字符,在一些函数处理时,会把这个字符当作结束符。
0x00和%00是一样的,都代表着chr(0),即空字符,只不过使用的位置不同,0x00代表16进制的空字符00,需要在HEX中改为00,进行截断,而%00是URL解码之前的字符,它被解码成16进制ASCII码之后实际上也是0x00

10.图片马

需要配合包含漏洞和解析漏洞、.user.ini或者.htaccess

方法:

copy a.png/b + shell.php/a tpm.png

//图片马上传不了的情况下试试gif图片马,或者在代码最前端加入GIF89a

11.竞争绕过

使用条件:

文件直接上传,上传成功后才进行判断;如果文件格式符合的情况下,则重命名,如果文件格式不符合要求,就将文件删除

方法

使用burp suite的爆破(intruder)模块,对服务器不断重复发包,用python脚本或者使用burp suite的Intruder模块发送url请求不断访问xxx.php文件

参考文章

【文件上传绕过】——条件竞争漏洞

12.二次渲染

二次渲染原理:

在我们上传文件后,网站会对图片进行二次处理(格式、尺寸要求等),服务器会把里面的内容进行替换更新,处理完成后,根据我们原有的图片生成一个新的图片并放到网站对应的标签进行显示。

绕过方法:

(1)配合文件包含漏洞:
     将一句话木马插入到网站二次处理后的图片中,也就是把一句话插入图片在二次渲染后会保留的那部分数据里,确保不会在二次处理时删除掉。这样二次渲染后的图片中就存在了一句话,在配合文件包含漏洞获取webshell。
(2)条件竞争
     利用条件竞争来进行爆破上传

判断是否进行了二次渲染

对比上传前和上传后的图片大小,下载下来用010 Editor项目栏的->工具->对比文件 进行对比
参考文章:
upload-labs之pass 16详细分析

posted @ 2023-02-10 15:53  bcxc9405  阅读(83)  评论(0编辑  收藏  举报
/*
*/