为什么我无法对这个存在漏洞的脚本进行SQL注入? [重复]

问题描述 投票:0回答:1

您能否告诉我为什么我的 SQL 注入不起作用以及如何修复它。我尝试遵循 Here 中的示例,但是值'); DROP TABLE table;-- 或密码 1=1 不起作用。很抱歉在这些简单的事情上占用了您的时间,但我尝试了很多次,但没有让它运行,而另一篇文章也没有帮助我。

<?php

$connection = mysqli_connect('localhost', 'root','' ,'DB') or die(mysqli_error());
mysqli_select_db($connection ,'DB')or die(mysqli_error());
@$unsafe_variable = $_POST['vorname'];
mysqli_query($connection, "INSERT INTO `Persons` (`Vorname`) VALUES ('$unsafe_variable')");
php sql mysqli sql-injection
1个回答
1
投票

制作sql注入易受攻击的代码(用于测试目的):

为了使用您的代码测试 SQL 注入,我们需要进行一些更改:

<?php

  $connection = mysqli_connect('localhost', 'root','' ,'DB') or 
                die(mysqli_error($connection));  //1
  mysqli_select_db($connection ,'DB') or die(mysqli_error($connection)); //2
  $unsafe_variable = $_POST['vorname'];
  mysqli_multi_query($connection,    //3
               "INSERT INTO `Persons` (`Vorname`) VALUES ('$unsafe_variable')");

?>
  • //1//2
    mysqli_error
    需要$connection参数。
  • //3:只有
    mysqli_multi_query
    能够一次执行多个句子。出于安全原因。
    mysqli_query
    只是执行一个以防止sql注入。

测试:

现在是测试sql注入的时候了。我们创建一个简单的表

t
来检查是否可以通过sql注入删除它:

create table t ( i int );

攻击时间到了,注入sql的杀手锏是:

佩佩');删除表 t;--

带有注入代码的SQL:

“插入人员(Vorname)值('pepe');删除表t;--')”

解释:

  • SQL 模式是:
    "INSERT INTO Persons (Vorname) VALUES ('$unsafe_variable')"
  • "pepe');" 替换
    $unsafe_variable
    :
    "INSERT INTO Persons (Vorname) VALUES ('pepe'); DROP TABLE t;--')"
  • 记住--的意思是“来自这里的评论”,那么最后的引用和括号就是评论。

将此值发布到表单后:

mysql> select * from t;
ERROR 1146 (42S02): Table 's.t' doesn't exist

如何避免SQL注入?

伙计,这是互联网,有很多关于它的论文。使用参数化查询开始搜索。

© www.soinside.com 2019 - 2024. All rights reserved.