文件上传漏洞基础知识

文件上传过程中的解析漏洞

前言:我们在上一期关于文件上传漏洞的博客中将ctfshow 中有关文件上传漏洞的题都过了一遍,本篇中我们

来进一步学习文件上传漏洞 本篇将分为两个部分来进行,第一部份是中间件解析,第二部分是编辑器相关

1.0 iis的文件解析

有关iis的相关漏洞我们在之前的博客讲解过,今天把他结合到文件上传去一起看,比如IIS 6

版本的文件名,目录名解析,即x.asp;.jpgx.asp/x.jpg这两种类型,这两种类型的

文件在上传时虽然被识别为Jpg文件,但实际上是可以被iis中间件当作asp文件进行解析的,

这就给我们文件上传创建了条件

至于iis7.0的漏洞则和ngnix相同

1.1 apache httpd换行解析漏洞

Apache HTTPD在2.4.0~2.4.29版本中存在一个解析漏洞。 编号为CVE-2017-15715

该漏洞应用于黑名单限制 php文件上传的情况下

漏洞产生原理为:在 Apache httpd 2.4.0 到 2.4.29 中, 中指定的表达式可

以将“$”匹配到恶意文件名中的换行符(\x0A),而不是仅匹配文件名的末尾。这可以在某些

文件的上传被外部阻止的环境中被利用,但只能通过匹配文件名的尾部部分。例如,

1.php\0xA将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。

以vulhub中的例题为例子

本体的代码将php php3 php4 php5 phtml pht为后缀的文件加入黑名单,进制上传,在

该版本的中间件配置文件中,有

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

意思就是将符合上面正则表达式的文件解析为php文件运行,但我们注意到匹配的最后有个

$意思是进行行尾匹配,但是正是因为存在它,导致如果我们在行尾加上\n \r也会被正常

的匹配上从而解析成php文件进行执行,即绕过了代码的过滤,又可以将上传的文件作为

php文件解析,但由于换行和回车属于特殊字符,无法直接输入,所以我们利用时要抓包进

行更改

漏洞利用:抓到上传的请求,在header中的from-data:name="name"xxx.php的后面加一个

空格,我们已知空格的ascii编码是%20,点击添加的空格找到对应的20,将其改为0a,便可

成功上传后门代码,注意,文件名现在是xxx.php%0a所以访问时也需要加换行符

1.2 apache多后缀解析漏洞

漏洞原理:apache支持同一个文件拥有多个后缀,且不同的后缀执行不同的命令

比如

AddType text/html .html
AddLanguage zh-CN .cn

为.html的后缀文件增加meiad-type 设置为text/html 为.cn后缀设置语言为 zh-CN

因此如果有一个文件的文件名为xxx.cn.html 用户在请求该文件时则会获得一个语言为zh-

CN,media-type,值为text/html的html文件,同理,如果我们这样设置

AddHandler application/x-httpd-php .php

则文件名中如果包含.php,即使不是php文件也会当作php文件执行。

我们可以利用此方式通过构造多后缀进行恶意后门的上传

我们在实际使用时需要去进行测试

1.3 apache位置后缀解析漏洞

此漏洞产生的原因和前者很像,利用方式有两种 ,第一种

AddHandler application/x-httpd-php .  # 这里使用了一个点“.”作为后缀名,意味着任何后缀都会被当作PHP脚本处理

在apache配置文件中进行配置,就如上面这种

第二种:由于apache在遇到无法识别的文件类型时会像左读取,直到可以解析,所以我们

可以这样构造文件名:xxx.php.jepg 服务器默认的配置文件如果识别不了jepg文件,就会

向左继续解析,从而将其作为php文件进行解析,从而上传后门代码

1.4 ngnix文件逻辑名漏洞

漏洞编号:cve-2013-4547

适用版本: 0.5.,0.6., 0.7 <= 0.7.65, 0.8 <= 0.8.37

该漏洞存在于Nginx对于php的配置上,如果配置不当,就会导致nginx对%00等特殊字符出现

解析问题,结果是nainx将特定构造的url交给php处理,而nginx英文特殊字符原因,无法接受

有特殊字符的的url,从而再%00处阶段,造成客户上传的文件被当作php进行解析

利用过程:将图片码上传,请求上传的图片时抓包,然后起始行中在图片文件地址后加上一个

空格和.php,比如GET /upload/1.png .php 在十六进制界面将第二个空格改为00然后发送

请求,或者直接改起始行,改为GET /upload/1.png%00.php

此处这个漏洞属于00截断漏洞,文件系统在处理寻找文件的时候会有偏差,PHP语言的底层是

通过C语言来实现的,C语言字符串结束是00。PHP解释引擎在访问这个文件的时候,遇到了

00,认为该文件在%00处就结束了,所以读取的是png文件,但是是以php方式执行的

1.5 编辑器漏洞

网站引入的编辑器也会产生漏洞,即使网站本身的代码并没有漏洞,但是编辑器造成的漏洞

也会使整个网站产生漏洞

posted @   折翼的小鸟先生  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示