linux不用命令开启ssh,不用密码也能ssh登陆Linux?

Linux的一个后门引发对PAM的探究

1.1 起因

今天在搜索关于Linux下的后门姿势时,发现一条命令如下:

ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=5555;

经典后门。直接对sshd建立软连接,之后用任意密码登录即可。

ssh root@x.x.x.x -p 5555这个是大家也经常会用到的命令,但是在好奇心的驱使下,为什么任意密码就可以了?

于是搜索了相关的资料,发现都是执行了这条命令就可以免密码登录了,但是为什么却没有一篇详细的解答。

1.2调查

首先测试一下这个命令:在A的机器上执行了如下命令:

f604f8d1b3c05c9a4792fa4fe4287fed.png

在A的机器上执行了如下命令:

ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=5555;

在B机器SSH登录A机器,输入任意密码,成功登录。先理解这条命令主要在做什么:

首先,做一个软链接,结果在/tmp/su  参数的意义: -o option  -p port

这样就开启了一个端口为5555的服务:

00d9a46de2a6bbeb9bd7211d8be01808.png

测试过程中发现,只允许命名为su,命名其他尝试登录都不成功(/tmp/xxx)。

98b1d8da9bde6ceb11b905f598e4472b.png

于是看了一下sshd相关的log,发现如下:

761a5a05d5b6202f78e8de5b4a7e0f23.png

发现是基于pam认证的,使用了pam中的su,为了区分是否和/bin/中的su是否相关,做了测试如下:

7456f106d30370cba50d645aafed13c1.png

把/bin/su 重新命名为其他文件,发现依然能够任意密码登录,又做了测试如下:

cp /etc/pam.d/su /etc/pam.d/xxx

f8e7b672ad2836fcb135925467646516.png

在此执行:

ln -sf /usr/sbin/sshd /tmp/xxx; /tmp/xxx -oPort=5555;

0af0209cdadd2fea63aab95194046a89.png

成功登录,根据日志和实践现在确认调用的是/etc/pam.d/su

1.3疑问

现在确认了是pam中的su导致的,为什么就不需要密码就可以登录?

简单的diff了一下pam中的sshd和su的区别:

66b22513e418315a1199ca9c1eec3201.png

这里需要了解一下PAM中的控制标记:

07db4db4b7b23fb020641d7bc644523c.png

sshd的pam认证使用了required和include,su使用了sufficient,在此就可以看出二者的区别了。

我们发现su的认证使用了pam_rootok.so,他是如何验证的,为什么导致我们输入任何密码就通过。

于是查了下pam_rootok.so的相关信息:

875c7e46d33208e94f2f73bf6055b4e1.png

他的认证模块是认证你的UID是否为0,他会return pam的结果。

再去看一下pam_rootok.so的源码,发现:

b51554d4bae643fba724bd00c3345273.png

他先会调用getuid(),如果get的uid为0,他会检查selinux的root是否为0或是否启用selinux下为0,返回认证成功,否则认证失败。

那么getuid()是从哪里来的,查一下官网:

ac604c2582351261e60a41ad747ba1dc.png

是根据进程来取得的,根据pam_rootok的文档,我们也可以对su进行调试:

5fedcebd24d4296ed3162278e9a35def.png

pam_rootok.so返回成功,依次向下执行so,都会成功,建立会话。

查看log:

17dd590b4b7b0f0c2d41df1a0e091f76.png

第一条:

pam_rootok(su:auth): authentication succeeded

1.4 真相

至此也终于清楚了为什么就可以输入任意密码进行登录。

我们重新捋一捋:

62a36dcd9212cece9d6a757ac8ffa953.png

1.5 彩蛋

实际的真相就是在pam中的pam_rootok模块,pam_rootok通过了认证还会一次向下执行,但是下面的都会依赖于pam_rootok的认证,auth =>account =>session:

527a401c34310d8cde321a264e27ad8a.png

通过查找其实不单单是su存在pam_rootok,只要满足了上述的三个条件都可以进行”任意密码登录”。

1.6 参考资料

https://linux.die.net/man/8/pam_rootok

https://fossies.org/dox/Linux-PAM-1.3.0/pam__rootok_8c_source.html

https://fossies.org/dox/Linux-PAM-1.3.0/pam__succeed__if_8c.html

https://fossies.org/dox/Linux-PAM-1.3.0/pam__succeed__if_8c_source.html

http://man7.org/linux/man-pages/man2/getuid.2.html

http://www.tuxradar.com/content/how-pam-works

http://www.centoscn.com/CentOS/help/2014/0504/2899.html

转载自http://www.91ri.org/16803.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ScrollView常用(暂时用上了的)代理方法

2019独角兽企业重金招聘Python工程师标准>>> ScrollView常用代理方法: #pragma mark - 滚动结束调用 -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {// 计算 滑动到了第几页double page scrollView.contentOffset.x / scrollView.width;self.p…

笔试题目汇总

C常考笔试题:不用if,while,do-while,for,打印出所有大于0小于k的整数.函数原型void printLess(int k); 解法一:递归方式(刚想出来) [cpp] view plaincopy #include <iostream> using namespace std; void printLess(int k) { switch(--k) { case 0:…

Android ListView性能优化实例讲解

前言&#xff1a; 对于ListView&#xff0c;大家绝对都不会陌生&#xff0c;只要是做过Android开发的人&#xff0c;哪有不用ListView的呢&#xff1f; 只要是用过ListView的人&#xff0c;哪有不关心对它性能优化的呢&#xff1f; 关于如何对ListView进行性能优化&#xff0c;…

Bzoj 3289: Mato的文件管理 莫队,树状数组,逆序对,离散化,分块

