旧版网站容易受到XSS攻击

时间:2014-03-05 09:13:26

标签: xss

我在旧网站上遇到了XSS。

易受此攻击的参数是:ldapSearch.jsp?f=

添加XSS有效负载以检查它是否容易受到攻击:"><img src=x onerror=prompt(0);>

网址如下:

http://idenservices.hostname.com/axrac/ldapSearch.jsp?f=%22%3E%3Cimg%20src=x%20onerror=prompt%280%29;%3E

XSS弹出窗口出现并证明该站点容易受到XSS攻击。

来自JSP的

Snippet

<tr>
    <td class="required">*</td>
    <td class="label"><h3>Enter User's Core ID</h3></td>
    <td class="field"><input type="text" name="userid" size="25" maxlength="20"  onkeypress="return isAlphaNumberKey(event)"  onblur="return LowerCaseAlphanumeric(document.getElementById('userid'));"><a href="javascript: userlookup('userid','frmEditUser');" class="link">Lookup User</a></td>
</tr>

来自JS的片段

function userlookup(fieldName, formName) 
{
    var uri = "/axrac/ldapSearch.jsp?f=" + formName + "&f1=" + fieldName;
    msgWindow=open(uri,'lookup','width=600,height=400,resizable=yes,toolbar=no,menubar=no,location=no,directories=no,status=no');
    msgWindow.focus();
}

添加ldapsearch.jsp

<%
    String backFieldName  = request.getParameter("f1");
    String backFormName   = request.getParameter("f");
%>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="PageSubHeader1">
<tr class="bg">
    <td class="flag">&nbsp;</td>
    <td class="banner" width="100%"><h2>LDAP Search</h2></td>
</tr>
</table>
<table cellpadding="0" cellspacing="0" border="0" class="PageIntroduction">
<tr>
    <td class="copy">
    <br/>When searching for a person by their name, please provide 2 or more letters for their first and last name.
    If less than 2 letters are entered for both fields or if one field is empty, the search may not return any results.
    </td>
</tr>
</table>
<p class="HorizontalRule"></p>

<form action='ldapSearchResults.jsp' method='post'>
<input type="HIDDEN" name="backFieldName"   value="<%=backFieldName%>">
<input type="HIDDEN" name="backFormName"    value="<%=backFormName%>">


<table width="100%" cellspacing="0" border="0" class="Forms">
<tr>
    <td class="required">*</td>
    <td class="instruction" colspan="2"><h2>Indicates required field</h3></td>
</tr>
<tr>
    <td class="required">*</td>
    <td class="label"><h3>First Name</h3></td>
    <td class="field"><input type=text name='firstName' size="20"></td>
</tr>
<tr>
    <td class="required">*</td>
    <td class="label"><h3>Last Name</h3></td>
    <td class="field"><input type=text name='lastName' size="20"></td>
</tr>
<tr>
    <td>&nbsp;</td>
    <td class="label" colspan="2"><h3>- Or -</h3></td>
</tr>
<tr>
    <td class="required">*</td>
    <td class="label"><h3>Core ID</h3></td>
    <td class="field"><input type=text name='coreID' size="20"></td>
</tr>
</table>

<p class="HorizontalRule"></p>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="Buttons">
<tr>
    <td><input type="submit" class="systemButton1" value="Submit Form" id="Submit"> <input type="reset" class="systemButton2" value="Reset Form" id="Reset"></td>
</tr>
</table>
</form>

</body>
</html>

我没有看到任何JavaScript问题,但仍然容易受到XSS攻击。需要帮助理解它为什么容易受到攻击,以及我该怎么做才能解决这个问题。

1 个答案:

答案 0 :(得分:2)

  

需要帮助了解它为何易受攻击

您可以在此处输入用户输入:

String backFieldName  = request.getParameter("f1");

然后你输出它,没有修改,在这里:

<input type="HIDDEN" name="backFieldName"   value="<%=backFieldName%>">

(您也会对其他数据执行相同操作,但我们将使用此示例)。

这允许任何人制作包含">后跟任何HTML(包括<script>元素或所需付款表单)的链接,将其发送给某人,然后让他们的HTML显示当该人关注链接时,在您的网站上。

  

我应该怎么做才能解决这个问题。

将HTML中具有特殊含义的任何字符转换为各自的实体,或通过白名单运行数据以过滤掉可能不良的输入。

进一步阅读:OWASP XSS Prevention Cheat Sheet