首页 > 解决方案 > 一次实现两个 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 注入?或者它也可以在这样的网站上工作?

网站平台

标签: sqlsecuritysql-injection

解决方案


确切的语法将取决于数据库及其解析方式 - 基于似乎拆分语句的分号,对我来说感觉就像 MSSQL。我认为您走在正确的轨道上,但会坚持使用“OR”子句-数据库将在单独的列表中返回最后一个查询。在第一种情况下,您会遇到报价解析问题。

您还可以尝试在字符串末尾使用转义字符“\”来转义第二个引号(如果它在那里)。


推荐阅读