3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 1539 Solved: 665[Submit][Status][Discuss]Description Mato同学从各路神犇以各种方式&#xff08;你们懂的&#xff09;收集了许多资料&#xff0c;这些资料一共有n份&#xff0c;每份有一个大小和一…

linux头文件 库,Linux操作系统的头文件和库文件搜索路径

一、 头文件1 “”中的头文件&#xff0c;在源文件当前目录查找2 -I 中指定目录 -I可以在CFLAG中指定3 gcc的环境变量 C_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJC_INCLUDE_PATH4 编译器预设路径、内定目录&#xff1a;/usr/include/usr/local/include/usr/lib/gcc-lib/i386-lin…

vs2010创建和使用动态链接库(dll)

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 本文将创建一个简单的动态链接库&#xff0c;并编写一个应用台控制程序使用该动态链接…

通用二进制

通用二进制 通用二进制&#xff08;Universal binary&#xff09;是苹果电脑公司提出的一种程序代码&#xff0c;使程序能以本地程序的形式运行在使用PowerPC或者英特尔微处理器&#xff08;x86&#xff09;的麦金塔电脑上&#xff0c;在同一个程序包中同时为两种架构提供最理想…

Python~win32com~Excel

import win32com.client#wwin32com.client.Dispatch("Word.Application") #w.Visible1owin32com.client.Dispatch("Excel.Application") o.Visible1 o.Workbooks.Add() o.Cells(1,1).Value"Hello"转载于:https://www.cnblogs.com/lynclynn/p/530…

linux显示光盘命令行,使用wodim在命令行下烧录光盘

使用wodim在命令行下烧录光盘发布时间:2009-02-27 16:23:11来源:红联作者:zhania作者&#xff1a;linuxtoy出自http://linuxtoy.org/archives/burning-cd-with-wodim.html我们以前介绍的 Linux 光盘烧录工具多为图形化的程序&#xff0c;今天来看看如何使用 wodim 在命令行下烧…

Android(java)学习笔记144:网络图片浏览器的实现(ANR)

1.我们在Android下&#xff0c;实现使用http协议进行网络通信&#xff0c;请求网络数据。这里是获取网络上的图片信息&#xff0c;让它可以显示在手机上&#xff1b; 但是我们这个手机连接网络是很费时间&#xff0c;如果我们在主线程&#xff08;UI线程&#xff09;中写这个网…

DLL导出函数名称改编的解决方法

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 1.DLL编译后导出函数名称改变 在编写一个DLL后&#xff0c;为了能被别的程序调用&…

组合自定义控件的步骤详解

Android 步骤&#xff1a; 1 自定义组合控件的布局settint_view.xml<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:orientation"vertical"and…

linux如何建立隐藏目录,【Linux】文件与目录的默认权限与隐藏权限

01. 文件默认权限&#xff1a;umask文件的权限可以使用chmod来改变&#xff0c;但是我们默认创建文件的权限是什么&#xff1f;那就是与umask这个有关了。下来我们学习这个指令1.1 简单使用umask[rootiZbp13q6hd8z3xaagcmz6gZ /]# umask0022[rootiZbp13q6hd8z3xaagcmz6gZ /]# u…

Servlet和JSP学习指导与实践(二):Session追踪

前言&#xff1a; web应用中经常需要对某些有用的信息进行存储或者附加一些信息。本文主要介绍session&#xff0c;即“会话”跟踪的几种不同方式~ ----------------------------4种管理session的方式&#xff1a; 1.重写url 通过在请求的url后面追加参数信息进行会话跟踪。如&…

数据存储和界面展示(二)

#测试 黑盒测试 测试逻辑业务 白盒测试 测试逻辑方法 根据测试粒度 方法测试&#xff1a;function test 单元测试&#xff1a;unit test 集成测试&#xff1a;integration test 系统测试&#xff1a;system test 根据测试暴力程度 冒烟测试&#xff1a;smoke test 压力测…

linux在A目录下创建B文件,Linux课程---5、常用文件命令和目录命令(创建文件命令)...

Linux课程---5、常用文件命令和目录命令(创建文件命令)一、总结一句话总结&#xff1a;touch file11、管道符|有什么用&#xff1f;将前一个命令的结果作为后一个命令的输入&#xff1a;比如查看文件前3行&#xff1a;cat file1 | head -32、linux下如何复制粘贴命令是什么&…

window 系统上传文件到linux 系统出现dos 格式换行符

Windows里的文件在Unix/Mac下打开的话&#xff0c;在每行的结尾可能会多出一个^M符号&#xff0c;Unix/Mac系统下的文件在Windows里打开的话&#xff0c;所有文字会变成一行&#xff0c;所以为了避免这种情况的发生&#xff0c;我们可以在linux系统内转换格式 Centos系列可以直…

#pragma once与 #ifndef的区别

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 为了避免同一个文件被include多次 1 #ifndef方式2 #pragma once方式 在能够支持这…

android学习者优秀网址推荐

非常漂亮的android UI库集合&#xff0c;别人整理的&#xff0c;如果感觉不错&#xff0c;赶快收藏吧&#xff01;&#xff01; https://github.com/wasabeef/awesome-android-ui https://github.com/Trinea/android-open-project android中文社区网 http://www.android-studio…

linux while read文件,linux shell脚本用while read逐行读取文本的问题

问题:我现在是想用一个脚本获取一定列表服务器的运行时间。首先我建立一个名字为ip.txt的IP列表(一个IP一行)&#xff0c;再建好密钥实现不用密码直接登录。然后写脚本如下&#xff1a;#!/bin/bashwhile read ips;doecho $ips;done < ip.txt脚本实现了逐行读取列表中的IP&am…