【BUUCTF】[HITCON 2017]SSRFme1

news/2025/1/30 7:07:41/

打开题目页面直接给了PHP源码

进行代码审计

<?php
// 这里的 192.168.122.15 可能是一个误写或者调试遗留的内容,它不属于有效的 PHP 代码部分
// 以下开始是正常的 PHP 代码// 检查是否存在 HTTP_X_FORWARDED_FOR 头信息// HTTP_X_FORWARDED_FOR 头通常用于代理服务器传递客户端的真实 IP 地址if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {// 如果存在 HTTP_X_FORWARDED_FOR 头,将其按逗号分隔成数组$http_x_headers = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);// 取数组的第一个元素作为客户端的 IP 地址,并更新 REMOTE_ADDR// REMOTE_ADDR 通常保存客户端的 IP 地址$_SERVER['REMOTE_ADDR'] = $http_x_headers[0];}// 输出客户端的 IP 地址echo $_SERVER["REMOTE_ADDR"];// 构建沙箱目录名// 使用 md5 函数对字符串 "orange" 和客户端 IP 地址拼接后的结果进行哈希处理// 拼接上 "sandbox/" 作为沙箱目录的完整路径$sandbox = "sandbox/" . md5("orange" . $_SERVER["REMOTE_ADDR"]);// 尝试创建沙箱目录// @ 符号用于抑制可能出现的错误信息@mkdir($sandbox);// 尝试切换当前工作目录到沙箱目录// @ 符号用于抑制可能出现的错误信息@chdir($sandbox);// 执行系统命令// 从 GET 请求中获取 url 参数,使用 escapeshellarg 函数对其进行转义处理// 然后执行 GET 请求的系统命令,将结果存储在 $data 变量中// 注意:这里的 "GET" 命令可能并不是标准系统命令,可能是自定义脚本或者环境中的命令$data = shell_exec("GET " . escapeshellarg($_GET["url"]));// 获取文件名的相关信息// 使用 pathinfo 函数解析从 GET 请求中获取的 filename 参数// 返回一个包含文件名各部分信息的关联数组$info = pathinfo($_GET["filename"]);// 处理目录名// 从 $info 数组中获取目录名部分,使用 basename 函数获取基础名称// 再使用 str_replace 函数将其中的点号替换为空字符串$dir  = str_replace(".", "", basename($info["dirname"]));// 尝试创建目录// @ 符号用于抑制可能出现的错误信息@mkdir($dir);// 尝试切换当前工作目录到新创建的目录// @ 符号用于抑制可能出现的错误信息@chdir($dir);// 将命令执行结果写入文件// 从 $info 数组中获取基础文件名,使用 basename 函数确保是基础文件名// 将之前命令执行结果 $data 写入该文件// @ 符号用于抑制可能出现的错误信息@file_put_contents(basename($info["basename"]), $data);// 高亮显示当前 PHP 文件的源代码highlight_file(__FILE__);

这段 PHP 代码尝试获取客户端的真实 IP 地址。

根据客户端 IP 地址创建一个沙箱目录。执行一个 GET 命令,获取指定 url 的数据。

根据用户提供的文件名创建相应的目录和文件,并将 GET 命令的结果写入该文件。最后高亮显示当前 PHP 文件的源代码。

着重看这里,提示md5加密,可以使用下面这个工具

MD5在线加密/解密/破解—MD5在线

构造URL

/sandbox/md5加密后的内容/ez

创建一个目录

再通过sandbox沙盒目录访问

得到根目录 

存在flag但不能点击

再次访问

最终得到flag

SSRF知识点

SSRF(Server-Side Request Forgery),即服务器端请求伪造,是一种网络安全漏洞。

SSRF 是一种攻击方式,攻击者能够诱使服务器端应用程序向攻击者选择的目标发起请求。由于服务器通常具有更高的权限和更广泛的网络访问权限,因此可以绕过网络访问控制,访问内部系统或其他受保护的资源。

攻击原理

当应用程序需要从用户输入中获取 URL 并发起请求时,攻击者可以通过构造恶意的 URL 来发起 SSRF 攻击。例如,一个应用程序需要从用户输入的 URL 中读取数据,攻击者可以将这个 URL 指向内部网络地址或其他受保护的资源。

