华为云Web平台渗透测试全流程:从信息收集到漏洞利用与修复

华为云Web平台渗透测试全流程:从信息收集到漏洞利用与修复

1. 项目概述与核心价值

最近在帮一个客户做安全评估,他们刚把一套核心的Web业务系统从本地机房迁移到了华为云上。客户老板很直接:“系统上云了,感觉更虚了,以前机房门一锁心里还踏实点,现在数据都在网上飘着,你们得给我彻底查一遍,看看有没有后门能让黑客随便进。” 这个需求很典型,也是很多企业上云后的普遍焦虑——环境变了,传统的安全边界模糊了,原有的安全认知需要刷新。所以,我花了大概两周时间,设计并执行了一套专门针对华为云环境Web平台的渗透测试全流程计划。这不仅仅是跑几个扫描器那么简单,它涉及到云环境特有的资产发现、权限配置核查、网络拓扑理解以及传统Web漏洞在云环境下的新变种。今天就把这套从零开始的完整计划拆开揉碎了分享给大家,无论是安全工程师想系统化自己的云渗透方法,还是运维、开发同学想了解自己的云上应用可能面临哪些风险,都能从中找到可以直接落地的思路和实操步骤。

简单来说,这套计划的核心目标是:模拟一个具备初步能力的攻击者,从互联网视角出发,逐步深入,最终评估部署在华为云上的Web平台的整体安全水位。它区别于传统内网渗透,更聚焦于云服务配置错误、不当的访问控制、脆弱的托管服务以及云原生组件漏洞这些新型风险点。整个流程遵循PTES(渗透测试执行标准)的基本阶段,但所有工具、技巧和关注点都针对华为云生态进行了适配和优化。

2. 前期准备与信息收集阶段

渗透测试切忌一上来就狂轰滥炸。在云环境中,周密的前期信息收集比以往任何时候都重要,因为很多关键信息可能通过公开渠道或配置疏忽直接暴露。

2.1 明确测试范围与授权

这是铁律,尤其在云环境下。你需要和客户明确书面授权范围,至少包括:

  1. 目标域名/IP列表:例如app.customer.com203.0.113.10
  2. 华为云账号信息(用于授权测试的测试账号):虽然我们模拟外部攻击,但拥有一个只读权限的测试账号,可以让我们在“蓝队”视角快速验证一些配置风险,提高效率。注意:此账号权限必须严格限制,通常仅赋予“安全审计”或只读的“VPC Viewer”、“CES Viewer”等角色,绝不可用于任何修改操作。
  3. 测试时间窗口:明确开始和结束时间,避免影响业务高峰。
  4. 禁止项:明确拒绝DDoS、物理攻击、社会工程学(除非专项测试)、对云平台本身的攻击等。

拿到授权后,第一件事不是打开扫描器,而是建立测试笔记。我用的是Obsidian,建立一个以项目命名的仓库,结构如下:

项目-客户名-华为云Web渗透/ ├── 1-授权与范围.md ├── 2-信息收集/ │ ├── 子域名枚举.md │ ├── 端口服务扫描.md │ ├── 云资产测绘.md │ └── 指纹识别.md ├── 3-漏洞扫描与验证/ ├── 4-手动渗透与利用/ └── 5-报告与修复建议/

2.2 传统信息收集手段在云端的应用

即使上云,目标Web应用依然暴露在互联网,传统手段依然有效,但侧重点稍有不同。

子域名枚举:除了常用的subfinder,amass,assetfinder,要特别关注可能与云服务相关的子域名模式。例如:

  • oss.obs.(对象存储)
  • cdn.dcdn.(内容分发)
  • api.,gw.(API网关)
  • kibana.,jenkins.,grafana.(可能暴露的运维后台) 一个高效的命令组合:subfinder -d target.com -silent | httpx -silent | tee alive_subs.txt。将存活子域名保存下来。

