Linux权限维持

J1angL1 36 0

Linux权限维持

Linux权限维持

修改文件/终端属性

修改文件创建时间

如果蓝队根据文件修改时间来判断文件是否为后门,如果参考 index.php 的时间再来看 shell.php 的时间就可以判断 shell.php 的生成时间有问题。那么此时我们可以利用touch命令修改文件创建时间来进行隐藏。

touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。

文件锁定

在Linux中,使用chattr命令来防止root和其他管理用户误删除和修改重要文件及目录,此权限用ls -l是查看不出来的,从而达到隐藏权限的目的。

历史操作命令

在我们做攻防的时候,通常不希望自己的命令被记录下来,因为一旦被记录下来就很容易判断是否主机是否沦陷并借此进行溯源,那么此时我们就需要在拿到shell之后进行一个设置,让Linux不去记录我们的命令:

上面的命令会临时禁用历史功能,这意味着在这命令之后你执行的所有操作都不会记录到历史中,然而这个命令之前的所有东西都会原样记录在历史列表中。

要重新开启历史功能,执行下面的命令:

当然,如果刚开始忘了进行设置,也可以通过后续删除历史记录来进行清楚痕迹。

删除大规模历史操作记录,这里,我们只保留前150行:

假设历史记录中已经包含了一些你不希望记录的命令。这种情况下我们怎么办?很简单。通过下面的命令来删除:

输出历史记录中匹配的命令,每一条前面会有个数字。从历史记录中删除那个指定的项:

 

passwd增加用户

先讲一下passwd和shadow文件的区别:

通常情况下,我们在进行添加账户的时候是将账户信息输入到passwd文件中:

然而如果系统不允许uid=0的用户远程登录,我们可以通过shadow增加一个普通用户账号:

SUID后门

当一个文件所属主的x标志位s(set uid简称suid)时,且所属主为root时,当执行该文件时,其实是以root身份执行的。

必要条件:

创建suid权限的文件:

使用一般用户运行:

Linux权限维持

有的师傅可能对ID的知识有些迷茫,可以参考一下这个文章来进行理解: Real user ID, effective user ID, set user ID_fatshaw的博客-CSDN博客

SSH后门

SSH软连接后门

后门原理

在sshd服务配置运行PAM认证的前提下,PAM配置文件中控制标志为sufficient时只要pam_rootok模块检测uid为0(root)即可成功认证登陆。

也就是说,软连接后门是利用了PAM配置文件的作用,在我们将sshd文件软连接名称设置为 su 之后,在启动过程中他会去 PAM 配置文件夹中寻找是否存在对应名称的配置信息(su),然而 su 在 pam_rootok 只检测 uid 0 即可认证成功,这样就导致了可以使用任意密码登录:

Linux权限维持

根据原理我们可以知道配置文件的核心是pam配置中的pam_rootok.so,所以只需包含这句话就可以实现后门功能,而且默认的配置文件中除了su,还有其他的可利用的配置文件。

Linux权限维持

etc/pam.d/目录下查找包含pam_rootok.so配置的文件

我们可以发现还有 chshchfn 包含着 pam_rootok.so

Linux权限维持

tips:软连接的路径对后门没有影响,无论是 /tmp/su 还是 /home/su 还是 /usr/local/su 都可以,只要文件位置有su文件。

配置信息的关键口令是:auth sufficient pam_rootok.so,所以我们可以在找不到其他的可以进行软连接的文件时,自己创建一个包含 auth sufficient pam_rootok.so 的文件进行软连接。

优点:能够绕过一些网络设备的安全流量监测,但是本地在查看 时会暴露端口,建议设置成 8081,8080等端口。

小结

  1. Linux软连接ssh后门需要ssh配置允许PAM认证才能使用。
  2. 如果被控主机不允许root登陆可用其他已存在用户登陆。
  3. 通过软连接的方式,实质上PAM认证是通过软连接的文件名(如:/tmp/su,/home/su)在/etc/pam.d/目录下寻找对应的PAM配置文件(如:/etc/pam.d/su)
  4. 任意密码登陆的核心是auth sufficient pam_rootok.so,只要PAM配置文件中包含此配置即可SSH任意密码登陆,实践表明,可成功利用的PAM配置文件除了su还有chsh、chfn。

