文件上传案例

  1. 1.       前台脚本检测扩展名

我们可以查看一下网页源代码,看扩展名是否在前端有显示。

是的话,我们就可以上传一个扩展名为.jpg(等图片的扩展名)利用burpsuite,修改扩展名为.php,会成功上传

  1. 2.       服务器验证content-type检测文件类型

上传一个.php文件,利用burpsuite改content-type类型为image/jpeg

 

 

 

  1. 3.       服务器端验证文件扩展名

1*(在apathe低版本2.0 -2.2的情况可以执行)

上传一个文件扩展名不存在的文件,比如1.php.aaa,在通过其他的手段改成.php的可执行的扩展名

 

2*使用00截断(在一些情况下,因为函数的原因,会导致00截断不能成功绕过)

上传文件名为1.phpp.jpg,通过burpsuite修改1.phpp.jpg中的p的十六进制为70改为00

 

  1. 4.       服务器端验证图片文件头

 

 

 实验:我们使用一个真的11.php文件,修改扩展名为11.jpg

              一个真的图片,1.jpg

将两个都分别上传,结果会发现真图片可以上传,而修改的.php文件却不能

原因就是服务器验证了图片的文件头,可以使用winhex软件进行查看

 

 

 

 

 是因为getiamgesize()函数检测过滤了

解决方法

第一步:将一句话代码嵌入到图片中,构造图片马,上传图片

第二步:通过解析漏洞或其他的方法将jpg还原为可执行文件

 

Iis6.0解析漏洞

目录解析:

在网站下建立文件夹名字为.asp/.asa的文件夹,在其目录中的任何扩展名的文件都被、iis当做.asp文件来解析并执行

利用方法:建目录a.asp,目录中a.asp/a.jpg将会被按照正常的asp文件进行解析

文件解析:

在iis6.0下,分号后面的不被解析,如a.asp;.jpg会被当做a.asp

利用方法:上传文件名为xx.asp;.jpg格式

Iis6.0默认的可执行文件除了asp还包含(常用来绕过黑名单检测)

.asa   .cer   .cdx

 

Apache  2.0-2.2

未知扩展名解析漏洞

 Apache是从右往左开始判断文件扩展名来解析文件,如果文件扩展名不被识别,就在往左判断,直到可以识别为止

举个例子:abc.php.aaa这个.aaa是apathe不可识别解析的,它就会往前判断直到识别.php时,会将这个文件解析为abc.php文件

 

.htaccess配置文件(iis平台上不存在该文件)

 负责某一个目录下的网页配置,通过.htaccess可以实现分布式的配置

比如:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定用户或者目录的访问、禁止目录列表、配置默认文档等功能

 

Apache .htaccess配置文件的解析利用

1.       建立.htaccess文件,写入 AddType application/x-httpd-php  .jpg

                         可以实现将.jpg的文件按照php解析执行

2.将木马上传.htaccess到服务器的目录(在同目录或者子目录都可)

3.上传.jpg的图片马,访问图片即可执行

 

Nginx解析漏洞

  1. 低版本(0.5、0.6、0.7<=0.7.65、0.8<=0.8.37)的Nginx可以在任意文件名后面添加%00.php进行解析攻击       abc.txt%00.php
  2. 对于任意的文件名,在后面添加斜杠+某某某.php的解析漏洞(本质与nginx无关)

如:test.jpg/abc.php

漏洞场景:iis+php    nginx+php

 

 

 一些开源的文件编辑器可会有自身的漏洞,一般写博客什么的都会有上传图片功能,这些地方也可能会有文件上传漏洞

 

posted @ 2020-05-10 14:29  gxy*  阅读(261)  评论(0编辑  收藏  举报