renaudbako/Web-Exploitation-Scenario-7

GitHub: renaudbako/Web-Exploitation-Scenario-7

一个展示从 Web 入口到 Linux 提权的完整攻击链教学项目,解决如何利用常见配置弱点逐步获取高权限的问题。

Stars: 0 | Forks: 0

# Web-Exploitation-Scenario-7 Web Exploitation To Linux Privilege Escalation # 1. 侦察与发现 服务枚举 一次 Nmap 扫描确定了三个主要入口点: 端口 22(SSH) 端口 80(HTTP) 端口 6379(Redis) ![nmap](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/6d320c8154221604.jpg) Web 目录暴力破解 使用 Gobuster,我绘制了 Web 应用程序结构图以识别隐藏端点 ![Dir](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/541835f203221605.jpg) # 2. 初始访问 最严重的漏洞是一个未认证的 Redis 实例。Redis 常作为 Web 应用程序的快速访问数据存储,保存会话数据或配置设置。 会话劫持与操控 我检查了 Redis 中存储的键。发现一个包含 JSON 字符串的会话键。 ![Redis](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/b4b27cdab5221606.jpg) 通过使用 SET 命令,我们手动覆盖了会话数据以在 Web 应用程序中提升权限 这使我们能够刷新 Web UI 并获得对受限“攻击面板”的访问。 ![panel](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/0e2815347e221607.jpg) ![panel](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/39fe1ef626221609.jpg) # 3. 远程代码执行(RCE) “攻击面板”包含一个易受盲命令注入漏洞影响的诊断工具。虽然应用程序过滤了 `;`、`|` 和 `&&` 等常见操作符,但未考虑 shell 扩展技术。 过滤绕过策略 命令替换:我们使用 `$()` 执行嵌套命令。 空格绕过:由于空格被剥离,我们使用内部字段分隔符(`${IFS}`)来界定参数。 载荷编码:为避免字符过滤问题,反向 shell 以 Base64 编码。 ![Rev](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/24c814f375221610.jpg) ![Rev](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/dd2e32a2d4221611.jpg) # 5. 提权 最终阶段需要将权限从 blackbot 提升到 root。内核版本检查表明系统易受 CVE-2022-0847(DirtyPipe)攻击。 我在目标系统上编译了一个 DirtyPipe 漏洞利用程序。 该漏洞利用程序用于覆盖敏感文件(如 `/etc/passwd` 或 SUID 二进制文件)以授予 root 访问权限。 结果:我获得了一个 root shell,完全控制了服务器并能够彻底拆除僵尸网络基础设施。 ![Priv](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/76aefad2f2221612.jpg) # 补救措施 # 1. 网络与服务安全 初始入口点是一个暴露的、未认证的 Redis 实例。 Redis 认证:在 `redis.conf` 中启用 `requirepass` 指令,为所有连接强制使用强密码。 绑定接口:配置 Redis 仅绑定到 `127.0.0.1` 或特定内网 IP 地址,防止暴露于公共互联网。 实施 ACL:使用 Redis 6.0+ 访问控制列表(ACL)为特定用户或应用程序提供细粒度权限,确保 Web 应用程序只能访问其所需的键。 防火墙加固:使用 iptables 或 ufw 丢弃所有流向 6379 端口的流量,仅允许受信任的应用服务器访问。 # 2. Web 应用程序与会话管理 从普通用户提升到“高级管理员”是可能的,因为会话数据存储在不安全且可修改的格式中。 服务端会话完整性:永远不要信任存储在客户端可访问或易于修改的后端(如未加密的 Redis 字符串)中的会话数据。使用加密签名(HMAC)确保会话对象未被篡改。 不透明会话令牌:不要存储类似 `{"isAdmin": true}` 的 JSON 字符串,而是存储一个高熵的随机 UUID。将此 UUID 映射到后端数据库中的用户权限,该数据库无法通过会话存储直接修改。 最小权限原则:确保 Web 应用程序服务账户拥有运行所需的最低权限。 # 3. 防御命令注入 RCE 是通过绕过简单字符过滤器实现的。 避免 Shell 执行:将 `exec()`、`system()` 或 `os.system()` 等函数替换为语言特定的 API。例如,如果应用程序需要 ping 服务器,应使用原生网络库而非调用系统 `ping` 命令。 输入验证(允许列表):不要试图阻止“坏”字符(如 `;` 或 `|`),而是只允许“好”字符(如字母数字和 IP 地址中的点)。 参数化调用:如果必须执行 Shell,使用接受数组形式参数的函数(例如 `subprocess.run(["ping", "-c", "4", target])`),而非单个字符串。这可防止 Shell 解释 `$()` 或 `|` 等操作符。 # 4. 系统加固与提权预防 即使在获得初始 Shell 后,攻击者也应被“限制”在低权限环境中。 内核补丁:DirtyPipe(CVE-2022-0847)漏洞利用依赖于过时的 Linux 内核。实施定期补丁管理生命周期,确保操作系统已更新以抵御已知漏洞。 文件系统权限: 敏感文件(如 `database.db` 和源代码 `main.go`)不应可被运行 Web 服务器的用户读取。 使用服务隔离(如 Docker 容器或 systemd 沙箱)来限制被破坏进程在主机系统上可见的内容。 审计日志:实施 auditd 等工具,实时监控可疑文件写入或提权尝试。
标签:Base64 编码, CISA项目, CTI, CVE-2022-0847, DirtyPipe, DNS 解析, Gobuster 目录爆破, IFS 绕过, Linux 提权, Nmap 扫描, Redis 未授权访问, SSH, SUID 提权, Web报告查看器, Web 渗透, 会话劫持, 内核漏洞, 协议分析, 反向 Shell, 命令替代, 命令注入, 威胁模拟, 安全测试, 应用安全, 搜索引擎查询, 攻击性安全, 攻击面, 文档安全, 权限提升, 盲注, 诊断工具