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函數來返回不包含路徑的文件名稱。
