91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是Apache Tika

發布時間:2021-12-30 16:32:27 來源:億速云 閱讀:200 作者:小新 欄目:安全技術

這篇文章主要為大家展示了“什么是Apache Tika”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“什么是Apache Tika”這篇文章吧。

什么是Apache Tika

Apache Tika?工具包可從超過一千種不同的文件類型(如PPT,XLS和PDF)中檢測和提取元數據和文本。所有這些文件類型都可以通過一個接口進行解析,使得Tika對搜索引擎索引,內容分析,翻譯等非常有用。(https://tika.apache.org/)

Apache Tika有幾個不同的組件:Java庫,命令行工具和自帶REST API的獨立服務器(tika-server)。此攻擊特別針對獨立服務器,它通過REST API公開https://wiki.apache.org/tika/TikaJAXRS。樣本可在https://archive.apache.org/dist/tika/tika-server-1.17.jar找到。

Breaking Down The CVE

我們首先需要閱讀issue,看看可以從中獲取哪些信息。

原始描述:

在Tika 1.18之前,客戶端可以將精心設計的標頭發送到tika-server,該標頭可用于將命令注入運行tika-server的服務器的命令行。此漏洞僅影響在對不受信任的客戶端開放的服務器上運行tika-server的漏洞。

我們可以從這個描述中看到的事情:

1.版本1.18已修補;

2.版本1.17未修補;

3.該漏洞是命令注入;

4.漏洞的入口點是“headers”;

5.這會影響代碼的tika-server部分。

有了這些信息,我們現在有了一個識別漏洞的起點。下一步將看看Tika補丁和未補丁版本的差異,特別是tika-server部分。為Java中已知的執行操作系統命令的函數編寫Grepping代碼是另一個不錯的選擇。最后,搜索tika-server代碼的各個部分,我們可以假設這些報頭是某種HTTP請求。

0x01

對tika-server 1.17與1.18源目錄進行并行遞歸比較。只返回一個已修改的文件,如下部分。

什么是Apache Tika

由于目標是在頭字段中找到命令注入,所以第一個結果是一個代碼塊,這個代碼塊已經添加到補丁版本“ALLOWABLE_HEADER_CHARS”中。這是一個非常好的開始,假設這是補丁試圖過濾可用于將命令注入頭字段的字符。

繼續向下是一個名為“processHeaderConfig”的函數內部的代碼,它已在1.18中刪除。它使用一些變量來動態創建一個方法,該方法似乎設置了某個對象的屬性,并使用HTTP頭來執行此操作。

什么是Apache Tika

以下是此功能的說明:

什么是Apache Tika

截圖顯示了不同屬性的前綴,并在此代碼的開頭定義為靜態字符串。

什么是Apache Tika

因此,我們有一些靜態字符串可以作為HTTP頭文件包含在請求中,并用于設置對象的某些屬性。最終header的示例看起來像“X-Tika-OCRsomeproperty:somevalue”,然后將“someproperty”轉換為類似于“setSomeproperty()”的函數,并將somevalue作為要設置的值傳遞給該函數。

什么是Apache Tika

可以看到這里正在使用這個函數,并且在請求中檢查了前綴頭以確定如何調用該函數。然后,所有需要的參數都從HTTP請求傳遞到“processHeaderConfig”函數。

查看使用“processHeaderConfig”函數的方式,可以看到正在“TesseractOCRConfig”對象上設置屬性。搜索可能使用我們發現的“TesseractOCRConfig”對象的地方:tika-parsers/src/main/java/org/apache/tika/parser/ocr/TesseractOCRParser.java。

這是來自“TesseractOCRParser.java”的“doOCR”函數,它將配置屬性從我們剛剛發現的“TesseractOCRConfig”對象直接傳遞到一個字符串數組中,這些字符串用于構造“ProcessBuilder”的命令,然后該過程已開始。

什么是Apache Tika

這看起來很有希望,如果我們將所有信息放在一起,我們應該能夠向服務器發出某種HTTP請求,設置一個看起來像“X-Tika-OCRTesseractPath:<some command>”的標題。并將此命令插入cmd字符串并執行。唯一的問題是“config.getTesseractPath()”前綴為另一個我們無法控制的字符“getTesseractProg()”,最終是一個靜態字符串“tesseract.exe”。為了解決這個問題,我們可以用雙引號包裝我們想要執行的命令,Windows將忽略引號后附加的任何內容,只執行我們的注入的命令。

為了進行測試,我們可以使用tika-server文檔中的示例來檢索有關文件的一些元數據。

什么是Apache Tika

由于OCR用于從圖像中提取文本和內容,我們將上傳圖像而不是docx,以期有望達到“doOCR”功能。

我們最終得到:

curl -T test.tiff http://localhost:9998/meta --header "X-Tika-OCRTesseractPath: \"calc.exe\""

什么是Apache Tika

在上傳圖像時,通過在PUT請求中將一個命令用雙引號括起來作為“X-Tika-OCRTesseractPath”HTTP頭的值來標識命令注入。

0x02 不僅僅是彈個計算器

我們直接更改正在執行的應用程序名稱。由于該命令作為數組傳遞給Java ProcessBuilder,因此我們實際上不能運行多個命令,也不能將參數作為單個字符串添加到命令中,否則執行將失敗。這是因為將一組字符串傳遞給Java中的進程構建器或runtime.exec的工作方式如下:

什么是Apache Tika

通常像cmd.exe或/bin/sh這樣的shell解釋的字符(例如&,<,>,|,`等)不會被ProcessBuilder解釋并且將被忽略,因此您不能中斷命令或添加任何將它作為單個字符串的參數。不像“X-Tika-OCRTesseractPath: \“cmd.exe /c some args\”這樣簡單。

回到“cmd”數組的構造,您可以看到我們也控制了命令中的多個參數,這是每個看起來像“config.get*()”的項,但是它被一些我們不控制的其他項分割開了。

什么是Apache Tika

我的第一個想法是運行“cmd.exe”,然后將參數“/c”作為“config.getLanguage()”傳入,然后將“|| somecommand ||”作為“config.getPageSegMode()”插入,這雖然可以執行“somecommand”。但是在調用`“doOCR”`之前,還有另一個函數在`“config.getTesseractPath()”`字符串上調用,該字符串只執行該命令(目的是檢查是否被調用的應用程序是有效的應用程序)。這里的問題是只運行沒有參數的“cmd.exe”并一直掛起,因為“cmd.exe”永遠不會退出并讓執行繼續執行“doOCR”功能。

0x03 解決方案

除了運行單個命令外,我們可以更深入地了解“doOCR”函數使用Process Monitor啟動進程時會發生什么。 查看進程的屬性,當tika-server啟動它時,會生成以下命令行,該命令行是使用inject命令構造的。

"calc.exe"tesseract.exe C:\Users\Test\AppData\Local\Temp\apache-tika-3299124493942985299.tmp C:\Users\Test\AppData\Local\Temp\apache-tika-7317860646082338953.tmp -l eng -psm 1 txt -c preserve_interword_spaces=0

我們控制的命令部分以紅色突出顯示。我們可以在命令中注入3個地方,1個命令和2個參數。另一個有趣的發現是Tika實際上創建了2個臨時文件,其中一個作為第一個參數被傳遞。

經過一些進一步的調查后,我能夠確認傳遞給命令的第一個臨時文件是我上傳的文件中的內容。這意味著我可以用一些代碼或命令填充該文件并執行它。

現在我必須找到一個原生的Windows應用程序,它將忽略tika-server創建的所有隨機雜散參數,并仍然執行第一個文件內容作為某種命令或代碼,即使它具有“.tmp”擴展名。找到一些可以做到這一切的事情起初對我來說聽起來不太可能。最后我發現了Cscript.exe,它看起來有點希望。我們來看看Cscript可以做些什么。

什么是Apache Tika

Cscript正是我們所需要的。它將第一個參數作為腳本,并允許您使用"//E:engine"標志來指定要使用的腳本引擎(可能是Jscript或VBS),因此文件擴展名無關緊要。將它放入新命令現在看起來如下所示。

"cscript.exe"tesseract.exe C:\Users\Test\AppData\Local\Temp\apache-tika-3299124493942985299.tmp C:\Users\Test\AppData\Local\Temp\apache-tika-7317860646082338953.tmp -l //E:Jscript -psm 1 txt -c preserve_interword_spaces=0

這可以通過設置以下HTTP標頭來完成:

X-Tika-OCRTesseractPath: "cscript.exe"X-Tika-OCRLanguage: //E:Jscript

將上傳的“image”文件將包含一些Jscript或VBS:

var oShell = WScript.CreateObject("WScript.Shell");var oExec = oShell.Exec('cmd /c calc.exe');

首先,上傳失敗,因為它不是有效圖片,無法驗證圖像的魔術字節。然后我發現將內容類型設置為“image/jp2”迫使Tika不檢查圖像中的魔術字節,但仍然通過OCR處理圖像。這允許上載包含Jscript的圖像。

最后,將所有這些放在一起,我們有完整的command/jscript/vbs腳本。

什么是Apache Tika

以上是“什么是Apache Tika”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新竹县| 崇州市| 滦南县| 庆城县| 集安市| 衡阳市| 侯马市| 榆社县| 藁城市| 彩票| 原平市| 屯门区| 两当县| 纳雍县| 永川市| 长宁区| 天气| 咸宁市| 博野县| 鹿邑县| 临洮县| 固安县| 井冈山市| 呼伦贝尔市| 昆山市| 娄底市| 浦县| 高台县| 彰化县| 奎屯市| 元朗区| 绥江县| 靖远县| 临城县| 车险| 平顺县| 沽源县| 佛坪县| 景泰县| 阳山县| 淮安市|