2020/1/31 PHP代碼審計之目錄穿越漏洞


0x00 目錄穿越

目錄穿越(Directory Traversal)攻擊是黑客能夠在Web應用程序所在的根目錄以外的文件夾上,任意的存取被限制的文件夾,執行命令或查找數據。目錄穿越攻擊,也與人稱為Path Traversal攻擊。

0x01 目錄穿越-漏洞危害

攻擊者可以使用目錄穿越攻擊來查找,執行或存取Web應用程序所在的根目錄以外的文件夾。如果目錄穿越攻擊成功,黑客就可以執行破壞性的命令來攻擊網站。

0x02 寫一個簡單的目錄穿越

<?php
if(isset($_GET['file'])){//判斷我們傳入的變量是否可控
   readfile(filename:"file/" . $_GET['file']);//讀取我們file文件夾下的文件
}
?>
<?php
   
    $fileName='D:\PHPSTUDY2018\PHPTutorial\WWW\file\1.txt';
    readfile($fileName);//顯示所有內容
    $a=readfile($fileName);//返回總字數並且顯示所有內容
    echo $a;
?>


0x03 目錄穿越繞過方式

1:進行URL編碼

點–>%2e 反斜杠–>%2f 正斜杠–>%5c

2:進行16為Unicode編碼

點–>%u002e 反斜杠–>%u2215 正斜杠–>%u2216
3:進行雙倍URL編碼

點–>%252e 反斜杠–>%u252f 正斜杠–>%u255c
4:進行超長UTF-8 Unicode編碼

點–>%c0%2e %e0$40%ae %c0ae

反斜杠–>%c0af %e0%80af %c0%af

正斜杠–>%c0%5c %c0%80%5c

常用來組合危害最大,比如文件上傳后我們可以通過文件穿越獲取到文件路徑

0x04 目錄穿越修復方案

1:在URL內不要使用文件名稱作為參數
2:檢查使用者輸入的文件名是否含有“.."的目錄階層字符。
3:在php.ini文件中設置open_basedir來指定文件的目錄。
4:使用realpath函數來展開文件路徑中的”./" "../"等字符,然后返回絕對路徑名稱。
5:使用basename函數來返回不包含路徑的文件名稱。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM