文件上传

文件上传:

1.Apache 解析漏洞:

解析: test.php.abc(其中abc为任意不属于黑名单且也不属于Apache解析白名单的名称)

描述:一个文件名为x1.x2.x3的文件,Apache 会从x3的位置往x1的位置开始尝试解析,如果x3不属于Apache能解析的扩展名,那么Apache会尝试去解析x2的位置,这样 一直往前尝试,直到遇到一个能解析的扩展名为止。

2.IIS 解析漏洞:

解析:test.asp/abc 或 test.asp;abc 名 或 abc/def.php (其中abc、def都为任意文件名)

描述:IIS6.0在解析asp格式的时候有两个解析漏洞,一个是如果目录名包含”.asp”字符串,那么这个目录下所有的文件都会按照asp去解析,另一个是只要文件名中含有”.asp;”会优先按asp来解析;IIS7.0/7.5是对php解析时有一个类似于Nginx的解析漏洞,对任意文件名只要在URL 后面追加上字符串”/任意文件名.php”就会按照php的方式去解析。

3.Nginx 解析漏洞:

解析:abc/def.php 或 abc%00.php (其中abc、def都为任意文件名)

描述:目前Nginx 主要有这两种漏洞,一个是对任意文件名,在后面添加/abc.php 的解析漏洞,如原本文件名是test.jpg则可以添加为test.jpg/x.php进行解析攻击。还有一种是对低版本的Nginx 可以在任意文件名后面添加%00.php 进行解析攻击。

4.解析漏洞总结:

Apache的扩展名顺序解析漏洞:Apache自身的漏洞

IIS的asp 解析漏洞:IIS自身的漏洞

Nginx的%00 解析漏洞:Nginx自身的漏洞

php-cgi的默认配置漏洞:这类以CGI 形式调用php的web 应用程序主要出现在IIS和Nginx;而Apache 通常是以module 的形式去调用php,所以很少出现该类型漏洞。

upload -labs通关记录

pass-6 文件后缀(空)绕过;bp抓包给文件加空格后缀

pass-7 文件后缀(空)绕过;bp抓包给文件加个空格在加个点

pass-8 ::$DATA绕过

若没有对后缀名中的’::$DATA’进行过滤。在php+windows的情况下:如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名。利用windows特性,可在后缀名中加” ::$DATA”绕过:payload为filename=1.php::$DATA这样的话就可以上传成功了。

Pass-9-点+空格+点绕过

代码先是去除文件名前后的空格,再去除文件名最后所有的.,再通过strrchar函数来寻找.来确认文件名的后缀,但是最后保存文件的时候没有重命名而使用的原始的文件名,导致可以利用1.php. .(点+空格+点)来绕过

payload为filename=1.php. .

三、检测方法:

简单点的方法就是直接上传各种类型的文件,再通过Burpsuite修改各个可以绕过的检测内容来检测。

四、防御方法:

1、客户端JavaScript检测:通常为检测文件扩展名)

2、服务端MIME 类型检测:检测Content-Type内容)

3、服务端目录路径检测:检测跟path参数相关的内容

4、服务端文件扩展名检测:检测跟文件extension 相关的内容

(1) 黑名单检测:

\1. 文件名大小写绕过:如 AsP,pHp。

\2. 名单列表绕过:

用黑名单里没有的名单,如 asa 或 cer 等。

\3. 特殊文件名绕过:

比如发送的 http 包里把文件名改成 test.asp. 或 test.asp (后面为空格),这种命名方式在 Windows系统里是不能直接修改的,需要在Burpsuite等代理中进行修改,然后绕过验证后,会被Windows系统自动去掉后面的点和空格,但也只能用在Windows系统中。

\4. 0x00 截断绕过

\5. 双扩展名解析绕过攻击:

(1)基于Web服务的解析逻辑:如果上传一个文件名为help.asp.123,扩展名123 不在扩展名黑名单中也没在Apache 可解析扩展名列表中,此时会向前搜寻下一个可解析的扩展名,若搜寻到.php,则会以php 执行。

(2) 基于Web服务的解析方式:如果在Apache的conf 里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php 即使文件名是test2.php.jpg也会以php 来执行。

\6. 危险解析绕过攻击:

基于Web服务的解析方式:如果在Apache 的conf 里有这样一行配置 AddType application/x-httpd-php .jpg 即使扩展名是jpg,一样能以php 方式执行。

\7. .htaccess 文件攻击:

配合名单列表绕过,上传一个自定义的.htaccess,就可以轻松绕过各种检测。如果网站上传过滤了php,phtml等含有ph的文件,可以利用上传自定义的.htaccess文件,然后服务器就会将所有的文件当做php处理,这时候我们再上传一个图片马,然后找到图片路径之后,蚁剑连接,get webshell。

\8. 解析调用/漏洞绕过:

直接配合上传一个代码注入过的非黑名单文件即可,再利用解析调用/漏洞

(2) 白名单检测:

\1. 0x00 截断绕过:如test.asp%00.jpg 的方式进行截断,属于白名单文件,再利用服务端代码的检测逻辑漏洞进行攻击

\2. 解析调用/漏洞绕过:直接配合上传一个代码注入过的白名单文件,再利用解析调用/漏洞

\3. .htaccess文件攻击:无论是黑名单还是白名单都可以直接攻击.htaccess 文件

如果PHP 安全没配置好,就可以通过move_uploaded_file 函数把自己写的.htaccess 文件覆盖掉服务器上的,这样就能任意定义解析名单了。

5、服务端文件内容检测(检测内容是否合法或含有恶意代码) :

(1)文件幻数检测:

主要是检测文件内容开始处的文件幻数,要绕过的话需要在文件开头写上检测的值,比如图片类型的文件幻数如下:

JPG文件:

img

GIF文件:

img

PNG文件:

img

然后在文件幻数后面加上代码即可。

例题:如果我们上传的文件名为123.php,最终的结果就是md5(123.php456).php
先上传文件sqzr.php,更改image/jpeg,加GIF89a,上传成功之后,(多上传几遍,方便接下来找)
通过提示得到木马路径/upload,在url出输入http://127.0.0.1/upload-lab/upload/123.php
然后bp抓这个包,放到测试器里面选中123进行爆破,选择number 1到10000 step为1 ,添加前缀sqzr.php,添加编码MD5,攻击,找到200的返回,找到路径,木马连接。

文件上传 :content type 改文件类型 image/jpeg
上传的文件第一行写GIF89a
后缀:phtml Php php1-9
上传sqzr马(免杀马) 如果过滤了,使用变形马。

$filename显示的包括后缀,filename=123.php

%00截断
特殊文件名绕过:比如发送的 http包里把文件名改成 test.asp. 或 test.asp_(下划线为空格),
这种命名方式在windows系统里是不被允许的,所以需要在 burp之类里进行修改,然后
绕过验证后,会被windows系统自动去掉后面的点和空格,但要注意Unix/Linux系统没有这个特性

.htaccess文件的使用:如果网站上传过滤了php,phtml等含有ph的文件,可以利用上传.htaccess文件,然后服务器就会将所有的文件当做php处理,这时候我们再上传一个图片马,然后找到图片路径之后,蚁剑连接,get webshell。

exif_imagetype()函数

通过给上传脚本加上相应的幻数头字节就可以绕过:

  • JPG :FF D8 FF E0 00 10 4A 46 49 46

  • GIF(相当于文本的GIF89a):47 49 46 38 39 61

  • PNG: 89 50 4E 47

  • 先上传一个.user.int文件,文件里面写

    auto_prepend_file=test.jpg
    

    那么当我们访问此目录下的任何一个文件时,都会去包含test.jpg(上传的时候加GIF89a)

    然后上传一个文件名为test.jpg的一句话木马,就可以得到上传路径,然后访问木马,getshell。

posted @ 2022-03-03 14:58  追梦,追念。。  阅读(156)  评论(0编辑  收藏  举报