今天主要讲解了命令行查看数据库、数据库连接、越权访问
命令行的使用
在文件根目录下执行cmd,输入数据库的账号和密码进行数据库的访问
输入 show databases;语句查看数据库表,注意是databases后面有一个分号‘;’
show databases;
查看数据库表,show tables;
show tables;
通过查询语句访问数据库表users,select * from users;
select * from users;
通过查询语句查询数据库信息单条信息
select * from users where username='student1' and password='123456';
逻辑语句的优先级,and和or,输入语句select * from users where username=‘stu1’ and password=‘11111’ or 1;可以看到输出的是全部信息,表中并无查询的信息,优先级就是前面所查询的没有信息的语句为假,但是or1与前面进行逻辑运算可以看到最终语句为1也就是为真,所以相当于打出整个表的信息。
select * from users where username='stu1' and password='11111' or 1;
根据不同的名称进行排序,输入语句select * from users order by username;
select * from users order by username;
数据库连接
数据库连接,连接到phpstudy下的mysql,注意的是不要连接本机的另一个mysql数据库
$sql ="select * from users where username='$name' and password='$pass'";
#$sql="select * from security";
echo $sql;
$conn=mysqli_connect('localhost','root','root','score_system');/*localhost或127.0.0.1或本地ip*/
可以看到数据库已经连接成功:
越权访问
在越权访问这里需要使用到抓包工具brupsute,通过php文件的编写实现,其中有login.php、logindeal.php、student.php、teacher.php为主要功能文件,进行越权访问的主要原理是对cookie值的篡改,将其值改成所需要访问的类型值,其中还讲到了对cookie值的注销。
login.php文件:这部分代码包括了对数据库的访问,数据库的连接,连接成功后通过数据库内存储的信息进行分析,通过登录页面输入的信息与数据库信息进行对比,判断输入的用户名和密码是否正确,进而判断登录是否成功。代码如下:
$req=mysqli_query($conn,$sql);
$num=mysqli_num_rows($req);
if ($num===1)
{
echo "登录成功";
$res=mysqli_fetch_array($req);
$role=$res['role'];
setcookie("username",$name,time()+3600);
setcookie("role",$role,time()+3600);
header("Location:logindeal.php");
echo "<a href='loginout.php'>注销</a>";
}
else
{
echo "登录失败!";
}
login.php 完整代码:
<?php
echo "<meta charset='UTF-8'>";
echo "Hello word!","hello worth!<br>";
echo "<br>";
$pass=$_POST['pass'];
$name=$_POST['name'];
$sql ="select * from users where username='$name' and password='$pass'";
#$sql="select * from security";
echo $sql;
$conn=mysqli_connect('localhost','root','root','score_system');//localhost或127.0.0.1或本地ip
if ($conn)
{
echo "数据库连接成功!"."<br>";
$req=mysqli_query($conn,$sql);/*将数据库里面的数据赋值*/
$num=mysqli_num_rows($req);/*返回结果值*/
if ($num===1) /*判断输入信息是否与数据库一致*/
{
echo "登录成功";
$res=mysqli_fetch_array($req);
$role=$res['role'];
setcookie("username",$name,time()+3600);/*设置cookie值的有效时长*/
setcookie("role",$role,time()+3600);
header("Location:logindeal.php");/*跳转到角色判断界面*/
echo "<a href='loginout.php'>注销</a>";
}
else
{
echo "登录失败!";
}
}
else
{
echo "数据库链接失败!";
}
?>
logindeal.php文件:这一部分对登录角色信息进行判断,不同角色的信息分别进入不同的界面,完整代码如下:
<?php
$role=$_COOKIE['role'];
if ($role=="teacher")
{
header("Location:teacher.php");
}
elseif($role=="student")
{
header("Location:student.php");
}
else
{
header("Location:login.php");
}
?>
下面是登录界面的效果图:
下面是正常登录界面所进入的界面,老师界面是老师好,学生界面是学生好:
下面是使用burpsuite对登录的信息进行抓包,抓包后将其cookie值进行修改:
未修改role前:
修改role之后:
可以看到通过对cookie值中的role进行角色信息的篡改,可以将学生登录的权限界面跳转到教师权限界面。
下面是teacher.php和student.php完整代码:
teacher.php:
<?php
echo "<meta charset='UTF-8'>";
echo "老师好!";
?>
student.php:
<?php
echo "<meta charset='UTF-8'>";
echo "同学好!";
?>
上面说到的对cookie值的注销代码,loginout.php完整代码:
<?php
echo "<meta charset='UTF-8'>";
$name=$_COOKIE['username'];
setcookie("username",$name,time()-3600);/*将cookie有效值时间减掉*/
echo "cookie已注销";
echo $name;
?>