当前位置:首页 > 技术 > 正文内容

Web靶场渗透实战:从备份文件泄露到SSRF漏洞利用链分析

访客 技术 2026年7月16日 2

Web渗透中的非常规信息收集

在Web安全测试与CTF竞赛中,面对结构复杂的靶场环境,盲目依赖自动化扫描工具往往会遗漏关键的业务逻辑漏洞。高效的渗透测试通常始于细致的信息收集,尤其是针对开发者遗留的敏感文件进行挖掘。本文将以一个典型的社交博客靶场为例,剖析如何通过基础信息收集获取源码,并进一步审计出潜在的服务器端请求伪造(SSRF)漏洞。

利用 robots.txt 挖掘敏感路径

robots.txt 文件主要用于指导搜索引擎爬虫的抓取行为,但在安全评估中,它经常成为暴露系统隐藏目录的突破口。通过请求该文件,测试者可以快速定位被开发者刻意隐藏或遗忘的备份文件。

# 探测目标站点的 robots.txt
curl -s http://target-host/robots.txt

假设目标站点返回了如下配置:

User-agent: *
Disallow: /profile.php.bak
Disallow: /manage/
Disallow: /db_dump/

需要明确的是,Disallow 仅仅是针对合规爬虫的协议约束,并不具备访问控制能力。上述配置中的 /profile.php.bak 暴露了一个典型的备份文件泄露风险。在Web开发过程中,开发者习惯使用 .bak.old~ 后缀来备份修改前的代码。若这些文件未被清理且存放在Web根目录下,将直接导致源代码泄露。

泄露源码的审计与漏洞定位

成功下载 /profile.php.bak 后,我们对其核心业务逻辑进行代码审计。以下是重构后的关键类定义:

<?php
class UserProfile {
    public $username = "";
    public $userAge = 0;
    public $personalSite = "";

    public function __construct($username, $userAge, $personalSite) {
        $this->username = $username;
        $this->userAge = intval($userAge);
        $this->personalSite = $personalSite;
    }

    // 发起外部HTTP请求的核心方法
    private function fetchRemoteData($targetUrl) {
        $curlHandle = curl_init();
        curl_setopt_array($curlHandle, [
            CURLOPT_URL => $targetUrl,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_FOLLOWLOCATION => false
        ]);
        
        $responseBody = curl_exec($curlHandle);
        $statusCode = curl_getinfo($curlHandle, CURLINFO_HTTP_CODE);
        curl_close($curlHandle);
        
        return ($statusCode === 404) ? "404 Not Found" : $responseBody;
    }

    // 获取用户博客内容的封装方法
    public function loadSiteContent() {
        return $this->fetchRemoteData($this->personalSite);
    }

    // 验证博客URL合法性的方法
    public function validateSiteUrl() {
        $parsedUrl = parse_url($this->personalSite);
        // 仅允许 http 和 https 协议
        $allowedSchemes = ['http', 'https'];
        return isset($parsedUrl['scheme']) && in_array($parsedUrl['scheme'], $allowedSchemes);
    }
}
?>

在上述代码中,UserProfile 类包含了一个 fetchRemoteData 方法,该方法直接接收用户可控的 $targetUrl 参数,并使用 cURL 库发起网络请求。虽然 validateSiteUrl 方法对协议进行了限制(仅允许 HTTP/HTTPS),但在实际调用链中,如果 loadSiteContent 执行前未严格调用验证方法,或者验证逻辑存在绕过可能,攻击者便可构造恶意的 personalSite payload。这不仅可能引发服务器端请求伪造(SSRF),用于探测内网服务,还可能结合其他协议读取本地敏感文件或攻击内网其他组件。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。