XSS 和 SQLi 可以通过两种方式进行交互。您引用的评论来自这个问题,并且显然与第一点有关。
SQLi 通过 XSS
如果您知道某个应用程序容易受到 SQL 注入攻击,但您没有访问易受攻击组件所需的权限,则您可以利用现有的 XSS 漏洞,从而获得更高权限的用户来为您执行 SQL 注入.
正如您所指出的,在您无权访问的组件中查找漏洞可能并不容易。但是,至少有两种情况很容易发生这种情况:
- 开源软件
- 对源代码的临时访问(可能通过外部审计员、通过电子邮件泄露、通过心怀不满的前雇员、通过源代码控制中的漏洞,...)
对于非常简单的注入,攻击者也可能只是猜测攻击(也许攻击者知道您的应用程序根本不防御 SQLi,但他们有权访问的组件中的所有注入都使用具有受限权限的数据库用户;这里他们实际上可能能够猜测其他组件的脚本和参数名称并通过 XSS 来利用它们)。
从理论上讲,您还可以想象一个设置,其中更多特权用户始终使用与更高特权数据库用户的数据库连接,因此如果通过 XSS 通过更高特权用户利用,即使注入公共组件也可能更强大。
最后一个例子有点做作,但肯定是可能的。可能还有其他例子。
通过 SQLi 的 XSS
在这种情况下,您有一个 SQL 注入,但实际上并不能用它实现任何有趣的事情。注入可能发生在非常受限的数据库用户身上,例如只能读取已经公开可用的数据(但不能读取其他数据、写入数据、写入或读取系统文件、执行命令等;也没有漏洞在您可以利用的 dbms 中)。
在这种情况下,您可能能够通过 SQLi 执行反射或存储的 XSS 攻击。