DAY13:文件上传漏洞

DAY13:文件上传漏洞

1、webshell原理及工具的使用

1.1、webshell 是什么

​ Webshell 就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称 做为一种网页后门。 拆分开来看,“web”的含义显然是服务器开放的web服务,“shell”的含义是取得对服务器某种 程度上操作权限。 由于webshell其大多是以动态脚本的形式出现,也有人称之为网站的后门工具

1.2、webshell 的优点

​ WebShell最大的优点就是可以穿越防火墙,由于与被控制的服务器或远程主机交换的数据都是通 过80端口传递的,因此不会被防火墙拦截。并且使用WebShell一般不会在系统日志中留下记录, 只会在网站的web日志中留下一些数据提交记录,没有经验的管理员是很难看出入侵痕迹的。

1.3、webshell的分类

请添加图片描述

1.4、一句话木马

一句话木马:代码简短,通常只有一行代码,使用方便。

小马:只包含上传功能体积小

大马:代码量和功能比小马多,包括提权命令、数据库管理、磁盘管理,但隐蔽性不好。

<?php @eval($_GET['111'])?>			----url处
php: <?php @eval($_POST['cmd']);?>
asp: <%eval request("cmd")%

请添加图片描述

请添加图片描述

请添加图片描述

1.5、 一句话木马原理解析

1、php的代码要写在里面,服务器才能认出来是php代码,然后才去解析。对于一个纯php文件 来说,不要这个结尾也行,服务器也能识别,如果下面的代码还有html代码就不行了。

2、@符号的意思是不报错,即使执行错误也不报错。

3、为什么密码是cmd?

php里面有几个超全局变量:

$_GET
$_POST

"$_POST"的意思就是服务器接收POST方法传 递的参数cmd的值。

4、如何理解eval()函数?

eval()把字符串作为php代码进行执行。

2、文件上传漏洞基础及俩种绕过

2.1、工具原理

攻击者在入侵网站时,通常要通过各种方式写入 WebShell,从而获得服务器的控制权限, 比如执行系统命令.读取配置文件、窃取用户数据,篡改网站页面等操作。为了方便对这些 WebShell 进行管理,就诞生了各种各样的 WebShell 管理工具

2.2、 常见的webshell管理工具

1、中国菜刀(不太推荐)

​ 中国菜刀是一款专业的网站管理软件,用途广泛,使用方便, 小巧实用。只要支持动态脚本的网站,都可以用中国菜刀来 进行管理

2、中国蚁剑

​ 中国蚁剑是一款开源的跨平台网站管理工具,它主要面向于合 法授权的渗透测试安全人员以及进行常规操作的网站管理员

项目地址: https://github.com/AntSwordProject/AntSword-Loader 加载器
https://github.com/AntSwordProject/antSword/releases/tag/2.1.14 源码

3、冰蝎

冰蝎是一款新型动态二进制加密网站工具。它可以在HTTP明文协议中建立了加密隧道, 以躲避安全设备的检测。

项目地址: https://github.com/rebeyond/Behinder

4、哥斯拉

护网期间,各大厂商的waf不断,在静态查杀、流量通信等方面对webshell进行拦截,众红队急 需一款优秀的权限管理工具,冰蝎3.0的发布可能缓解了流量加密的困境,但是冰蝎3.0的bug众 多,很多朋友甚至连不上冰蝎的shell,于是@BeichenDream决定公开他所开发的一款shell权限 管理工具,名为“哥斯拉”。

项目地址: https://github.com/BeichenDream/Godzilla

2.3、文件上传漏洞基础及俩种绕过

2.3.1、文件上传简述

文件上传是现代互联网常见的功能。 允许用户上传图片、视频、及其他类型的文件, 向用户提供的功能越多,web受攻击的风险就越大。

2.3.2、常见存在文件上传功能的地方
(1)头像
(2)网站logo
(3)友情链接处:可能会可以
	添加logo
(4)编辑器
(5)后台中的文件管理
(6)模板管理
(7)主题管理
(8)插件管理
(9)水印图片处
(10)一些网站的写文章的地方,
比如可以上传图片
(11)添加商品
(12)上传简历
(13) jQuery-File-Upload
(14) 。。

