您能否告诉我为什么我的 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')");
为了使用您的代码测试 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')");
?>
mysqli_error
需要$connection参数。mysqli_multi_query
能够一次执行多个句子。出于安全原因。 mysqli_query
只是执行一个以防止sql注入。现在是测试sql注入的时候了。我们创建一个简单的表
t
来检查是否可以通过sql注入删除它:
create table t ( i int );
攻击时间到了,注入sql的杀手锏是:
佩佩');删除表 t;--
带有注入代码的SQL:
“插入人员(Vorname)值('pepe');删除表t;--')”
"INSERT INTO Persons (Vorname) VALUES ('$unsafe_variable')"
$unsafe_variable
: "INSERT INTO Persons (Vorname) VALUES ('pepe'); DROP TABLE t;--')"
将此值发布到表单后:
mysql> select * from t;
ERROR 1146 (42S02): Table 's.t' doesn't exist
伙计,这是互联网,有很多关于它的论文。使用参数化查询开始搜索。