IIS6.0解析漏洞

解析漏洞原理介绍:

1.当建立*.asa、*.asp格式的文件夹时,其目录下的任意文件都被IIS当作ASP文件进行解析
2.当文件时*.asp;1.jpg时,IIS6.0同样会将文件作为ASP文件进行解析,同时包括下面三种文件格式,也同样被当作asp文件进行执行
test.asa;1.jpg
test.cer;1.jpg
test.cdx;1.jpg

我们以一个实例来进行演示,如下所示,当上传一个普通的文件的时候,我们发现保存的路径为http://xxxxxxxx/xxxxxx.gif,同时我们发现可疑值filepath=/

1645575239507-aa248cab-811e-4924-bf64-0e9867ea011b.png

我们修改filepath的值,可以发现会进行地址拼接,所以我们可以利用这个点来进行构造asp解析文件

image-20240803105948649

我们将filepath的值修改为x.asp;.,再发包,会出现下面的情况

image-20240803110135145

此时我们成功触发asp的代码,IIS可以把其当作asp代码进行解析,如下所示

1645576004256-c34d8a9f-a5fc-414b-9bfb-95b152b9e813.png

当然我们也可以将filepath修改为/x.asp/,即构造一个asp目录,使得其目录内的文件全部被当作asp文件进行解析,但是这个要配合权限设置,即对方开启了创建目录的权限,否则无法利用这个漏洞

Apache解析漏洞

换行解析漏洞

apache的换行解析漏洞的出现是由于apache在修复第一个后缀名解析漏洞的时候,使用正则表达式匹配后缀,在解析php时将xxx.php\x0A当作PHP后缀进行解析,导致绕过安全策略

CVE-2017-15715漏洞复现

我们使用vulhub进行漏洞复现,在具有docker环境下的ubuntu或者kali进行搭建,搭建命令如下所示

git clone https://github.com/vulhub/vulhub.git //拉取镜像
cd vulhub/httpd/CVE-2017-15715
docker-compose up -d //启动容器

找到8080端口,访问即可,如下所示

image-20240803160426625

我们首先随便上传一个php文件,然后抓包看看是什么情况

image-20240803160807482

当我们提交一个php文件的时候,会给我们返回一个badfile,即我们上传不上去,这里我们利用换行解析进行绕过,如下所示,我们首先切换到HEX模式,在evil.php后面添加一个换行符,即0a

image-20240803161205867

点击发送,发现不返回badfile,证明我们成功绕过

image-20240803161311341

我们去访问这个文件,输入evil.php%0a,成功上传

image-20240803161557160

多后缀解析漏洞

Apache解析文件的规则是从右往左开始判断解析,如果后缀名为不可识别文件解析,就再从左往右进行判断。比如test.php.a.b.a.b这两种后缀是apache不可识别的,所以apache会将其解析成test.php

影响版本:apache 1.x apache 2.2.x

下面以一个实例进行演示

apache_parsing_vulnerability复现

image-20240803163207241

我们首先看到apache版本号,初步判断有文件上传漏洞

image-20240803163435831

我们将文件命名加上.jpg,发现成功上传,访问该文件,发现apache将其当作php文件进行执行

image-20240803163536767

当然,如果要保证这个效果,还需要我们上传之后不会对其进行重命名,否则该漏洞也失效,即不会对attack.php进行重命名

Nginx文件上传漏洞

Nginx文件名逻辑漏洞

CVE-2013-4547漏洞是由于非法字符空格和截止符号导致Nginx在解析URL时的有限状态机混乱,导致攻击者可以通过一个非编码空格绕过后缀名限制

http://xxxxxxxxx/123.png \0.php

从代码层面来说,我们请求的url中123.png[0x20][0x00].php正好与location模块中的.php相匹配,但进入该模块后Nginx确认为请求的文件名是123.png,就设置其为script_name的值交给CGI进行解析,最终造成解析漏洞

影响版本:Nginx 0.8.41-1.4.3/1.5.0-1.5.7

CVE-2013-4547漏洞复现

随便上传一个文件,查看ngnix版本号

image-20240803170125049

符合我们的影响版本范围,我们直接进行操作,将20改成00即可

image-20240803170649346

image-20240803170834185

成功上传,我们访问一下试试

image-20240803171218858

Nginx解析漏洞

对于任意文件名,在后面添加/abc.php(abc为任意字符)后,即可将文件作为php解析

Nginx的解析漏洞的出现和Nginx的版本没有关系,漏洞的产生是由于php配置问题导致的。

影响的范围:全版本 Nginx拿到文件路径(URI)/test.jpg/abc.php后,一看后缀是.php,便认为该文件是php文件,转交给 php去处理。php一看/test.jpg/abc.php不存在,便删去最后的/abc.php,又看/test.jpg存在,便 把/test.jpg当成要执行的文件了

nginx_parsing_vulnerability复现

image-20240803171841899

首先限制了我们上传图片,我们试着能不能通过MIME进行绕过

image-20240803171922225

MIME可以绕过第一层,但是还是会检测后缀,这个时候就要利用解析漏洞了

image-20240803172039700

我们首先上传一个png,然后在访问的时候在后面随机加上php后缀文件,如下所示

image-20240803172158431

成功利用

Ueditor文件上传安全

主要是编辑器是否存在漏洞,跟源码和中间件无关,我们首先要看哪里有上传点,看到哪里有上传点后,看编辑器的类型是哪一种,然后找历史漏洞,现在一般也很少见了

具体利用过程参考这一篇文章:

Ueditor上传漏洞复现+环境搭建 - 黑岗0x0001 - 博客园 (cnblogs.com)