*本文作者:ningjing,本文屬 FreeBuf 原創獎勵計划,未經許可禁止轉載。
一、 常見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 '
python fpm.py 192.168.139.129 /usr/local/lib/php/PEAR.php-c '
python fpm.py 192.168.139.129 /usr/local/lib/php/PEAR.php-c '
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/
*本文作者:ningjing,本文屬 FreeBuf 原創獎勵計划,未經許可禁止轉載。