端口与服务扫描:使用nmap或更快的masscan进行全端口扫描,然后针对开放端口用nmap -sV -sC -p <ports> -oA nmap_detail进行深度识别。在云环境下,要特别留意:

  • 22/SSH:是否允许密码登录?是否仅限特定IP?
  • 443/HTTPS:证书信息中是否包含其他域名或内部地址?
  • 80/HTTP:是否强制跳转HTTPS?是否存在默认页泄露信息?
  • 8080, 8443, 9000等:常见于Web管理界面、Docker Registry、Jenkins等。
  • 6379/Redis, 27017/MongoDB, 9200/Elasticsearch:这些数据库服务如果直接暴露在公网,且无鉴权,将是致命风险。

Web应用指纹识别:使用Wappalyzer浏览器插件或whatweb命令行工具快速识别CMS、框架、前端库、服务器软件。例如:whatweb https://target.com -v。识别出Nginx 1.18,PHP 7.4,ThinkPHP 5.1等信息,能为后续漏洞利用提供明确方向。

2.3 云环境特有的信息收集(关键)

这是云渗透的精华部分,攻击者会利用公开信息拼凑出你的云架构图。

1. 公开的云元数据与桶枚举:

  • 对象存储服务 (OBS) 枚举:华为云OBS的桶访问地址格式为<bucket-name>.obs.<region>.myhuaweicloud.com。可以使用工具如cloud_enum或自写脚本,通过字典爆破可能存在的桶名。命令思路:for bucket in $(cat wordlist.txt); do curl -s -o /dev/null -w "%{http_code}" http://$bucket.obs.cn-north-4.myhuaweicloud.com; done。返回200403(存在但拒绝访问)都值得关注,404表示不存在。特别注意:如果桶策略配置为“公共读”,则任何人均可访问其中文件,可能导致源码、配置文件、敏感数据泄露。
  • 云服务器元数据:如果通过某些SSRF漏洞能够访问到云服务器实例的元数据服务,可能获取临时访问密钥、角色信息等。华为云元数据地址通常是http://169.254.169.254/在测试中,我们仅在已授权且确认存在相关漏洞的EC2实例上进行此项检查,严禁对未授权目标尝试。

2. 搜索引擎语法与公开情报收集:使用Google,Shodan,Fofa,ZoomEye等网络空间测绘引擎。

  • Fofa语法示例
    • domain="target.com"找关联资产。
    • app="Huawei-Cloud-Console"寻找可能暴露的管理后台。
    • port="9200" && country="CN"找暴露的Elasticsearch。
    • body="华为云" && title="Index of /"找可能泄露的目录。
  • GitHub/GitLab搜索:搜索公司名、项目名、关键字,查找可能泄露的AccessKey、SecretKey、配置文件(如config.php,application.yml)、数据库连接字符串。搜索语法如:org:CompanyName password,target.com AND (AKIA|SECRET_KEY)

3. 证书透明度日志:使用crt.sh网站,输入域名,可以查询到为该域名签发的所有SSL证书,常能发现未在DNS记录中的内部或测试域名。

4. 域名解析历史与CDN识别:通过securitytrails,viewdns.info查看域名历史解析记录,可能发现真实的源站服务器IP(在切换到CDN前)。使用工具如cdncheck或在线网站判断目标是否使用了CDN。如果未使用CDN,那么扫描到的IP很可能就是真实服务器。

实操心得:信息收集阶段要“慢就是快”。花一两天时间细致地收集,画出一个初步的资产地图和攻击面草图,远比盲目扫描有效。所有发现都要记录,包括看似无关的403页面、302跳转,它们可能在后续的漏洞串联中起到关键作用。

3. 漏洞扫描与自动化评估

在完成手工信息收集后,利用自动化工具进行第一轮广谱漏洞扫描,旨在快速发现低垂果实。

3.1 主动式Web漏洞扫描

这里不推荐使用对业务有潜在影响的主动扫描器(如OpenVAS的某些插件)直接扫生产环境,除非有明确授权且安排在业务低峰期。更推荐使用被动或半被动的扫描器。

  1. Nuclei:这是当前社区最活跃的漏洞模板扫描器。它拥有海量的POC模板,覆盖从CVE漏洞到配置错误的各种检查。使用方法:

    # 更新模板 nuclei -update-templates # 对存活的目标进行扫描 cat alive_subs.txt | nuclei -t ~/nuclei-templates/ -severity medium,high,critical -o nuclei_results.txt

    重点关注与云服务相关的模板,如exposed-panels/,misconfiguration/目录下的。Nuclei能高效地发现暴露的Jenkins、Kibana、默认凭据等问题。

  2. 针对特定框架的扫描器:如果信息收集阶段识别出特定框架,如ThinkPHP、Spring Boot、Shiro等,应使用专门的检测工具或Exp进行验证。例如,针对ThinkPHP的历史RCE漏洞有现成的检测脚本。

3.2 云安全配置检查(CSPM)

这是云渗透测试独有的环节。我们可以利用华为云自身的服务或开源工具,以只读权限检查账号内的安全配置。

  1. 华为云安全中心(旧版企业主机安全HSS):如果测试账号有权限,可以查看安全中心的基线检查报告,快速了解ECS实例在身份鉴别、访问控制、安全审计等方面的配置风险。但注意,这更多是防御视角。

  2. 开源工具 - ScoutSuite:这是一个多云安全配置审计工具。虽然对华为云的支持不如AWS、Azure原生,但社区版已包含部分华为云资源的检查规则。它可以以只读权限遍历你的云账号,检查OBS桶策略、安全组规则、IAM策略等是否存在配置错误。

    # 需要配置华为云AK/SK(使用只读权限的测试账号) export HWCLOUD_ACCESS_KEY_ID="your_ak" export HWCLOUD_SECRET_ACCESS_KEY="your_sk" python scout.py --provider huawei --report-dir ./scout_report

    生成的HTML报告会清晰列出各类风险,如“OBS桶允许公开访问”、“安全组对0.0.0.0/0开放高危端口”等。

  3. 手动检查清单(核心):工具不能覆盖所有,必须结合手动检查。以下是一份简化的华为云配置风险清单:

    • 安全组(防火墙):检查入站规则是否有对0.0.0.0/0开放22、3389、3306、6379、27017等端口。理想情况是仅对必要的业务IP开放。
    • 弹性公网IP:确认是否所有ECS都需要公网IP?很多应用服务器只需放在私有子网,通过ELB或NAT网关对外提供服务。
    • OBS桶策略:逐一检查每个桶的“桶策略”和“ACL”。确保没有“匿名用户”的“读取”或“写入”权限。检查“跨域资源共享(CORS)”配置是否过于宽松。
    • 云数据库 RDS:检查“公网访问”是否开启。如果必须开启,确认“安全组”是否限制了访问源IP。检查数据库账号是否使用了弱密码(需结合其他漏洞获取或授权后测试)。
    • 弹性负载均衡 ELB:检查监听器配置,是否使用了安全的TLS协议(禁用SSLv3, TLS1.0/1.1),证书是否有效。
    • IAM 用户与权限:检查测试账号外的其他IAM用户,是否遵循最小权限原则?是否存在用户附加了AdministratorSecurity Administrator等宽泛的策略?

注意事项:自动化扫描会产生大量流量和日志,务必在授权的时间窗口内进行。扫描结果会有大量误报(特别是Nuclei),需要人工逐一验证。切勿将扫描报告直接交给客户,必须经过分析、验证和风险评级。

4. 手动渗透测试与深度利用

自动化工具发现的是“已知的”漏洞和配置错误。真正的攻防较量在于手动测试,发现逻辑漏洞、业务缺陷和漏洞链。

4.1 Web应用层手动测试

