iwebsec-sql注入 13 二次注入

发布时间 2023-08-19 10:53:30作者: 别打扰我摸鱼

01、题目分析

二次注入的原理是先把sql注入语句存放在数据库中,然后第二次通过调用数据库的数据(提前放置好的注入语句),然后进行sql注入

image

那么我们先将注册用户,将sql语句存放在数据库中,然后通过找回密码操作,数据库会自动调取数据库中的数据,就执行了我们的sql语句

02、手工注入

二次注入的前提是代码中使用了addslashes 或者是借助 get_magic_quotes_gpc 对其中的特殊字符进行了转义,这个我们在后面的代码分析中会进行分析,现在先默认存在。

我们现在假如想获取admin用户的密码

那么我们注册用户名填admin'#,密码填123,邮箱填admin

image

然后通过邮箱找回

image

image

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);
}
?>