原文地址: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的开始与结束标记。例如我们输入<Script>alert(“text”)< /Script>就是输入了一段HTML码,我们可以看见这段代码被“<”与“>”分成了两个标签,分别是<Script>与< /Script >,中间的则是这个标签需要解释的内容,关于这段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程序在接受数据时如果不做有效的过滤,就会导致恶意代码进入数据库,而且我们注入的JavaS
归根结底,跨站攻击的根本漏洞就在WEB程序里,大家可以看看图3。
有助于你进一步理解XSS攻击的含义,我们通过图3可以看出来,如果WEB程序能做跟好的滤,XSS攻击是完全有可能被避免的。
四、跨站攻击的挖掘
知道了XSS攻击的之后,我们怎样才能挖掘网站的XSS漏洞呢?
想挖掘网站的XSS漏洞,我们必须要有基本的脚本底子,鉴于我们叉子的电脑基础问题,这里我就先为大家解释一下标准测试代码<Script>alert(“text”)< /Script>的意思,要注意看哦!其中的text可以改为任何字,如果存在XSS漏洞,我们使用这段代码进行XSS攻击后,浏览相的应页面就会弹出包含text这个字符的提示框,如图4。
而<Script>与< /Script >则分别是脚本开始、结束的HTML标记,alert是JavaS
鉴于XSS攻击的危害性,一般的站点都会将<Script>与< /Script >这样敏感的关键字过滤,那该怎么办?难道我们一开始就被难住了吗?ON!我们当然不能被他们难住,肯定有办法突破的!
但是突破了这个限制,如果碰到别的限制怎么办呢?不要急,今天我就带领大家步步设防,在步步突破!从不断的突破中带领大家学习XSS攻击的大体思路!
那么面对我们的第一道关于<Script>与< /Script >的过滤我们该怎么办呢?
第一步就是看看替换大小写!这替换大小写真可谓万能招数啊……
我们只需将<Script>与< /Script >改为<ScRipT>与< /SCrIPt >或类似的形式即可。如果没通过怎么办?看看下面这个办法。
对于过滤<Script>与< /Script >来说,我们使用HTML标签下就可以绕过,例如:
<img src=javas
它执行后与<Script>alert(“text”)< /Script>结果是一样的,如图5。
通过对比,我们可以知道被执行的是“ alert(“text-img”) ”这段JavaS
那么,如果我们javas
具体转换内容大家可以参考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攻击测试代码:
<img src=javascr ipt:alert(“text-img”) ></img>
看到了没有?中间的一个[Tab]键弄出来的空白(这个空白叫做制表符)即可绕过这类过滤,呵呵!除此之外以下几个XSS攻击代码也可以绕过这种过滤。
<IMG SRC="jav	ascript:alert('XSS');">
<IMG SRC="jav
ascript:alert('XSS');">
<IMG SRC="jav
ascript:alert('XSS');">
当然,如果仅仅是过滤掉javas
而如果对方过滤了“SRC”的话怎么办呢?呵呵!不急!我们还可以利用下面的XSS攻击代码绕过这种过滤,效果与利用SRC基本一致。
<IMG DYNSRC="javas
<IMG LOWSRC="javas
然而随着XSS攻击的频繁发生,程序员们都开始想着怎样避免漏洞的出现,于是他们过滤了制表符这类部常见的符号,过滤空格还过滤了javas
但是聪明的我们还可以利用事件和属性替换掉关键字,绕过监测,比如:
<img src="#" on
由于HTML的脚本默认就是JavaS
但是有的初学者不明白了,我们知道这些又有什么用呢?你可以将其换成<img src="#" on
哦,原来利用事件也能跨站,所以有的人又开始过滤事件,以使我们的on
<img src="#" style="A1Pass:expr
执行结果如图6所示。
我们甚至不要SRC并且脱离<img>标签都可以成功进行XSS攻击!例如下面那段XSS测试代码。
< DIV style="A1Pass:expr
值得注意的是,通过style构造的事件会执行两次,而且当鼠标移过时也会再次触发style事件。
当然除此之外我们还可以利用其他未被过滤的事件,或者利用上面所说的制表符(Tab键)来分割被过滤的关键字,除此之外注释符号“/**/”也可以当作空格来用,例如:
< img src="#"/**/on
讲到这里有的朋友可能已经按耐不住了,那我们应该怎样去挖掘这些漏洞呢?我可以很负责任的告诉你,在你理解这些XSS攻击方法的前提下,挖掘这些漏洞就显得比较简单了,我们下面进行一次XSS攻击的实验。
大家都知道,可以输入信息的地方才有可能构成XSS攻击,但是选择一个输入点的好坏直接关系到XSS攻击的威力与成功几率。
我们先从威力方面考虑,当然是用户浏览次数越多,交互越频繁的地方,你进行XSS攻击后的效果就越明显,就拿论坛来说,用户头像、签名等都是比较高效而且较易成功的XSS攻击点。
下面我们就拿一个动网论坛做一下实验。
第一步先在网上找一个动网论坛,关键字是POWERED BY DVBBS ,大家自己搜吧。找到后先查看自己的权限,因为我们要利用自定义头像进行XSS攻击,所以为了能自定义头像,我这里需要先发10篇帖子……
第二步开始验测,我们在动网“自定义头像地址:”中输入我们的XSS测试代码<script>alert(“text”)< /script>,然后点击保存。
但是我们刷新后并没有看到text弹出来啊!如图7,怎么办?首先我们在返回的页面信息中可以看到完整的XSS测试代码<script>alert(“text”)< /script>,这至少证明没有被过滤。
小技巧:如果我们在某一个页面提交完XSS代码,刷新后还能显示的话(例如完整显示<script>),那大多数的情况是这个站点存在XSS漏洞!只是还需要我们进一步去挖掘。
但是他为什么没有顺利执行呢?这时就需要我们察看网页的源代码了,我们在IE浏览器的页面中单击右键,选择“察看源文件(V)”选项,即可看到这个页面的HTML源代码,按[Ctrl]+[F]快捷键调出查找对话框,输入alert(“text”)后我们找到了如下代码:
<a href="#" on
<td width="180" rowspan="2" valign="top" align="center">
<img id="face" src="<script>alert(“text”)< /script>" width="120" height="120" />
</td></tr>
大家可以看到我们的XSS测试代码确实没有被过滤,但是被<img>标签的“< >”给包围了,当然就不能执行了!我们怎么办呢?
这里给大家一个思路:逆向思考!我们怎样不被包围呢?呵呵!大家看看下面这段新构造的XSS测试代码。
><script>alert(“text”)< /script><
当我们输入这段代码后,原先闭合的<img>标签被我们拆分为<img id="face" src="><script>alert(“text”)< /script><" width="120" height="120" />
也就是变成<img id="face" src=">、<script>alert(“text”)</script>、<"width="120" height="120" />三个单独的语句,我们可爱的<script>alert(“text”)< /script>就这样被我们解围了。
关于XSS攻击其实是没有定律的,就拿我们绕过验证方法来看,除了上面的其实还有许多许多!随着你脚本底子的增加,你会发现更多的XSS攻击代码!但是我最后要说的就是一定要注意到浏览器的存在!
在本小结的最后我为大家附上一些针对不同浏览器可以成功执行的XSS攻击代码,希望能给大家一些启示。
<a href="javas
<div on
<img src="javas
<img tdynsrc="javas
<input type="imge" dynsrc="javas
<bagsound src="javas
&<script>[co
&{[co
<img src=&{[co
<link rel="stylesheet" herf="javas
<iframe src="vbscript:[co
<img src="mocha:[co
<img src="livescript:[co
<div style="behaviour:url([link to co
<div style="binding:url([link to co
<div style="width:expr
<object classid="clsid:..." codebase="javas
[\xCO][\xBC]script>[co
上面的内容是我参考安全焦点出版的《网络渗透技术》做的摘录。
留言评论(旧系统):