{eval=Array;=+count(Array);}
SQL注入时,需要从MySQL的某个表中导出某些数据。一般来说,要想导出数据,你必须知道表名、列名,而这两个名字在某些情况下可能你并不知道。
例如,对于版本小于5.0的MySQL数据库,以及部分有WAF干扰的版本大于5.0的MySQL数据库,你就无法轻易获得表名、列名。
在这种情况下,也许你会放弃,仅仅注入出数据库名字,证明漏洞存在就结束。
我和我的队友@aboul3la一起,创建了一个数据库环境来模拟被攻击的目标,并通过大量的尝试最终找到了一个可行方法。 首先展示一下目标表users
我们可以看到,这次表的列名有“name”、“password”、“email”、“出birthday”和“added”。 下一步,我们输入一个注入中经常使用的探明列数的查询句式
很好,我们可以注意到,查询结果中的列的名称从name、password、email、birthdate替换为1、2、3、4、5、6,这主要是因为前面的查询语句select 1,2,3,4,5,6。 下一步我们就可以根据查询结果中的新的列名提取数据,而针对的数据表就是以上的查询结果。 使用查询语句select4from (select 1,2,3,4,5,6 union select * from users)redforce;你就可以将选出第4列数据,也就是电子邮件地址,
然后依次select 3,select 2等等。
如果要将其带入实际的注入环境中,我们可以融合产生如下payload-1 union select 1,(select`4`from (select 1,2,3,4,5,6 union select * from users)a limit 1,1)-- -。你可以通过不停的修改列名1,2,3,4来提取数据。
总而言之 通过这种将未知原列名转换为其他值的方法,你就可以注入出所有的数据。 最终payload
0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答