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

RCE--解法

目录

一、利用php伪协议

1.代码分析

2.过程

3.结果

​编辑

4.防御手段 

二、RCE(php中点的构造)

1.代码分析

2.过程


一、利用php伪协议

<?php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=|\/|[0-9]/i", $c)){
        eval($c);
    }
}else{
    highlight_file(__FILE__);
} 

1.代码分析

代码对一些特殊字符进行了过滤,例如flag、systemctl、标点符号、还有数字等等,一旦检测出这些特殊字符就会跳出代码不能执行 

2.过程

因为对括号进行了过滤,所以只能使用一些不带括号执行的函数,例如include,因为eval要带括号进行执行函数,括号又被过滤,所以可以使用断标签?>来结束eval。

3.结果

使用了base64对flag文本内容加密,此时需要解密。

4.防御手段 

在php.ini中禁用allow_url_include或者配置白名单。

二、RCE(php中点的构造)

1.代码分析

<?php
highlight_file(__FILE__);
if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])) {    
    eval($_GET['code']);
}
?>

代码中过滤了数字,字母和下划线,\w匹配字母、数字和下划线,?R是递归匹配,后面的?是匹配0次到多次,所以该正则就是匹配无参函数。

2.过程

构造无参函数进行命令执行或者文件,print_r(scandir('.'));可以用来查看当前目录所有文件名,共有两种构造点的方法,首先使用localeconv函数返回一包含本地数字及货币格式信息的数组,点就出现在第一个数组当中,可以使用current函数,默认去到数组中第一个单元值,所以可以取到点,如果current函数被禁止,也可以使用pos代替该函数 。

  成功执行命令。

http://www.dtcms.com/a/99330.html

相关文章:

  • 基于SpringBoot的“医疗设备管理系统”的设计与实现(源码+数据库+文档+PPT)
  • MySQL源码学习系列(一)-- 环境准备及常用命令
  • 【LeetCode】—169.多数元素
  • Java基础-21-基本语法-封装
  • 聚合根的特性
  • CI/CD-Jenkins安装与应用
  • 【网络编程】搭建一个简单的UDP通信服务器和客户端
  • c#winform,倒鸭子字幕效果,typemonkey字幕效果,抖音瀑布流字幕效果
  • uniapp中的流式输出
  • 蓝桥杯 14 天 十五届蓝桥杯 数字诗意
  • 雨云云应用测评!内测持续进行中!
  • 深度学习中常见的专业术语汇总
  • SQL Server 可用性组自动种子设定失败问题
  • .NET开发基础知识1-10
  • 无人机宽带自组网机载电台技术详解,50KM超远图数传输系统实现详解
  • Python控制结构详解
  • 群体智能优化算法-流向算法(Flow Direction Algorithm, FDA,含Matlab源代码)
  • FALL靶机渗透实战:从信息收集到特权升级的完整链分析
  • postgresql 重置对应表序列最大值
  • 药用植物次生代谢的多层调控-文献精读123
  • 如何利用<ruby>、<rt>、<rp>标签实现中文注音或字符注释?
  • 车载以太网网络测试 -25【SOME/IP-报文格式-1】
  • AI助力高效办公:如何利用AI制作PPT提升工作效率
  • RAG模型
  • 医疗CMS高效管理:简化更新维护流程
  • Open HarmonyOS 5.0 分布式软总线子系统 (DSoftBus) 详细设计与运行分析报告
  • 自动化测试知识详解
  • RuoYi基础学习
  • 拦截器和过滤器详解
  • 前端D3.js面试题及参考答案