常见的触发点

文件上传功能:当应用程序对上传的文件进行处理,如解析文件中的 URL 并发起请求时。URL 重定向功能:如果应用程序将用户提供的 URL 进行重定向,可能会被利用。              第三方服务集成:例如,使用用户提供的 URL 调用外部 API 或从其他服务获取数据。

信息泄露

攻击者可以访问内部系统的敏感信息,如数据库、文件服务器等。例如,利用 SSRF 访问内部的 http://localhost:8080 可能会获取到内部服务器上运行的服务信息。

服务端请求攻击

可以对内部网络的其他服务发起攻击,例如对内部的 Redis 服务发送恶意命令,进行数据篡改或信息窃取。

绕过防火墙

绕过网络防火墙,因为请求是从内部服务器发起的,而不是外部攻击者直接发起。


http://www.ppmy.cn/news/1567826.html

相关文章

Spring Boot - 数据库集成05 - 集成MongoDB

Spring Boot集成MongoDB 文章目录 Spring Boot集成MongoDB一&#xff1a;使用前的准备1&#xff1a;依赖导入 & 配置2&#xff1a;实体类创建 二&#xff1a;核心 - MongoRepository三&#xff1a;核心 - MongoTemplate1&#xff1a;集合操作2&#xff1a;文档操作(重点)3&…

RabbitMQ 分布式高可用

文章目录 前言一、持久化与内存管理1、持久化机制2、内存控制1、命令行2、配置文件 3、内存换页4、磁盘控制 二、集群1、Erlang的分布式特性2、RabbitMQ的节点类型2.1、磁盘节点 (Disk Node)2.2、内存节点 (RAM Node) 3、构建集群3.1 普通集群3.2 镜像队列3.3、高可用实现方案3…

人工智能丨Midscene:让UI自动化测试变得更简单

在这个数字化时代&#xff0c;每一个细节的优化都可能成为产品脱颖而出的关键。而对于测试人员来说&#xff0c;确保产品界面的稳定性和用户体验的流畅性至关重要。今天&#xff0c;我要向大家介绍一款名为Midscene的工具&#xff0c;它利用自然语言处理&#xff08;NLP&#x…

家居 EDI:Haverty‘s EDI 需求分析

Havertys 成立于 1885 年&#xff0c;是一家历史悠久的美国家具零售商。公司致力于为客户提供高品质的家具和家居饰品&#xff0c;其产品线涵盖客厅、卧室、餐厅及办公家具等多个领域。 电子数据交换&#xff08;EDI&#xff09;是一种通过标准化电子格式在商业伙伴之间进行数据…

性能优化案例:通过合理设置spark.storage.memoryFraction参数的值来优化PySpark程序的性能

优化PySpark程序的性能时&#xff0c;合理设置spark.storage.memoryFraction&#xff08;或相关内存参数&#xff09;是关键。 合理设置spark.storage.memoryFraction需结合任务类型和内存使用监控。对于缓存密集型任务&#xff0c;适当提高存储内存比例&#xff1b;对于Shuffl…

【Linux权限】—— 于虚拟殿堂,轻拨密钥启华章

欢迎来到ZyyOvO的博客✨&#xff0c;一个关于探索技术的角落&#xff0c;记录学习的点滴&#x1f4d6;&#xff0c;分享实用的技巧&#x1f6e0;️&#xff0c;偶尔还有一些奇思妙想&#x1f4a1; 本文由ZyyOvO原创✍️&#xff0c;感谢支持❤️&#xff01;请尊重原创&#x1…

docker安装emqx

emqx安装 拉取emqx镜像 docker pull emqx/emqx:v4.1.0 运行docker容器 docker run -tid --name emqx -p 1883:1883 -p 8083:8083 -p 8081:8081 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:v4.1.0 放行端口 1、如果要是自己的虚拟机&#xff0c;并且关闭了防火墙&a…

docker搭建redis集群(三主三从)

本篇文章不包含理论解释&#xff0c;直接开始集群&#xff08;三主三从&#xff09;搭建 环境 centos7 docker 26.1.4 redis latest &#xff08;7.4.2&#xff09; 服务器搭建以及环境配置 请查看本系列前几篇博客 默认已搭建好三个虚拟机并安装配置好docker 相关博客&#xf…