ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Burp Suite抓包实战:从CTF题目到文件包含漏洞利用

Burp Suite抓包实战:从CTF题目到文件包含漏洞利用 1. 项目概述一次从Web前端到后端源码的“掘金”之旅最近在带新人入门CTFCapture The Flag网络安全竞赛的Web安全方向发现很多朋友对“抓包”这个基础操作既熟悉又陌生。熟悉是因为总听人提起陌生是到了实战环节面对一个具体的题目比如BUUCTF平台上的《极客大挑战 2019》Secret File这道题还是不知道从何下手更别提挖出题目里隐藏的secr3t.php这个关键文件了。这道题非常经典它完美地串联了信息收集、前端代码审计、代理抓包、源码审计和协议利用这一整套Web安全入门流程。今天我就以这道题为例手把手带你走一遍目标不仅仅是解出这道题更是让你掌握“抓包”工具Burp Suite的核心使用逻辑以及遇到类似隐藏入口、源码泄露问题时该如何系统性地思考和操作。简单来说这道题模拟了一个常见的场景一个看似功能简单的网页背后却隐藏着开发者未曾公开的、可能包含漏洞的管理页面或接口即secr3t.php。我们的任务就是像侦探一样利用工具和技巧把这个隐藏的入口找出来并分析其功能。整个过程Burp Suite将作为我们的“中间人”和“望远镜”拦截和观察浏览器与服务器之间所有的网络通信从而发现那些在正常浏览中看不到的请求和响应。对于刚接触安全测试的朋友理解并熟练运用Burp Suite的抓包功能是打开Web安全大门的第一把钥匙。2. 环境准备与工具配置打造你的安全测试工作台工欲善其事必先利其器。在开始“掘金”之前我们需要一个稳定、可控的测试环境。这里不涉及任何复杂的网络配置我们只需要三样东西靶机、攻击机和代理工具。2.1 靶机与攻击机环境靶机就是运行着题目环境的服务器。对于BUUCTF的题目我们通常直接在BUUCTF平台上启动对应的题目实例它会给我们一个临时的URL比如http://node5.buuoj.cn:28000。这就是我们的目标。攻击机则是我们自己的电脑。为了简化我们通常将Burp Suite和浏览器都安装在攻击机上并通过代理设置让浏览器的流量经过Burp Suite。2.2 Burp Suite的安装与基础配置Burp Suite是PortSwigger公司出品的一款集成化Web安全测试平台其社区版Burp Suite Community Edition功能对于入门和学习来说已经足够强大并且免费。你可以从其官网下载安装包。安装过程很简单一路下一步即可。首次启动时它会让你选择临时项目还是保存项目选择“Temporary project”即可进入主界面。Burp Suite的主界面可能让新手感到眼花缭乱但今天我们只聚焦最核心的四个模块Proxy代理这是抓包的核心。它默认监听本地的8080端口所有经过这个端口的HTTP/HTTPS流量都会被拦截和记录。Target目标用于定义和管理我们的测试范围Scope方便我们只关注与目标域名相关的流量避免被无关请求干扰。Repeater重放器用于手动修改和重复发送单个HTTP请求是测试漏洞Payload的利器。Intruder入侵者用于自动化攻击如爆破密码、枚举参数等本题暂不需要。我们的第一步是配置浏览器代理。以Chrome浏览器为例你可以安装SwitchyOmega这类代理管理插件也可以直接使用系统代理设置。更简单的方法是Burp Suite自带了一个基于Chromium的浏览器在Proxy - Intercept标签页下点击“Open Browser”即可启动。这个浏览器已经预配置好了代理指向Burp开箱即用非常适合新手。注意使用自带浏览器时务必先关闭Burp的拦截功能Intercept is on 按钮显示为橙色时表示开启拦截点击它变为“Intercept is off”灰色状态否则你的浏览器会一直等待你手动放行每一个请求导致无法正常上网。我们初期先关闭拦截只做流量记录。2.3 关键一步安装Burp Suite的CA证书这是很多新手会卡住的地方。当你的代理设置好后访问HTTP网站没问题但访问HTTPS网站比如很多登录页面时浏览器会提示“您的连接不是私密连接”或“NET::ERR_CERT_AUTHORITY_INVALID”。这是因为Burp Suite作为中间人需要对HTTPS流量进行解密和再加密这就需要浏览器信任Burp Suite自己颁发的证书。解决方法很简单在Burp Suite浏览器或你配置了代理的浏览器中访问http://burpsuite或http://127.0.0.1:8080点击页面上的“CA Certificate”链接下载证书文件通常是一个.der或.cer文件。然后你需要将这个证书导入到系统的受信任根证书颁发机构中。具体步骤因操作系统而异Windows双击证书文件选择“安装证书” - “当前用户” - “将所有的证书都放入下列存储” - “浏览” - 选择“受信任的根证书颁发机构”。macOS双击证书文件将其添加到“钥匙串访问”找到刚添加的“PortSwigger CA”证书双击打开在“信任”设置中将“使用此证书时”设置为“始终信任”。Chrome (使用自带浏览器通常自动信任)如果仍有问题在Chrome设置中搜索“管理证书”在“受信任的根证书颁发机构”标签页中导入即可。完成这一步后你就能顺畅地拦截和查看HTTPS流量了这是后续所有操作的基础。3. 初探目标信息收集与前端代码审计配置好环境后让我们正式进入题目。在Burp Suite自带浏览器中访问BUUCTF提供的题目地址。3.1 肉眼观察与基础交互首先我们像普通用户一样浏览页面。这是一个典型的“秘密文件”相关页面可能有一段引导性的文字比如“这里有一个秘密文件但我忘记把它藏在哪里了”或者只有一个简单的按钮或链接。我们的第一要务是不放过页面上任何可交互的元素。点击每一个按钮、链接查看页面源代码快捷键CtrlU或右键“查看网页源代码”。3.2 利用开发者工具进行深度审查仅仅查看源代码可能不够。现代Web应用大量使用JavaScript动态加载内容。因此我们必须打开浏览器的开发者工具F12进行更细致的审计。Elements元素面板仔细检查HTML结构寻找隐藏的表单input typehidden、注释掉的代码!-- 注释 --、以及styledisplay:none;的元素。这些地方常常藏着线索。Network网络面板这是重中之重。保持面板开启并刷新页面你会看到页面加载过程中所有的网络请求HTML、CSS、JS、图片、以及可能的XHRAjax请求或Fetch请求。题目线索很可能就藏在某个不经意的JS文件请求或一个额外的API接口调用中。在本题的上下文中我们就要特别留意是否有对secr3t.php或其他非常规文件的请求。Sources源代码面板查看加载的所有JavaScript文件。有时关键逻辑或隐藏的URL路径会写在JS里并通过复杂的逻辑触发。Console控制台面板有时开发者会留下调试信息或者JS代码会直接输出一些有用内容到这里。3.3 结合Burp Suite进行流量记录在进行上述手动点击和查看的同时确保Burp Suite的Proxy - HTTP history标签页是开着的。你所有的操作产生的HTTP请求都会像流水账一样记录在这里。这样即使某个请求一闪而过或者在前端工具里不容易分析我们也可以在Burp里找到完整的请求和响应记录包括请求头、参数和服务器返回的完整响应体。这是比浏览器Network面板更强大、更持久化的记录工具。4. 核心突破利用Burp Suite抓包发现隐藏入口经过初步的信息收集你可能已经发现了一些端倪但往往最关键的入口需要更主动的探测才能发现。这时Burp Suite的抓包和重放功能就派上用场了。4.1 开启拦截主动探测回到Burp Suite的Proxy - Intercept标签页点击“Intercept is off”将其变为“Intercept is on”橙色。现在浏览器发出的每一个请求都会被Burp Suite拦截并暂停等待你的审查和决定放行、丢弃或修改。我们回到题目页面进行一些非常规的点击或操作。例如如果页面上有一个按钮点击后页面看似没变化但在Burp Suite的拦截窗口里你可能会看到一个向某个新地址比如action.php或ajax.php发出的POST请求。这个请求里可能就包含了下一步的线索。对于本题我们可能需要在点击某个按钮或链接的瞬间同时密切观察Burp的拦截窗口和浏览器的Network面板看看是否有对secr3t.php的请求发出。4.2 分析请求与响应假设我们运气没那么好没有直接抓到secr3t.php。别急我们可以分析已经抓到的请求。在Proxy - HTTP history中右键点击任何一个对题目主页面比如index.php的请求选择“Send to Repeater”发送到重放器。Repeater标签页允许我们手动修改并重新发送这个请求。一个常见的技巧是修改HTTP请求方法。比如把GET请求改成POST或者改成HEAD、PUT等看看服务器的反应。有时隐藏接口只响应特定的请求方法。更直接的方法是进行目录或文件爆破但这通常需要其他工具如Dirsearch, Gobuster。然而我们也可以利用Burp Suite的Intruder模块进行简单的枚举不过对于这道具体题目根据已知信息线索往往就在对某个已知文件请求的响应信息里。4.3 关键发现响应头与响应体中的线索服务器返回的响应Response和请求Request同样重要。在HTTP history或Repeater中查看响应时要关注两点响应头Response Headers查看X-Powered-By可能泄露服务器语言、Server泄露Web服务器类型版本但最重要的是关注是否有非标准的头字段或者Location字段用于重定向。有时服务器会在响应头里泄露文件路径。响应体Response Body这是主要战场。除了肉眼查看返回的HTML我们一定要查看源码。在Burp Suite的响应面板有“Raw”原始、“Headers”头、“Hex”十六进制等视图。在“Raw”视图里仔细阅读每一行。开发者注释!-- --、被注释掉的HTML代码、甚至直接写在HTML里的JavaScript变量都可能包含类似!-- secr3t.php is in somewhere... --或var hidden_page /admin/secr3t.php;这样的线索。根据网络搜索的提示本题正是通过审查对某个页面可能是action.php或index.php某个接口的响应在响应体的HTML注释或JavaScript代码中发现了提示存在secr3t.php文件的信息。这就是“抓包”的威力——它让我们看到了浏览器在渲染页面时可能忽略或无法直接展示的原始服务器数据。5. 深入分析secr3t.php源码审计与漏洞利用一旦我们通过抓包发现了secr3t.php的访问路径例如http://target.com/secr3t.php下一步就是直接访问它并分析其功能。5.1 访问与功能分析在浏览器或Repeater中直接访问secr3t.php。它可能是一个白屏也可能返回一些内容。继续用Burp Suite抓取这次访问的请求和响应。查看响应体我们极有可能看到了该PHP文件的源代码。这是因为开发者配置失误导致PHP文件没有被解析执行而是以纯文本形式返回。更常见的情况是页面本身就会显示部分源码或者通过参数来包含并显示源码。假设我们看到的secr3t.php源码如下此为模拟基于常见CTF题型?php highlight_file(__FILE__); $file $_GET[file]; if(isset($file)){ if (strpos($file, ../) ! false || strpos($file, tp) ! false || strpos($file, input) ! false || strpos($file, data) ! false) { die(Oh no! Hacker!); } include($file); } ?5.2 源码审计与漏洞识别这是一段典型的存在文件包含漏洞的代码但加入了简单的过滤。功能通过GET参数file接收一个文件名然后使用include()函数将其包含进来。漏洞点include($file)。如果$file是用户可控的且服务器未正确配置就可能包含服务器上的任意文件比如/etc/passwd或网站配置文件导致敏感信息泄露甚至配合文件上传实现远程代码执行RCE。防护与绕过代码使用strpos()检查$file参数中是否包含../目录遍历、tp可能想过滤php://但过滤不严谨、input、data等字符串。如果包含就输出错误并终止。5.3 利用PHP伪协议绕过过滤我们的目标是读取服务器上的一个关键文件比如flag.php但直接传递../../flag.php会被过滤。这时就需要用到PHP伪协议。PHP内置了一些封装协议可以访问各种输入/输出流。最常用的就是php://filter它允许我们对数据流进行过滤处理。虽然过滤了tp但php://filter中包含了php这似乎触发了过滤仔细看代码过滤的是‘tp’这个子串。php://filter中包含php但不包含tp注意是单独的tp不是php的一部分。所以php://是可以通过的。但为了确保万无一失我们可以尝试大小写混淆PHP协议不区分大小写比如PHP://或者使用其他编码方式但本题过滤似乎并不针对php://。我们的Payload可以构造为/secr3t.php?filephp://filter/convert.base64-encode/resourceflag.phpphp://filter/使用filter伪协议。convert.base64-encode这是一个过滤器会将目标文件的内容进行Base64编码。resourceflag.php指定要读取的资源是flag.php文件。为什么要用Base64编码因为include()函数会试图将包含的文件作为PHP代码执行。如果flag.php内容是一段PHP代码比如?php echo “flag{xxx}”; ?直接包含可能会执行这段代码但输出可能被限制或看不到。而先进行Base64编码include()包含的就是一串Base64文本PHP会尝试将其解码并执行但Base64文本不是有效的PHP代码所以通常不会执行反而会以错误或文本形式输出这串Base64编码。这样我们就安全地拿到了flag.php文件的Base64编码内容。5.4 在Burp Suite中构造并发送Payload我们回到Burp Suite的Repeater模块。在地址栏输入完整的URLhttp://target.com/secr3t.php?filephp://filter/convert.base64-encode/resourceflag.php方法为GET然后点击“Send”。在右侧的响应Response面板中我们很可能会看到一长串Base64编码的字符串。复制这串字符。5.5 解码获取Flag使用任何Base64解码工具在线网站、Burp Suite的Decoder模块、或者系统命令行echo “编码串” | base64 -d对这段字符串进行解码。解码后的内容很可能就是flag.php的源代码其中就包含着本题的Flag格式通常为flag{xxxx-xxxx-xxxx}或buuctf{...}。6. 实战复盘与高阶技巧延伸至此我们已经成功完成了从信息收集、抓包发现隐藏文件、到源码审计、利用伪协议获取Flag的全过程。让我们复盘一下并延伸一些更普适的技巧和注意事项。6.1 完整解题流程梳理环境配置安装配置Burp Suite设置浏览器代理安装CA证书。信息收集访问目标查看页面源码、开发者工具特别是Network和Elements同时Burp Suite全程记录流量HTTP history。发现线索通过分析页面请求尤其是对主要交互点的请求的响应在HTML注释或JS代码中发现secr3t.php的提示。访问分析直接访问secr3t.php获取其源代码。漏洞识别审计源码发现存在过滤不严的文件包含漏洞。构造利用利用php://filter伪协议配合Base64编码绕过过滤读取目标文件如flag.php。解码获取对服务器返回的Base64字符串进行解码获得Flag。6.2 Burp Suite抓包常见问题排查抓不到包检查浏览器代理设置是否正确指向127.0.0.1:8080检查Burp Suite的Proxy - Options确保代理监听器Proxy Listeners是Running状态且监听在正确的接口和端口上尝试关闭防火墙或杀毒软件临时。HTTPS网站证书错误确认已正确安装并信任Burp Suite的CA证书。如果仍不行尝试在Burp Suite的Proxy - Options - SSL Pass Through中添加该域名或检查浏览器证书管理。流量太多太杂使用Target - Scope功能。将你的目标域名如*.buuoj.cn添加到Scope中然后在Proxy - Options - Intercept Client Requests中启用“And URL Is in target scope”选项这样Burp就只拦截目标范围内的请求。拦截导致页面加载慢或卡住记得在不需要手动审查每个请求时关闭InterceptIntercept is off。日常侦察使用HTTP history记录即可。6.3 文件包含漏洞的更多利用思路本题我们使用了php://filter读文件。文件包含漏洞的利用方式远不止于此包含日志文件如果知道服务器日志路径如/var/log/apache2/access.log可以先将PHP代码写入User-Agent等字段然后包含该日志文件从而执行代码。包含Session文件如果Session文件/tmp/sess_[PHPSESSID]内容可控也可以包含执行。配合文件上传上传一个图片马图片中包含PHP代码然后利用文件包含漏洞去包含这个图片文件实现RCE。使用其他伪协议如php://input可以接收POST请求体作为输入流执行本题被过滤data://协议可以直接在URI中嵌入Base64编码的代码执行本题也被过滤。6.4 针对过滤的绕过技巧面对黑名单过滤过滤特定字符串可以尝试大小写绕过PHP://PhP://。双重编码绕过对参数进行两次URL编码../编码为%252e%252e%252f服务器可能解码两次。超长路径绕过利用./和目录深度如././././flag.php。使用绝对路径如果知道文件绝对路径直接使用。利用协议嵌套或过滤器链php://filter/readconvert.base64-encode/resourcephp://filter/...某些场景下可行。这道《Secret File》题目是一个绝佳的入门案例它几乎涵盖了Web安全初期所需的所有核心技能点工具使用、信息收集、代码审计、漏洞利用。掌握它你就不仅仅是学会了一个工具或解了一道题而是建立起了一套面对未知Web应用时的基本侦察和测试方法论。记住工具是手臂思路才是大脑。多练多思考每一个看似简单的页面背后都可能藏着通往另一个世界的秘密入口。
返回列表