这是渗透测试工程师的主战场。围绕OWASP Top 10展开:

  1. 注入漏洞(SQLi, Command Injection)

    • SQL注入:使用sqlmap进行自动化检测,但更重要的是手工测试。寻找所有用户输入点:GET/POST参数、Cookie、HTTP头。使用单引号\1 AND 1=1等payload测试。在云环境中,要注意数据库可能是RDS,其网络隔离可能使--os-shell等高级功能失效,但数据泄露风险依旧。
    • 命令注入:在功能点如“Ping检测”、“文件上传”(文件名处理)等处测试; whoami,| id,$(cat /etc/passwd)
  2. 身份认证与会话管理漏洞

    • 弱口令爆破:对登录接口进行定向爆破。使用hydraburp suite intruder。字典要精心准备,包含公司名、产品名、常见弱口令。特别注意:爆破前务必确认授权范围,并控制频率,避免触发账号锁定机制影响正常用户。
    • 会话固定/劫持:检查登录前后Session ID是否变化?Cookie的HttpOnlySecure属性是否设置?
    • 多阶段认证绕过:如果存在短信/邮箱验证码,测试是否可重放、可爆破(0000-9999)、或在第一步认证后直接跳转到登录成功页面。
  3. 敏感数据泄露

    • 目录遍历:测试../../etc/passwd,....//....//....//windows/win.ini
    • 备份文件泄露:扫描.bak,.swp,.old,.tar.gz,_backup等文件。
    • 源码泄露:通过.git/目录泄露、.DS_Store文件、SVN/entries文件获取源码。
    • 配置信息泄露:检查/actuator/health,/phpinfo.php,/console等路径。在云环境中,配置文件里可能硬编码了OBS的AK/SK、RDS的连接串。
  4. 跨站脚本(XSS)与跨站请求伪造(CSRF)

    • XSS:测试反射型、存储型DOM型。使用<script>alert(document.domain)</script>等payload。在云管理控制台发现的XSS可能危害更大(如果同域)。
    • CSRF:检查关键操作(修改密码、转账、添加管理员)是否缺少CSRF Token。使用Burp生成CSRF PoC测试。

4.2 云服务漏洞链利用

这是最体现云渗透特色的部分。往往一个简单的Web漏洞,在云环境下能串联成一次严重的入侵。

场景一:从Web漏洞到云服务器元数据

  1. 发现一个SSRF漏洞,可以请求内部地址。
  2. 利用SSRF访问云服务器元数据接口:http://169.254.169.254/latest/meta-data/
  3. 获取实例的临时安全凭证(如果实例绑定了IAM角色)。
  4. 使用这些凭证通过AWS CLI或华为云CLI在本地配置,从而获得该角色所拥有的云资源访问权限(如读写OBS桶、操作ECS)。

场景二:从OBS桶泄露到源码,再到AK/SK泄露

  1. 通过枚举发现一个配置为“公共读”的OBS桶backup.target.com
  2. 在桶内找到网站源码的压缩包website-20231001.tar.gz
  3. 解压源码,在配置文件config/prod.php中发现硬编码的华为云AK/SK。
  4. 使用该AK/SK,通过华为云SDK或CLI,直接操作该账号下的云资源,可能包括创建有公网IP的高权限ECS实例,从而建立持久化后门。

场景三:脆弱子域名接管

  1. 信息收集发现子域名dev.target.com解析到一个已被删除的华为云OBS桶端点(CNAME记录指向一个不存在的OBS桶)。
  2. 攻击者迅速在华为云上注册该桶名(例如dev-target-com)。
  3. 此时,所有访问dev.target.com的流量都会指向攻击者控制的OBS桶。
  4. 攻击者可以在桶中放置恶意钓鱼页面或利用该子域名的信誉进行后续攻击。

场景四:不安全的服务器端请求伪造(SSRF)与云内网探测在云环境的VPC内网中,存在大量未暴露公网的服务(如数据库、缓存、内部API)。如果存在SSRF漏洞,可以将其作为代理,扫描和攻击内网服务。

  1. 验证SSRF漏洞存在。
  2. 使用http://192.168.1.1:8080http://10.0.0.1:3306等地址探测VPC内网段(常见如192.168.0.0/16,10.0.0.0/8,172.16.0.0/12)。
  3. 如果发现内网的Redis未设密码,可通过SSRF构造Redis协议包,写入Webshell或反弹Shell。

