01、题目分析
二次注入的原理是先把sql注入语句存放在数据库中,然后第二次通过调用数据库的数据(提前放置好的注入语句),然后进行sql注入
那么我们先将注册用户,将sql语句存放在数据库中,然后通过找回密码操作,数据库会自动调取数据库中的数据,就执行了我们的sql语句
02、手工注入
二次注入的前提是代码中使用了addslashes 或者是借助 get_magic_quotes_gpc 对其中的特殊字符进行了转义,这个我们在后面的代码分析中会进行分析,现在先默认存在。
我们现在假如想获取admin用户的密码
那么我们注册用户名填admin'#,密码填123,邮箱填admin
然后通过邮箱找回
02、代码分析
<?php
if(!empty($_POST['email'])){
if($_POST['sub']){
// 获取用户名、密码和电子邮件,并过滤特殊字符
$username = addslashes($_POST['username']);
$password = addslashes($_POST['password']);
$email = addslashes($_POST['email']);
// 构造插入数据库的 SQL 语句
$sql = "INSERT INTO `users` (`username`, `password`, `email`) VALUES ('$username', '$password', '$email');";
// 执行 SQL 语句
$row = mysql_query($sql);
if($row){
echo "<script>alert('注册成功')</script>";
}else{
echo "<script>alert('注册失败')</script>";
}
}
}else{
echo "<center>请注册输入信息</center>";
}
?>
<?php
if(isset($_POST['sub'])){
$email = $_POST['email'];
$email = addslashes($email);
// 连接数据库(假设数据库连接已经在代码的其他地方进行)
$conn = mysqli_connect("localhost", "username", "password", "database_name");
if (!$conn) {
die("数据库连接失败: " . mysqli_connect_error());
}
// 查询用户
$sql = "SELECT * FROM users WHERE email='{$email}'";
$result = mysqli_query($conn, $sql);
if(mysqli_num_rows($result) > 0) {
$row = mysqli_fetch_assoc($result);
$username = $row['username'];
$sql2 = "SELECT * FROM users WHERE username='{$username}'";
$result2 = mysqli_query($conn, $sql2);
if(mysqli_num_rows($result2) > 0) {
$row2 = mysqli_fetch_assoc($result2);
echo "<center><h4>您的用户名是 " . $row2['username'] . "</h4><br>";
echo "<center><h4>您的密码是 " . $row2['password'] . "</h4><br>";
} else {
echo "<script>alert('邮箱不存在')</script>";
}
} else {
echo "<script>alert('邮箱不存在')</script>";
}
// 关闭数据库连接
mysqli_close($conn);
}
?>
标签:username,13,数据库,echo,sql,mysqli,iwebsec,注入
From: https://www.cnblogs.com/bdrwmy/p/17642173.html