SSH公钥免登录后门

当然,公钥免登陆这种用法不只是用在留后门,还可以在一些特殊情况下获取一个交互的 shell,如struts写入公钥,oracle写入公钥连接,Redis未授权访问等情景。

在利用 ssh-keygen -t rsa 生成密钥之后,目录下会有两个文件:

Linux权限维持

然后将 id_rsa.pub 的内容输入到受害机的 authorized_keys 文件中(这个文件在进行SSH公钥免登录中是必须存在的,位于 ~/.ssh/目录下)

Linux权限维持

然后在攻击机内进行登录即可(当然,也可以创建一个config文件,里面配置所要登陆的机器的ip和其简称,后续直接 ssh xx 即可)。

SSH Keylogger记录密码

当前系统如果存在strace的话,它可以跟踪任何进程的系统调用和数据,可以利用 strace 系统调试工具获取 ssh 的读写连接的数据,以达到抓取管理员登陆其他机器的明文密码的作用。

这个命令的话就是进行一个别名处理,将后续的命令别名程成 ssh ,在受害机执行 ssh 登录其他主机的时候,会先执行我们前面记录输入的密码的指令,然后再去执行 ssh 命令。

此时会在 /tmp 文件下生成一个log文件用来存放记录下的ssh的密码。

Linux权限维持

我们也可以利用这个命令去进行查找。

当然,我们也可以利用sudo或者su命令进行记录:

Linux权限维持

利用Cron机制安装后门

Cron是ubuntu下默认启动的用户执行计划。它会按照设置,在固定的周期或者按照一定时间执行某一个任务。

1、crontab命令选项

2、cron 文件写法

可用crontab -e命令来编辑,编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件。

3、特殊符号的含义

星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”

中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

4、常用命令

5、常用示例

每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件

50 7 * * * root run-parts /etc/cron.daily [ 注:run-parts参数表示,执行后面目录中的所有可执行文件]

第10、20、30分钟输出到/tmp/cron1.txt:

10,20,30 * * * * echo “第10、20、30分钟输出一次” >> /tmp/cron1.txt

以用户web的身份每两小时就运行某个程序:

0 */2 * * * web /usr/bin/somecommand >> /dev/null 2>&1

6、利用

可以使用基本的服务查看状态命令等查看信息。

查看用户的执行计划。(如果你显示没有计划不要着急,后面加上cron.allow和cron.deny就有了)

我们可以通过将反弹shell加入到定时任务内进行执行:

Linux权限维持

Linux权限维持

Linux权限维持

而且我们会发现在受害机上查询定时任务会查询不到东西:

Linux权限维持

这个是因为我们在编辑定时任务时加进去的 \r%100c\n ,这个在Linux下的cat等命令是默认无法显示出来的,对于隐藏痕迹有一些好处。

vim后门

vim modeline(CVE-2019-12735)

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

开启命令:

当前目录下创建文件:

那么如果我们想要反弹shell:

然后进行连接即可。

vim python扩展后门

适用于安装了vim且安装了 python 扩展(绝大版本默认安装)的linux系统。

正向后门:

反向后门:

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

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

隐藏后门

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

Linux权限维持

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

Linux权限维持

Linux权限维持

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

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

隐藏进程

Linux权限维持

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

Linux权限维持

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

inetd服务后门

inetd是一个监听外部网络请求(就是一个socket)的系统守护进程,默认情况下为13端口。当inetd接收到一个外部请求后,它会根据这个请求到自己的配置文件中去找到实际处理它的程序,然后再把接收到的这个socket交给那个程序去处理。所以,如果我们已经在目标系统的inetd配置文件中配置好,那么来自外部的某个socket是要执行一个可交互的shell,就获取了一个后门。

 

发表评论 取消回复
表情 图片 链接 代码

分享