go开发web服务器,获取get和post参数仅获取;之前的内容
前言
在测试go语言开发的web网站(linux服务器)的rce时,分号(;)之后的内容被省略,误以为存在可绕过。测试后发现原因是go语言仅处理参数中第一个分号之前的字符,php测试无此现象。
简单测试
网上拼凑的代码做测试,勿喷,/手动狗头。 go服务器端代码(go version go1.16.5 windows/amd64):
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":18080", nil)
}
func handler(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
fmt.Fprintln(w, "*********get*********")
fmt.Fprintln(w, r.Form["a"][0])
fmt.Fprintln(w, "*********post*********")
fmt.Fprintln(w, r.PostFormValue("b"))
}
burp发包测试: content-type:application/x-www-form-urlencoded 1、参数未加分号
get:a=1111
post:b=2222
 结果:
*********get*********
1111
*********post*********
2222
2、参数加单个分号
get:a=11;11
post:b=222;2
 结果:
*********get*********
11
*********post*********
222
3、参数加多个分号
get:a=1;1;11
post:b=22;2;2
 结果:
*********get*********
1
*********post*********
22
php测试(PHP/7.2.0): content-type:application/x-www-form-urlencoded
<?php
echo "*****get*****\n";
echo $_GET['a']."\n";
echo "******post****\n";
echo $_POST['b']."\n";
?>
get:a=11;11
post:b=2;222
 结果:
*****get*****
11;11
******post****
2;222
(有时间测试下java与python)
总结
go语言开发的web服务器,接收前端传过来的参数时,仅获取参数中第一个分号之前的字符返回给后端。可以以此作为特征识别网站开发脚本语言使用go.
|