跳到主要内容

Linux 修行之路 · Blog

Linux修行之路 - 技术博客

分享Kubernetes、Linux、Python、网络安全等技术文章

文章数量169
技术分类9
查看分类
7

# Debian10 更换国内源

· 阅读需 1 分钟

Debian10 更换国内源

https://cloud.tencent.com/developer/article/1590080

Debian11 更换阿里源

cp /etc/apt/sources.list /etc/apt/sources.list.back
echo "" > /etc/apt/sources.list

cat <<EOF > /etc/apt/sources.list
deb http://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb http://mirrors.aliyun.com/debian-security/ bullseye-security main
deb-src http://mirrors.aliyun.com/debian-security/ bullseye-security main
deb http://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb http://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib
EOF

apt update
apt -y upgrade

docker remote API 漏洞复现

· 阅读需 3 分钟

docker remote API 漏洞复现

漏洞描述

docker是一种开源的应用容器引擎,这个漏洞是利用docker对外开放的一个api接口,因为权限设置不当,导致可以远程命令执行。

测试环境

  • 本地一台虚拟机,一台临时创建的阿里云服务器
  • centos7
  • docker-ce-18.09.9

漏洞复现

首先探测2375端口,如果开放,再构造http:localhost:2375/version请求,如果返回包带有json格式,说明存在该漏洞。

1、安装docker

配置宿主机网卡转发

## 若未配置,需要执行如下
$ cat <<EOF > /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
EOF
$ sysctl -p /etc/sysctl.d/docker.conf

Yum安装配置docker

## 下载阿里源repo文件
$ curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
$ curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

$ yum clean all && yum makecache
## 安装指定版本
yum install -y docker-ce-18.09.9

## 配置源加速
## https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
mkdir -p /etc/docker
vi /etc/docker/daemon.json
{
"registry-mirrors" : [
"https://8xpk5wnt.mirror.aliyuncs.com"
]
}

## 设置开机自启
systemctl enable docker
systemctl daemon-reload

## docker daemon
ps aux |grep docker
## containerd
ps aux|grep containerd
systemctl status containerd

2、开启2375端口,提供外部访问

编辑docker文件:/usr/lib/systemd/system/docker.service

vim /usr/lib/systemd/system/docker.service

修改ExecStart行为下面内容

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \

重新加载docker配置

systemctl daemon-reload # 加载docker守护线程 systemctl restart docker # 重启docker

  • 查看端口

3、信息收集端口

4、查看返回包

5、添加、查看本地密钥

6、远程创建docker并添加密钥

docker -H tcp://8.135.2.198 run --rm -it -v /:/mnt busybox chroot /mnt sh

  • 简单解释一下参数的含义:
    • -rm 容器停止时,自动删除该容器
    • -v 挂载目录。格式为 系统目录:容器目录
    • -i 指示 docker 要在容器上打开一个标准的输入接口
    • -t 指示 docker 要创建一个伪 tty 终端,连接容器的标准输入接口,之后用户就可以通过终端进行输入

7、本地连接目标宿主机

漏洞危害

通过此漏洞,可在docker命令执行,并且影响宿主机。

总结流程

引用网上的一些总结流程

  1. Docker是以root权限运行的,这是所有姿势的前提
  2. Docker在运行一个容器的时候可以将宿主机上的一个目录挂载到容器内的一个目录,我们可以参考redis未授权访问漏洞,将宿主机的/root/.ssh目录挂载到容器上,然后写入公钥。如果有web目录的话,最差也能上一个webshell。
  3. 有些服务器不允许root登录,可以写入其他用户的.ssh/目录下(通过查看/etc/ssh/sshd_config目录),然后修改/etc/sudoer中的文件,配置为sudo免密码,切换为root
  4. 还可以通过crontab写计划任务反弹shell

漏洞修复

1.关闭2375端口 (尤其是公网情况下一定要禁用此端口)

2.在防火墙上配置禁止外网访问2375端口

EFK 二进制安装

· 阅读需 3 分钟

测试环境 EFK 搭建

上传软件包

主机放置目录
192.168.8.107/opt/
192.168.8.211/opt/
192.168.8.212/opt/

Elasticsearch 安装部署

解压elasticsearch并配置bin/elasticsearch.yml
cd /opt
tar -zxvf elasticsearch-7.7.0-linux-x86_64.tar.gz
mv elasticsearch-7.7.0-linux-x86_64 elasticsearch-7.7.0
cd elasticsearch-7.7.0/config
vim elasticsearch.yml

cluster.name: ELK-Cluster #ELK的集群名称,名称相同即属于是同一个集群
node.name: elk-node1 #本机在集群内的节点名称
path.data: /opt/elasticsearch-7.7.0/config/data #数据存放目录
path.logs: /opt/elasticsearch-7.7.0/config/data/log #日志保存目录
bootstrap.memory_lock: true #服务启动的时候锁定足够的内存,防止数据写入swap
network.host: 192.168.8.107 #监听的IP地址
http.port: 9200 #服务监听的端口
discovery.seed_hosts: ["192.168.8.107"] #单播配置一台即可
cluster.initial_master_nodes: ["elk-node1"]

配置内存限制
vim jvm.options

-Xms2g
-Xmx2g
创建用户以及数据目录
mkdir -p /opt/elasticsearch-7.7.0/config/{data,data/log}
groupadd elk
useradd -g elk elk
passwd elk
chown -R elk:elk /opt/elasticsearch-7.7.0 -R
su elk
cd bin/
./elasticsearch
# 启动报错:需要修改文件的最大打开数以及内存锁定
修改内核参数

vim /etc/security/limits.conf

* soft nofile 65536
* hard nofile 131072
* soft memlock unlimited
* hard memlock unlimited
修改最大线程数

vim /etc/security/limits.d/20-nproc.conf

*     soft    nproc    unlimited

vim /etc/sysctl.conf

vm.max_map_count = 655360

sysctl -p

reboot

启动服务
su elk
cd /opt/elasticsearch-7.7.0/bin/
./elasticsearch

netstat -nltup |grep 9200 #验证服务

Kibana 安装部署

解压部署
cd /opt
tar xf kibana-7.7.0-linux-x86_64.tar.gz
mv kibana-7.7.0-linux-x86_64 kibana-7.7.0
cd kibana-7.7.0/config/
修改配置文件

vim kibana.yml

server.port: 5601    #监听端口
server.host: "192.168.8.107" #监听地址
elasticsearch.hosts: ["http://192.168.8.107:9200"] #elasticsearch服务器地址

xpack.reporting.capture.browser.chromium.disableSandbox: true
xpack.reporting.capture.browser.chromium.proxy.enabled: false
xpack.reporting.enabled: false

i18n.locale: "zh-CN" #修改为中文
启动 Kibana
cd /opt/kibana-7.7.0/bin
nohup ./kibana --allow-root &
netstat -lntp | grep 5601 #验证

Filebeat 安装部署

安装在应用程序跑的服务器中:211、212

解压安装
cd /opt
tar xf filebeat-7.7.0-linux-x86_64.tar.gz
mv filebeat-7.7.0-linux-x86_64 filebeat-7.7.0
cd filebeat-7.7.0
修改配置文件

vim filebeat.yml

### Filebeat inputs
filebeat.inputs:
- type: log
enabled: true
paths:
- /mnt/opt/service_log/*.log
#配置多行日志合并规则,已时间为准,一个时间发生的日志为一个事件
multiline.pattern: '^\d{4}-\d{2}-\d{2}'
multiline.negate: true
multiline.match: after

### Filebeat modules
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false

### Kibana
setup.kibana:

setup.kibana.host: "http://192.168.8.107:5601"
setup.dashboards.enabled: true

### Outputs
#--- Elasticsearch output ---
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["192.168.8.107:9200"]
index: "filebeat-%{+yyyy.MM.dd}"

setup.template.name: "my-log"
setup.template.pattern: "my-log-*"
json.keys_under_root: false
json.overwrite_keys: true
#设置解析json格式日志的规则
processors:
- decode_json_fields:
fields: [""]
target: json
启动 Filebeat
nohup ./filebeat -e -c ./filebeat.yml &

Kibana 根据业务调整

http://192.168.8.107:5601/

添加常用的字段

  • @timestamp
  • host.hostname
  • log.file.path
  • message