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 数据。