当前位置: 首页 > 面试题库 >

Mysqli查询注入,如何注入SQL查询字符串?

颛孙飞鸾
2023-03-14
问题内容

考虑一下我有这行代码

$result = $mysqli->query("SELECT  * from myTable where field='".$_GET['var']."');

恕我直言,这很容易受到SQL注入的攻击。

因此,我想通过Get / URL发送一个“ var”参数来证明它是可以尝试的,该参数将注入查询,并带有潜在的恶意代码。

我实际上尝试过:

var = "1'; TRUNCATE myTable; ";

我尝试在执行之前打印出SQL字符串查询,它实际上是2条SQL有效语句。

SELECT  * from myTable where field='1'; TRUNCATE myTable;

第一个问题,但实际上似乎mysqli-> query不会一次执行2条语句。是不是

第二个问题,我看到注入查询的一种常用技术是先进行表单注入,然后添加注释字符以摆脱SQL的尾巴。例子:

"SELECT  * from myTable where field='".$_GET['var']."' AND field2 IS NOT NULL"

可以注入:

var = "1'; TRUNCATE myTable; # ";

但是这个问题出现了,我想摆脱它的诀窍不见了

如果代码中的SQL字符串有新行,例如:

    "SELECT  * from myTable where field='".$_GET['var']."' 
     AND field2 IS NOT NULL"

如果我使用上面的“ var”,最终结果是

 SELECT  * from myTable where field='1'; TRUNCATE myTable; #  
     AND field2 IS NOT NULL

第二行不会被评论

如何对此进行注射测试?

非常感谢。


问题答案:

第一个问题,但实际上似乎mysqli->query不会立即执行2条语句。是不是

是的,如果要执行多个语句,则需要使用mysqli->multi_query。您可以在这里找到有关多条语句的很好的解释:http : //www.php.net/manual/en/mysqli.quickstart.multiple-
statement.php

但是这个问题出现了,我想摆脱它的诀窍不见了

出现问题是因为您正在使用多个语句,mysqli->query而不支持它们。

关于您的查询:

$result = $mysqli->query("SELECT  * from myTable where field='".$_GET['var']."');

您可以使用例如注入1' OR 1=1;这将返回myTable查询结果中的所有条目。

"SELECT * from myTable where field='".$_GET['var']."' AND field2 IS NOT NULL"

在这里你可以使用 1' OR 1=1 UNION ALL SELECT * FROM myTable WHERE '1'='1

如今,有一些工具可以为您自动检查SQL注入,例如以SQL Inject Me(Firefox插件)为例。



 类似资料:
  • 我想提高对可能存在的SQL注入攻击的了解。我知道参数化完全避免了SQL注入风险,因此应该在任何地方应用。然而,当有人问我如何利用它时,我想得到一个答案。 我知道基本的SQL注入攻击是如何工作的。例如,一个网站有一个页面<代码>网站。com/users/{id}其中id是用户的主键。如果我们完全信任输入,只需将id参数传递给正在执行的查询,这可能会产生可怕的后果。如果是网站。com/users/1查

  • 我们可以将. sql文件传递或输入到Spring JPA中的查询注释吗? 类似这样的@Query(文件:/sql/employeeList.sql,nativeQuery=true) /sql/employeeList。sql-我想把这个文件放在代码中的某个地方,其中包含select sql。 我不希望有原生sql字符串@查询(“选择abc….”,nativeQuery=true)--我不想这样使

  • 问题内容: 我是hive的新手,想知道是否有像在SQL中一样将数据插入到hive表中的方法。我想像我的蜂巢中插入我的数据 我已经读过您可以将文件中的数据加载到配置单元表中,也可以将数据从一个表导入到配置单元表中,但是有什么方法可以像在SQL中那样附加数据吗? 问题答案: 自Hive 0.14起,此处的某些答案已过时 https://cwiki.apache.org/confluence/displ

  • 问题内容: 我有两个SQL查询,其中每次调用时我都尝试用+1和-1分别更新和值。 第一个查询: 第二查询 因为与我交换而在第二次注射查询中有任何威胁吗? 问题答案: 不,第二个查询与第一个查询一样安全,因为它已完全参数化,因此没有提供外部数据可以通过其输入SQL查询本身文本的路径。该表达式是由RDBMS计算的,而不是由程序*计算的,因此它不能提供将新代码注入现有SQL的机会。 *,并且随后不会提供

  • 问题内容: 我有一个项目(私有,ASP.net网站,使用https保护的密码),其中一项要求是用户能够输入将直接查询数据库的Sql查询。我需要能够允许这些查询,同时防止它们对数据库本身造成损害,以及防止访问或更新它们不应该访问/更新的数据。 我提出了以下实施规则: 使用 仅 具有“选择表/视图”和“更新表”权限的db用户(因此,其他任何命令(例如drop / alter / truncate /

  • 我有一些执行数据库操作API。每当我将代码上传到checkmarx时,我会得到以下错误,并将其标记为高漏洞错误,有人能帮助我吗? 应用程序的CreateDatabaseAndMapToDomain方法使用executeQuery执行SQL查询,位于daas-springboot-checkmarxintegration\src\main\java\com\it\daas\apis\service\