本篇文章仅用于技术交流学习和研究的目的,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关
靶机是作者购买VIP使用退役靶机操作,显示IP地址为10.10.10.107
本次使用https://github.com/Tib3rius/AutoRecon 进行自动化全方位扫描
执行命令 autorecon 10.10.10.127 -o ./Fortune-autorecon
也可以使用官方的方法进行快速的扫描
sudo masscan -p1-65535,U:1-65535 10.10.10.127 --rate=1000 -p1-65535,U:1-65535 -e tun0 > ports ports=$(cat ports | awk -F " " '{print $4}' | awk -F "/" '{print $1}' | sort -n | tr ' ' ',' | sed 's/,$//') sudo nmap -Pn -sV -sC -p$ports 10.10.10.127
或者用下面简单的方式扫描下
sudo nmap -sT -p- --min-rate 10000 -oA alltcp 10.10.10.127
发现开放了3个端口,22端口就不试了,没必要爆破,直接访问80端口,发现是一个供选择的选项页面,随便选一个抓包,看到post请求有可变参数,测试了下存在命令执行,使用curl直接操作执行命令
curl -s -X POST http://10.10.10.127/select -d "db=;id" |html2text html2text 这个需要使用apt-get install html2text装一下
再使用命令sslyze分析下目标https的443端口,得到如下证书相关信息
sslyze --regular 10.10.10.127
经过一番下面的命令操作
得知目标系统有3个用户,然后这3个用户的所有文件夹及文件,发现重要的证书信息
得到目标靶机上的证书私钥和公钥,将intermediate.key.pem intermediate.cert.pem这两个文件的内容拷贝到本地kali中,用途是因为前面扫描出来的443端口,走https无法正常访问,需要使用此证书信息重新生成ptx证书导入到浏览器,才能正常访问,相关文档可参考:
https://www.openssl.org/docs/man1.0.2/man1/genrsa.html
https://www.openssl.org/docs/manmaster/man1/req.html
https://www.openssl.org/docs/man1.0.2/man1/x509.html
https://www.openssl.org/docs/manmaster/man1/pkcs12.html
根据CA证书信息签发证书 openssl genrsa -out cntf.key 2048 openssl req -new -key cntf.key -out cntf.csr openssl x509 -req -in cntf.csr -CA intermediate.cert.pem -CAkey intermediate.key.pem -CAcreateserial -out cntf.pem -days 1024 openssl pkcs12 -export -out cntf.pfx -inkey cntf.key -in cntf.pem -certfile intermediate.cert.pem 将上述得到的pfx证书导入到浏览器然后访问https://10.10.10.127 看到一个uri地址,然后点击即可生成公钥和私钥信息
上述完成之后开始导入到火狐浏览器上
成功访问之后发现如下页面提示需要使用authpf相关命令获取网络防火墙开放的权限
点击generate发现含有公钥和私钥
此时还不知道目标含有哪些用户,再次用上面的rce执行命令查看有哪几个用户
根据上面的显示只有nfsuser用户对应得shell是上面要求得authpf,且只有通过authpf命令才能再次放行目标靶机得网络防火墙策略,所以直接ssh过去就可以通过authpf命令开放网络防火墙
再次使用nmap扫描一把
发现开发了 2049,8081端口访问8081端口看到如下信息
提示服务不可用,让看看charlie用户得详细信息,那我们看看2049端口,这个端口就是开放得nfs服务,我们直接用命令查看是否开放共享文件夹
还真开放了一个home目录文件夹,直接挂载到本地来
刚好我使用得当前用户kali对应得uid是1000真好和目标靶机得用户charlie是一样得,所以通过nfs挂载目录到本地就可以直接获取用户charlie得权限
通过上面就可以读取user.txt信息了,为了方便,我直接将本地kali得公钥写入到此用户.ssh目录下得认证文件,然后在kali上远程ssh登录
到了此处便可以登录到目标系统上了,回看前面8081端口提示pgadmin4相关得服务,和上述邮件提示反馈设置得pgadmin4的dba密码就是跟root密码一样,那么我们可以直接进行代码审计找出加密dba密码的加密算法,从而解密dba密码之后就可以以dba密码登录root用户,这里代码审计过程我就略过了,详细可以参考如下:
https://0xdf.gitlab.io/2019/08/03/htb-fortune.html#priv-charlie--root
具体操作如下:
找到dba加密的密码信息
找到用户bob和charlie的加密信息
开始解密密码,下面解密代码模块
wget https://raw.githubusercontent.com/postgres/pgadmin4/e23d307c56e92453dc5ea108214c52bdb2409705/web/pgadmin/utils/crypto.py
得到下面的密码直接su切换至root用户权限
R3us3-0f-a-P4ssw0rdl1k3th1s?_B4D.ID3A!