簡體   English   中英

使用ESAPI執行器時如何使用運算符>>?

[英]How to use the operator >> while using the ESAPI executor?

在使用 ESAPI 執行器運行一個簡單的命令時,例如:

C:\\Windows\\System32\\cmd.exe /c echo test >> D:\\wow\\test.txt

C:\Windows\System32\cmd.exe是可執行文件。 /c echo test >> D:\wow\test.txt是參數。 問題是編解碼器破壞了運算符>>(這意味着避免它或將其作為字符串引用。因此 output 將只是打印“test >> D:\wow\test.txt”。

編解碼器正在做它應該做的事情。 也許一個過於簡單的例子可以更清楚地說明為什么這是正確的行為。

假設您有一個 web 應用程序,用戶在其中上傳文檔,然后您為他們運行拼寫檢查並將更正后的結果發回給他們。 為了簡單起見,我們假設您已將當前工作目錄設置為特定於使用您的服務的每個用戶,並且您有一個“spellcheck.bat”,它將單個文件名作為參數,並且您計划執行該字符串:

C:\Windows\System32\cmd.exe /c C:\spelling\spellcheck.bat userFilename > spelling-errors.txt

其中userFilename是用戶上傳文件的名稱。 您的目的是使用用戶上傳的文件和文件名運行 spellcheck.bat,然后讀取並向用戶顯示“spelling-errors.txt”文件。 (IRL,這可能是不同目錄中的臨時文件,但我想讓它變得簡單。)

那么如果“userFilename”包含“>”字符會怎樣呢? 您肯定希望適當地引用它,不是嗎? 因為否則攻擊者可能會覆蓋一些您不想覆蓋的文件,包括您的 web.xml 或其他配置/屬性文件。 因為運行類似(說)

C:\Windows\System32\cmd.exe /c C:\spelling\spellcheck.bat myDoc.txt >sucker.txt > spelling-errors.txt

將創建“sucker.txt”,如果該文件名存在,它將被截斷並替換為“spellcheck.bat myDoc.txt”的 output。 那可能不是你想要的。

因此,旨在防止通過“<”、“<<”、“>”和“>>”進行文件 I/O 重定向操作。 如果你真的想要允許它們(我建議不要這樣做),那么你將不得不根據你想要允許的內容來解析你自己的命令字符串。

此外,雖然我不確定 Window 的 cmd 提示符 shell 是否正確,但對於 *nix shell 來說確實如此,作為文件重定向的一部分,也可以在重定向中執行命令。 比如bash,我可以這樣操作

cat < $(ls foo)

如果文件“foo”存在,“ls foo”命令將列出 output foo,因此此命令變為:

cat < foo

我們最終從文件“foo”中為“cat”命令獲取標准輸入。 但是攻擊者可以用它做一些更邪惡的事情。 當然,操作系統編解碼器也會阻止“$(...)”樣式的命令替換,但我希望我已經表達了我的觀點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM