欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]J2EE_WEB安全测试系列文章

[原创]J2EE_WEB安全测试系列文章

文档
1、JAVAWEB源码审计
http://www.ibm.com/developerworks/cn/views/java/libraryview.jsp?sort_by=&show_abstract=true&show_all=&search_flag=&contentarea_by=Java+technology&search_by=%E4%BB%A3%E7%A0%81%E5%AE%A1%E8%AE%A1&topic_by=-1&type_by=%E6%89%80%E6%9C%89%E7%B1%BB%E5%88%AB&ibm-search=%E6%90%9C%E7%B4%A2
2、JSTL过滤XSS
http://pukkaone.github.io/2011/01/03/jsp-cross-site-scripting-elresolver.html
http://xiemingmei.iteye.com/blog/2105826
http://zone.wooyun.org/content/2448
3、EL-injection
http://danamodio.com/appsec/research/spring-remote-code-with-expression-language-injection/
4、XML漏洞
http://resources.infosecinstitute.com/soap-attack-2/
5、flash漏洞
1)http://blog.detectify.com/post/86298380233/the-pitfalls-of-allowing-file-uploads-on-your-website
2)http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/URLLoader.html
一、认证测试
1.1、用户名枚举漏洞测试
1.1.1、漏洞产生原因分析
目前很多注册页面在注册前采用ajax、jquery无刷新先判断用户名是否已经被注册,该机制方便提醒用户是否账户已被注册,同时引入登录账户名可枚举安全问题。
如下代码:
1、客户端使用ajax技术实现无刷新获取表单提交数据至后端验证(ajax代码仅供参考):
function validatorloginName(){
                 var loginName=document.getElementById("uname").value;
                 if(loginName == "")
                 {
                         alert("用户名不能为空!");
                         return;
                 }
                 $.ajax({
                                 type: "POST", //提交方式  
                         url: "ValidateName", //后端业务处理页面   
                          data: "loginName="+loginName, //提交post数据
                         success: function(data)//回调处理方法{
                            if(data=="true"){   
                             alert("恭喜您!用户名没有被使用!");  
                            }else{   
                             alert("抱歉!用户名已存在!");   
                            }
                                  }         
                        });   
                }               
2、后端servlet业务处理参考代码:

1.1.2、安全测试方法
1、        使用burpsuite拦截ajax报文发送至Send to Intruder

2、针对用户名字段添加变量符$,添加payload进行账户遍历猜解。

1.1.3、修复建议
添加验证码、一次性token
1.2、用户名/密码弱口令
1.2.1、漏洞产生原因分析
业务系统发布或调试阶段使用弱口令,常见弱口令有admin/admin、admin/admin888、system/system888等等。

1.2.1、安全测试方法
测试人员可根据常见社工库做筛选排序,选出最常用的200个、6000个密码作为个人字典,在不同类型网站中进行使用。
1.2.2、修复建议
使用字母、数字、特殊字符长度超过8位字符位元素设置强壮口令,并定期修改。
1.3、登录认证模式绕过
υ        漏洞产生原因:
很多网站登录设计采用表单验证模式,登录设计如果存在sql注入漏洞,则可以通过sql注入语句进行表单绕过。
漏洞代码

υ        安全测试方法
用户名/密码:'or'='or'/ 'or'='or',admin' or '1'='1/ admin' or '1'='1, ' or '1'='1/ ' or '1'='1,admin' or '1'='1—/11
υ        修复建议:

使用PrepareStatement预编译对象进行参数化查询。
1.3.2、非授权访问
υ        漏洞产生原因:
一些需要登录才能访问页面,缺乏对用户登录会话、token进行验证有效性判断,导致非合法会话、token也可以访问原本需要用户登录态页面。
υ        安全测试方法:
1、借助Dirbuster进行目录猜解、点击测试需授权访问页面能否在非登录状态下打开访问。
2、手工访问常见登录后页面main.jsp、menu.jsp、left.jsp、botton.jsp等。
υ        修复建议:
修复方法可以在某个页面文件包含一个用于验证会话/token是否有效的文件,也可以新建个过滤器Filter,在dofilter()方法中进行用户会话\token有效性判断,并在web.xml配置filter适用url,推荐使用过滤器,效率高如:
<filter>
        <filter-name>login</filter-name>
        <filter-class>com.jingxing.oa.filter.LoginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>login</filter-name>
        <url-pattern>admin/*</url-pattern>
</filter-mapping>
1.3.3、验证码机制绕过
υ        漏洞产生原因:
验证码设计用于区分机器与人为操作,可用于防治恶意注册、暴力破解等频发操作,如果验证码采用本地cookie生成验证、验证码无法一次/一用(不及时刷新)、或者验证码可以轻易OCR识别则存在设计不当。
υ        安全测试方法:
1、        验证码输出在cookie中

1、        验证码不及时更新漏洞
每次登录验证码老半天不更新、一次多用。
2、        可轻易OCR(噪点或扭曲度不够)
可下载http://zone.wooyun.org/content/19188?&from=androidqq?工具测试验证码是否可以识别。

3、        验证码逻辑设计不当,无非空判断等
可http://www.wooyun.org/bugs/wooyun-2014-083050
1.3.4、后台Js跳转验证绕过
υ        漏洞产生原因:
网站的后台登陆在输入用户名和密码错误以后使用的JS跳转,页面会自动跳转到登陆页面,也就是说如果突破了JS也就可以直接管理后台了(利用条件是登录后的页面未判断session、token)。
υ        安全测试方法:
这类漏洞一般都会访问时,都可以通过肉眼看到部分登录后页面,或者抓包能看到加载了登录后页面。

1、在Firefox地址栏里输入“about:config”。
2、在搜索栏输入“javascript.enabled”查找到首选项。
3、点击鼠标右键选择“切换”,把“javascript.enabled”键值改为“false”
这样就能禁止JavaScript的运行了。
4、再次访问页面,如果能登录成功,则存在安全问题。
υ        修复方案
身份验证检测放服务端检测、参考登录验证章节。
response.sendRedirect("main.jsp");
<jsp:forward page="main.jsp"></jsp:forward>
1.3.5、手机OTP认证绕过
υ        漏洞产生原因分析
网站手机OTP动态口令绕过主要存在以下几种情况:
1、        手机otp动态码失效时间设计有问题,目前多半是2分钟左右时效,如果时效过长,存在一定风险;
2、        手机otp动态码发送后,在页面源代码中本地显示;
3、        手机otp位数低于4位,设计安全性不高;
4、        后台otp验证机制有缺陷,如无非空判断;
5、        手机otp与账密验证逻辑分离,可绕过;
6、        手机otp随机性不强,可预测。
7、        手机otp验证结果前端认证,修改返回状态码,可绕过。
υ        漏洞测试方法
1、        在等待输入手机otp页面,超过2分钟后输入,观测是否失效;
2、        view-source页面源代码,观测是否在本地代码中显示动态号;
3、        上述3-6根据抓包比对分析,难度不大。
υ        修复建议
略。

上传的附件 1.png
2.png
3.png
4.png
5.png
6.png
7.png
8.png
9.png

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功