白盒审计-未授权访问

准备工作,自制靶场 vscode

什么是未授权访问

未授权访问漏洞,是在攻击者没有获取到登录权限或未授权的情况下,或者不需要输入密码,即可通过直接输入网站控制台主页面地址,或者不允许查看的链接便可进行访问,同时进行操作。

  • 已知Web网站具有登录页面。或者具有不允许访问的目录或功能。
  • 不登录,可通过链接直接访问用户页面功能。

开始练习

自己写的一个管理系统,有点简陋,我们拿到源码第一步先把网站搭建起来

发现有登入入口,先不要管他,我们先查看源码结构

发现并未采用任何框架,我们发现admin 这个目录 打开它

无疑就是后台里面的功能,试试直接访问

1
http://192.168.3.5:8000/admin

发现直接重定向了,查看源代码

1
2
3
4
5
6
7
8
//admin/index.php
<?php
session_start();
if($_SESSION['user'] == 'admin'){
echo '欢迎管理界面';
}else{
header("Location:../login/");
}

看到是非常典型的SESSION认证,而且是非常简陋,都不用密码验证,

开始测试

我们看到有

1
PHPSESSID=o70i5f9e3uteql8n4lt72tj1ri 

那我们将phpsessid 改成admin 就满足了

1
2
if($_SESSION['user'] == 'admin'){
echo '欢迎管理界面';

发送包,发现我们失败了,具体为什么呢??

因为我们发送的是$_SESSION[‘user’] 而不是 PHPSESSID=admin,所以在这里是无法进去的

那我们可以观察一些目录结构

将admin下的都遍历一遍

lookup.phpsocres.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 //admin/socres.php  没有发现有后端认证
<?php
//从数据库中获取数据
$conn = include("../config/config.php");
$sql = "SELECT * FROM memberinfo";
$result = $conn->query($sql);
// 检查查询结果是否有数据
if ($result->num_rows > 0) {
// 遍历结果集中的每一行数据
while ($row = $result->fetch_assoc()) {
echo "<tr>";
echo "<td>" . $row["mebName"] . "<td>";
echo "<td>" . $row["mebID"] . "<td>";
echo "<td>" . $row["mebSex"] . "<td>";
echo "<td>" . $row["mebClass"] . "<td>";
echo "<td>" . $row["souse"] . "<td>";
echo "<td>" . $row["mebAddDate"] . "<td>";
echo "<br>";
echo "<\tr>";
}
} else {
echo "没有找到匹配的数据";
}

// 关闭数据库连接
$conn->close();
?>
</table>
<?php
$xh = @$_POST['xh'];
if(isset($xh)){
$conn = include("../config/config.php");
$sql = "DELETE FROM memberinfo WHERE mebID = '$xh'"; //sql注入
if ($conn->query($sql) === TRUE) {
echo "字段内容删除成功";
header("Location: ../admin/index.php?scores=lookup");
}else {
echo "删除失败: ";
}
}
?>

1
2
3
4
//admin/lookup.php 没加有后端认证
可以对他进行添加数据 但是sql注入有防护 可以任意插入数据
$query = mysqli_prepare($conn, "INSERT INTO memberInfo (mebID, mebName, mebSex, mebClass, mebAddDate, souse , passwd) VALUES (?, ?, ?, ?, ?, ?,?)");
mysqli_stmt_bind_param($query, "sssssss", $mebID, $mebName, $mebSex, $mebClass, $mebAddDate, $souse,$pass);

在socres.php 未发现任何的后端认证访问直接进去 正常来讲是通过sql注入找到密码才能登后台 为了方便我才加进去

看到了敏感信息 账号密码为admin/admin@123 //socres.php 泄露密码

后面的功能测试靠大家自由发挥了 = =! 后面源码放群里

QQ交流群:611149449