XSS攻击

XSS攻击总结

前言:

对于了解这个XSS是在网络安全攻防技术训练营每周四的例会上由社长讲解的 ,因此我来做一个总结基于我对XSS的认识。

正文:

先来说一下XSS攻击以及他所带来的危害;

XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被骇客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知。对于跨站脚本攻击,骇客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而JavaScript是新型的“ShellCode”。

XSS攻击的危害包括:
1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
3、盗窃企业重要的具有商业价值的资料
4、非法转账
5、强制发送电子邮件
6、网站挂马
7、控制受害者机器向其它网站发起攻击

XSS攻击的分类:
类型A,本地利用漏洞,这种漏洞存在于页面中客户端脚本自身。其攻击过程如下所示:
Alice给Bob发送一个恶意构造了Web的URL。
Bob点击并查看了这个URL。
恶意页面中的JavaScript打开一个具有漏洞的HTML页面并将其安装在Bob电脑上。
具有漏洞的HTML页面包含了在Bob电脑本地域执行的JavaScript。
Alice的恶意脚本可以在Bob的电脑上执行Bob所持有的权限下的命令。

类型B,反射式漏洞,这种漏洞和类型A有些类似,不同的是Web客户端使用Server端脚本生成页面为用户提供数据时,如果未经验证的用户数据被包含在页面中而未经HTML实体编码,客户端代码便能够注入到动态页面中。其攻击过程如下:
Alice经常浏览某个网站,此网站为Bob所拥有。Bob的站点运行Alice使用用户名/密码进行登录,并存储敏感信息(比如银行帐户信息)。
Charly发现Bob的站点包含反射性的XSS漏洞。
Charly编写一个利用漏洞的URL,并将其冒充为来自Bob的邮件发送给Alice。
Alice在登录到Bob的站点后,浏览Charly提供的URL。
嵌入到URL中的恶意脚本在Alice的浏览器中执行,就像它直接来自Bob的服务器一样。此脚本盗窃敏感信息(授权、信用卡、帐号信息等)然后在Alice完全不知情的情况下将这些信息发送到Charly的Web站点。

类型C,存储式漏洞,该类型是应用最为广泛而且有可能影响到Web服务器自身安全的漏洞,骇客将攻击脚本上传到Web服务器上,使得所有访问该页面的用户都面临信息泄漏的可能,其中也包括了Web服务器的管理员。其攻击过程如下:
Bob拥有一个Web站点,该站点允许用户发布信息/浏览已发布的信息。
Charly注意到Bob的站点具有类型C的XSS漏洞。
Charly发布一个热点信息,吸引其它用户纷纷阅读。
Bob或者是任何的其他人如Alice浏览该信息,其会话cookies或者其它信息将被Charly盗走。

类型A直接威胁用户个体,而类型B和类型C所威胁的对象都是企业级Web应用。

XSS攻击能做些什么

1.窃取cookies,读取目标网站的cookie发送到黑客的服务器上;
2.读取用户未公开的资料,如:邮件列表或者内容、系统的客户资料,联系人列表等等,

XSS攻击常见利用方式:

1、最简单的就是普通的GET型XSS,这里描述参数不加密的URL:

http://test.xss.tv/level1.php?name=<script>alert(/xss/)</script>

直接URL参数提交注入,该注入能产生说明程序员没有过滤或用引号包裹任何参数内容,也就是说后台代码直接解析执行参数值。这就造成在弱类型的语言中,原本是正常的字符串被当作代码执行,形成该XSS漏洞。
2、第二种就是带<input 标签的GET型XSS,直接在表单输入窗口直接输入XSS代码:

http://test.xss.tv/level2.php?keyword="><script>alert(1)</script>

这里选择在URL处直接注入代码,带<input 标签的GET型XSS和普通的GET型XSS最大的区别就是普通的GET型XSS的参数可以直接被解析,而带<input 标签的GET型XSS还需要闭合原本的input窗口,然后才能注入ShellCode。闭合点举例:

<form action=level2.php method=GET>
	<input name=keyword  value="test">
	<input type=submit name=submit value="搜索"/>
</form>

这里的keyword参数就是输入框的变量,我们输入的值会在替换value的值,也就是双引号里面的就是keyword变量代表的东西,所以我们闭合这个<input 标签用的是**">**,后面就可以跟上ShellCode。
3、第三种就是过滤一些特殊字符:

<form action=level3.php method=GET>
	<input name=keyword  value=''&gt;&lt;script&gt;alert(1)&lt;/script&gt;'>
	<input type=submit name=submit value=搜索 />
</form>

可以看出输入的"、<和>都被过滤了,所以带有尖括号的ShellCode就不能用了。所以在此换思路采用事件属性:

http://test.xss.tv/level3.php?keyword='+onclick='javascript:alert(1)'&submit=submit

同样的道理,先闭合前一个变量值,在放ShellCode;
4、第四种就是过滤关键字:

一般测试的第一反应就是用最常见两中方式,发现特殊字符都被过滤了才会考虑用触发事件,但触发事件的关键字也被过滤了,这时候就要找有哪些还没有被过滤的。关键字测试:

http://test.xss.tv/level5.php?keyword=" ONclick="javascript:alert(1)

源代码处可看到的结果是

<form action=level5.php method=GET>
	<input name=keyword  value="" o_nclick="javascript:alert(/xss/)">
	<input type=submit name=submit value=搜索 />
</form>

很明显,onclick关键字中间被加了下划线,这种是用双关键字和大小写绕过不了的,那就换一种触发事件,这里可以先考虑超链接

http://test.xss.tv/level5.php?keyword="><a href="javascript:alert(/xss/)">点这里</a>//

后面加了个**//**的原因是为了注释掉后面多余的部分,以免影响代码的正确性。

因为时间有限我所搞明白的就也这些,不过社长水上云的博客有更多关于XSS攻击的知识;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值