我不是網路安全和漏洞利用方面的專家。我需要幫助確定我的應用程式是否易受攻擊以及以何種方式易受攻擊。
假設我是個白癡(而且我沒有到這種程度),并且我讓客戶端用戶可以上傳(利用我的前端)他們想要在我的服務器上的子檔案夾中的任何檔案(讓我們稱之為“危險”) ') 我的 ASP.NET 應用程式,托管在 IIS 上。這樣,任何人都可以上傳一個通用的 example.hml 檔案并在 url mydomain.com/danger/example.html 上訪問它。他們還可以上傳 JS 檔案和他們想要的任何東西。
讓我們暫時忘記他們可以填滿我的磁盤的事實。
鑒于我阻止了從該檔案夾中的檔案執行 ASP,我會受到什么樣的損害?
提前致謝。
uj5u.com熱心網友回復:
就在我的腦海中:
攻擊者可以上傳損壞的檔案,這將觸發您的防病毒軟體中的遠程代碼執行漏洞,可能會在該local system帳戶下執行代碼。(我在 Windows Defender 上看到過這種情況,我也看到過其他 AV 產品中存在類似漏洞的報告。)
他們可以上傳一個名稱錯誤的檔案,該檔案利用 IIS 中的一個錯誤繞過您的檔案型別檢查和檔案夾上的“不執行”標志。(我已經看到了這個報道,盡管是在一個非常舊的 IIS 版本中。)
如果這些檔案可以公開訪問,它們可能會在您的網站上托管自己的內容,其中可能包括非法或惡意內容。這可能會損害您網站的聲譽,并可能使您受到起訴。
uj5u.com熱心網友回復:
好吧,是的,如果您允許任何形式的預覽,或者說允許該人下載檔案,您必須小心,但是當您下載時,您也會嘗試在服務器上進行某種預覽。
事實上,這與將一個簡單的文本框放到一個表單中,然后讓用戶在該文本框中輸入資訊,然后你說點擊提交按鈕,現在重新顯示他們剛剛的頁面并沒有太大的不同輸入。
如果他們開始在該文本框中輸入 javascript 文本會發生什么?
說一個多行文本框,您可以在其中輸入一段評論或文本。
所以,你輸入這個:
Hellow how are you
<script>
JavaScript code here
</script>
現在,當您重新繪制頁面時 - 您不僅會重新顯示輸入的內容,而且在 ALSO 中輸入的那些腳本代碼也會運行!
實際上,如果您在網頁上放置一個文本框,然后執行以下操作:
Hello, how <script> are you
您注意到您收到頁面執行錯誤。(因為 asp.net 內置了不允許這樣做的保護)。但是,如果您采用一些 html 編輯器文本框(ckEdit,或 ajaxtoolkit 編輯器),此類控制元件將具有額外的安全代碼,以防止最終用戶鍵入腳本代碼。
因此,您必須注意以下幾點:
如果您允許上傳檔案,請確保您沒有嘗試加載/執行該檔案的代碼。因此,您可能允許用戶上傳 pdf 檔案,然后可能是一個嘗試“打開”或使用該檔案的例程。但是如果他們代替 pdf 檔案上傳 MyTest.exe 會發生什么。換句話說,他們上傳可執行程式來代替 pdf?好吧,那你基本上沒問題,但你最好不要有嘗試加載此類檔案的代碼 - 特別是后面的代碼可能使用一些庫或代碼,這些庫或代碼實際上會啟動該 pdf 或 word 或 exec 檔案。由于該代碼可能會嘗試加載或運行現在的 .exe 程式。
所以,這意味著幾件事:
You want to limit the file extensions allowed
You need to ensure that your code does not "execute" that up-load file
If you allow download of that file, then careful how you do this
(again, ensure that you don't open up possibiity to execute that file).
因此,在大多數情況下,您應該沒問題,但是如果您的服務器端代碼進一步處理了上傳的檔案,那么請注意您如何打開或處理此類上傳的檔案。
如前所述,假設用戶上傳了一個簡單的文本檔案,上傳后您從該檔案中獲取文本,然后將其顯示在網頁中的某種備忘錄或文本框中。但是,再次,您確定它只是該檔案中的文本嗎?如果您從該檔案中提取內容,然后將其呈現在您的瀏覽器中(因為您假定為文本),但現在可能會將瀏覽器代碼注入該文本檔案中。
因此,服務器端代碼中打開上傳檔案、提取內容然后說吐出用于顯示資料的內容的任何點都是一個警告區域。
那么,第一道簡單的防線呢?
限制檔案型別。如果希望用戶只上傳 PDF 檔案,那么只允許說 PDF 和 .zip 檔案擴展名 - 拒絕其他任何內容。
如前所述,請記住在上傳該檔案后運行的任何型別的后處理代碼。如果您的網站正在獲取此類上傳的檔案,并且要打開檔案,然后將該內容顯示給最終用戶,那么再次需要注意,因為當您在瀏覽器中顯示此類內容時,理論上的內容可以有腳本代碼——和其他任何東西一樣,你的代碼會輸出到瀏覽器(比如帶有 HTML 等的網頁)也意味著瀏覽器將運行該腳本代碼。
我的意思是,一個簡單的瀏覽器接受服務器發送給該瀏覽器的任何內容,并呈現 HTML。然而,這些天來,瀏覽器有更多的能力在該瀏覽器中運行代碼。所以,這就是為什么現在你可以說在瀏覽器中 100% 運行酷游戲,因為瀏覽器已經成為非常強大的系統,并且幾乎是它們自己的計算機系統。因此,瀏覽器運行代碼并在速度和回應(甚至互動式游戲)方面提供與桌面相媲美的體驗的能力是瀏覽器現在能夠運行代碼并做更多事情的結果,而不僅僅是顯示一些簡單的 HTML .
因此,在任何情況下,您都不應該允許上傳檔案,然后讓一些軟體可以“運行”甚至提取該檔案的內容并以瀏覽器顯示的形式將其吐回給用戶。原因是檔案內容很可能在該檔案內容中有可執行代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/416027.html
標籤:
上一篇:為什么printf("\x10\x01\x48\x08%x%x%x%x%s")從記憶體地址0x90480110讀取?
