首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么基于错误的SQL注入只适用于certan字段?

问为什么基于错误的SQL注入只适用于certan字段?
EN

Security用户
提问于 2015-10-28 16:36:35
回答 1查看 1.2K关注 0票数 1

我目前正在调查影响Joomla CMS的最新漏洞。

您可以找到这里描述了该漏洞,但是我的问题仅仅是基于错误的SQL注入,并且与上下文无关。

上面的示例运行得很好:随机执行它几次会产生Subquery returns more than 1 row和预期的Duplicate entry '::joomla@localhost::0' for key 'group_key'错误消息,泄漏Joomla :)使用的MySQL用户!

但是,我不能访问所有的数据库内容。有些字段总是会生成Subquery returns more than 1 row,并且不会泄漏它们包含的信息。

当直接连接到MySQL提示符时,此限制是可重复的。

在我读到的关于这个问题的文章中,我没有遇到任何关于这个限制的描述(非常恼人)。是什么已知的东西吗?它是专门针对我的MySQL版本(5.6.14-企业-商业-高级)吗?有什么解决办法吗?

EN

回答 1

Security用户

回答已采纳

发布于 2015-10-29 11:52:06

以下是哪些请求使用此注入工作,哪些请求不工作,这些请求与它们的列类型关联:

什么工作:

  • 使用MySQL内部函数,如users()、database()等。
  • 使用@@version等系统变量。
  • 访问*_users表中的短列内容,如*id (int(11))、email (varchar(100))、password (varchar(100))、registerdate (datetime)等。

不起作用的

:

  • 访问较长的列,如(仍然属于*_users表) name (varchar(255))、username (varchar(150))、params (文本)、otpKey (varchar(1000))等。

这里很明显,使基于错误的SQL注入正常工作的原因是字段大小(不管内容大小,列可能是空的)。

然后,解决方案变得非常清晰:向SQL注入添加一个substr()调用,现在整个数据库内容可以访问:)!

代码语言:javascript
复制
http://example.com//index.php?option=com_contenthistory&view=history&list[select]=(select col.a from (select count(*), concat(0x3a, 0x3a, (select substr(name,1,100) from jml_users limit 0,1), 0x3a, 0x3a, floor(rand()*2)) a from information_schema.columns i1 group by a) col),'A' union select uc.id

500 -重复条目'::Noob::1‘用于键'group_key'

拥有:)!(不过,我仍然不知道这个限制是一般性的还是仅限于这个版本的MySQL服务器)。

票数 1
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/103937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档