在滲透測試、服務器安全巡檢或文件上傳漏洞挖掘中,快速定義哪些目錄具有寫入權限至關重要。本文提供一個純 PHP 實現的遞歸掃描腳本,可輸入任意路徑,自動遍歷子目錄並列出可寫入的目錄完整路徑。
<!DOCTYPE html>
<html>
<head>
<meta charset="gb2312">
<title>目錄可寫權限檢測工具</title>
<style>body{background:#000;color:#fff;font-family:monospace;}</style>
</head>
<body>
<form method="POST">
單個目錄路徑: <input type="text" name="name" size="80" placeholder="例如:C:\Windows\Temp">
<input type="submit" name="submit" value="開始檢測">
</form>
<hr>
<h3>常見敏感目錄參考</h3>
<pre>
c:\windows
c:\Documents and Settings
c:\Program Files
c:\Documents and Settings\All Users\Application Data\Microsoft\Media Index
C:\php\PEAR
C:\Program Files\Zend\ZendOptimizer-3.3.0
C:\Program Files\Common Files
C:\7i24.com\iissafe\log
C:\RECYCLER
C:\windows\temp
c:\Program Files\Microsoft SQL Server\90\Shared\ErrorDumps
f:\recycler
C:\Program Files\Symantec AntiVirus\SAVRT
C:\WINDOWS\7i24.com\FreeHost
C:\php\dev
C:\~1
C:\System Volume Information
C:\Program Files\Zend\ZendOptimizer-3.3.0\docs
C:\Documents and Settings\All Users\DRM
C:\Documents and Settings\All Users\Application Data\McAfee\DesktopProtection
C:\Documents and Settings\All Users\Application Data\360safe\softmgr
</pre>
<?php
set_time_limit(120);
if (isset($_POST['submit'])) {
$path = $_POST['name'];
if (file_exists($path)) {
dir_File($path);
} else {
echo "<font color='red'>路徑不存在或無權限訪問</font>";
}
}
function dir_File($dirname) {
$dir = @opendir($dirname);
if (!$dir) return;
while (($fileName = readdir($dir)) !== false) {
if ($fileName != "." && $fileName != "..") {
$dirFile = $dirname . "\\" . $fileName;
if (is_dir($dirFile)) {
if (is_writable($dirFile)) {
echo $dirFile . " 這個目錄可寫<br>";
}
dir_File($dirFile); // 遞歸
}
}
}
closedir($dir);
}
?>
</body>
</html>
set_time_limit(120) 防止大目錄樹遍歷超時。dir_File():
opendir() 打開目錄句柄。readdir() 循環讀取條目,排除 . 與 ..。is_dir() 判斷是否為目錄,is_writable() 檢測寫入權限。RecursiveDirectoryIterator (SPL) 實現非遞歸遍歷。\\,Linux/Unix 需改為正斜杠 /。fileperms() 顯示具體八進制權限碼。