目录
1.文件上传漏洞
1.1.文件上传漏洞介绍
文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。“文件上传” 本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。这种攻击方式是最为直接和有效的,所以我们需要思考的是如何绕过检测和过滤。
1.2.文件上传漏洞危害
- 上传文件web脚本语言,服务器的web容器解释并执行了用户上传的脚本,导致代码执行。
- 上传文件病毒或者木马时,主要用于诱骗用户或者管理员下载执行或者直接 自劢运行;
- 上传文件是Flash的策略文件 crossdomain.xml,黑客用以控制Flash在该域 下的行为(其他通过类似方式控制策略文件的情况类似);
- 上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行;
- 上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。 除此之外,还有一些不常见的利用方法,比如将上传文件作为一个入口,溢 出服务器的后台处理程序,如图片解析模块;或者上传一个合法的文本文件,其内容包含了PHP脚本,再通过"本地文件包含漏洞(Local File Include)"执行此脚本。
1.3.文件上传漏洞满足条件
上传的后门文件,需要能被脚本语言解析执行。
说明一:对方服务器运行的PHP环境,你不能上传一个JAVA的后门代码。
说明二:你上传文件的目录可以被脚本语言解析执行,如果你上传的目录没有执行权限也不行
说明三:一般文件上传后会返回你一个地址,如果无妨链接到也不能构成文件上传漏洞。
还有例外情况,非脚本文件也能被成功解析。比如:上传了一个图片🐎,如果对方中间件上存在一些漏洞的话,配合这些漏洞可以实现图片文件按照脚本文件解析。
1.4.文件检测流程
通常一个文件以HTTP协议进行上传时,将以POST请求发送至web服务器,web服务器接收到请求后并同意后,用户与web 服务器将建立连接,并传输data:
而一般一个文件上传过程中的检测内容如下部分:
客户端 javascript 检测 (通常为检测文件扩展名)
服务端 MIME 类型检测 (检测 Content-Type 内容)
服务端目录路径检测 (检测跟 path 参数相关的内容)
服务端文件扩展名检测 (检测跟文件 extension 相关的内容)
服务端文件内容检测 (检测内容是否合法或含有恶意代码)
1.5.文件上传思路
扫描获取上传,会员中心头像上传,后台系统上传,其他途径上传。
1.6.web界面存在的风险点
上传头像、上传身份认证、上传文件以及有存在文件上传的地方就可能存在相关的漏洞,但不是有文件上传就一定有漏洞,但有文件上传就能进行测试。
1.7.文件上传实战思路
上传文件和文件执行是两个东西
漏洞分类:解析漏洞、cms漏洞、其他漏洞(编辑器漏洞、cve漏洞、安全修复)
思路:
如果有一个网站,要从文件上传的方向开始
第一步:先看中间件,看是否存在解析漏洞/CMS/编辑器漏洞/CVE/
如果有,如何找:
字典扫描:扫描会员中心,文件上传的位置
找到后,如何利用:
验证/绕过
2.靶场搭建
https://pan.baidu.com/s/1NeZ-kcZEix3UNpTHRJdczA?pwd=doba
下载之后解压到小皮下www目录,之后开始

3.文件上传
3.1.upload-labs第一关
通过禁用界面JS处理,然后上传web.php文件,可绕过前端检测。关于如何禁用界面JS,

母马

禁用之后母马直接上传成功,这里显示为一张图片,复制图片地址,然后在蚁剑上进行连接,
http://172.16.80.29/upload-labs/upload/web.php?0=assert&1=eval($_POST['123'])


3.2.检测文件类型
3.2.1.基本概念
服务端通过检查http中包含的Content-Type字段中的值来判断上传文件是否合法的。
利用Burp抓包,将报文中的Content-Type改成允许的类型
Content-Type: image/gif(gif图像)
Content-Type: image/jpg(jpg图像)
Content-Type: image/png(png图像)
3.2.2.upload-labs第二关

当上传文件web.php,提示文件类型不正确,通过查看源码并没有找到限制文件的上传,由此可以猜测肯定是在后端做的限制,我们抓包一探究竟

通过抓包可以发现这里的文件类型为默认参数,而我们这种情况上传文件肯定是上传不上去的,
通过源码中第五段分析得出本关采用了content-type进行后端验证,那么通过使用BS抓包对其进行修改content-type,然后再进行上传。欧克
3.3.黑名单
黑名单就是服务端明确不让上传的格式后缀,例如:rar、php、zip等。
3.3.1.特殊解析后缀
3.3.2.基本概念
特殊解析后缀绕过是由于黑名单过滤规则不严谨,在某些特定的情况下的后缀也能够被当作php文件进行解析,例如PHP2、php3、php4、phtml、pht等情况。
可以使用phtml、php3、php4、php5,当然前提是apache服务器,同时在配置文件夹中需要有将AddType application/x-httpd-php .php .phtml .phps .php1 .php4 .pht 这样的一段话前面的注释删除,重启phpstudy让其生效。

3.3.3.upload-labs第三关
通过源码得知,禁止.asp、.aspx、.php、.jsp类型进行上传。
本关可以通过上传其他文件扩展名进行绕过,实现文件上传。
这里提示上传一张图片

那就上传一张"图",他说不能上传这几个类型,那我改个名不就好了,
![]()
很明显上传成功了,之后访问web.php5就欧克
3.4..htaccess解析
3.4.1.基本概念
.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置.通过htaccess文件,可以实现:网页301重定向、自定义404页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
这时候补充一个知识点:
.htaccess文件解析漏洞
.htaccess参数
常见配法有以下几种:
1.AddHandler php5-script .jpg
2.AddType application/x-httpd-php .jpg
3.Sethandler application/x-httpd-php
Sethandler 将该目录及子目录的所有文件均映射为php文件类型。
Addhandler 使用 php5-script 处理器来解析所匹配到的文件。
AddType 将特定扩展名文件映射为php文件类型。
简单来说就是,可以将我们所的文件都解析成php或者是特定的文件解析为php
3.4.2.upload-labs第四关
通过源码得知第三关使用的都被限制了,并且设定了更多的特殊解析后缀,所以使用特殊解析后缀已经无法绕过了,这里就可以使用到 .htaccess进行绕过测试。

前提条件:
Apache开启rewrite模块
.apache配置文件为AllowOverride All(默认为None)
.htaccess需要使用notepad++创建,不然创建不了,创建 .htaccess代码:
SetHandler application/x-httpd-php
这是将本目录及所有子目录的所有文件都解析为php文件
首先上传.htaccess,其次上传一张名叫x.png的文件,即可执行。


3.5.大小写绕过
3.5.1.基本概念
后缀大小写是通过服务端未将后缀进行统一的格式转换,导致可以上传PHP的文件,同时由于Windows系统对后缀大小写并不敏感,所以当在写PHP的改成Php就会被当作PHP进行解析。
3.5.2.upload-labs第五关
通过源码得知,并未对其大小进行限制,且是由于是黑名单,只限制了不可以上传的,那么的我们可以对php后缀进行大小写变形,例如:PHP、Php、pHp等。


3.6.空格绕过
3.6.1.基本概念
空格绕过其实就是利用了Windows对文件和文件名的限制,当将空格放在结尾的时候,就会触发操作系统的命名规范问题,所以在生成文件的时候,添加在结尾的空格就会被去除。
3.6.2.upload-labs第六关

通过源码发现并未对空格进行限制,那么我们可以在后缀添加一个空格进行绕过,但是在Windows系统中我们无法创建后缀带空格的文件,但是在数据包中不会对后缀的空格进行清楚啊,那么我们这里就需要使用到BS进行抓包,对其进行修改,然后再进行上传。

通过修改后上传到对方服务器的时候,服务器会自动对后面的空格清除,就实现了绕过。
后边就是上传的文件,这里他将我们的文件进行了重命名。
3.7.点绕过
3.7.1.基本概念
其实点绕过和空格绕过是一样的,都是利用操作系统的特性来进行解析绕过。具体可以看空格绕过的解释。
3.7.2.upload-labs第七关
通过源码发现,本关并未对结尾点进行检测。那么这里就可以通过在后缀加上点进行绕过,这里我使用的是之前大小写的文件,并未修改名称,所以不要太在意,并不是说使用大小写可以绕过。

3.8.::$$DATA绕过
3.8.1.基本概念
在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名
3.8.2.upload-labs第八关

通过源码发现并未对::$DATA进行检测。可以在后面添加::$DATA进行绕过。


3.9.upload-labs第九关
通过源码发现本关之前所有的绕过思路都被过滤了,但是通过源码发现,所有的过滤都是一次的,并未对其进行循环过滤。也就是说源码中提到的删除空格,删除点都是只删除一次,那么可以在数据包中将php后缀添加. .,形成.php. .,由于只验证一次,所以删除一个点和一个空格后就不在删除了。

$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx"

本文围绕文件上传漏洞展开,介绍了其概念、危害、满足条件、检测流程等。通过搭建upload-labs靶场进行实战,详细阐述了多种绕过文件上传检测的方法,如禁用JS、修改Content-Type、利用黑名单和白名单规则等,最后还给出了文件上传漏洞的防御手段。
最低0.47元/天 解锁文章

7639

被折叠的 条评论
为什么被折叠?



