什么是路徑遍歷?

路徑遍歷(或雙斜杠)攻擊是一種惡意行為,旨在誘騙 Web 應(yīng)用程序顯示用戶請求目錄以外的目錄內(nèi)容,并獲取服務(wù)器上敏感文件的訪問權(quán)限。例如,如果用戶應(yīng)該查看名為 abc.jpeg 的圖像,但 Web 應(yīng)用程序被誘騙顯示 /var/www 中的文件,則攻擊者將成功執(zhí)行路徑遍歷攻擊。

攻擊者可能能夠訪問只有 Web 服務(wù)器所有者才能訪問的文件,例如 .htaccess 文件或包含配置或身份驗證數(shù)據(jù)的文件。

路徑遍歷會導(dǎo)致什么樣的安全漏洞?

假設(shè)某個網(wǎng)站存在路徑遍歷漏洞。在這種情況下,攻擊者將能夠讀取敏感文件,例如包含用戶名和密碼的應(yīng)用程序源代碼、數(shù)據(jù)庫憑據(jù),甚至私人加密密鑰。在某些情況下,黑客能夠?qū)?shù)據(jù)寫入任意文件,從而允許他們?yōu)榫W(wǎng)站上傳后門、上傳自動執(zhí)行的惡意文件等。

當(dāng)路徑遍歷攻擊執(zhí)行時會發(fā)生什么?

路徑遍歷是訪問存儲在 webroot 文件夾之外的文件和目錄的一種方法。

使用一個典型的例子,讓我們看看路徑遍歷的工作原理。

假設(shè)用戶正在使用一款在線購物應(yīng)用,該應(yīng)用每次購物時都會創(chuàng)建發(fā)票。訪問發(fā)票時,URL 如下所示:

https://www.shopping.com/user/invoice?name=order1

此處的名稱表示服務(wù)器需要發(fā)送的 PDF 發(fā)票的名稱。當(dāng)服務(wù)器收到文件的名稱時,它會將工作目錄和文件擴展名添加到文件的名稱 (/var/www/invoices/order1.pdf),從服務(wù)器獲取文件并將其發(fā)送回去。如果攻擊者將文件名 order1.pdf 替換為惡意內(nèi)容(如 ../../etc/passwd),則應(yīng)用程序?qū)⒎祷厮埱笪募膬?nèi)容(如果未實施適當(dāng)?shù)目刂疲?/p>

成功的路徑遍歷攻擊需要什么條件?

路徑遍歷攻擊是一種允許黑客遍歷目錄并讀取或?qū)懭胂到y(tǒng)上的任何文件的攻擊。黑客可以通過利用不充分的輸入驗證技術(shù)來實現(xiàn)這一點。為了能夠成功進(jìn)行路徑遍歷攻擊,黑客需要滿足以下任何條件: 

1.缺乏相對路徑檢查

利用目錄遍歷漏洞最常用的技術(shù)是使用附加到易受攻擊的參數(shù)的相對路徑。如果參數(shù)未正確清理,攻擊者可以從系統(tǒng)中讀取任意文件。

2. 僅驗證文件擴展名

文件擴展名驗證是解決該問題的一種常用方法。然而,許多人忽視了這樣做的危險性。文件擴展名驗證永遠(yuǎn)無法替代檢查參數(shù)是否試圖訪問其他格式的文件,并且可以使用文件末尾的 Null Byte 輕松繞過。 

3. 轉(zhuǎn)義“點-點-斜線”(不正確的實現(xiàn))

一些開發(fā)人員嘗試轉(zhuǎn)義或僅替換字符串中的 ../,但這不是一個正確的解決方法,可以通過對轉(zhuǎn)義字符進(jìn)行編碼來繞過。在這種情況下,可以對 ../ 進(jìn)行編碼并通過 URL 傳遞(例如,從:http://www.example.com/?invoice=../../../../../../../../../tmp/xyz.txt 到 http://www.example.com/?invoice=../../../../../../../../../../tmp/xyz.txt?%252e%252e/%252e%252e/%252e%252e/%252e%252e/%252e%252e/%252e%252e/tmp/xyz.txt)。

現(xiàn)在您了解了執(zhí)行路徑遍歷攻擊所需的條件,讓我們看看黑客執(zhí)行此攻擊的不同方式。

執(zhí)行路徑遍歷攻擊的不同方法

黑客可以通過操縱網(wǎng)絡(luò)服務(wù)器上的文件路徑并利用其薄弱的安全性來執(zhí)行路徑遍歷攻擊。

以下是最常用的方法:

1)使用相對路徑。此類攻擊會添加相對于當(dāng)前工作目錄的文件或文件夾路徑。例如,如果當(dāng)前工作目錄為 /home/user/public_html,攻擊者可以上傳惡意代碼(如 ../../../../../../../../../../../../../../../../etc/passwd)來訪問 /etc/passwd 文件。 

