zoukankan      html  css  js  c++  java
  • 宽字节注入原理及利用

    概念

    单字节字符集: 所有的字符都使用一个字节来表示,比如 ASCII 编码。

    多字节字符集: 在多字节字符集中,一部分字节用多个字节来表示,另一部分(可能没有)用单个字节来表示。

    两位的多字节字符有一个前导字节和尾字节。 在某个多字节字符集内,前导字节位于某个特定范围内,尾字节也一样。

    UTF-8 编码: 是一种编码的编码方式(多字节编码),它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

    常见的宽字节: GB2312、GBK、GB18030、BIG5、Shift_JIS GB2312 不存在宽字节注入,可以收集存在宽字节注入的编码。

    前提条件

    要有宽字节注入漏洞

    1、首先要满足目标程序使用双/多字节字符集进行解析

    2、其次不同字符集范围不一样,可能低位不包含单字节字符集的字符,这样就没办法了,所以要保证在该种字符集范围中包含低字节位,比如 0x5C(01011100) 的字符,即转义符。

    宽字节带来的安全问题主要是吃ascll字符(一个字节)的现象

     

    下面就看个利用的例子

    https://xxxxx?name=hello%27

    name值会在js中,但是输入的单引号被转义了,没办法逃逸

    然后翻看了下页面源码及请求头,发现客户端编码是gbk

    想必是宽字节注入了,尝试输入hello%df%27

    没错了,就是宽字节了,console都报错提示引号未闭合了,后面就是构造而外的js代码,并把后面的对于字符注释掉,让语法正确

    最后payload:hello%df%27%3b%61%6c%65%72%74%28%31%29%3c%21%2d%2d

     

    当然这个不只是用在xss上,很多地方都可以用,主要是理解这个原理。

     

  • 相关阅读:
    更改数据库sa密码
    单例模式实现 (Singleton)
    linux特殊符号大全
    “增强现实与多媒体”博客园开张了
    关于.NET运行多个版本
    DevExpress V7.2.3源码 Salesman or Opium Up to you
    there is no bool datatype in oralce datatype system
    .NET时代,还有多少人读库源码 求FCL源码
    当学术界在解决其理论问题,工程界形成形成了一个已开发者为核心的生态链
    Div css 管理后台 简易Demo
  • 原文地址:https://www.cnblogs.com/alummox/p/11404298.html
Copyright © 2011-2022 走看看