php危险函数及rce漏洞

news2024/11/14 22:27:13

php代码执行语句

eval()

eval()语句

eval() 会将符合PHP 语法规范字符串当作php 代码执行。

<meta charset="UTF-8">
<pre>
    <?php
        $dd=$_REQUEST['dd'];
        eval($dd);
    ?>

image-20231025162854116

image-20231025162904772

可以执行php代码

也可以套一层system执行系统操作指令

image-20231025163012820

assert()函数

assert() 会将字符串当做PHP 代码来执行。

说明

  • assert() 只能执行单条PHP 语句。
  • assert() 是一个函数,可以动态调用。
  • 高版本PHP 中,assert() 被弃用。
<pre>
    <?php
        $dd=$_REQUEST['dd'];
        assert($dd);
    ?>

image-20231025163619147

preg_replace函数

preg_replace() 函数的作用是对字符串进行正则匹配后替换。

$dd=preg_replace("/A/i","j","aJEST");
$dd=preg_replace("/\[.*\]/i","j","[phpinfo()]jboom");
$dd=preg_replace("/\[(.*)\]/i","\\1","[phpinfo()]");

image-20231025175024311

image-20231025175218324

回调函数

call_user_func

<?php
    $func = 'assert';
    $arg = "phpinfo();";

    call_user_func($func, $arg);
?>

image-20231025203432693

array_map

<?php
    $func=$_REQUEST["func"];
    $arr=$_REQUEST["arr"];

    array_map($func,$arr);
?>

image-20231025205231308

动态函数

由于PHP 的特性原因,PHP 的函数支持直接由拼接的方式调用,这直接导致了PHP 在安全上的控制有加大了难度。不少知名程序中也用到了动态函数的写法,这种写法跟使用call_user_func() 的初衷一样,用来更加方便地调用函数,但是一旦过滤不严格就会造成代码执行漏洞。

<?php
    $func=$_REQUEST["func"];
    $arr=$_REQUEST["arr"];

    $func($arr);
?>

image-20231025205056751

os命令执行函数

system函数

system() 能够将字符串作为操作系统(Operator Sytstemc,OS)命令执行。在类似systemc() 函数调用系统命令时,PHP 会自动区分平台。

<pre>
    <?php
        $dd=$_REQUEST['dd'];
        system($dd);
    ?>

image-20231025164312321

image-20231025164539169

exec函数

函数特点

  • 需要输出命令执行结果。
  • 只输出命令执行结果的最后一行,约等于没有回显。
<pre>
<?php
    $dd=$_REQUEST['dd'];
    echo exec($dd);
?>

image-20231025164740146

shell_exec函数

  • 需要输出命令执行结果
<pre>
<?php
    $dd=$_REQUEST['dd'];
    echo shell_exec($dd);
?>

image-20231025164947391

passthru函数

  • 自带输出功能
<pre>
<?php
    $dd=$_REQUEST['dd'];
    passthru($dd);
?>

image-20231025165106983

popen函数

说明

  • 函数返回值为文件指针,可以简单理解为文件名。
<pre>
<?php
    $dd=$_REQUEST['dd'];
    $result=popen($dd,'r');
    echo fread($result,1024);
?>

image-20231025165650275

只返回第一行内容

image-20231025170050481

反引号

反引号` 内的字符串,会被解析成OS 命令

<pre>
<?php
    $dd=$_REQUEST['dd'];
    
    echo `$dd`;
?>

image-20231025170452417

RCE漏洞

漏洞描述

​ 所谓RCE漏洞,即Remote Code/Command Execution,远程代码执行和远程命令执行漏洞。
在很多Web应用中,开发人员会使用一些函数,这些函数以一些字符串作为输入,功能是将输入的字符串当作代码或者命令来进行执行。当用户可以控制这些函数的输入时,就产生了RCE漏洞。
​ RCE漏洞是非常严重的安全漏洞,一旦出现,就意味着攻击者可以获取服务器的命令执行权限,从而对服务器安全造成极大的影响。

漏洞场景

  1. 执行系统命令:攻击者可以利用RCE漏洞执行系统命令,比如创建、修改或删除文件、目录,执行系统脚本等。这使得攻击者能够在目标服务器上执行任意操作。

  2. 控制服务器:攻击者可以利用RCE漏洞获取对服务器的控制权,包括远程登录、修改系统配置、安装后门等。这使得攻击者可以完全控制服务器,进行各种恶意活动。

  3. 数据窃取:攻击者可以利用RCE漏洞窃取服务器上的敏感信息,比如数据库凭据、用户密码、个人数据等。这些信息可以用于进一步的攻击或者非法获利。

  4. 进一步攻击:攻击者可以利用RCE漏洞在目标服务器上执行其他攻击,比如横向移动攻击,通过在受感染的服务器上执行代码,进一步攻击其他服务器或网络中的系统。

  5. 拒绝服务(Denial of Service,DoS)攻击:攻击者可以利用RCE漏洞执行恶意代码来消耗目标服务器的资源,导致服务器崩溃或无法正常工作,从而使服务不可用。

    ​ RCE漏洞的使用场景非常广泛,攻击者可以利用这种漏洞来执行任意操作,控制服务器,窃取敏感信息或者进一步攻击其他系统。

漏洞原理

  1. 用户输入:攻击者通常会找到目标系统上的一个输入点,比如Web应用程序的表单、URL参数、HTTP请求头等。这些输入点允许用户向系统提交数据。
  2. 输入处理:目标系统接收到用户输入后,会对其进行处理。这个处理过程可能包括解析、验证、过滤、拼接等操作。
  3. 注入恶意代码:攻击者利用输入处理过程中的漏洞,注入恶意代码。常见的注入点包括未正确过滤的特殊字符、未正确处理用户输入的引号或其他特殊字符等。
  4. 执行恶意代码:一旦恶意代码成功注入,目标系统在执行时会将其视为合法代码。这使得攻击者能够在目标系统上执行任意操作,比如执行系统命令、访问文件系统、修改配置文件等。
  5. 控制目标系统:通过执行恶意代码,攻击者可以获得对目标系统的控制权。这使得攻击者可以进行进一步的攻击,比如安装后门、窃取敏感信息、横向移动等。

RCE漏洞的原理主要是利用目标系统对用户输入的处理不当,导致攻击者能够注入恶意代码并执行。

漏洞危害

  1. 执行系统命令:RCE漏洞使得攻击者能够在目标系统上执行系统命令,比如创建、修改或删除文件、目录,执行系统脚本等。这使得攻击者可以在目标服务器上执行任意操作,包括控制服务器、窃取敏感信息等。
  2. 控制服务器:RCE漏洞使得攻击者可以获取对服务器的控制权,包括远程登录、修改系统配置、安装后门等。这使得攻击者可以完全控制服务器,进行各种恶意活动,比如植入恶意软件、发起其他攻击等。
  3. 数据窃取:攻击者可以利用RCE漏洞窃取服务器上的敏感信息,比如数据库凭据、用户密码、个人数据等。这些信息可以用于进一步的攻击或者非法获利,比如进行身份盗窃、敲诈勒索等。
  4. 进一步攻击:利用RCE漏洞,攻击者可以在目标服务器上执行其他攻击,比如横向移动攻击。攻击者可以通过在受感染的服务器上执行代码,进一步攻击其他服务器或网络中的系统,从而扩大攻击范围。
  5. 拒绝服务(Denial of Service,DoS)攻击:攻击者可以利用RCE漏洞执行恶意代码来消耗目标服务器的资源,导致服务器崩溃或无法正常工作,从而使服务不可用。这可能导致业务中断、数据丢失等严重后果。

漏洞评级

高危

漏洞验证

网页包含代码假如包含以下代码

<?php
   eval($_REQUEST['cmd']);
?>

即可通过url执行命令

image-20231025211304602

同时该代码存在,也可被蚁剑连接使用

image-20231025211414224

image-20231025211438708

如下代码也行

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

image-20231025212727953

image-20231025212736272

漏洞利用

  • 可以蚁剑连接执行代码
  • 也可以通过传参执行代码

漏洞防御

  1. 输入验证和过滤:对于用户输入的数据,必须进行严格的验证和过滤,以防止恶意代码的注入。可以使用白名单过滤或正则表达式验证来限制输入的内容,只接受预期的数据。
  2. 输入转义:对于用户输入的数据,必须进行适当的转义,以确保任何特殊字符都被正确处理。这可以通过使用安全的编码函数或框架提供的转义函数来实现。
  3. 最小权限原则:在配置服务器和应用程序时,应使用最小权限原则。即,将服务器和应用程序配置为以最低权限运行,以限制攻击者可能获得的权限。
  4. 安全的代码执行环境:在执行用户输入的代码之前,应确保在一个安全的环境中执行。这可以通过使用沙箱技术、限制执行环境的资源访问权限、禁用危险的系统函数等方式来实现。
  5. 安全的开发实践:在开发过程中,应该遵循安全的开发实践,包括对代码进行安全审查和测试,使用安全的编程语言特性和函数,及时修复已知的漏洞等。
  6. 更新和修补漏洞:及时更新和修补应用程序、操作系统和相关软件的漏洞是至关重要的。漏洞的修复补丁通常会包括对RCE漏洞的修复。

漏洞案例

一个经典的RCE漏洞案例是PHPMailer漏洞(CVE-2016-10033和CVE-2016-10045)。

PHPMailer是一个流行的PHP库,用于发送电子邮件。在2016年之前的版本中,PHPMailer存在一个RCE漏洞,允许攻击者通过构造恶意的电子邮件来执行任意的系统命令。

漏洞的原因是在PHPMailer中,当使用邮件服务器的sendmail功能发送邮件时,可以通过用户提供的邮件主题字段来构造系统命令。然而,这个主题字段没有被适当地验证和过滤,导致攻击者可以注入恶意的命令。

攻击者可以构造一个恶意的邮件主题,其中包含一个系统命令,比如"; ls -la;。当PHPMailer尝试发送这个恶意邮件时,它会将恶意命令传递给系统命令执行函数,导致服务器执行了ls -la命令并返回结果。

这个漏洞的危害非常严重,攻击者可以通过构造恶意的命令来访问文件系统、执行其他系统命令、修改配置文件等。该漏洞在被发现后得到了修复,并提醒开发人员在使用PHPMailer时升级到修复版本以避免RCE漏洞的利用。
r中,当使用邮件服务器的sendmail功能发送邮件时,可以通过用户提供的邮件主题字段来构造系统命令。然而,这个主题字段没有被适当地验证和过滤,导致攻击者可以注入恶意的命令。

攻击者可以构造一个恶意的邮件主题,其中包含一个系统命令,比如"; ls -la;。当PHPMailer尝试发送这个恶意邮件时,它会将恶意命令传递给系统命令执行函数,导致服务器执行了ls -la命令并返回结果。

这个漏洞的危害非常严重,攻击者可以通过构造恶意的命令来访问文件系统、执行其他系统命令、修改配置文件等。该漏洞在被发现后得到了修复,并提醒开发人员在使用PHPMailer时升级到修复版本以避免RCE漏洞的利用。

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

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

相关文章

基于利用协议模拟工具解决工控CTF题

概述 对于参赛者而言&#xff0c;工控CTF题目往往感觉很头疼&#xff0c;不知道如何下手&#xff0c;闲来之时&#xff0c;从网上看到一道协议分析的题目&#xff0c;想着用模拟工具试下&#xff0c;发现有意向不到的效果&#xff0c;本文中的小工具为开源工具&#xff0c;读者…

RCE 远程代码执行漏洞分析

RCE 漏洞 1.漏洞描述 Remote Command/Code Execute 远程命令执行/远程代码执行漏洞 这种漏洞通常出现在应用程序或操作系统中&#xff0c;攻击者可以通过利用漏洞注入恶意代码&#xff0c;并在受攻击的系统上执行任意命令。 2.漏洞场景 PHP 代码执行PHP 代码注入OS 命令执…

Android 系统架构

首语 由于工作内容的转变&#xff0c;使得我向Android系统方向转变&#xff0c;对于一个Android系统工程师&#xff0c;了解Android整个系统架构是必然的。本篇是Android系统学习的开篇&#xff0c;Android系统庞大且复杂&#xff0c;但是能对Android的认识更深&#xff0c;更…

测开 ( 项目篇 )

正文 - 项目实践 - 文件压缩 1.项目启动&#xff0c;介入了解需求 项目背景&#xff1a;磁盘空间不够&#xff0c;需要一个压缩、解压缩软件目标&#xff1a;完成所有文件类型的压缩、解压缩。时间&#xff1a;2018-6-1到2018-6-7项目成员&#xff1a;项目经理&#xff1a;唐僧…

如何做一个无符号数识别程序

1.状态分析 我们可以把无符号数分为&#xff1a;整数&#xff0c;带小数&#xff0c;带指数部分三种形式。以此构建一个DFA。首先需识别输入是整数还是小数点&#xff0c;若是整数部分输入然后还要再循环识别一次是否有小数点&#xff0c;最后识别是否有指数部分&#xff0c;指…

Linux程序地址空间

Tips: 之后的博客以记录笔记为主了 文章目录 0.前言历史遗留进程独立性 2. 地址空间是什么2.1 地址空间2.2 地址空间的区域划分 3. 页表4. 为什么要有进程地址空间 0.前言 历史遗留 #include<stdio.h> #include<stdlib.h>int g_val1; int g_val2 10;int main() …

如何提高app的广告变现能力?

对于中小型app&#xff0c;开发者在开发app之前&#xff0c;更应该考虑清楚app商业化的方向。 广告总收入A广告位收入B广告位收入C广告位收入...n广告位收入 单个广告位收入广告请求*广告填充率*广告展示率*eCPM/1000 1、找准用户质量 广告投放核心的指标是roi&#xff0c;…

【用一张动图解释 8 种常用网络协议】

网络协议就是计算机之间沟通的语言&#xff0c;为了有效地交流&#xff0c;计算机之间需要一种共同的规则或协议&#xff0c;就像我们和老外沟通之前&#xff0c;要先商量好用哪种语言&#xff0c;要么大家都说中文&#xff0c;要么大家都说英语&#xff0c;这才能有效地沟通。…

【CSS】伪类和伪元素

伪类 :hover&#xff1a;悬停active&#xff1a;激活focus&#xff1a;获取焦点:link&#xff1a;未访问&#xff08;链接&#xff09;:checked&#xff1a;勾选&#xff08;表单&#xff09;first-child&#xff1a;第一个子元素nth-child()&#xff1a;指定索引的子元素&…

40.查找练习题(王道2023数据结构第7章)

试题1&#xff08;王道7.2.4节综合练习5&#xff09;&#xff1a; 写出折半查找的递归算法。 #include<stdio.h> #include<stdlib.h> #include<string.h>#define MAXSIZE 10 #define ElemType int #define Status inttypedef struct{int data[MAXSIZE]; /…

单例模式详解【2023年最新】

一、单例模式概念 单例模式是一种创建型设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问该实例。它的目的是限制一个类只能创建一个对象&#xff0c;以确保在整个应用程序中只有一个共享的实例。 单例模式通常用于以下情况&#xff1a;…

服务容错框架Sentinel入门

概述 Sentinel&#xff0c;阿里开源的一套用于服务容错的综合性解决方案。它以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。分布式系统的流量防卫兵。 特征: 丰富的应用场景&#xff1a;秒杀&#xff08;即突发流量控制在系统…

物联网AI MicroPython传感器学习 之 GP2Y10粉尘传感器

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; 一、产品简介 GP2Y10粉尘传感器用于检测非常细的空气漂浮颗粒物&#xff0c;主要用于空气净化系统中&#xff0c;传感器外观引脚如下图所示。 引脚定义 GND&#xff1a;地VCC&#xff1a;5VLED&#xff1a…

Dos和DDos攻击

Dos Denialof Service拒绝服务,利用程序漏洞或一对一资源耗尽的&#xff0c;攻击有计算机网络宽带攻击和连通性攻击 分类&#xff1a; D网络&#xff1a;耗尽目标网络带宽资源 如&#xff1a;ICMP Flood, UDP Flood D协议&#xff1a;攻击协议漏洞发起的拒绝服务攻击 如…

Leetcode—17.电话号码的字母组合【中等】

2023每日刷题&#xff08;九&#xff09; Leetcode—17.电话号码的字母组合 回溯法解题 实现代码 class Solution { public:vector<string> table {"","","abc","def","ghi","jkl","mno",&quo…

leetCode 283 移动零

//right指向待处理序列的首部 //left指向处理后序列的尾部class Solution {public void swap(int[] nums, int left, int right){int tmp nums[left];nums[left] nums[right];nums[right] tmp;}public void moveZeroes(int[] nums) {int n nums.length;int left 0;int rig…

Oracle(6) Control File

一、oracle控制文件介绍 1、ORACLE控制文件概念 Oracle控制文件是Oracle数据库的一个重要元素&#xff0c;用于记录数据库的结构信息和元数据。控制文件包含了数据库的物理结构信息、数据字典信息、表空间和数据文件的信息等。在Oracle数据库启动时&#xff0c;控制文件会被读…

【c#】2022创建WEB API接口教程demo

c#创建WEB API接口 创建WEB API接口结果图涉及到的技术设计流程创建WEB API接口 结果图 涉及到的技术 设计流程 1、创建WEB api项目,使用控制器和penapi勾选上,第一次创建项目时没有勾选,因为感觉没啥用。后面跑项目的时候,要把接口用swagger去直接生成的时候,还是需要…

新的抓包神器,完全免费,支持多平台!

目前IOS端的抓包软件&#xff1a; HTTP Catcher&#xff08;网球&#xff09;&#xff0c;免费下载&#xff0c;完整版需要内购。 Storm Sniffer&#xff08;螃蟹&#xff09;&#xff0c;免费下载&#xff0c;完整版需要内购。 Thor&#xff08;锤子&#xff09;&#xff0…

安全设备

一.防火墙 5层应用层 防火墙 4层 udp tcp 协议 华为 厂商 华为 h3 1.区域划分 Dmz 停火区 Untrust 不安全区域 Trust 安全区域 防火墙 默认禁止所有 二.Waf Web 应用防火墙 放到web前面 产品 雷池 绿盟 软件 安…