SQL-注入无效
SQL-Injection not working
你能告诉我为什么我的 SQL-Injection 不起作用吗?我该如何修复它。我试图遵循 Here 中的示例,但值'); DROP TABLE table;-- 或者密码 1=1 不起作用。很抱歉用这些简单的东西耽误了你的时间,但我试了很多次都没有成功 运行,另一个 post 也没有帮助我。
<!DOCTYPE html>
<html>
<head>
<style>
body {background-color: #cc0000;}
</style>
</head>
<body>
<h2>Einlogen</h2>
<form action="EasyExploit.php" method="post">
Vorname: <input type="text" name="vorname"><br>
<input type="submit">
<h2>Registrieren</h2>
<form action="EasyExploit.php" method="post">
Vorname: <input type="text" name="vorname"><br>
<input type="submit">
<?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')");
?>
</body>
</html>
提前致谢
制作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注入了。我们创建一个简单的 table t
来检查我们是否可以通过 sql 注入来删除它:
create table t ( i int );
攻击时间到了,要注入的杀手字符串 sql 是:
pepe'); DROP TABLE t;--
SQL with injected code:
"INSERT INTO Persons (Vorname) VALUES ('pepe'); DROP TABLE t;--')"
解释:
- SQL 模式是:
"INSERT INTO Persons (Vorname) VALUES ('$unsafe_variable')"
- "pepe');" 替换
$unsafe_variable
: "INSERT INTO Persons (Vorname) VALUES ('pepe'); DROP TABLE t;--')"
- 记住--的意思是"comments from here",那么最后的引号和括号就是注释了。
post这个值形成后:
mysql> select * from t;
ERROR 1146 (42S02): Table 's.t' doesn't exist
如何避免SQL注入?
伙计,这是互联网,他们有很多关于它的论文。使用参数化查询开始搜索。
你能告诉我为什么我的 SQL-Injection 不起作用吗?我该如何修复它。我试图遵循 Here 中的示例,但值'); DROP TABLE table;-- 或者密码 1=1 不起作用。很抱歉用这些简单的东西耽误了你的时间,但我试了很多次都没有成功 运行,另一个 post 也没有帮助我。
<!DOCTYPE html>
<html>
<head>
<style>
body {background-color: #cc0000;}
</style>
</head>
<body>
<h2>Einlogen</h2>
<form action="EasyExploit.php" method="post">
Vorname: <input type="text" name="vorname"><br>
<input type="submit">
<h2>Registrieren</h2>
<form action="EasyExploit.php" method="post">
Vorname: <input type="text" name="vorname"><br>
<input type="submit">
<?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')");
?>
</body>
</html>
提前致谢
制作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注入了。我们创建一个简单的 table t
来检查我们是否可以通过 sql 注入来删除它:
create table t ( i int );
攻击时间到了,要注入的杀手字符串 sql 是:
pepe'); DROP TABLE t;--
SQL with injected code:
"INSERT INTO Persons (Vorname) VALUES ('pepe'); DROP TABLE t;--')"
解释:
- SQL 模式是:
"INSERT INTO Persons (Vorname) VALUES ('$unsafe_variable')"
- "pepe');" 替换
$unsafe_variable
:"INSERT INTO Persons (Vorname) VALUES ('pepe'); DROP TABLE t;--')"
- 记住--的意思是"comments from here",那么最后的引号和括号就是注释了。
post这个值形成后:
mysql> select * from t;
ERROR 1146 (42S02): Table 's.t' doesn't exist
如何避免SQL注入?
伙计,这是互联网,他们有很多关于它的论文。使用参数化查询开始搜索。