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