sql - 一次实现两个 SQL 注入查询(带和不带单引号)
问题描述
我目前坚持这个 SQL 注入任务。
我应该同时使以下两个 SQL 查询为真。我也只能输入一个必须适用于以下两个语句的输入。下划线部分是我的输入。作业托管在接收我的单个用户输入的 Web 服务器上。
Query 1: SELECT 0x43242a = __;
Query 2: SELECT '0x89222a' = '__';
我尝试过的:使用 -- 和 ; 的组合 评论并尝试创建另一个查询,但无济于事。我进行了探索,这两个语句每次仅成功触发一个语句,即使它们看起来应该适用于两个查询。
主要问题是因为第二个查询需要一个单引号,所以似乎我永远无法同时满足这两个查询。
我尝试了三种情况
Input: 0x89222a' OR '1' = '1' OR '1' = '1
Query 1: SELECT 0x43242a = 0x89222a' OR '1' = '1' OR '1' = '1; (false)
Query 2: SELECT '0x89222a' = '0x89222a' OR '1' = '1' OR '1' = '1'; (true)
^ 不知何故,我认为这会巧妙地满足这两个条件。对于第一个,虽然第一个比较失败,OR 处理应该为真的第二个,但它被认为是假的。然而,第二个说法是正确的。
Input (quotes are part of the input) : ' or 1=1 --; SELECT '1' = '1'
Query 1: SELECT 0x43242a = ' or 1=1 --; SELECT '1' = '1'; (true)
Query 2: SELECT '0x89222a' = '' or 1=1 --; SELECT '1' = '1''; (false)
^ 这使得第一个查询为真,我认为它适用于第二个查询,通过处理第二个查询的单引号,但不是。
Input: 0x43242a--; SELECT '1' = '1
Query 1: SELECT 0x43242a = 0x43242a--; SELECT '1' = '1; (false)
Query 2: SELECT '0x89222a' = '0x43242a--; SELECT '1' = '1'; (true)
^ 我也尝试了上述输入,这使第二个查询为真,但无法使第一个查询为真。
这是作业网页的屏幕截图。我不知道它正在运行的数据库类型的详细信息......我不确定是否是因为他们如何编码它,我不能像它的工作原理一样充分利用 SQL 注入?或者它也可以在这样的网站上工作?
解决方案
确切的语法将取决于数据库及其解析方式 - 基于似乎拆分语句的分号,对我来说感觉就像 MSSQL。我认为您走在正确的轨道上,但会坚持使用“OR”子句-数据库将在单独的列表中返回最后一个查询。在第一种情况下,您会遇到报价解析问题。
您还可以尝试在字符串末尾使用转义字符“\”来转义第二个引号(如果它在那里)。