漏洞复现
漏洞复现
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
,即可看到后台登录页面:
执行docker compose logs | grep password
可查看管理员密码,管理员用户名为weblogic
,密码为 OUJAioA1
:
登录后台页面,点击base_domain
的配置,在“高级”中开启“启用 Web 服务测试页”选项:
访问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目录,访问这个目录是无需权限的,这一点很重要。
然后点击安全 -> 增加,然后上传webshell.jsp:
文件内容为:
1 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> |
上传后,查看返回的数据包,其中有时间戳:
然后访问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端口查看首页面:
提示我们上传一个文件,这里上传一下 phpinfo.php
文件看一下:
提示“bad file”,上传失败,说明大概率被拦截了。
打开burpsuit抓包之后,在1.php后面插入一个\x0A(换行的十六进制表示)
(注意,不能是\x0D\x0A(回车的十六进制表示)
,只能是一个\x0A
),不再拦截:
访问 /1.php%0a
,显示页面如下:
复现成功!
Nginx 解析漏洞
漏洞简介
版本信息:
- Nginx 1.x 最新版
- PHP 7.x最新版
由此可知,该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞。
漏洞原理
正则匹配规则过于宽松:
- Nginx 配置中,
location ~ \.php$
会将所有以.php
结尾的路径交给 PHP-FPM,而不管文件是否真实存在。
PHP-FPM 配置不严谨:
- PHP-FPM 接收到路径后直接执行文件,而不检查其文件类型或后缀。
上传目录未隔离:
- 上传目录与 PHP 文件所在的目录未分开,导致攻击者可以上传伪装为图片的恶意代码。
漏洞复现
首先访问 /uploadfiles/nginx.png
,查看页面如下:
然后访问 /uploadfiles/nginx.png/.php
,即可被当做php代码执行:
我们来看一看正常情况下的上传文件的页面 /index.php
,显示只能上传图片文件:
发现我们正常情况下是不能上传php文件的。
漏洞复现成功!
Nginx 文件名逻辑漏洞(CVE-2013-4547)
漏洞简介
影响版本:Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7
漏洞原理
这个漏洞其实和代码执行没有太大关系,其主要原因是错误地解析了请求的URI,错误地获取到用户请求的文件名,导致出现权限绕过、代码执行的连带影响。
举个例子,比如,Nginx匹配到.php结尾的请求,就发送给fastcgi
进行解析,常见的写法如下:
1 | location ~ \.php$ { |
正常情况下(关闭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 | location /admin/ { |
我们可以请求如下URI:/test[0x20]/../admin/index.php
,这个URI不会匹配上location后面的/admin/
,也就绕过了其中的IP验证;但最后请求的是/test[0x20]/../admin/index.php
文件,也就是/admin/index.php
,成功访问到后台。(这个前提是需要有一个目录叫“test ”:这是Linux系统的特点,如果有一个不存在的目录,则即使跳转到上一层,也会爆文件不存在的错误,Windows下没有这个限制)
漏洞复现
访问 8080
端口,进入上传首页:
尝试上传一个php文件,发现被过滤了:
那么我们上传一个png文件,然后抓包,注意添加文件名后面的空格:
访问http://your-ip:8080/uploadfiles/phpinfo.png[0x20][0x00].php
,即可发现PHP已被解析(先写成phpinfo.png.php
的形式,然后抓包使用hex进行添加\x20
和\x00
):
放包,发现已经被成功解析:
复现完成!
RCE
Webmin远程命令执行漏洞
漏洞简介
Webmin是一个用于管理类Unix系统的管理配置工具,具有Web页面。在其找回密码页面中,存在一处无需权限的命令注入漏洞,通过这个漏洞攻击者即可以执行任意系统命令。
漏洞复现
首先访问靶场环境https://127.0.0.1:10000,出现首页:
访问https://127.0.0.1:10000/password_change.cgi
我这里使用hackbar直接修改数据(也可以直接使用burpsuit修改):