
漏洞描述:
可通过篡改用户名或ID、暴力破解验证码等方式修改/重置任意账户的密码。
测试方法:
密码修改的步骤一般是先校验用户原始密码是否正确,再让用户输入新密码。修改密码机制绕过方式大概有以下三种:
密码重置机制绕过攻击方式主要有以下两种:
风险分析:
密码修改功能常采用分步骤方式来实现,攻击者在未知原始密码的情况下绕过某些检验步骤修改用户密码。
重置密码过程一般是首先验证注册的邮箱或者手机号,获取重置密码的链接(一般会包含一串唯一的字符串)或者验证码,然后访问重置密码链接或者输入验证码,最后输入新密码。密码重置机制绕过攻击是指在未知他人的重置密码链接或手机验证码的情况下,通过构造重置密码链接或穷举手机验证码的方式直接重置他人的密码。
风险等级:
【高危】:其它用户的密码被修改/重置成功
修复方案:
注意事项:暂无
漏洞描述:SSO认证存在缺陷,可越权登录他人账户。
测试方法:建议从以下两个方向进行测试:
1、信息传输缺乏安全保证
SSO认证通信过程中大多数采用明文形式传送敏感信息,这些信息很容易被窃取,致使重要信息泄露。另外,在通信过程中大多数方案也没有对关键信息进行签名,容易遭到伪装攻击。
2、Web服务的安全缺陷
由于单点登录基本上是基于Web服务实现的,所以也不可避免的存在Web服务的安全缺陷,如跨站脚本攻击、越权攻击等。
风险分析:因为只需要登录一次,所有的授权的应用系统都可以访问,可能导致一些很重要的信息泄露。
风险等级:
【高危】:可导致用户在单点登录之后任意登录其他系统和其他用户账号信息
修复方案:建议从以下几个方面进行防御:
注意事项:暂无
漏洞描述:越权访问,这类漏洞是指应用在检查授权(Authorization)时存在纰漏,使得攻击者在获得低权限用户帐后后,可以利用一些方式绕过权限检查,访问或者操作到原本无权访问的高权限功能。在实际的代码安全审查中,这类漏洞往往很难通过工具进行自动化检测,因此在实际应用中危害很大。其与未授权访问有一定差别。
测试方法:
风险分析:目前存在着两种越权操作类型:横向越权操作和纵向越权操作。前者指的是攻击者尝试访问与他拥有相同权限的用户的资源;而后者指的是一个低级别攻击者尝试访问高级别用户的资源,如图所示的情况。

风险等级:
【高危】:任意水平或垂直越权
修复方案:对用户操作进行权限校验,防止通过修改参数进入未授权页面及进行非法操作,建议在服务端对请求的数据和当前用户身份做校验检查。流程描述:在服务器接收到用户发送的页面访问请求时,根据预设的识别策略,从用户的页面访问请求中提取该用户对应的用户唯一标识信息,同时提取所述页面访问请求对应的应答页面中的表单及该表单中不可修改参数,将所述表单及不可修改参数与所述用户唯一标识信息绑定后记录到参数列表中;检测到用户提交请求页面的表单时,将所述请求页面的表单及不可修改参数与该用户对应的所述参数列表中记录的表单及不可修改参数进行比对,控制该用户的访问。例如:
| 登录时将用户名存入session session.setAttribute("username",username); 在相关页面判断 if((String)session.getAttribute("username")!=admin){ (response.sendRedirect("XXX.jsp")); |
注意: xxx.jsp为自定义的错误页面
注意事项:暂无
漏洞描述:Cookie伪造攻击指攻击者通过修改cookie(Web网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密)),获得用户未授权信息,进而盗用身份的过程,攻击者利用此漏洞可打开新账号或获取用户已存在账号的访问权限。
测试方法:使用burpsuite等代理软件或浏览器Cookie修改插件,篡改Cookie信息。
风险分析:Cookie中通常使用以下几种方式来确定一个会话:
攻击者可以对Cookie中的属性进行逆向分析,当Cookie中的唯一标识ID、token和时间戳可预测(如ID采用顺序增加方式,token值是用户名的MD5值)时,攻击者可通过遍历唯一标识ID、猜测token手段构造Cookie,来模拟一个有效的用户登录系统。
风险等级:
【高危】:伪造 cookie 后,成功进入业务系统或获取用户权限
修复方案:
注意事项:暂无
漏洞描述:会话中的参数可由客户端控制,导致客户端可以控制并修改会话参数。
测试方法:查看HTTP请求,分析会话中的可控参数并修改。
风险分析:攻击者可通过篡改会话变量,达到欺骗服务器的目的。
风险等级:
【中危】:会话中存在字段是由可控参数生成
修复方案:禁止从客户端传入会话变量
注意事项:暂无
漏洞描述:跨站请求伪造攻击,Cross-Site Request Forgery(CSRF),攻击者在用户浏览网页时,利用页面元素(例如img的src),强迫受害者的浏览器向Web应用服务器发送一个改变用户信息的HTTP请求。CSRF攻击可以从站外和站内发起。从站内发起CSRF攻击,需要利用网站本身的业务,比如“自定义头像”功能,恶意用户指定自己的头像URL是一个修改用户信息的链接,当其他已登录用户浏览恶意用户头像时,会自动向这个链接发送修改信息请求。从站外发送请求,则需要恶意用户在自己的服务器上,放一个自动提交修改个人信息的htm页面,并把页面地址发给受害者用户,受害者用户打开时,会发起一个请求。威胁描述:攻击者使用CSRF攻击能够强迫用户向服务器发送请求,导致用户信息被迫修改,甚至可引发蠕虫攻击。如果恶意用户能够知道网站管理后台某项功能的URL,就可以直接攻击管理员,强迫管理员执行恶意用户定义的操作。
测试方法:
检测方式多种多样:工具常常会扫描得到CSRF的漏洞,但是一般常常为误报,重点还是依靠手工来进行检测,以下来举例说明其中一种检测以及攻击方案:
1、设置页面test.htm中,页面中有一个表单,和一段脚本,脚本的作用是,当页面加载时,浏览器会自动提交请求。页面代码如下:
| document.getElementById("modify").submit(); |
2、诱使用户在登录目标系统后访问URL链接http://xx.x.xx.xxx /test.htm
3、用户打开test.htm后,会自动提交表单,发送给www.test.com下的那个存在CSRF漏洞的web应用,用户信息被篡改。
4、在整个攻击过程中,受害者用户仅看到了一个空白页面(可以伪造成其他无关页面),并且不知道自己的信息已经被修改。
风险分析:结合社会工程学(如通过电子邮件或聊天发送的链接),攻击者诱骗受害者点击恶意链接,而恶意链接中包含了诸如转账等敏感操作。下图简单阐述了CSRF攻击的思想:

从上图可以看出,完成一次CSRF攻击,受害者必须依次完成两个步骤:
CSRF利用方式可分为以下两种:
1、GET类型的CSRF
GET类型的CSRF利用非常简单,只需要一个HTTP请求。攻击者诱骗受害者访问恶意页面,通常这个恶意页面包含标签,受害者一旦访问了恶意页面会向http://www.mybank.com/Transfer.jsp?toBankId=hackerID&money=1000发送HTTP请求,该请求是转账操作,受害者在不知情的情况下向攻击者账户转账了1000元。
2、POST类型的CSRF
为了杜绝上面的问题,银行决定改用POST请求完成转账操作。因此,银行网站A的Web表单如下:
后台处理页面Transfer.jsp的伪代码如下:
| public void doPost(HttpServletRequest req, HttpServletResponse res) { HttpSession session = request.getSession(false); If(session==null) { response.sendRedirect("../SessionLogin.htm"); } String bankID=request.getParameter(“toBankId”); String money=request.getParameter(“money”); BankTools.transferMoney(bankID,double.parse(money)); } |
危险网站B的HTML代码如下:
- <html>
-
- <head>
-
- <script type="text/javascript">
-
- function steal()
-
- {
-
- iframe = document.frames["steal"];
-
- iframe.document.Submit("transfer");
-
- }
-
- script>
-
- head>
-
- <body onload="steal()">
-
- <iframe name="steal" display="none">
-
- <form method="POST" name="transfer" action="http://www.myBank.com/Transfer.jsp">
-
- <input type="hidden" name="toBankId" value="11">
-
- <input type="hidden" name="money" value="1000">
-
- form>
-
- iframe>
-
- body>
-
- html>
从以上代码看出,危险网站B暗地里发送了POST请求到银行,且该POST请求是转账操作,攻击者访问危险网站B时在不知情的情况下向攻击者转账了1000元。
风险等级:
【高危】:核心系统关键操作(账户操作,审批确认……)
【中危】:普通系统关键操作(账户操作,审批确认……)
修复方案:
1、通过referer判断页面来源进行CSRF防护,该方式无法防止站内CSRF攻击及referer字段伪造。
2、重要功能点使用动态验证码进行CSRF防护。
3、通过token方式进行CSRF防护:
在服务器端对比POST提交参数的token与Session中绑定的token是否一致,以验证CSRF攻击 |
4、为每个session创建唯一的随机字符串,并在受理请求时验证:
| //判断客户端提交的随机字符串是否正确 String randomStr = (String)request.getParameter("randomStr"); if(randomStr == null) randomStr=""; if(randomStr.equals(request.getSession().getAttribute("randomStr"))) {//处理请求} else{ //跨站请求攻击,注销会话 } |
注意事项:暂无