XSS跨站脚本介绍 跨站脚本(Cross-Site Scripting,XSS/CSS)是一种经常出现在Web应用程序中的计算机安全漏洞,是 由于Web应用程序对用户的输入过滤不足而产生的。攻击者利用网站漏洞把恶意的脚本代码(通常包括 HTML代码和客户端Javascript脚本)注入到网页之中,当其他用户浏览这些网页时,就会执行其中的恶 意代码,对受害者可能采取Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击。 XSS跨站脚本攻击本身对Web服务器没有直接危害,它借助网站进行传播,使网站的大量用户受到攻 击。攻击者一般通过留言、电子邮件或其他途径向受害者发送一个精心构造的恶意URL,当受害者在 Web浏览器中打开该URL的时候,恶意脚本会在受害者的计算机上悄悄运行,流程如图所示:
XSS漏洞一直被认为是web安全中危害较大的漏洞,在owasp一直处于top3。而在对sql注入防范越来越 严密的今天,xss也成了绝大部分黑客更喜欢的漏洞利用方式。XSS漏洞是发生在WEB前端的漏洞,所以 危害面及广,任何用户在访问前端时都可能中招。 XSS的本质就是前端代码注入。 注入攻击的本质,是把用户输入的数据当做代码执行。 这里有两个关键条件
第一个是用户能够控制输入
第二个是原本程序要执行的代码,拼接了用户输入的数据
xss注入主要拼接是网页的HTML代码,一般而言我们是可以拼接出 合适的HTML代码去执行恶意的JS语句。
总结:xss就是拼接恶意的HTML
xss的主要危害有:
1.网络钓鱼,包括盗取各类用户账号; 2.窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作; 3.劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志、发送电子邮件 等; 4.强制弹出广告页面、刷流量等; 5.网页挂马; 6.进行恶意操作,例如任意篡改页面信息、删除文章等; 7.进行大量的客户端攻击,如DDoS攻击; 8.结合其他漏洞,如CSRF漏洞,实施进一步作恶; 9.传播跨站脚本蠕虫等。
xss的分类有3类分别是反射型XSS 你提交的数据成功的实现了XSS,但是仅仅是对你这次访问产生了影响,是非持久型攻击 存储型XSS 你提交的数据成功的实现了XSS,存入了数据库,别人访问这个页面的时候就会自动触发 DOM型XSS 主要利用DOM相关的操作,修改了页面,引发的惨案。
HTML标签:常用标签回顾。 主要需要掌握基本的标签结构。 标签有: 双标签和单标签
<div class="" id=""></div>
<script src=""></script>
<input value="" name=""/>
<img src=""/>
1.引入外部js
<script src="外部JS的连接"></script>
2.内部JS
<script>JS代码</script>
3.伪协议
<a href="javascript:JS代码"></a>
4.事件引入
<button onclick="JS代码">挫我</button>
<img src="地址" onerror="JS代码"/>
JS的基本的语法:
var num = 1000;
获取DOM对象:
document.getElementById/getElementsByName/getElementsByClassName
跳转:
window.location.href="地址"
同源策略:同协议 同域名|IP 端口 浏览器为了保证数据的安全,对获取相关数据,发送相关数据进行了限制 什么叫同源? 1. 同协议 2. 同域名|IP 3. 同端口号
服务器端需要设置: 所有的域都能访问自己服务器。
XSS利用流程 击者在有漏洞的前端页面嵌入恶意代码,导致受害者访问页面时不知情的情况下触发恶意代码,获取受 害者关键信息。形成XSS漏洞的原因本质上还是对输入输出的过滤限制不严格,导致精心构造的脚本输 入后,在前端被当做有效代码并执行。
1.用firefox和chrome的右键菜单进入html编辑器或者直接查看网页源代码。
2.寻找输入点,在输入点输入特殊字符<>’’等,查看是否存在拦截,并且通过编辑器查看输入后存放的位 置。
3.发现没有过滤特殊字符后,就要考虑如何构造payload进行xss攻击了。开始分析漏洞页面,构建 payload。
怎么简单检测是否存在XSS? 一般是想办法让浏览器弹窗(alert) 最经典的弹窗语句:
一般证明XSS是否存在,就是在正常页面传参然后构建参数让他弹窗就是存在XSS了 记住一句至理名言:见框就插
只要有弹窗,说明就有XSS漏洞。
xss真的执行恶意代码的实际上是JS语句,那么我们一般需要构建 (这个是定义Js的标签) 但是也是有其他方法可以执行的 javascript:alert(1) (经典代码test) Javascript实际上是一个伪协议 伪协议不同于因特网上所真实存在的协议,如http://,https://,ftp://, 伪协议只有关联应用能够用, 比如 php:// tencent://(关联QQ) javascript:伪协议实际上声明了URL的主体是任意的javascript代码 javascript:alert(1) 事件也是可以执行JS的: 例如: οnerrοr=alert(1) 在加载文档或图像时发生错误。 该句的意思就是在加载文档或图像时发生错误然后会执行alert(1) 类似的事件有很多 常用的有 onerror、onload(成功加载执行)oninput (有输入框,输入的时候触发) 注意: 如果发现注入对应的标签不生效,一定注意审核源码。
反射型XSS 概念 反射性XSS又称非持久型XSS,这种攻击方式往往具有一次性。 攻击方式:攻击者通过电子邮件等方式将包含xss代码的恶意链接发给目标用户。当目标用户访问该链接 时,服务器接收该目标用户的请求并进行处理,然后服务器把带有XSS代码的数据发送给目标用户的浏 览器,浏览器解析这段带有XSS代码的恶意脚本后,浏览器解析这段代码后就会触发xss攻击,完成攻击者 想要的功能(获取cookies、url、浏览器信息、IP等等)。
攻击流程 1. 分析源码,看见输入框直接来一句: 2. 观察页面是否发生变化,如果发生变化,就成功 3. 没有变化,一定去分析标签 4. 根据现实效果,调整注入的代码,可以尝试用img标签之类的替换script 5. 只要弹窗就结束
代码分析 在反射型XSS PHP代码中,通过GET获取参数xss_input_value的值,然后通过echo输出一个input标 签,并将xss_input_value的值放入input标签的value中。当访问 xss_input_value=">
时,输出到页面的HTML代码变为
存储型XSS 概念 存储型XSS又称持久型XSS,攻击脚本将被永久地存放在目标服务器的数据库或文件中,具有很高的隐蔽 性。攻击方式:这种攻击多见于论坛、博客和留言板,攻击者在发帖的过程中,将恶意脚本连同正常信 息一起注入帖子的内容中。随着帖子被服务器存储下来,恶意脚本也永久地被存放在服务器的后端存储 器中。当其他用户浏览这个被注入了恶意叫你本的帖子时,恶意脚本会在他们的浏览器中得到执行。 如下,恶意攻击者在留言板中加入以下代码:当其他用户访问留言版时,就会看到一个弹窗。可以看 到,存储型XSS的攻击方式能够将恶意代码永久地嵌入一个页面中,所以访问这个页面的用户都将成为 受害者。如果我们能够谨慎对待不明链接,那么反射型XSS攻击将没有多大作为,而存储型XSS则不同, 由于它注入在一些我们信任的页面,因此无论我们多么小心,都难免会受到攻击。 攻击流程 bwapp里面的json的通关: 需要json的知识点: 标准的json格式: