学习脚本黑客:再谈XSS漏洞
2018-02-21 08:57
260 查看
XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中;比如这些代码包括HTML代码和客户端脚本(可以理解为JavaScript);攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy);这种类型的漏洞由于被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知;对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而JavaScript是新型的“ShellCode”
2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
3、盗窃企业重要的具有商业价值的资料
4、非法转账
5、强制发送电子邮件
6、网站挂马
7、控制受害者机器向其它网站发起攻击
[b]1)本地利用漏洞[/b]
利用存在与页面中的客户端脚本自身
Alice给Bob发送一个恶意构造了Web的URL,Bob点击并查看了这个URL,恶意页面中的JavaScript打开一个具有漏洞的HTML页面并将其安装在Bob电脑上,具有漏洞的HTML页面包含了在Bob电脑本地域执行的JavaScript,Alice的恶意脚本可以在Bob的电脑上执行Bob所持有的权限下的命令
[b]2)反射式漏洞[/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站点
[b]3)存储式漏洞[/b]
该类型是应用最为广泛而且有可能影响到Web服务器自身安全的漏洞,骇客将攻击脚本上传到Web服务器上,使得所有访问该页面的用户都面临信息泄漏的可能,其中也包括了Web服务器的管理员
Bob拥有一个Web站点,该站点允许用户发布信息/浏览已发布的信息;Charly注意到Bob的站点具有类型C的XSS漏洞;Charly发布一个热点信息,吸引其它用户纷纷阅读;Bob或者是任何的其他人如Alice浏览该信息,其会话cookies或者其它信息将被Charly盗走;类型A直接威胁用户个体,而类型B和类型C所威胁的对象都是企业级Web应用
这种检测方法的缺陷显而易见:骇客可以通过插入字符或完全编码的方式躲避检测:
上述方法都可以很容易的躲避基于特征的检测。而除了会有大量的漏报外,基于特征还存在大量的误报可能:在上面的例子中,对上述某网站这样一个地址,由于包含了关键字“javascript”,也将会触发报警
[b]基于代码修改的防御[/b]
1)对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤
2)实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行
3)确认接收的的内容被妥善的规范化,仅包含最小的、安全的Tag(没有javascript),去掉任何对远程内容的引用(尤其是样式表和javascript),使用HTTP only的cookie
如上操作将会降低Web业务系统的可用性,用户仅能输入少量的制定字符,人与系统间的交互被降到极致,仅适用于信息发布型站点,并且考虑到很少有Web编码人员受过正规的安全培训,很难做到完全避免页面中的XSS漏洞
XSS危害
1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
3、盗窃企业重要的具有商业价值的资料
4、非法转账
5、强制发送电子邮件
6、网站挂马
7、控制受害者机器向其它网站发起攻击
XSS分类
按照攻击利用手法不同分为以下三种:1)本地利用漏洞,2)反射式漏洞,3)存储式漏洞[b]1)本地利用漏洞[/b]
利用存在与页面中的客户端脚本自身
Alice给Bob发送一个恶意构造了Web的URL,Bob点击并查看了这个URL,恶意页面中的JavaScript打开一个具有漏洞的HTML页面并将其安装在Bob电脑上,具有漏洞的HTML页面包含了在Bob电脑本地域执行的JavaScript,Alice的恶意脚本可以在Bob的电脑上执行Bob所持有的权限下的命令
[b]2)反射式漏洞[/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站点
[b]3)存储式漏洞[/b]
该类型是应用最为广泛而且有可能影响到Web服务器自身安全的漏洞,骇客将攻击脚本上传到Web服务器上,使得所有访问该页面的用户都面临信息泄漏的可能,其中也包括了Web服务器的管理员
Bob拥有一个Web站点,该站点允许用户发布信息/浏览已发布的信息;Charly注意到Bob的站点具有类型C的XSS漏洞;Charly发布一个热点信息,吸引其它用户纷纷阅读;Bob或者是任何的其他人如Alice浏览该信息,其会话cookies或者其它信息将被Charly盗走;类型A直接威胁用户个体,而类型B和类型C所威胁的对象都是企业级Web应用
传统防御技术
传统XSS防御多采用特征匹配方式,在所有提交的信息中都进行匹配检查。对于这种类型的XSS攻击,采用的模式匹配方法一般会需要对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击这种检测方法的缺陷显而易见:骇客可以通过插入字符或完全编码的方式躲避检测:
1.在javascript中加入多个Tab键 < IMG SRC="jav ascript:alert('XSS');" >; 2.在javascript中加入(空格)字符 < IMG SRC="javascri pt:alert('XSS');" >; 3.在javascript中加入(回车)字符 < IMG SRC="javascri pt:alert('XSS');" >; 4.在javascript中加入回车换行符 < IMG SRC="javascrip\r\nt:alert('XSS');" > 5.对攻击语句采用完全编码 < IMGSRC=javascrip?74:alert('XSS') >
上述方法都可以很容易的躲避基于特征的检测。而除了会有大量的漏报外,基于特征还存在大量的误报可能:在上面的例子中,对上述某网站这样一个地址,由于包含了关键字“javascript”,也将会触发报警
[b]基于代码修改的防御[/b]
1)对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤
2)实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行
3)确认接收的的内容被妥善的规范化,仅包含最小的、安全的Tag(没有javascript),去掉任何对远程内容的引用(尤其是样式表和javascript),使用HTTP only的cookie
如上操作将会降低Web业务系统的可用性,用户仅能输入少量的制定字符,人与系统间的交互被降到极致,仅适用于信息发布型站点,并且考虑到很少有Web编码人员受过正规的安全培训,很难做到完全避免页面中的XSS漏洞
Java过滤危险字符
public class Checkstr { public String dostring(String str){ str=str.replaceAll("&","&"); str=str.replaceAll("<","<"); str=str.replaceAll(">",">"); str=str.replaceAll("'",""); str=str.replaceAll(";",""); str=str.replaceAll("--",""); str=str.replaceAll("/",""); str=str.replaceAll("%",""); return str; } }
相关文章推荐
- JavaScript学习笔记-跨站脚本(Cross-site scripting,CSS,XSS)漏洞
- 学习脚本黑客:cookie欺骗漏洞和XSS攻击
- 学习脚本黑客:‘or’=‘or’和暴库漏洞攻击
- 【安全牛学习笔记】手动漏洞挖掘-SQL注入XSS-简介、跨站脚本检测和常见的攻击利用手段
- Struts1.x 跨站脚本(XSS)漏洞的解决
- 安全测试学习之XSS漏洞测试
- Struts1.x 跨站脚本(XSS)漏洞的解决
- asp 网站 XSS跨站脚本漏洞如何修复
- XSS跨站脚本漏洞修复建议- 如何防御CSS CrossSiteScript 跨站脚本攻击
- 精通脚本黑客学习笔记(一)
- 学习脚本黑客:Google Hack
- 网站漏洞处理(SQL注入、XSS脚本攻击、防外站提交)以及扩展思路
- 【安全牛学习笔记】XSS-简介、跨站脚本检测和常见的攻击利用手段
- ASP.NET 学习笔记_04 Session、http、web开发原则、xss漏洞
- PHPWind论坛5.3版postupload.php附件文件名跨站脚本漏洞(XSS)
- xss缺陷--脚本语言嵌入漏洞
- 针对XSS跨站脚本漏洞 javascript 示例
- 小心XSS 跨站脚本漏洞已是web漏洞王
- 精通脚本黑客-2.1-学习笔记
- 精通脚本黑客学习笔记(四)