01.GET 传参案例案例
fastjson 的一个安全问题是不受信任的用户可以构造恶意 JSON 数据,导致远程代码执行漏洞。本漏洞案例演示了一个 fastjson GET 请求传参的示例,其中存在潜在的 fastjson 远程代码执行漏洞。
示例代码:
{
Title: "GET 传参案例案例",
Path: "/json-in-query",
DefaultQuery: `auth={"user":"admin","password":"password"}`,
Handler: func(writer http.ResponseWriter, request *http.Request) {
if request.Method == http.MethodGet {
action := request.URL.Query().Get("action")
if action == "" {
// 返回登录页面或脚本
// 省略部分代码
return
}
auth := request.URL.Query().Get("auth")
if auth == "" {
writer.Write([]byte("auth 参数不能为空"))
return
}
response := mockController(generateFastjsonParser("1.2.43"), request, auth)
writer.Write([]byte(response))
} else {
writer.WriteHeader(http.StatusMethodNotAllowed)
}
},
}
攻击示例:
http://127.0.0.1:8787/fastjson/json-in-query?auth={"@type":"java.net.Inet4Address","val":"dnslog"}&action=login
在以上 URL 中,攻击者传递了一个 auth 参数,其中包含了恶意构造的 JSON 数据。这个恶意 JSON 数据可能触发 fastjson 解析器漏洞。
防御措施:
- 更新 fastjson 库: 确保使用的 fastjson 库是最新版本,因为早期版本可能存在已知的漏洞。
- 白名单: 对 JSON 数据中的字段和内容进行白名单验证,只接受预期的字段和数据。
- 谨慎使用 fastjson: 在不受信任的环境中,避免使用 fastjson 解析不受信任的 JSON 数据。