SSH公私钥后门从入门到应急响应
目录
1. SSH公私钥与SSH公私钥后门介绍
1.1 SSH公私钥介绍
1.1.1 公钥和私钥的基本概念
1.1.2 SSH公私钥认证的工作原理(很重要)
1.2 SSH公私钥后门介绍
2. 如何在已拿下控制权限的主机创建后门
2.1 使用 Xshell 生成公钥与私钥
2.2 将公钥上传到被需要被植入后门的服务器centos7
2.2.1 将公钥文件上传或下载到目标服务器
2.3 Xshell 免密登录测试
3. 如何进行应急响应
3.1 查看服务器开放的端口号与服务
3.2 查看可疑进程
3.3 查看SSH成功登录的日志(查看可疑ip和用户)
3.5 清除后门
1. SSH公私钥与SSH公私钥后门介绍
1.1 SSH公私钥介绍
SSH(Secure Shell)公私钥对是一种用于认证的加密技术,它允许用户通过持有私钥来远程登录服务器,而无需输入密码。这种认证方式比传统的密码认证更安全,因为它依赖于加密技术来验证用户的身份。
1.1.1 公钥和私钥的基本概念
-
公钥(Public Key):这是一个可以公开的密钥,通常用于加密数据或验证签名。在SSH认证中,公钥用于加密会话密钥,确保只有持有对应私钥的用户才能解密并建立连接。
-
私钥(Private Key):这是一个必须保密的密钥,用户用它来解密接收到的数据或对数据进行签名。在SSH认证中,私钥用于解密由公钥加密的会话密钥,从而建立安全的SSH连接。
1.1.2 SSH公私钥认证的工作原理(很重要)
-
密钥生成:用户使用SSH密钥生成工具(
ssh-keygen
)创建一对密钥,即公钥和私钥。 -
公钥部署:用户将公钥复制到服务器的
~/.ssh/authorized_keys
文件中,这个文件存储了允许登录到该服务器的所有公钥。 -
认证过程:
- 当用户尝试使用SSH客户端连接服务器时,服务器会从
authorized_keys
文件中读取公钥。 - 服务器使用这个公钥加密一个会话密钥,并将其发送给客户端。
- SSH客户端使用对应的私钥解密会话密钥,然后使用这个会话密钥与服务器建立加密的SSH连接。
- 当用户尝试使用SSH客户端连接服务器时,服务器会从
-
连接建立:如果客户端能够成功解密会话密钥并建立连接,服务器就知道客户端持有正确的私钥,从而验证了用户的身份。
1.2 SSH公私钥后门介绍
SSH公私钥后门是一种利用SSH协议的公钥认证机制来实现未授权访问的技术。在SSH协议中,除了传统的密码认证方式外,还可以使用公钥和私钥对进行认证。用户将公钥放置在服务器的~/.ssh/authorized_keys文件中,之后使用对应的私钥即可登录服务器,无需输入密码。
SSH公私钥后门的关键在于攻击者通过某种手段获取到服务器的写入权限,将自己的公钥添加到authorized_keys文件中,或者篡改已有的公钥。这样,攻击者就可以使用对应的私钥在不被察觉的情况下登录服务器。(就是在有权限的情况下,自己增加了一个额外的登录认证的方式)
2. 如何在已拿下控制权限的主机创建后门
2.1 使用 Xshell 生成公钥与私钥
在攻击机上使用 Xshell 生成私钥,按照如图所示选择“新建用户密钥生成向导”
之后输入 密钥名称与密码(可任意设置),此处密码设为:xiaoyu123 ,之后点击下一步
之后点击“保存为文件”
成功保存文件之后,再点击完成
出现弹窗提示,即正确生成,此处密钥为私钥
2.2 将公钥上传到被需要被植入后门的服务器centos7
2.2.1 将公钥文件上传或下载到目标服务器
将公钥 idrsa2048.pub ,让靶机可以下载改公钥,也就是将公钥通过wget的方式传到靶机上(就是想办法将公钥上传到服务器)
这里如果有上传的权限或是可以通过ssh远程连接的话,可以直接将公钥上传到需要留后门的主机,或者通过在本机搭建服务或是在服务器上搭建服务,让靶机能够通过wget下载到靶机就可以了
2.2.2 将公钥写入.ssh/authorized_keys文件
将公钥 idrsa2048.pub 内容写进 .ssh/authorized_keys 文件中,查找 authorized_keys 文件的位置,发现该服务器中无该文件,注意这里需要再~目录的上一层查找
find -name authorized_keys
那么我们就开启免密登录功能,命令如下:
# 输入命令后一直回车就可以了
ssh-keygen -t rsa
在ssh目录下创建该文件,命令如下:
touch /root/.ssh/authorized_keys
接下来将xhell的公钥追加到 authorizedkeys 文件,并且给 authorizedkeys 文件赋予执行权限
cd /root
cat id_rsa_2048.pub >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
2.3 Xshell 免密登录测试
点击新建会话,输入主机IP地址
输入完之后,不要点击确定,接下来点击 “用户身份验证”,并选择 Public Key ,之后输按照如图所示输入用户名密码(本例是root/xiaoyu123),下面的秘钥的密码也是xiaoyu123,输完用户名密码之后点击“确定”
选择会话之后点击连接,不需要输入用户名密码就可以成功登录
输入ifconfig查看连接的服务器ip地址
3. 如何进行应急响应
3.1 查看服务器开放的端口号与服务
查看服务器开放的端口号,发现有个ssh连接,并且与负责人确定改IP正常情况下不能登录服务器
# 查看服务器开放的端口号
netstat -anpt
3.2 查看可疑进程
根据PID号查看进程,并未发现异常,是正常的ssh登录
ll /proc/1948
3.3 查看SSH成功登录的日志(查看可疑ip和用户)
这里其实还是看不出来什么,很多师傅是不是想到要进行查看文件是否被修改,这里其实可以通过查看登录成功的日志信息发现,不懂命令的师傅可以看我之前的文章,基本每一篇都有在提
more /var/log/secure | grep 'Appected'
发现一个通过秘钥登录的用户,这里可以和运维人员进行确认,那么接下来查看authorized_keys 文件是否被篡改
3.4 查看被修改的.ssh/authorized_keys文件信息
cat /root/.ssh/authorized_keys
发现被添加了未知用户的公钥,查看文件的一些属性
查看被篡改时间,确定是最近被篡改的
# 这里用下面的命令都可以查看最近一次文件的修改时间
stat /root/.ssh/authorized_keys
ll /root/.ssh/authorized_keys
3.5 清除后门
如何清除后门,直接将公钥文件的信息删除即可
# 下面的三条命令都可以清除文件中的信息
sudo truncate -s 0 /root/.ssh/authorized_keys
sudo sh -c 'echo "" > /root/.ssh/authorized_keys'
sudo echo -n "" > /root/.ssh/authorized_keys
相关文章:

