SQL注入注入方式(大纲)

打印 上一主题 下一主题

主题 836|帖子 836|积分 2508

SQL注入注入方式(大纲)

通例注入

通常没有任何过滤,直接把参数存放到SQL语句中。
宽字节注入



  • GBK 编码 两个字节表示一个字符
  • ASCII 编码 一个字节表示一个字符
  • MYSQL默认字节集是GBK等宽字节字符集
原理: 设置MySQL时错误配置为set character_set_client=gbk (它将客户端字符集设置为 GBK 编码),这样会引发编码转化,导致出现注入毛病。

  • 正常情况下,GPC开启或利用addslashes函数过滤GET或POST提交的参数时,攻击者利用的单引号**’就会被转义为 \'。(GPC开启或利用addslashes函数过滤:在特殊符号前加入\**,从而达到安全的目的。)
  • 但假如存在宽字节注入,我们输入**%df%27时,首先经过单引号转义成%df%5c%27**(%5c为反斜杠\)(%df为GBK编码中的一个特殊字符,表示为空格)之后在数据库查询前利用了GBK多字节编码,即在汉字编码范围内两个字节会被编码为一个汉字。
  • 然后MySQL服务器会对查询语句进行GBK编码,即%df%5c转化成汉字,而单引号由于GBK为两个字节表示一个字符的缘故起因保留下来,从而造成注入毛病。
若有一个网站其链接为http://123123/text.php?id=1,而且其存在宽字节注入。
则构造http://123123/text.php?id=1%df’or 1='1
当后端php代码像这样则导致参数宽字节注入。
  1. `mysql_query` 是 PHP 中用于执行 MySQL 数据库查询的函数之一。该函数接受一个 SQL 查询作为参数,并将其发送到 MySQL 数据库进行执行。在执行查询后,`mysql_query` 会返回一个结果资源(resource)或者布尔值(true 或 false),具体取决于查询的类型和执行是否成功。
复制代码
  1. mysql_query("SET NAMES 'gbk'");  //设置mysql连接字符集为gbk编码的语句。
  2. $id=isset($_REQUEST['id']) ? addslashes($_REQUEST['id']) :0; //判断是否存在,并且使用/过滤特殊符号
  3. $query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
复制代码
同理:SET NAMES 'gbk’可以理解为:
  1. set character_set_client=gbk;
  2. set character_set_connerction=gbk;
  3. set character_set_results=gbk;
复制代码
在这个代码中addslashes函数将 前加了**\符号,酿成%df\'**。
在进行GBK编码时,将%df%5c看成一个宽字符,得到連’,造成注入。
二次编码注入

二次编码注入,即二次urldecode注入,是由于urldecode利用不当造成的。
在PHP中,有以下常用的过滤函数:
  1. addslashes(),mysql_real_escape_string(),mysql_escape_string(),或者魔术引号GPC开关来防止注入。
复制代码
以上函数都是通过在特殊字符前添加反斜杠进行转义。
但这些函数在碰到urldecode()函数时都会由于二次解码引发注入。PHP在处理提交数据前就会进行一次url解码,然后urldecode()函数又进行了一次解码。
例如:构造id=1%2527(%25=%),解码一次后会酿成1%27,再进行解码酿成id=1‘,单引号引起注入。
同理:rawurldecode()也会造成同样问题。
若mysql_real_escape_string()在urldecode()之前,则不会过滤urldecode()产生的单引号。
Base64编码注入

假如存在Base64_decode()函数,而且没在后面有过滤直接拼接到SQL语句中,则导致了SQL注入。
堆叠注入


  • 原理:mysql数据库sql语句的默认竣事符是以";"号末端,在实行多条sql语句时就要利用竣事符隔
    开,而堆叠注入其实就是通过竣事符来实行多条sql语句。
  • 触发条件

    • 存在可以同时实行多条sql语句的函数,好比:mysql_multi_query()函数。
    • 未对**;**进行过滤。

毛病类型


  • 可显注入
    攻击者可以直接在当前界面获取想要信息
  • 报错注入
    数据库查询返回结果没有在页面中显示,但是应用步伐将数据库报错信息打印到了界面上,以是可以借报错信息获取想要的内容。
  • 盲注注入
    数据库结果无法从界面中直接获取。

    • 布尔注入
      利用Mysql条件不创建时返回空内容,条件创建时返回正常的数据的特点进行攻击。例如substr函数截取内部返回值与字符进行比较,遍历比较还原内人2
    • 时间盲注
      通过substr截取返复书息的字符,通过字符推算出最终结果,但是其是通过返回时间来判定的。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81429

金牌会员
这个人很懒什么都没写!

标签云

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