万能密码登录-Post型注入攻击
1.创建数据库
1.1创建SQL脚本
DROP DATABASE IF EXISTS lab;
CREATE DATABASE lab;
USE lab;
create table users
(
id int not null auto_increment,
username char(32) not null,
passcode char(32) not null,
primary key(id)
);
insert into users(username,passcode) values('admin','admin123');
insert into users(username,passcode) values('alice','alice456');
1.2将脚本文件导入到数据库
登录之后导入
2.建立基于session验证的用户登录网站
2.1创建用户登录页面login.html
将from表单的文本框和密码框的参数交给check_login.php处理
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
<style>#a{ width: 300px; text-align: right;}.b{width: 150px;height:20px;}
</style>
</head>
<body><div id=a><form name="form_login" method="post" action="check_login.php">Username: <input type="text" class=b name="username" /> <br>Psssword: <input type="password" class=b name="passwd" /> <br><input type="submit" name="Submit" value="Submit" /> <input type="reset" name="Reset" value="Reset" /></form></div>
</body>
</html>
2.2设置编码方式为utf8并保存
2.3登录验证后端页面
<?php//包含数据库连接
include('con_database.php');//获取输入的信息
$username = isset($_POST['username']) ? mysqli_escape_string($con,$_POST['username']) : '';
$passwd = isset($_POST['passwd']) ? mysqli_escape_string($con, $_POST['passwd']) : '';if($username == '' || $passwd == '' )
{ echo "<script>alert('请输入用户名和密码!'); history.go(-1);</script>"; exit;
}//执行数据库查询
$sql="select * from users where username = '$username' and passcode = '$passwd' ";$query = mysqli_query($con,$sql)
or die('SQL语句执行失败'.mysqli_error($con));
//如果查询结果存在,说明用户名和密码正确
if($row = mysqli_fetch_array($query))
{session_start();$_SESSION['username'] = $row[1];echo "<a href='welcome.php'>欢迎访问</a>";
}else{echo "<script>alert('登录失败!'); history.go(-1);</script>";
}
mysqli_close($con);
?>
数据库连接功能的文件con_database.php
<?php
$con=mysqli_connect('127.0.0.1','root','123456')
or die('数据库连接失败');
mysqli_select_db($con,'lab')
or die('选择数据库失败');
?>
2.4欢迎页面
<?php
session_start();
if(isset($_SESSION['username']))
{echo '欢迎用户'.$_SESSION['username'].'登录';echo "<br>";echo "<a href='logout.php'>退出登录</a>";
}
else
{echo '您没有权限访问此页面';
}
?>
2.5销毁页面
<?php
session_start();
session_unset();
session_destroy();
echo "注销成功";
?>
2.6功能测试
(我第一次测试失败是因为输入网页的时候输入错了一个字母)
username
admin
password
admin123
3.万能密码SQL注入攻击测试
安装notepad用于编辑文档
需要对login页面进行修改(前面给的是已经优化的防护代码)
<?php//包含数据库连接
include('con_database.php');//获取输入的信息
$username = isset($_POST['username']) ? $_POST['username'] : '';
$passwd = isset($_POST['passwd']) ? $_POST['passwd'] : '';if($username == '' || $passwd == '' )
{ echo "<script>alert('请输入用户名和密码!'); history.go(-1);</script>"; exit;
}//执行数据库查询
$sql="select * from users where username = '$username' and passcode = '$passwd' ";$query = mysqli_query($con,$sql)
or die('SQL语句执行失败'.mysqli_error($con));
//如果查询结果存在,说明用户名和密码正确
if($row = mysqli_fetch_array($query))
{session_start();$_SESSION['username'] = $row[1];echo "<a href='welcome.php'>欢迎访问</a>";
}else{echo "<script>alert('登录失败!'); history.go(-1);</script>";
}
mysqli_close($con);
?>
3.1用户名注入
在usename输入'or 1=1 or'
password随便输入个123
点击submit