(PS:任何可以上传文件的地方,都可能存在文件上传漏洞

文件上传漏洞简述:

​ 上传文件的时候,如果服务器端后端语言未对上传的文件进行严 格的验证和过滤,就容易造成上传任意文件的情况。常见场景是 web服务器允许用户上传图片或者普通文本文件保存,而用户绕过 上传机制上传恶意代码并执行从而控制服务器。 这个恶意的代码文件(php、asp、aspx、jsp等),又被称WebShell

2.3.3、文件上传漏洞危害

​ 攻击者通过上传恶意文件传递给解释器去执行,然后就可以在服务器上执行恶意代码,进行数据库 执行、服务器文件管理、命令执行等恶意操作。从而控制整个网站,甚至是服务器

2.3.4、 文件上传漏洞必要条件
能上传webshell
webshell路径可知
webshell可以被访问
webshell可以被解析
2.3.5、文件的检测方式:

一、客户端检测

JavaScript 检测

二、服务端检测

MIME检测
文件后缀检测(黑名单检测、白名单检测)
文件内容检测(文件幻数检测、文件相关信息检测、图片渲染、二次渲染)

3、客户端JS检测

3.1、检测方法

​ 一般都是在网页上写一段javascript脚本,校验上传文件的后缀名,有白名单形式也有黑名单形式。 判断方式:在浏览器加载文件,点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/ .jpegl.png后 缀名的文件,而此时并没有发送数据包。 打开f12可以查看点击上传没有请求

请添加图片描述

3.2、绕过方法

浏览器 F12 点击设置,里面有禁止 JavaScript 执行

或者在 bp 中 proxy 模块,点击 option 选项,点击 Remove all JavaScript
请添加图片描述

4、绕过MIME检测

MIME (Multipurpose Internet Mail Extensions)是描述消息内容类型的因特网标准。用来表示文档、文件或字 节流的性质和格式。在http数据包中在Content-Type字段显示

超文本标记语言.html文件:     text/html
普通文本.txt文件:			 text/plain
PDF文档.pdf: 				application/pdfPNG
图像.png: 				image/png
GIF图像.gif: 				image/gif
MPEG文件.mpg、.mpeg: 		video/mpeg
二进制流:				  application/octet-stream

4.1、 绕过方法

利用Burp Suite截取并修改数据包中的Content-Type字段的值为正常值从而进行绕过

$_FILE['upload_file']['type']        #获取上传文件的MIME-Type类型
upload_file是在表单中定义的,用于接收对应的文件type第二文件获取类型
upload_file是在表单中定义的,用于接收对应的文件type第二文件获取类型
要进行验证,使用白名单模式表示只有符合相应类型 ,符合后才能进行上传,否则进行报错

请添加图片描述

5.、文件上传漏洞黑名单检测绕过

​ 一般情况下,代码文件里会有一个数组或者列表,该数组或者列表里会包含一些非法的字 符或者字符串,当数据包中含有符合该列表的字符串时,即认定该数据包是非法的

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //首尾去空

        if (!in_array($file_ext, $deny_ext)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;
            if (move_uploaded_file($temp_file, $img_path)) {
                $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '此文件类型不允许上传!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}

5.1、如何确认是黑名单

​ 因为黑名单是不允许我们的数据包含有符合黑名单列表的字符串,所以我们只需要随意构 造一个不在它列表中的数据包即可。 构造一个1.abc 上传,上传成功就是黑名单检测

5.2、利用双写后缀绕过

​ 有些代码中,会将文件后缀符合黑名单列表的字符串替换为空。 具体可以看上传后返回的文件名。 比如:“index.php"变为"index"。

index.p + php + hp

5.3、利用其他后缀绕过

PHP:
php2、php3、 php5、phtml、pht(是否解析需要根据配置文件中设置类型来决定)
ASP:
asa、cer、cdx
ASPX:
ascx、ashx、asac
JSP:
jspx、jspf

5.4、利用apache配置文件绕过

​ .htaccess文件(或者"分布式配置文件"”) ,全称是Hypertext Access(超文本入口)。提 供了针对目录改变配置的方法。 比如新建一个.htaccess文件:

setHandler application/x-httpd-php 

​ 通过一个.htaccess文件调用php的解析器去解析一个文件名中只要包含"as.png"这个字符 串的任意文件,所以无论文件名是什么样子,只要包含"as.png"这个字符串,都可以被以php的 方式来解析,一个自定的.htaccess文件就可以以各种各样的方式去绕过很多上传验证机制。

5.5、大小写绕过

windows系统下,对于文件名中的大小写不敏感

例如:text.php和Test.PHP是一样的

Linux系统下。对于文件名中的大小写敏感。

例如text.php和TexT.php就是不一样的

基于windows可以上传一些安全漏洞

5.6、空格绕过

​ windows系统中,对于文件名中空格会被作为空处理,程序中的监测代码却不能自动删除空格,从而绕过黑名单,针对这样的情况需要用到bp截断httpp请求后,修改对应文件名+添加空格

1.php + 空格

5.7、特殊符号绕过

文件流传输

	windows系统下,如果上传的文件名中text.php::$DATA会在服务器上生成一个text.php文件,其中内容和所上传文件内容相同,并被解析

分析代码:

没有过滤  创建文件抓包上传添加   ::$DATA   即可成功  

5.8、路径拼接绕过

(	1.php.	+	空格	+	.	)

6、文件上传漏洞白名单检测绕过

​ 一般情况下,代码文件里会有一个数组或者列表,该数组或者列表里会包含一些合法的字 符或者字符串,如果数据包中的文件后缀不符合白名单,就不允许上传

如何确认是白名单?

​ 因为白名单是只允许我们的数据包含有符合白名单列表的字符串所以我们只需要随意构造 一个数据包,如果可以上传,说明是黑名单,不可以上传则是白名单

6.1、00截断绕过

​ 可以利用00截断的方式进行绕过,包括%00截断与0x00截断。

​ 0x00是十六进制表示方法,是ascii吗为0的字符,在有些函数处理室,会把这个字符当做结束符
​ 系统在对文件名的读取是,如果遇到0x00,就会认为读取已经结束
​ 在php5.3以后已经完全修复00截断(GPC开启,addslashes函数)

 1.php0x00.jpg
前提: php: php<5.3.29且magic_quotes_gpc=off java:: jdk

6.2、%00截断

​ %00是一个url编码,url发送到服务器后就被服务器解码,这时还没有传到验证函数,也 就是说验证函数里接收到的不是%00字符,而是%O0解码后的内容,即解码成了Ox00。在url中 %00表示ascll码中的0,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00 时就会认为读取已结束。

比如

 https://localhost/upfile/?file=test.txt 

此时输出的是test.txt 加上%00

 https://localhost/upfile/?file=test.php%00.txt 

此时输出的是test.php,绕过了后 缀限制,可以上传webshell

6.3、0x00截断

​ 系统在对文件名进行读取时,如果遇到 0x00,就会认为读取已经结束。但要注意是文件的 十六进制内容里的00,而不是文件名中的00。

​ get型00截断

get型提交的内容会被自动进行url解码 
PS:一定要关闭GPC,否则将无法成功

​ 在php中,使用include,require,include_once\require_once函数所包含的文件都会被当做php代码
​ 执行,无论文件的名称是什么,只要符合文件内容符合php代码规范,都会被当做php代码执行

<?php
    if($_GET){
        include($_GET["file"])
    }
	else{
        echo "not get args file";
              }
?>

​ 使用include.php查看file内容
​ 接着使用

include.php?file=upload/位置

结合文件包含输出phpinfo

利用存在文件包含的php页面,包含上传的图片马,从而触发webshell,输出对应的phpinfo

7、文件上传漏洞其他绕过方式

7.1、文件内容检测

​ 文件内容检测就是检测上传的文件的内容

7.2、检测方法

文件幻数检测:

通常情况下,通过判断前10个字节,基本就能判断出一个文件的真实类型。

文件加载检测:

​ 一般是调用API或函数对文件进行加载测试。常见的是图像渲染测试,再严格点的甚至是 进行二次渲染

7.3、文件幻数是什么

​ 文件格式幻数(外语: magic number),它可以用来标记文件或者协议的格式 很多文件都有幻数标志来表明该文件的格式
请添加图片描述

7.4、文件幻数检测绕过技巧

​ 制作图片马,使用16进制编辑器打开一个图片,在图片后面插入WebShell 或者cmd下执行:

copy aaa.png/b + test.phpla shell.png

注意:图片必须在前面,代码在后面

7.5、二次渲染及绕过方法

​ 就是根据用户上传的图片,新生成一个图片,将原始图片删除,将新图片添加到特殊的数 据库中。

​ 比如一些网站根据用户上传的头像生成大中小不同尺寸的图像。

​ 绕过方法: 先上传一张图片,再重新将图片下载下来做比较,然后在相同的地方(00的地方)插入 webshell

8、解析漏洞+白名单getshell

8.1、解析漏洞

​ 文件解析漏洞,是指Web容器(Apache、Nginx、llS等)在解析文件时将文件解析成脚本文 件格式并得以执行而产生的漏洞。从而,黑客可以利用该漏洞实现非法文件的解析。

8.2、IIS6.0解析漏洞

目录解析:

以*.asp命名的文件夹里的文件都将会被当成ASP文件执行。 

文件解析:

*.asp;.jpg像这种畸形文件名在";"后面的直接被忽略当成*.asp文件执行。
lIS6.0默认的可执行文件除了asp还包含这三种 *.asa t.cer *.cd
(1)目录解析 www.xxx.com/xx.asp/xx.jpg 
(2)文件解析 www.xxx.com/xx.asp;.jpg

8.3、IIS7&7.5解析漏洞:

​ IIS7/7.5在Fast-CGl运行模式下,在一个文件路径(/xx.jpg)后面加上/xx.php会将 /xx.jpg/xx.php解析为php文件。

8.4、Nginx解析漏洞

​ 用户配置不当造成的解析漏洞,在上传的文件后面增加/.php后缀,被解析成PHP文件

8.5、Apache解析漏洞

Apache默认一个文件可以拥有多个扩展名。

​ 判断文件后缀名的规则是从右往左开始判 断的,如果后缀名为不可解析的后缀名,就会从右往左判断。

所以上传一个test.php.aaa文件绕过验证且服务器依然会将其解析为php。

前提:

Apache配置文件(Apachelconfhttpd.conf)存在以下代码: 
AddHandler application/x-httpd-php .ph
影响版本:
Apache 2.0.x <= 2.0.59
Apache 2.2.x <= 2.2.17
Apache 2.2.2 <= 2.

请添加图片描述

9、文件上传漏洞修复方式

修复方式:

1.上传的目录设置为不可执行。只要web容器无法解析该目录下面的文件,即使攻击 者上传了脚本文件,服务器本身也不会受到影响,因此这一点至关重要。

2.对文件后缀的判断中使用白名单的方式。

3.文件服务器和web服务器分离,也就是上传的文件单独存放到其他的服务器之中。

e解析漏洞

Apache默认一个文件可以拥有多个扩展名。

​ 判断文件后缀名的规则是从右往左开始判 断的,如果后缀名为不可解析的后缀名,就会从右往左判断。

所以上传一个test.php.aaa文件绕过验证且服务器依然会将其解析为php。

前提:

Apache配置文件(Apachelconfhttpd.conf)存在以下代码: 
AddHandler application/x-httpd-php .ph
影响版本:
Apache 2.0.x <= 2.0.59
Apache 2.2.x <= 2.2.17
Apache 2.2.2 <= 2.

[外链图片转存中…(img-pfUNOHN1-1658758017116)]

9、文件上传漏洞修复方式

修复方式:

1.上传的目录设置为不可执行。只要web容器无法解析该目录下面的文件,即使攻击 者上传了脚本文件,服务器本身也不会受到影响,因此这一点至关重要。

2.对文件后缀的判断中使用白名单的方式。

3.文件服务器和web服务器分离,也就是上传的文件单独存放到其他的服务器之中。

4.不返回文件路径的情况下,随机改写文件名

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值