2)對轉(zhuǎn)義字符進(jìn)行編碼。此攻擊使用 URL 編碼對特殊字符進(jìn)行編碼。例如,攻擊者可以使用 %2e%2e/%2f 在每兩個點后添加一個 /。 

3) 使用空字節(jié)攻擊:此攻擊使用空字節(jié) (\x00) 繞過路徑的常規(guī)驗證。例如,攻擊者可以在目錄名稱中添加 \x00,通過破壞正則表達(dá)式來繞過驗證。這也稱為空字節(jié)注入。

保護(hù)代碼片段以避免路徑遍歷攻擊

盡管路徑遍歷攻擊已經(jīng)存在了很長時間,但它們?nèi)匀皇且环N病毒攻擊媒介。這是因為它們很容易發(fā)起,并且可以在多種情況下應(yīng)用。 

以下是一些可以幫助您避免此類攻擊的 JavaScript 安全代碼片段。

1.規(guī)范文件路徑。

const normalizeFilePath = (filePath) => {
// If filePath is a relative path, convert it to an absolute path
let normalizedFilePath = path.normalize(filePath).replace(/^(\.\.(\/|\\|$))+/, '');

if (normalizedFilePath.endsWith(path.sep)) {
// Remove trailing path separator if present
normalizedFilePath = normalizedFilePath.slice(0, -1);
}
}
2. Make sure the validating string is alphanumeric.
const checkStringAlphaNumeric = (str) => {
// Check if string is alphanumeric
return /^[a-zA-Z0-9]+$/.test(str);
}
3. Check if URL encoded characters are present.
const checkIfURLEncodedPresent = (filePath) => {
// Check if URL encoded characters are present
return /%[0-9A-F]{2}/i.test(filePath);
}

上面的代碼片段適用于 JavaScript,但其他編程語言呢?讓我們看看一些避免路徑遍歷漏洞的標(biāo)準(zhǔn)最佳實踐。

防止路徑遍歷的主要方法

現(xiàn)在,您應(yīng)該已經(jīng)對路徑遍歷攻擊有了一定的了解。您知道,這種攻擊是指惡意攻擊者試圖訪問您網(wǎng)站中本不該訪問的部分。

讓我們介紹一些可以防止路徑遍歷、保護(hù)您的 Web 服務(wù)器以及保證您的 Web 應(yīng)用程序安全的方法。

1.規(guī)范文件路徑。 

2.避免使用高權(quán)限用戶。 

3.定期更新你的編程語言和網(wǎng)絡(luò)服務(wù)器的版本。

4. 轉(zhuǎn)義特殊字符(即使您已經(jīng)對它們進(jìn)行了 URL 編碼)。 

5.盡量不要依賴用戶提供的文件路徑。

雖然路徑遍歷是一個嚴(yán)重的漏洞,但它并不是黑客利用的唯一漏洞,因此編寫安全代碼至關(guān)重要。讓我們來看看一些有用的技巧。

避免安全漏洞的四個有用技巧

任何軟件都可能存在安全漏洞。但是,Web 應(yīng)用程序更容易受到攻擊,因為它們是在線的。因此,確保它們的安全至關(guān)重要。

以下是四條建議: 

1. 保持軟件更新

最重要的最佳實踐之一是保持軟件更新,并在新補丁發(fā)布后立即更新。 

2. 自動測試構(gòu)建管道中的安全漏洞

構(gòu)建管道是 DevOps 流程的重要組成部分。它允許開發(fā)團隊編譯新開發(fā)的代碼并將其推送到生產(chǎn)服務(wù)器。但是,這個過程可能非常脆弱,特別是如果你沒有正確配置它。

這就是StackHawk 的 DAST 掃描儀的作用所在。您可以將其與 CI/CD 管道集成,從而自動化掃描過程并盡早發(fā)現(xiàn)漏洞,包括路徑遍歷、SQL 注入、跨站點腳本等。

3. 執(zhí)行強密碼策略

這是許多企業(yè)忽視的一個簡單步驟。

要求使用攻擊者無法輕易猜到的復(fù)雜密碼至關(guān)重要。

如果您尚未為您的企業(yè)創(chuàng)建密碼策略,您應(yīng)該立即創(chuàng)建。

4.使用 SSL 證書

HTTPS 是一種在用戶和服務(wù)器之間傳遞數(shù)據(jù)時對其進(jìn)行加密的協(xié)議,以確保沒有人可以攔截它。

文章來源:What is Path Traversal

上一篇:

什么是開放重定向

下一篇:

Angular XML 外部 實體(XXE)指南: 示例和預(yù)防
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊

多API并行試用

數(shù)據(jù)驅(qū)動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費