一、跨站点脚本编制
对修改原始请求参数添加的脚本进行过滤,找到关键词后对关键词进行替换或者直接报错跳转到异常页面。
过滤代码(以下过滤代码可能不全,请自行补充):
private static String[] errorChar = new String[]{"%0A","+"};
private static String[] zherrorChar = new String[]{"SELECT","FROM","DELETE","DROP","UPDATE","AND","WHERE","HAVING","GROUP","ORDER","DESC","ASC","OR","LTRIM"};
private static String _antiXSS(String content) { String ftc = new String(content); ftc = ftc.replace(">",">"); ftc = ftc.replace("<","<"); ftc = ftc.replace("'","'"); ftc = ftc.replace("\"","%22"); ftc = ftc.replace("oe",""); ftc = ftc.replace("script",""); ftc = ftc.replace("alert",""); ftc = ftc.replace("iframe",""); ftc = ftc.replace("SCRIPT",""); ftc = ftc.replace("ALERT",""); ftc = ftc.replace("IFRAME",""); ftc = ftc.replace("eval",""); if((!content.equals(ftc)) || (ftc.toLowerCase().indexOf("script") > -1)){ boolean isAntiXss = Boolean.valueOf(Configuration.getProperty("system.antixss.helper.throwerror", "false")); if(isAntiXss){ throw new SystemSecurityException("使用了违反安全规则的参数值[>,<,',\",script]!"); } } for(String errStr : errorChar){ if(ftc.toUpperCase().contains(errStr)){ throw new SystemSecurityException("使用了违反安全规则的参数值:["+errStr+"]!"); } } for(String errStr : zherrorChar){ if(ftc.toUpperCase().contains(errStr)){ String[] str = ftc.toUpperCase().split(errStr); if(str[0].endsWith("%28") || str[0].endsWith("+") || str[0].endsWith("%20") || str[0].endsWith(" ") || str[1].startsWith("%29") || str[1].startsWith("+") || str[1].startsWith("%20") || str[1].startsWith(" ")){ throw new SystemSecurityException("使用了违反安全规则的参数值:["+errStr+"]!"); } } } return ftc; }
通过在一些查询页面上的查询条件中添加sql关键字符和拼接条件来修改查询结果,如果查询结果正常或者与修改查询条件前类似,则表明注入成功。
1、项目开发时按照标准,在涉及到sql查询的地方,要使用参数绑定的方式传参,来解决sql盲注问题。(此种方法适用于sql盲注问题比较少的情况下)
2、对请求中参数进行判断和过滤,找到盲注类型的关键词后对关键词进行替换或者直接报错跳转到异常页面。(过滤代码上面已经有提到部分)
private static String[] errorChar = new String[]{"%0A","+"}; private static String[] zherrorChar = new String[]{"SELECT","FROM","DELETE","DROP","UPDATE","AND","WHERE","HAVING","GROUP","ORDER","DESC","ASC","OR","LTRIM"};
通过修改原始请求参数,在参数后追加特殊字符等,在响应中获取到了数据库报错的信息等。
1、针对每个sql注入的页面,针对每个页面的情况进行处理。(建议用此方案处理)
2、对请求中参数进行判断和过滤,找到盲注类型的关键词后对关键词进行替换或者直接报错跳转到异常页面。
通过修改原始请求访问的页面,但是得到了正确的响应结果。
分析产生原因,发现此问题是机器误报的问题,具体原因如下,当登录系统后访问一个不存在的页面,系统正常,会爆出页面不存在的问题。但是当系统没有登录的时候访问所有的jsp页面都会跳到登录页面。所以当访问一个存在和一个不存在的页面是,响应是一样的,所以测试系统认为存在Allaire JRun 2.3.X 样本源代码泄露的问题。解决方案就是当没有登录时也要处理页面不存在的问题。
例如:
原始请求:/xxxx/scripts/admin.jsp
测试请求:/xxxx//viewsource.jsp
测试结果:HTTP/1.1 200 OK,系统认为存在Allaire JRun 2.3.X 样本源代码泄露问题
if(uri != null &&uri.contains(".jsp")){ String path = req.getRealPath(""); File file = new File(path + uri.substring(0,uri.indexOf(".jsp") + 4)); if(!file.exists()){ systemLoginUrl = uri; } }
系统退出时没有清空session使得一部分会话标识没有被清空。
再退出系统时,清空session。
request.getSession().invalidate();//清空session Cookie[] cookies = request.getCookies();//获取cookie if(cookies != null && cookies.length > 0){ cookies[0].setMaxAge(0);//让cookie过期 }
系统登录后,平台登录的处理类会把一部分像用户名、密码等部分信息放到cookie中,然而没有指定secure属性,测评软件认为此漏洞为加密会话(SSL)Cookie 中缺少Secure 属性的漏洞。
userCookie.setSecure(true);
代码请自行到网上搜索
八、多供应商 Java Servlet 容器跨站点脚本编制
通过修改请求的url并向其中注入JavaScript代码,发送请求后,正确的执行了url中注入的script脚本。
对请求的url中的script脚本中的关键字段进行验证,并对有关键字段的url进行特殊的处理,或者直接抛出异常。
过滤器代码见问题一http的请求不是安全的请求,可通过心脏出血漏洞获取登录信息,并进行登录。
十、测试成功检索了“web.xml”文件的内容,其中包含有关 Web 应用程序部署的信息。
这证明所有用户均可访问 WEB-INF 目录。
标识:1497
描述: 将参数/cookie 值设置为:/WEB-INF/web.xml
差异:
以下更改已应用到原始请求:
已将参数“filePath”的值设置为“%2FWEB-INF%2Fweb.xml”
有问题的路径
http://xxxx/downFileProcessor.jsp?1=1&filePath=%2FWEB-INF%2Fweb.xml
不严谨的临时解决方案
if(null != filePath && (filePath.endsWith(".xml") || filePath.endsWith(".tld") || filePath.endsWith(".jar"))){
out.print("<font style=\"color:red\">你无权操作这个文件</font>");
return;
}
十一、低危漏洞:在参数值中找到了内部IP公开模式
例子:
有问题代码:
function view(tzlx){
var pagePath=location.href;
window.location.href="${ctx}/pages/platform/config/tz/tzItem.jsp?TZLX="+tzlx+"&pagePath="+pagePath;
}
十二、低危漏洞:Flash参数AllowScriptAccess已设置为always十三、通过框架钓鱼
此问题通过过滤器基本可以解决。
十四、中危漏洞:会话标志未更新
十五、不充分账户解锁
请您注意
·自觉遵守:爱国、守法、自律、真实、文明的原则
·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规
·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·您在NoteShare上发表的作品,NoteShare有权在网站内保留、转载、引用或者删除
·参与本评论即表明您已经阅读并接受上述条款