实操心得:手动测试时,思维要跳出“一个漏洞一个洞”的局限,时刻思考“这个点能让我接触到什么?能拿到什么信息?这个信息能否帮助我进入下一个环节?” 养成画攻击链图的习惯。例如:弱口令登录后台 -> 后台文件上传GetShell -> 服务器内信息收集 -> 获取数据库密码 -> 数据库提权或横向移动。

5. 后渗透与权限维持

在成功获取Web服务器(如ECS)的shell权限后,工作并未结束。需要评估攻击者能在系统内部做什么,以及如何隐蔽地维持访问。

5.1 内网信息收集

一旦进入一台云主机,它就成为了进入整个VPC网络的跳板。

  • 网络信息ifconfig/ip addr查看IP,判断是否在公有子网。netstat -antp查看网络连接,发现内网其他服务。cat /etc/resolv.conf查看DNS,可能指向内网的DNS服务器(如10.0.0.2)。
  • 进程与服务ps auxfsystemctl list-units, 查看运行的服务,可能发现数据库、消息队列等。
  • 配置文件:查找Web应用配置、数据库连接配置文件、日志文件,寻找其他系统的凭据。
  • 历史命令与用户信息historycat ~/.bash_historycat /etc/passwd
  • 云元数据(再次确认):从内部访问元数据服务,可能获得更丰富的角色信息。curl http://169.254.169.254/latest/meta-data/

5.2 权限提升与横向移动

  • 本地提权:检查系统内核版本,搜索公开Exp。检查是否有sudo权限(sudo -l),是否有SUID/GUID位设置错误的可执行文件(find / -perm -u=s -type f 2>/dev/null)。
  • 横向移动:利用在内网收集到的密码或密钥,尝试SSH到其他主机。使用nmapmasscan从内部扫描整个VPC网段。如果获取到IAM角色的临时凭证,可以尝试在容器或主机上安装华为云CLI,进行云服务层面的横向移动(如访问其他区域的资源)。

5.3 权限维持(后门)

目的是模拟高级持续性威胁(APT),展示攻击者如何长期潜伏。

  • Web后门:在Web目录下放置隐蔽的Webshell,如免杀的一句话木马,或集成到正常PHP文件中。
  • SSH后门:添加SSH公钥到~/.ssh/authorized_keys,或创建隐藏的SSH账户。
  • 计划任务:通过crontab -e添加定时任务,定期反弹Shell或下载执行恶意脚本。
  • 云服务后门:这是云环境特有的。如果获得了足够高的IAM权限(如ECS FullAccess),攻击者可以:
    1. 修改现有ECS的安全组,为后门端口放行。
    2. 创建新的ECS实例,并绑定一个弹性公网IP,作为长期控制的跳板机。
    3. 在OBS桶中存储恶意脚本,并通过实例的“用户数据”功能在启动时自动下载执行。

注意事项:后渗透阶段的所有操作,必须在授权范围内明确约定。通常,为了证明危害性,我们会选择一种非破坏性的方式展示可能性(例如,在/tmp目录下创建一个标记文件,或截取一张拥有特定系统权限的截图),然后立即清理痕迹,并向客户展示攻击路径。绝对禁止在未经明确授权的情况下,进行数据窃取、破坏或创建真实的持久化后门。

6. 报告撰写与风险修复建议

渗透测试的最终价值体现在报告上。一份好的报告能让技术人员看懂如何复现,让管理者看清风险全貌和业务影响。

6.1 报告结构

