• (转)宽字节编码类型的XSS


    今晚又看了一遍PKAV-心上的瘦子写的xss腾讯系列的例子,收获挺大的,其中对宽字节注入有了更深的了解,又查找了一些相关的资料,整理一下,以备以后查阅 
    参考文档: 
    http://book.2cto.com/201301/14515.html 
    http://itindex.net/detail/47408-xss-%E5%AD%A6%E4%B9%A0-xss 
    http://www.wooyun.org/bugs/wooyun-2010-015969

    GB2312、GBK、GB18030、BIG5、Shift_JIS等这些都是常说的宽字节,实际上只有两字节。宽字节带来的安全问题主要是吃ASCII字符(一字节)的现象,
    比如,下面这个PHP示例,在magic_quotes_gpc=On的情况下,如何触发XSS?

    <?php header("Content-Type: text/html;charset=GBK"); ?> 
    <head> 
    <title>gb xss</title> 
    </head> 
    <script> a="<?php echo $_GET['x'];?>"; 
    </script>

    我们会想到,需要闭合双引号才行,如果只是提交如下语句:
    gb.php?x=1";alert(1)//
    双引号会被转义成",导致闭合失败:

    a="1";alert(1)//";

    由于这个网页头部响应指明了这是GBK编码,GBK编码第一字节(高字节)的范围是0x81~0xFE,第二字节(低字节)的范围是0x40~0x7E与0x80~0xFE
     
    gb.php?x=1%81";alert(1)//

    双引号会继续被转义成",最终如下:
    a="1[0x81]";alert(1)//";

    [0x81]组成了一个合法字符,于是之后的双引号就会产生闭合,这样我们就成功触发了XSS。

    要注意的是,GB2312是被GBK兼容的,它的高位范围是0xA1~0xF7,低位范围是0xA1~0xFE(0x5C不在该范围内),把上面的PHP代码的GBK改为GB2312,在浏览器中处理行为同GBK,也许是由于GBK兼容GB2312,浏览器都做了同样的兼容:把GB2312统一按GBK行为处理。

    
    
    
    
  • 相关阅读:
    Django-序列化器
    HTTP请求头响应头的信息
    HTTP协议
    IAAS,PAAS,SAAS
    MySQL-部分名词解释
    MySQL-事务和特性
    用Java仿QQ界面聊天小项目
    25篇Java入门技术博客,送给准备入坑的你
    Java自学推荐书籍
    Java中的并发讲解
  • 原文地址:https://www.cnblogs.com/b1gstar/p/6075740.html
Copyright © 2020-2023  润新知