在发送payload时浏览器会自动对一些特殊字符进行url编码,服务器端会自动进行一次解码。具体情况如下:
- 普通字符(a-z,1-9等)无需url编码
- !@¥%*(){}<>\t(空格)等字符会自动进行url编码其中GET方法只对<>\t(空格)进行了编码,POST对所有字符进行了编码。通过测试发现这些字符即使不进行编码也可以正常传输
- &#,这些很特殊,他们在url中都有特殊含义,正常情况下是不会被浏览器编码以发挥自身作用。但是如果想要得到对应的字符那就进行url编码
注:当我们想要发送的命令包含有特殊字符时可以考虑进行俩编码,如果是渗透linux系统还可以考虑使用base64编码。
bash -c '{echo,base64编码的命令}|{base64,-d}|{bash,-i}'