我的报告通常分为以下几个部分:

  1. 概述:测试目标、范围、时间、参与人员、方法论简述。
  2. 执行摘要(给管理层看):用一页纸说明整体安全状况、发现的高危风险数量、最严重的1-2个漏洞及其可能造成的业务影响(数据泄露、服务中断、资金损失等)。
  3. 详细发现(给技术人员看):
    • 按风险等级(高危、中危、低危、信息)分类。
    • 每个漏洞一个独立章节,包含:
      • 漏洞标题:清晰描述,如“OBS存储桶配置错误导致敏感源码泄露”。
      • 风险等级:CVSS评分或自定义评级。
      • 受影响资产:具体的URL、IP、云资源ID。
      • 漏洞描述:详细说明这是什么问题。
      • 验证步骤:一步一步的操作截图和说明,让开发或运维能完全复现。
      • 漏洞原理:简要分析其成因。
      • 潜在影响:攻击者利用此漏洞能做什么(结合业务场景)。
      • 修复建议:具体、可操作的修复步骤。例如:

        修复建议

        1. 立即登录华为云控制台,进入OBS服务。
        2. 找到名为backup-target的桶,点击进入。
        3. 选择“概览”页签,在“基础配置”区域找到“桶策略”。
        4. 检查现有策略,删除任何包含“Principal”: {“AWS”: [“*”]}“Effect”: “Allow”“Action”: “s3:GetObject”的语句,除非明确需要公开访问。
        5. 点击“ACL”选项,确认“匿名用户”的“读取”权限未被勾选。
        6. (建议)为桶配置生命周期规则,自动归档或删除不必要的早期备份文件。
      • 参考链接:OWASP、华为云安全白皮书等相关文档链接。
  4. 附录:测试使用的工具列表、漏洞扫描原始结果(可选)、网络拓扑图(可选)。

6.2 修复建议的沟通

将报告提交给客户后,沟通至关重要。

  • 召开复盘会议:与开发、运维、安全团队一起过一遍高危漏洞。解释漏洞的利用方式,确保他们理解风险的严重性。
  • 提供优先级:帮助客户制定修复计划。通常顺序是:高危且易于利用的 -> 高危但利用复杂的 -> 中危 -> 低危。配置错误类漏洞(如OBS公开访问)通常修复最快,应优先处理。
  • 跟进与复测:在客户修复漏洞后,进行针对性的复测,确认漏洞已真正修复,且修复方案没有引入新的问题。

7. 总结与个人体会

做完这个华为云Web平台的渗透测试项目,我最大的感触是,云安全是“责任共担模型”的绝佳体现。云平台提供了坚固的“数据中心”安全,但“云内”的安全,尤其是应用配置和数据安全,责任完全在使用者肩上。很多暴露出来的高危问题,根源都不在深奥的0day漏洞,而在于默认配置的不安全安全意识的缺失

比如那个公开的OBS桶,运维同学可能只是想临时分享个文件,图方便设置了“公共读”,事后就忘了。在传统机房,一个文件放错文件夹可能只影响内网;在云上,这个动作就等于把文件放在了全球互联网的公共广场。再比如,安全组对所有IP开放了Redis端口,这在内网可能是常规操作,但在给ECS绑定弹性公网IP时,如果没有同步收紧安全组,就等于把数据库裸奔在公网。

对于企业和安全从业者,我的建议是:

  1. 建立云资产清单:你无法保护你不知道的东西。定期自动化盘点云上所有资源(ECS、OBS、RDS、ELB等)。
  2. 贯彻最小权限原则:无论是IAM用户、角色,还是安全组、桶策略,都从“默认拒绝”开始,再按需添加允许规则。
  3. 开启审计日志:务必开启云审计服务(CTS),记录所有API调用。这是事后追溯攻击链、进行取证的唯一依据。
  4. 将安全左移:在应用设计、代码开发、镜像构建的阶段就融入安全考量,而不是等到上线前再做渗透测试。可以考虑在CI/CD流水线中集成SAST/DAST工具。
  5. 定期进行渗透测试与配置审计:云环境是动态变化的,新的服务、新的配置随时可能引入风险。将渗透测试和CSPM(云安全态势管理)扫描作为常规动作,至少每季度一次。

安全是一个持续的过程,而非一劳永逸的状态。在云时代,攻击面在扩大,攻击手段在翻新,唯有保持敬畏,持续学习,才能构建起真正有效的防御体系。