Cross-Site Scripting XSS 跨站攻击全攻略

admin 2021年4月3日18:51:34评论58 views字数 7922阅读26分24秒阅读模式

    原文地址:http://a1pass.blog.163.com/blog/static/2971373220087295449497/

现在的黑客攻击手法中,跨站挂马似乎正在逐渐成为攻击的主流话题,鉴于这种形势,俺就把我学习跨站挂马的一点心得总结出来与大家分享。

由于考虑到知识的认知过程以及入门朋友们的技术底子问题,本文将分为“基础知识”、“跨站漏洞”与“挂马技巧”三部分组成,咱们先来学习一下基础知识,以及跨站攻击的利用方法。

一、基础知识

1、什么是UBB码

XSS攻击主要在两种环境下进行,一个是用户自己构造的比标签,构造者汇总标签要严格遵循HTML标记语言,而UBB码是HTML的一个变种,属于系统提供的标签。UBB代码简单,功能很少,但是由于其TAG语法检查实现非常容易,所以许多网站引用了这种代码,以方便广大网友的使用,当然,同时也为我们打开了方便之门。

下面我列出几个例子,以便大家对UBB码有一个感性的认识。

显示为粗体效果:[B]文字[/B]

显示为斜体效果:[I]文字[/I]

显示文字的超链接:[URL= http://www.hackerxfiles.net/]黑客X档案官方站[/ URL]

通过上面的例子,我们可以看出来UBB码用的是中括号标签“[”与“]”。

为什么介绍这些?因为关键时候,我们借助UBB码也可以达到跨站的效果。

2、什么是HTML输入

大家看到这的时候,有条件的可以打开X档案的网站看看,我们在IE浏览器的页面中单击右键,选择“察看源文件(V)”选项,如图1。

然后就会弹出如图2那样一个以首页文件命名的记事本。

我们可以看见里面的代码都是用“”括起来的,而这个“”分别就是HTML的开始与结束标记。例如我们输入

其实基础的跨站应用无非就是几个步骤的问题,要比SQL注入简单多了!在这篇文章中我争取从实用角度出发,从而让大家从啥都不懂,到能自主实战,但是前提是你仔细的读过本文。

 

二、什么是跨站漏洞

所谓的跨站漏洞,就是一种往数据库里插入特定恶意代码的一种攻击技术,它被称为“XSS”或“CSS”,懂网页设计的朋友可能会困惑,CSS不是层叠式样式表的简称吗?没错,只不过是重名而已,因为跨站攻击的英文是Cross-Site Scripting,所以简称为CSS。但是为了与层叠式样式表区分,现在普遍叫做XSS。那么XSS为什么会被称作为跨站攻击呢?这是因为黑客通过别人的网站脚本漏洞达到攻击的效果,就是说可以隐藏攻击者的身份,因此叫做跨站攻击。其实“Cross-Site Scripting(跨站点脚本)”在意义上来讲是属于错误的名字,因为XSS攻击与脚本基本无关不说,甚至根本不一定是跨站点的。但是这在刚刚发现这种攻击手法时就起了这样一个名字,所以沿用至今,大家也就只能接受了。

对于受到XSS攻击的服务器来说,被插入恶意代码的WEB程序会永久的储存这些代码,除非人为的删掉它!当有人访问这个WEB程序下的某个页面时,恶意代码就会混杂在正常的代码中发送给浏览者,从而导致浏览器执行相应代码,因此达到黑客的攻击目的。

一般情况下来讲,人机交互比较高的WEB程序更容易受到XSS攻击,比如论坛、留言板与带有评论功能的新闻系统等等。而当黑客成功插入相关恶意代码时,那么他就可以挂马、获取管理员的登陆Cookie、强制执行操作甚至格式化浏览者的磁盘(不过用IE6.0的朋友不用担心硬盘被格式化,因为IE6.0的默认安全规则会阻止这些危险动作的发生)!只要是脚本能够实现的功能,跨站攻击同样能达到,因此XSS攻击的危害程度甚至与溢出攻击都是不相上下!

 

三、跨站攻击的原理

其实, XSS攻击的本质还是注入的问题,只不过XSS攻击注入的是恶意的HTML脚本而已。但是这些注入的恶意代码为什么会被执行呢?这其实是由于浏览器的不足造成的。

因为浏览器在接受数据时,他无法辨认哪些是应该解释的代码,哪些是不需要解释的数据。如果是数据,浏览器完全可以简单的将其显示出来即可,但可悲的是浏览器做不到这点,只要碰到符合条件的标记,他就会将其解释执行,从而给我们XSS攻击埋下伏笔。

所以如果WEB程序在接受数据时如果不做有效的过滤,就会导致恶意代码进入数据库,而且我们注入的JavaScript代码可以在安全策略准许的范围内执行任何操作,如果这段JavaScript代码可以让对方的电脑下载并执行你的木马时,这就是我们所说的“挂马”了。

归根结底,跨站攻击的根本漏洞就在WEB程序里,大家可以看看图3。

有助于你进一步理解XSS攻击的含义,我们通过图3可以看出来,如果WEB程序能做跟好的滤,XSS攻击是完全有可能被避免的。

 

 

四、跨站攻击的挖掘

知道了XSS攻击的之后,我们怎样才能挖掘网站的XSS漏洞呢?

想挖掘网站的XSS漏洞,我们必须要有基本的脚本底子,鉴于我们叉子的电脑基础问题,这里我就先为大家解释一下标准测试代码

鉴于XSS攻击的危害性,一般的站点都会将

但是突破了这个限制,如果碰到别的限制怎么办呢?不要急,今天我就带领大家步步设防,在步步突破!从不断的突破中带领大家学习XSS攻击的大体思路!

那么面对我们的第一道关于

第一步就是看看替换大小写!这替换大小写真可谓万能招数啊……

我们只需将

对于过滤

cript:alert(“text-img”) >

它执行后与

通过对比,我们可以知道被执行的是“ alert(“text-img”) ”这段JavaScript代码,而执行JavaScript的标记则变成了“ javascript: ”,这段XSS攻击代码巧妙的利用了标签提供的“”号执行了相应的JavaScript代码。

那么,如果我们javascript:也被过滤了的话,那该怎么办呢?呵呵,我们还可以试试部分字符换作ASCII码表示是否可以。对于过滤javascript:来说,我们就将javascript:中的某些字符转换为16进制的值,例如:,其中的j与j就是“j”与“:”的16进制。当然我们转换成效果更好些!除此之外,我们还可以将j由j转换成例如j也可以。

具体转换内容大家可以参考ASCII码表:

八进制 十六进制 十进制 字符 八进制 十六进制 十进制 字符
00 00 0 nul 100 40 64 @
01 01 1 soh 101 41 65 A
02 02 2 stx 102 42 66 B
03 03 3 etx 103 43 67 C
04 04 4 eot 104 44 68 D
05 05 5 enq 105 45 69 E
06 06 6 ack 106 46 70 F
07 07 7 bel 107 47 71 G
10 08 8 bs 110 48 72 H
11 09 9 ht 111 49 73 I
12 0a 10 nl 112 4a 74 J
13 0b 11 vt 113 4b 75 K
14 0c 12 ff 114 4c 76 L
15 0d 13 er 115 4d 77 M
16 0e 14 so 116 4e 78 N
17 0f 15 si 117 4f 79 O
20 10 16 dle 120 50 80 P
21 11 17 dc1 121 51 81 Q
22 12 18 dc2 122 52 82 R
23 13 19 dc3 123 53 83 S
24 14 20 dc4 124 54 84 T
25 15 21 nak 125 55 85 U
26 16 22 syn 126 56 86 V
27 17 23 etb 127 57 87 W
30 18 24 can 130 58 88 X
31 19 25 em 131 59 89 Y
32 1a 26 sub 132 5a 90 Z
33 1b 27 esc 133 5b 91 [
34 1c 28 fs 134 5c 92
35 1d 29 gs 135 5d 93 ]
36 1e 30 re 136 5e 94 ^
37 1f 31 us 137 5f 95 _
40 20 32 sp 140 60 96 '
41 21 33 ! 141 61 97 a
42 22 34 " 142 62 98 b
43 23 35 # 143 63 99 c
44 24 36 $ 144 64 100 d
45 25 37 % 145 65 101 e
46 26 38 & 146 66 102 f
47 27 39 ` 147 67 103 g
50 28 40 ( 150 68 104 h
51 29 41 ) 151 69 105 i
52 2a 42 * 152 6a 106 j
53 2b 43 + 153 6b 107 k
54 2c 44 , 154 6c 108 l
55 2d 45 - 155 6d 109 m
56 2e 46 . 156 6e 110 n
57 2f 47 / 157 6f 111 o
60 30 48 0 160 70 112 p
61 31 49 1 161 71 113 q
62 32 50 2 162 72 114 r
63 33 51 3 163 73 115 s
64 34 52 4 164 74 116 t
65 35 53 5 165 75 117 u
66 36 54 6 166 76 118 v
67 37 55 7 167 77 119 w
70 38 56 8 170 78 120 x
71 39 57 9 171 79 121 y
72 3a 58 : 172 7a 122 z
73 3b 59 ; 173 7b 123 {
74 3c 60 174 7c 124 |
75 3d 61 = 175 7d 125 }
76 3e 62 > 176 7e 126 ~
77 3f 63 ? 177 7f 127 del

但是如果对方又过滤了“&”号或“#”号该怎么办呢? 我们可以试试下面这条XSS攻击测试代码:

看到了没有?中间的一个[Tab]键弄出来的空白(这个空白叫做制表符)即可绕过这类过滤,呵呵!除此之外以下几个XSS攻击代码也可以绕过这种过滤。

当然,如果仅仅是过滤掉javascript:的话,我们其实还有一个非常简单的方法,不用javascript脚本!别忘了微软还为我们准备了VBScript啊!我们将代码简单的换成即可。

而如果对方过滤了“SRC”的话怎么办呢?呵呵!不急!我们还可以利用下面的XSS攻击代码绕过这种过滤,效果与利用SRC基本一致。

然而随着XSS攻击的频繁发生,程序员们都开始想着怎样避免漏洞的出现,于是他们过滤了制表符这类部常见的符号,过滤空格还过滤了javascript。

但是聪明的我们还可以利用事件和属性替换掉关键字,绕过监测,比如:

error=alert(/error-text/) >

由于HTML的脚本默认就是JavaScript,因此即便是我们不特别的声明,其中的alert(/error-text/)还是可以顺利执行,而它的执行利用的是错误事件onerror才得以完成的。有的初学朋友可能会头晕了,什么事件啊属性啊什么的,我不懂啊!呵呵,不要着急,对于初学的朋友,你只要记住其中的alert(/error-text/)可以换成其他JavaScript代码就可以了。

但是有的初学者不明白了,我们知道这些又有什么用呢?你可以将其换成error=document.write('http://a1pass.blog.163.com/') >来实现挂马功能。而且到后期当你懂得一定的脚本知识时,你可以用它做更多的事。

哦,原来利用事件也能跨站,所以有的人又开始过滤事件,以使我们的onerror事件无法执行。但是“山穷水尽疑无路,柳暗花明又一村”,总使你过滤再多的事件,如果我自己构造一个呢?下面这段代码就是我构造的一个叫做“A1Pass”的事件,它的执行结果与通过onerror来执行JavaScript代码的结果是一样的。

执行结果如图6所示。

我们甚至不要SRC并且脱离标签都可以成功进行XSS攻击!例如下面那段XSS测试代码。

ession(alert(/style -text/));">

值得注意的是,通过style构造的事件会执行两次,而且当鼠标移过时也会再次触发style事件。

当然除此之外我们还可以利用其他未被过滤的事件,或者利用上面所说的制表符(Tab键)来分割被过滤的关键字,除此之外注释符号“/**/”也可以当作空格来用,例如:

error=alert(/error-text/) >

讲到这里有的朋友可能已经按耐不住了,那我们应该怎样去挖掘这些漏洞呢?我可以很负责任的告诉你,在你理解这些XSS攻击方法的前提下,挖掘这些漏洞就显得比较简单了,我们下面进行一次XSS攻击的实验。

大家都知道,可以输入信息的地方才有可能构成XSS攻击,但是选择一个输入点的好坏直接关系到XSS攻击的威力与成功几率。

我们先从威力方面考虑,当然是用户浏览次数越多,交互越频繁的地方,你进行XSS攻击后的效果就越明显,就拿论坛来说,用户头像、签名等都是比较高效而且较易成功的XSS攻击点。

下面我们就拿一个动网论坛做一下实验。

第一步先在网上找一个动网论坛,关键字是POWERED BY DVBBS ,大家自己搜吧。找到后先查看自己的权限,因为我们要利用自定义头像进行XSS攻击,所以为了能自定义头像,我这里需要先发10篇帖子……

第二步开始验测,我们在动网“自定义头像地址:”中输入我们的XSS测试代码

但是我们刷新后并没有看到text弹出来啊!如图7,怎么办?首先我们在返回的页面信息中可以看到完整的XSS测试代码

 

小技巧:如果我们在某一个页面提交完XSS代码,刷新后还能显示的话(例如完整显示

但是他为什么没有顺利执行呢?这时就需要我们察看网页的源代码了,我们在IE浏览器的页面中单击右键,选择“察看源文件(V)”选项,即可看到这个页面的HTML源代码,按[Ctrl]+[F]快捷键调出查找对话框,输入alert(“text”)后我们找到了如下代码:

click="openScript('smiley.asp?t=1',650,400)" title="头像预览列表">[头像预览]

大家可以看到我们的XSS测试代码确实没有被过滤,但是被标签的“”给包围了,当然就不能执行了!我们怎么办呢?

这里给大家一个思路:逆向思考!我们怎样不被包围呢?呵呵!大家看看下面这段新构造的XSS测试代码。

>

当我们输入这段代码后,原先闭合的标签被我们拆分为

也就是变成三个单独的语句,我们可爱的

关于XSS攻击其实是没有定律的,就拿我们绕过验证方法来看,除了上面的其实还有许多许多!随着你脚本底子的增加,你会发现更多的XSS攻击代码!但是我最后要说的就是一定要注意到浏览器的存在!

在本小结的最后我为大家附上一些针对不同浏览器可以成功执行的XSS攻击代码,希望能给大家一些启示。

mouseover="[code]">

   [IE浏览器]

   [IE浏览器]

   [IE浏览器]

&

&{[code]}   [N4浏览器]

de]};>

   [N4浏览器]

   [N4浏览器]

   [IE浏览器]

   [Mozilla浏览器]

   [IE浏览器]

   [IE浏览器]

[xCO][xBC]script>[code][xCO][xBC]/script>   [UTF-8;IE;Opera浏览器]

上面的内容是我参考安全焦点出版的《网络渗透技术》做的摘录。

留言评论(旧系统):

hhhs @ 2013-06-15 20:41:36

本站回复:

sdsd @ 2013-07-05 12:58:20

本站回复:

╮(╯_╰)╭

佚名 @ 2014-01-14 00:24:01

[email]

[/email]

本站回复:

[email]

[/email]

佚名 @ 2014-06-25 16:48:41

本站回复:

alert(/f/) @ 2014-08-26 13:37:01

本站回复:

佚名 @ 2015-09-19 11:11:34

过滤了呢?

本站回复:

看情况。

文章来源于lcx.cc:Cross-Site Scripting XSS 跨站攻击全攻略

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年4月3日18:51:34
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Cross-Site Scripting XSS 跨站攻击全攻略http://cn-sec.com/archives/318898.html

发表评论

匿名网友 填写信息