宽字节注入

宽字节注入

原理

利用mysql特性, 在使用GBK编码时将/进行转义

ASCII码传输中文是会变成字符串: utf-8, GBK(宽字节注入, 默认两个字节为一个汉字)

URL 转码

十六进制形式

  • 空格 %20
  • %27
  • # %23
  • \ %5C

如何从addslashes函数中逃逸

addslashes -
在GBK编码中, 会使用addslashes函数(在传入值中插入“/”以转义)

如何逃逸

  1. 将\转义
  2. 把\弄没

e.g.

注入 http://192.168.3.23/wide/0x01/index.php?id=2 时, 在后面加’ 变成
http://192.168.3.23/wide/0x01/index.php?id=2’, 数据库并没有报错

原因: addslashes()已经把我们提交的单引号给转义了

因为我们的目的是让单引号溢出而使数据库报错,但是现在单引号被转义了所以变成了"2’".

按照GBK的编码算法, 我们输入的是2%5C%27

  • %5C是addlashes()添加的/
  • %27是希望逃逸的单引号

解决方法: 因为GBK编码默认两个字符为一个汉字, 我们可以通过输入宽字符%df使反斜杠和这个%df形成一个汉字,这样后面的单引号就不会被转义而达到逃逸的效果

输入http://192.168.3.23/wide/0x01/index.php?id=2%df’
这时,根据GBK编码,输入的内容为2%df%5C%27

这时, %df和%5C组成了汉字 運 查询就变为2運’,单引号成功逃逸

你可能感兴趣的:(ctf,php,mysql,数据库,安全)