SQL注入之宽字节注入演示(详细介绍宽字节)

宽字节介绍原理即绕过演示

自己对宽字节的认识和理解,如果有错误望指出,共同学习。

宽字节的介绍

  1. GBK 是占两个字节(也就是名叫宽字节,只要字节大于1的都是)
  2. ASCII 占一个字节
  3. PHP中编码为GBK ,函数执行添加的是ASCII编码,mysql默认字符集是GBK等宽字节字符集

为什么要介绍宽字节?

宽字节的出现个人感觉是因为SQL语句过滤了一些字符,比如 ’ 转义成 /’ 或者 " 转义成 /" SQL注入之宽字节注入演示(详细介绍宽字节)_第1张图片在这种情况下就不容易完成注入,所以出现了宽字节注入,通过宽字节绕过转义字符

过滤的函数

  1. mysql_real_escape_string()
  2. addslashes() 功能一样过滤
    SQL注入之宽字节注入演示(详细介绍宽字节)_第2张图片

绕过原理

  1. 比如使用%df’:会被PHP当中的addslashes函数转义为“ %df’ ”。
  2. “ \ ”即url里面的“ %5c ”, “ ’ ”对应的url编码是“%27”,那么也就是说,“ %df’ ”会被转义“ %df%5c%27 ”
  3. 倘若网站的字符集是GBK,mysql使用的编码也是GBK的话,就会认为“ %df%5c%27 ”是一个宽字节。
  4. “ %df%5c ”会结合(因为宽字节是占两个字节),也就是“縗” 。后面就有一个“ ’ ”。就造成了一个攻击效果。**
    SQL注入之宽字节注入演示(详细介绍宽字节)_第3张图片

使用其他宽字节

  1. 不仅仅只是使用%df’ 进行宽字节绕过也可以使用其他的宽字节,只有满足字符串编码的要求
  2. 常见使用的宽字节就是%df,其实当我们输入第一个ascill大于128就可以,转换是将其转换成16进制,eg:129转换0x81,然后在前面加上%就是%81
  3. GBK首字节对应0x81-0xfe(129-239),尾字节对应0x40-0xfe(64-126)(除了0x7f【128】)
  4. 比如一些 %df’ %81’ %82’ %de’ 等等(只有满足上面的要求就可以)

通过sqlmap进行演示

  1. sqlmap.py -u "url" --batch --tamper=unmagicquotes.py --current-db
    unmagicquotes.py 是专门进行宽字节绕过脚本
    SQL注入之宽字节注入演示(详细介绍宽字节)_第4张图片2. sqlmap.py -u "url" --batch --tamper=unmagicquotes.py -D security --tables
    SQL注入之宽字节注入演示(详细介绍宽字节)_第5张图片3. sqlmap.py -u "url" --batch --tamper=unmagicquotes.py -D security -T users --columns
    SQL注入之宽字节注入演示(详细介绍宽字节)_第6张图片4. sqlmap.py -u "url" --batch --tamper=unmagicquotes.py -D security -T users -C "username,password" --dump
    SQL注入之宽字节注入演示(详细介绍宽字节)_第7张图片5. 通过sqlmap的tamper模块的unmagicquotes.py脚本完成了注入攻击

总结

SQL注入有很多很多方法,这里的只是九牛一毛。供大家学习。小白自己总结的,不喜勿喷,小白在进步~
如果文章有错误希望大家指出,共同学习~

你可能感兴趣的:(SQL注入)