大家好,又见面了,我是全栈君。
XSS的攻击相关资料整理
跨站脚本攻击(XSS)
XSS 简介
人们经常将跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。因此,有人将跨站脚本攻击缩写为XSS。
跨站脚本攻击(XSS),是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。
攻击者可以使用户在浏览器中执行其预定义的恶意脚本,其导致的危害可想而知,如劫持用户会话,插入恶意内容、重定向用户、使用恶意软件劫持用户浏览器、繁殖XSS蠕虫,甚至破坏网站、修改路由器配置信息等。
XSS 危害
1.网络钓鱼,包括盗取各类用户账号;
2.窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作;
3.劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志、发送电子邮件等;
4.强制弹出广告页面、刷流量等;
5.网页挂马;
6.进行恶意操作,例如任意篡改页面信息、删除文章等;
7.进行大量的客户端攻击,如DDoS攻击;
8.结合其他漏洞,如CSRF漏洞,实施进一步作恶;
9.传播跨站脚本蠕虫等。
- 盗取各类用户帐号权限(控制所盗窃权限数据内容),如机器登录帐号、用户网银帐号、各类管理员帐号
- 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
- 基于XSS的跨站业务请求(如:非法转账、非法下单、非法转载/发表内容、发送电子邮件、利用管理员身份提权挂马、控制受害者机器向其它网站发起攻击等)
- 形成持久化APT攻击,长期控制网站业务中枢
- 利用跨站业务形成蠕虫病毒式传播
- 劫持网站,劫持后可用于钓鱼、伪装、跳转、挂广告等,属挂马类型
XSS跨站脚本,是一种Web安全漏洞,有趣是是他并不像SQL注入等攻击手段攻击服务端,本身对Web服务器没有危害,攻击的对象是客户端,使用浏览器访问这些恶意地址的网民。
XSS 原理
HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是HTML标签的开始,
主要的攻击是在HTML中加入了**JavaScript脚本,**这个脚本可能会写一些发起攻击的代码。
标签中,或者标签的属性中都可以加入脚本。详情看下面《XSS的原理分析与解剖》博文说明。
**XSS攻击:**xss就是在页面执行你想要的js,只要能允许JS,就能获取cookie(设置http-only除外),就能发起一些事件操作等。
《XSS的原理分析与解剖》:https://www.freebuf.com/articles/web/40520.html
注:评论内容摘要
1、chrome内核与ie内核不一样,chrome的过滤机制比ie强。现在测试xss一般都拿能过chrome的为主
2、现在的chrome浏览器默认开启了xss过滤机制,可以通过关闭该机制来进行xss测试,方法如下: windows下,右键桌面中的”Google Chrome”快捷键,然后在目标选项,chrome.exe后面加上参数:–args –disable-xss-auditor即可。
XSS 的本质是:恶意代码未经过滤,与网站正常的代码混在一起;浏览器无法分辨哪些脚本是可信的,导致恶意脚本被执行。
注入方式:不仅仅是业务上的“用户的 UGC 内容”可以进行注入,包括 URL 上的参数等都可以是攻击的来源。在处理输入时,以下内容都不可信:
- 来自用户的 UGC 信息
- 来自第三方的链接
- URL 参数
- POST 参数
- Referer (可能来自不可信的来源)
- Cookie (可能来自其他子域注入)
XSS 分类
根据攻击的来源,XSS 攻击可分为存储型、反射型和 DOM 型三种。
类型 | 存储区 | 插入点 |
---|---|---|
存储型XSS | 后端数据库 | HTML |
反射型 XSS | URL | HTML |
DOM 型 XSS | 后端数据库/前端存储/URL | 前端 JavaScript |
- 存储区:恶意代码存放的位置。
- 插入点:由谁取得恶意代码,并插入到网页上。
具体参看:前端安全系列(一)
反射XSS是XSS分类中最多的,他们原理是下面这样:
Hacker——发现存在反射XSS的URL——根据输出点的环境构造XSS代码——进行编码、缩短(可有可无,是为了增加迷惑性)——发送给受害人——受害打开后,执行XSS代码——完成hacker想要的功能(获取cookies、url、浏览器信息、IP等等)
存储型XSS不像反射型XSS,需要访问特定的URL或者用户去手动点击触发,如果存在存储型的恶意劫持代码,那么可能发生的是全范围的扫射攻击,受攻击的用户多。
如 留言板 存在恶意劫持代码,那后面所有访问此留言板页面的用户都会中枪。
基于QtWebKit的DOM XSS检测技术,地址:
https://security.tencent.com/index.php/blog/msg/12
XSS 防御总结
XSS 攻击有两大要素:
- 攻击者提交恶意代码。
- 后台处理,转义可能存在的掉html标签。但是在转义的时候可能出现 将 大于> 、小于 < 转义,可能出现错误的转义。要根据实际的业务做相应的调整。
如需要保存: 2>7 ,则会转义为:2>7
- 浏览器执行恶意代码。
前端处理,有一些前端框架已经默认做xss相应的处理。
后端和前端一起协作,终可防御xss攻击。
截图内容来源:前端安全系列(一)
XSS 问答
来源: https://gitbook.cn/books/5a26a88d5d69d22a8f0adc5f/index.html
问:xss攻击在GET和POST请求中有什么实际不同?
**答:**这个区别不大,请求提交方式不一样。post操作不可能绕开javascript的使用,只是难度不一样。
问:xss窃取的cookie怎么防止被利用?
**答:**窃取的cookie防止利用可以增加一个时效性或者绑定用户。
问:xss和csrf区别是什么?
答: csrf是伪装信任用户进行操作,登陆会话状态都是正常的,xss不同。csrf成功的前提用户必须登录到目标站点,且用户浏览了攻击者控制的站点。与xss最为不同一点是csrf可以不用js就能达到目的,完全是正常用户操作。
csrf修复方法:cookie认证,非持久性cookie请求加入随机数,增加风险操作二次认证。
问:预防xss攻击有什么迅速的有效手段吗?
答: HttpOnly防止劫取cookie,另外还有owasp中也有防xss的API库。在前端对数据过滤一次,在后端也过滤一次,确保万无一失,没毛病。
问:xss过滤字符问题怎么办?
**答:**尖括号,反斜杠等特殊字符一定要注意好,可以使用ESAPI提供的函数进行编码,具体参考一下GitChat文章标题内容的特殊字符转义,除了阿拉伯数字和字母,对其他所有的字符进行编码,只要该字符的ASCII码小于256。编码后输出的格式为 ª,以&#x开头,aa则是指该字符对应的十六进制数字,分号作为结束。
问:xss有书籍推荐吗?
答: xss有一本专业的,书名是《xss跨站脚本攻击剖析与防御》红色封皮,logo是罗马头盔。专门讲xss这一部分的,可以观摩学习一下。
问:刚学习了解OWASP,你有什么好方法去学习和实践其中的方法,如top 10?若要进入白帽子领域,OWASP是否是个很好的切入点?有其它好的途径和方法吗?
**答:**用靶机练吧,搭建个本地iis,模拟防火墙进行渗透测试。网上的网站不建议练手,涉及诸多法律问题,靶机玩坏了重搭建就是。我学的时候没有关注过owasp,有什么洞整什么,把知识体系补完就成,一个字还是刚。
问:xss拿到的cookie该怎么利用?
答: cookie就是凭证,最简单的利用就是替换登陆请求的cookie就算利用了。
参考资料
-
XSS跨站脚本攻击剖析与防御:https://zhuanlan.zhihu.com/p/87756976
-
XSS的原理分析与解剖:https://www.freebuf.com/articles/web/40520.html
-
XSS的原理分析与解剖(第二篇):https://www.freebuf.com/articles/web/42727.html
-
XSS攻击常识及常见的XSS攻击脚本汇总:https://blog.csdn.net/qw_xingzhe/article/details/80712840
-
springboot xss防护: https://www.cnblogs.com/dslx/p/11551542.html
-
HttpServletRequestWrapper 实现xss注入:https://www.cnblogs.com/zdd-java/p/7528496.html
-
前端安全系列(一):如何防止XSS攻击?:https://tech.meituan.com/2018/09/27/fe-security.html
此篇建议必读
-
Vue,React 等前端框架对防御 XSS 都做了哪些?:https://www.zhihu.com/question/338939262
-
Java的开源HTML过滤实用程序:http://opensource.finn.no/xss-html-filter/
下一篇会整理下CSRF攻击与防御 相关的知识和资料。
See you next good day~
谢谢你的阅读,如果您觉得这篇博文对你有帮助,请点赞或者喜欢,让更多的人看到!祝你每天开心愉快!
Java编程技术乐园:分享干货技术,每天进步一点点,小的积累,带来大的改变!
扫描关注,后台回复【秘籍】,获取珍藏干货! 99.9%的伙伴都很喜欢
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/120967.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...