檔案上傳漏洞是發生在有上傳功能的應用程式中,如果應用程式對使用者上傳檔案沒有控製或有缺陷,攻擊者可以利用應用程式上傳功能的缺陷,上傳木馬、病毒等有危害的文件到伺服器上面,控制伺服器。
檔案上傳漏洞產生的主要原因是:應用程式中存在上傳功能,但是上傳的檔案沒有經過嚴格的合法性檢驗或檢驗函數有缺陷,導致可以上傳木馬文件到伺服器。文件上傳漏洞危害極大因為可以直接上傳惡意程式碼到伺服器上,可能會造成伺服器的網頁篡改、網站被掛馬、伺服器被遠端控制、被安裝後門等嚴重的後果。
下面我們就檔案上傳的幾種驗證及繞過方法:
前端JS過濾繞過上傳漏洞是因為應用程式是在前端透過JS程式碼進行的驗證,而不是在程式後端進行的驗證,這樣就可以透過修改前端JS程式碼的方式進行繞過上傳過濾,上傳木馬。
那麼如何判斷是否為前端驗證呢?我個人覺得我們可以看在進行上傳抓包的時候是否能到資料包,是否有資料流過,或者可以看上傳圖片是否頁面會顯示上傳的圖片地址等。
繞過:將過濾程式碼刪除,修改或停用Javascript。
文件上傳常見驗證:後綴名(直接驗證),文件,文件頭(間接驗證)。
2.1.1 黑名單(明確不允許上傳的腳本格式後綴)
檔案名稱過濾繞過漏洞主要是因為透過黑名單的方式判斷了文件上傳的類型,而且並沒有完整的過濾,導致攻擊者透過上傳黑名單類型以外的文件。
黑名單判斷方法:上傳文件,系統提示不允許上傳xxx格式檔案。
繞過:使用其他格式(php5,Phtml,php3)或檔案大小寫,同時也可以加入一些幹擾符號實作繞過。
2.1.2 .htaccess(偽靜態協定)-重寫解析(Apache才有並且開啟偽靜態模組)
.htaccess檔案上傳是利用.htaccess檔案可以對Web伺服器設定的功能,實作對jpg、png等後綴的檔案當做PHP檔案解析的過程。
.htaccess檔案(分散式設定檔)提供了一種基於每個目錄進行設定變更的方法,包含一個或多個設定指令的檔案放在特定的文件目錄中,檔案中的指令適用於該目錄及其所有子目錄。 .htaccess是Web伺服器的一個設定文件,可以透過.htaccess檔案實現Web伺服器中的定義檔的解析方式、重定向等設定。
繞過方法:先上傳1.htaccess檔。 2.再上傳圖片馬。
2.1.3 空格繞過
繞過方法:封包中檔案後綴名後加上一個空格實作繞過。
2.1.4 .繞過
繞過方法:跟空格繞過方法類似,封包中檔案後綴名後加一個.實作繞過。
2.1.5 ::$data繞過
這是windows特有的一種協議,在window的時候如果檔案名稱"::$DATA"會把::$DATA之後的資料當成檔案流處理,不會偵測後綴名,且保持::$DATA之前的檔案名,他的目的就是不檢查後綴名。
2.1.6 循環過濾
繞過:程式碼將字串裡的php替換為空。
如:a.pphphp 會變成->a.
2.1.7 白名單:明確可以上傳的格式後綴(更安全)
#
不同的文件都有特定的文件頭格式,開發者透過檢查上傳文件的文件頭檢測文件類型,但是這種檢測方式同樣可以被繞過,只要在木馬文件的頭部添加對應的文件頭,這樣既可以繞過檢測又不影響木馬文件的正常運行。
常見的檔案頭如下:
JPEG 0xFFD8FF
PNG0 x89504E470D0A1A0A
GIF 47 49 4638 39 61(#GIF 47 49 4638 39 61(GIF8#過方法:
更改頭部資訊達到欺騙,如在木馬的頭檔中添加圖片檔案的檔案頭即可繞過偵測。?>
製作圖片馬使用cmd指令將一張正常圖片 1.jpg 與一個包含一句話木馬的 a.txt文件,合成一個新的test.php木馬文件。
cmd 指令:copy 1.jpg/b a.txt test.php。
3.2 Content-Type偵測
繞過:Content-Type的類型可以透過抓包來竄改,這樣就可以透過抓包修改封包的Content-Type來繞過Content-Type判斷。
MIME:可以透過判斷類型猜測檔案後綴名,利用抓包工具將Content-Type進行篡改,如改為image/pjpeg、image/jpeg、image/gif、image/png四個中的一個即可繞過過濾。
4. 內容及其他
繞過:將文件上傳到伺服器後,我們就不斷進行文件路徑訪問,由於條件競爭,就會達到上傳Webshell的目的,漏洞利用就是發送請求通過不斷上傳內容,這樣的訪問會產生新的木馬文件,然後再發送另一個請求不斷存取此文件,如果競爭條件漏洞利用成功就會產生新的木馬。
4.2 目錄命名
5.其他漏洞
CVE-2017-12615
CVE-2015-5254
CVE-2019-2618
......
這些漏洞網路上都有利用教程,有興趣的師傅可以去查閱一下資料。
6.中間件解析漏洞
6.1.1 以資料夾執行
繞過:image.asp/aa.jpg aa.jpg就會被當作asp解析。
6.1.2 以檔案執行
繞過:image.asp;.jpg或xxx.asp;xxx.jpg 此檔案會當作asp執行。
asp可以換做php 如果換了php,那麼就可以當作php執行。
7.WAF繞過
7.1 資料溢出(垃圾資料填充)
7.2 符號變異('";)
如x.jpg;.php 分號代表一個資料的結束。
以上是淺談權限取得方法之檔上傳的詳細內容。更多資訊請關注PHP中文網其他相關文章!