SSH公私钥后门从入门到应急响应
目录 1. SSH公私钥与SSH公私钥后门介绍 1.1 SSH公私钥介绍 1.1.1 公钥和私钥的基本概念 1.1.2 SSH公私钥认证的工作原理(很重要) 1.2 SSH公私钥后门介绍 2. 如何在已拿下控制权限的主机创建后门 2.1 使用 Xshell 生成公钥与私钥 2.2 将公钥上传到被需要被植入后门的服务…...

服务器数据恢复—Linux操作系统环境下网站数据的恢复案例
服务器数据恢复环境: 一台linux操作系统服务器上跑了几十个网站,服务器上只有一块SATA硬盘。 服务器故障: 服务器突然宕机,尝试再次启动失败。将硬盘拆下检测,发现存在坏扇区。找当地一家数据恢复公司处理后ÿ…...

开放式耳机是怎么样的?开放式耳机的优缺点分析?
开放式耳机作为一种独特的耳机类型,因其独特设计和使用体验受到了许多用户的喜爱。了解开放式耳机的优缺点有助于大家更好地选择适合自己需求的耳机。以下是开放式耳机的一些主要优点和缺点分析: 优点 l 舒适度高 开放式耳机的设计通常更加轻盈&#…...

HDMI色块移动——FPGA学习笔记13
一、方块移动原理 二、实验任务 使用FPGA开发板上的HDMI接口在显示器上显示一个不停移动的方块,要求方块移动到边界处时能够改变移动方向。显示分辨率为800*480,刷新速率为90hz。(480p分辨率为800*480,像素时钟频率Vga_clk 800x4…...

MySQL中去除重复
除去相同的行 SELECT DISTINCT 列名 FROM 表名; 示例:查询employees表,显示唯一的部门ID select distinct department_id from employees;...

【C++】vector容器的基本使用
一、vector是什么 vector是STL第一个正式的容器,它的底层其实就是动态数组,插入数据时当容量满了会自动扩容,它和string差不多,不同的之处之一在于vector本身是一个模板,它这个容器中可以存放各种各样的类型的数据&am…...

【强化学习系列】Gym库使用——创建自己的强化学习环境2:拆解官方标准模型源码/规范自定义类+打包自定义环境
目录 一、 官方标准环境的获取与理解 二、根据官方环境源码修改自定义 1.初始化__init__() 2.重置环境 reset() 三、打包环境 1.注册与创建自定义环境 2.环境规范化 在本文的早些时候,曾尝试按照自己的想法搭建自定义的基于gym强化学习环境。 【强化学习系列】Gy…...
PyQt5实现按钮选择文件夹及文件夹
目录 1、选择文件夹并显示 2、选择文件 3、选择多个文件 4、设置保存文件路径 1、选择文件夹并显示 from PyQt5 import QtWidgetsdirectory QtWidgets.QFileDialog.getExistingDirectory(None, "选取文件夹", "./") # 起始路径 print(directory) 2…...

Gin渲染
HTML渲染 【示例1】 首先定义一个存放模板文件的 templates文件夹,然后在其内部按照业务分别定义一个 posts 文件夹和一个 users 文件夹。 posts/index.tmpl {{define "posts/index.tmpl"}} <!DOCTYPE html> <html lang"en">&…...
前端——JS基础
定义变量:let / var 字符串 字符串拼接: 字符串和数字拼:您.... 25 ; 这个25会转成字符串再拼接 字符串和数组拼:10以内的质数有: [2,3,5,7] > 10以内的质数有:2,3,5,7 字符串长度:leng…...

MATLAB入门教程
MATLAB安装教程可参考链接:matlab怎么安装 matlab安装教程-电脑软件-PHP中文网 1.MATLAB的工作环境 (1)命令窗(command window) 是对MATLAB进行操作的主要载体。默认情况下,启动MATLAB时就打开命令窗。MATLAB的所有所数…...

muduo - 概要简述
作者:陈硕 编程语言:C 架构模式:Reactor 代码链接:GitHub - chenshuo/muduo: Event-driven network library for multi-threaded Linux server in C11 设计自述:https://www.cnblogs.com/Solstice/archive/2010/08…...
Selenium点击元素的方法
前言 点击方法在web自动化测试中经常用到,下面就来介绍一下selenium常用和不常用的点击方法; 1、常用方法 1.1、使用 click() 方法: 这是最简单和最常用的方法。通过选中要点击的元素,然后使用 click() 方法来触发点击事件。 示例代码: element = self.driver.find_e…...

kali里面搭建docker容器
注意事项:kali版本,镜像源 (1)权限为管理员: sudo su (2) 更新软件包列表并升级已安装的软件包 apt-get update apt-get upgrade 出错了,应该是更新源出问题了。 (3)更换镜像源&am…...

WebGL系列教程八(GLSL着色器基础语法)
目录 1 前言2 基本原则3 基本数据类型4 顶点着色器和片元着色器4.1 声明4.2 初始化项目4.3 赋值 5 结构体5.1 声明5.2 赋值 6 函数6.1 基本结构6.2 自定义函数6.3 常用内置函数 7 精度8 其他9 总结 1 前言 通过前七讲,我们已经见过了WebGL中的部分基础语法ÿ…...

go多线程
1、简单使用(这个执行完成,如果进程执行比较久,这里不会等待它们结束) package mainimport "time"func main() {go func() {println("Hello, World!")}()time.Sleep(1 * time.Second) }2、wg.Add(数量)使用&…...
【话题】如何看待IBM中国研发部裁员?
(一)背景 在全球化的大趋势下,跨国公司的业务布局一直处于动态调整之中。IBM 作为全球知名的 IT 企业,在中国市场已经运营多年,其在中国的研发中心曾经为公司的全球业务发展做出了重要贡献。近年来,全球经…...

【C/C++】涉及string类的经典OJ编程题
【C/C】涉及string类的经典OJ编程题 一. 把字符串转化成整数(atoi)解法一:(不用long)完整代码:解法二:(用long) 二.字符串相加代码实现(含注释)&a…...
淘系等电商平台API接口系列:商品详情数据解析,json数据返回参考
——在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦! 在淘系(如淘宝、天猫)等电商平台中,商品详情数据…...
vue组件之间的数据共享
一、组件之间的关系 1.父子关系 2.兄弟关系 3.后代关系 二、父子组件之间的数据共享 1.父-->子共享数据 父组件通过v-bind属性绑定向子组件共享数据,子组件需要使用props接受数据。 <template><p>父组件</p><Son :msg"msg"…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...