一個網絡安全小白在學習過程中記錄下的筆記,希望在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)