{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

如何在不知道MySQL列名的情况下注入出数据?

robinrobin 回答0 收藏2
收藏问题

1条回答

Shihira

Shihira

回答于2022-06-28 15:36

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.1-10元之间
<