小组成员
@canumay @aslihann @ezgigucuyener @mburakdonmez
参考文献
漏洞利用数据库 - Apache Tika-server < 1.18 - 命令注入
Rhino安全实验室 - 利用CVE-2018-1335:Apache Tika中的命令注入
免责声明
该利用代码由网络安全研究员 David Yesland @Daveysec 编写,仅供教育用途使用。
a. 漏洞简要描述
b. 漏洞利用方式
a. 寻找或构建利用该漏洞的代码
b. 突出显示存在漏洞的代码片段并解释其为何存在漏洞
Apache Tika服务器构造要执行的命令,其命令中的值由用户在对图像执行OCR的请求中提供。这使得用户可以操控该命令并执行恶意代码。在此例中,“config.getTesseractPath()”会获取“X-Tika-OCRTesseractPath”头部并将其附加到命令的开头。尽管在用户提供的路径末尾附加了“tesseract.exe”字符串,但用户可以通过使用双引号包裹自己的路径来丢弃随后的“tesseract.exe”字符串。这允许用户在服务器上运行任何可执行文件。
构造的命令:
"calc.exe"tesseract.exe C:\Users\Test\AppData\Local\Temp\apache-tika3299124493942985299.tmp C:\Users\Test\AppData\Local\Temp\apache-tika7317860646082338953.tmp -l eng -psm 1 txt -c preserve_interword_spaces=0
Windows内置的CScript.exe是一种脚本语言,它接受脚本文件名并运行它,同时忽略其他参数。如果我们能提供一个为cscript构建的脚本,我们就可以在服务器上执行它。Apache Tika服务器将我们提供的图像保存在主体中,并将其保存为临时文件以运行OCR,因此我们不必发送图像二进制文件,而是直接发送一个字符串,该字符串将像二进制文件一样被保存。但Tika服务器会检查该二进制文件是否为图像,但jp2文件类型除外,后者会直接保存。该文件将作为参数传递给cscript可执行文件。但文件扩展名仍然是“.tmp”,而我们需要“.JScript”或“.vbs”扩展名。为了绕过这一点,我们可以让cscript忽略文件扩展名而直接运行“JScript”。Tika服务器还会将“config.getPageSetMode()”传递给命令,该值由用户在“X-Tika-OCRLanguage”头部中发送。如果我们将其改为字符串“//E:Jscript”,cscript将忽略文件扩展名,将脚本作为JScript运行。最后,主体中提供的字符串将成为待执行的载荷,该载荷还可以调用另一个控制台以获得对系统shell的完全访问权限。
最终构造的命令:
"cscript.exe"tesseract.exe C:\Users\Test\AppData\Local\Temp\apache-tika3299124493942985299.tmp C:\Users\Test\AppData\Local\Temp\apache-tika7317860646082338953.tmp -l //E:Jscript -psm 1 txt -c preserve_interword_spaces=0
一个用于在JScript中调用shell的简单载荷:
var oShell = WScript.CreateObject("WScript.Shell");
var oExec = oShell.Exec('cmd /c calc.exe');
a. 执行你找到或构建的利用代码:
Apache Tika Server 1.17 正在目标虚拟机中运行。
我们可以从主机通过IP“192.168.233.167”访问该服务器。
然后我们执行了构造的利用代码,载荷为“calc.exe”,以在目标机器上运行计算器,从而证明我们能够在该目标机器上执行任意恶意代码。甚至通过反向shell的能力,我们可以在目标机器上创建一个交互式shell会话。
b. 利用代码的执行结果是什么:
如上所述,通过此利用代码,我们在目标机器上执行了计算器程序,但凭借远程代码执行的能力,我们可以以运行Apache Tika服务器的用户权限在目标机器上执行任何操作。例如,我们可以访问用户文件、监控用户活动,甚至如果存在摄像头,我们还可以截图或拍照。
c. 如何证明该漏洞确实存在:
该漏洞已由可靠来源(如NIST)报告,甚至已由Apache本身确认并修补。但为了证明这一点,我们可以使用metasploit进行另一个概念验证。
首先,我们确认安装的版本是易受攻击的版本。
确认版本后,我们可以配置metasploit会话,使用正确的IP和端口,然后运行“check”命令以验证目标是否易受攻击。
最后,我们可以运行“exploit”命令开始利用,并通过在shell中输入“dir”来确认shell是否存活。至此,唯一的限制是运行Apache Tika服务器的用户的权限。