搜索
查看: 573|回复: 0

十种MYSQL显错注入原理讲解(一)

[复制链接]

1839

主题

2255

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11913
发表于 2017-1-18 17:09:25 | 显示全部楼层 |阅读模式
1、count,rand,floor
  1. select * from test where id=1 and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a);
复制代码
函数解释:
  count:是用来统计表中或数组中记录的一个函数。
  rand:调用可以在0和1之间产生一个随机数。
  floor:函数只返回整数部分,小数部分舍弃。
原理详解:
  首先在select floor(rand(0)*2) 执行时候会返回固定的序列(表中内容10左右,你就能看出来了)。用的别人的截图,莫怪。
  所谓固定的序列就是返回的01101100....这串是固定的,这个要记牢,后面要用到。
  然后,由于count(*)统计,采用的是逐行判断式的统计,先建立虚拟表,判断存在相同字段如果存在,统计值+1,不存在返回0,开始搜索下个字段。
  这个我举个例子:
  例如表中有十个苹果,然后执行统计。
  第一次
  key    统计值
  苹果    1
  第二次
  key   统计值
  苹果    2
  ……
  最后由于floor(rand(0)*2)执行返回的是固定值,所以按照count(*)统计,在第4次执行后第5次执行统计会报错(返回不存在相同字段后,下一次返回相同字段的统计,导致主键相同,所以报错)。
  同时这也说明,表中的内容需要大于3条。
2、updatexml()【最大长度限制32位】
  1. select * from test where id=1 and (updatexml(1,concat(0x7e,(select user()),0x7e),1));
复制代码
函数解释:
  updatexml:XML文档进行查询和修改的函数。
  UPDATEXML (XML_document, XPath_string, new_value);
  第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
  第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
  第三个参数:new_value,String格式,替换查找到的符合条件的数
  concat:返回结果为连接参数产生的字符串。
原理解释:
  通过concat将查询到的信息拼接成字符串,由于updatexml函数的第二个参数需要Xpath格式字符串。现在很显然不是,所以报错。
3、extractvalue()【最大长度限制32位】
  1. select * from test where id=1 and (extractvalue(1,concat(0x7e,(select user()),0x7e)));
复制代码
函数解释:
  extractvalue():从目标XML中返回包含所查询值的字符串。
EXTRACTVALUE (XML_document, XPath_string);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串)
  concat:返回结果为连接参数产生的字符串。
原理解析:
  通过concat将查询到的信息拼接成字符串,由于extractvalue函数的第二个参数需要Xpath格式字符串。现在很显然不是,所以报错。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?Join BUC

x
过段时间可能会取消签到功能了
您需要登录后才可以回帖 登录 | Join BUC

本版积分规则

Powered by Discuz!

© 2012-2015 Baiker Union of China.

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