• 【Try to Hack】php命令执行和代码执行


    📒博客主页:开心星人的博客主页
    🔥系列专栏:Try to Hack
    🎉欢迎关注🔎点赞👍收藏⭐️留言📝
    📆首发时间:🌴2022年8月29日🌴
    🍭作者水平很有限,如果发现错误,还望告知,感谢!

    命令执行函数

    函数/语法描述例子
    system执行命令并输出结果system('id');
    exec执行命令 不输出结果只可获取最后一行结果exec('id',$a); print_r($a);
    passthru同 systempassthru(‘id’);
    shell_exec ` (反引号)执行命令并返回结果$a=shell_exec('id');print_r($a);
    popen执行命令并建立管道 返回一个指针 使用fread等函数操作指针进行读写$a=popen("id", "r"); echo fread($a, 2096);
    proc_open同 popen (进程控制功能更强大)
    pcntl_exec执行命令 只返回是否发生错误pcntl_exec('id');

    命令执行防护

    escapeshellarg 传入参数添加单引号并转义原有单引号 用于防止命令注入
    例 传入 'id# 处理后 '\'id#' 处理后的字符串可安全的添加到命令执行参数

    escapeshellcmd 转义字符串中的特殊符号 用于防止命令注入
    反斜线(\)会在以下字符之前插入: &#;`|*?~<>^()[]{}$, \x0A 和 \xFF。 ’ 和 " 仅在不配对儿的时候被转义

    代码执行函数

    函数/语法描述例子
    eval将传入的参数内容作为PHP代码执行 eval 不是函数 是一种语法结构 不能当做函数动态调用eval('phpinfo();');
    assert将传入的参数内容作为PHP代码执行 版本在PHP7以下是函数 PHP7及以上为语法结构assert('phpinfo();');
    preg_replace当preg_replace使用/e修饰符且原字符串可控时时 有可能执行php代码echo preg_replace("/e","{${PHPINFO()}}","123");
    call_user_func把第一个参数作为回调函数调用 需要两个参数都完全可控才可利用 只能传入一个参数调用call_user_func('assert', 'phpinfo();');
    call_user_func_array同call_user_func 可传入一个数组带入多个参数调用函数call_user_func_array ('file_put_contents', ['1.txt','6666']);
    create_function根据传递的参数创建匿名函数,并为其返回唯一名称 利用需要第二个参数可控 且创建的函数被执行$f = create_function('','system($_GET[123]);'); $f();
    
    //?cmd=phpinfo();
    @eval($_GET['cmd']);
    ?>
    
    • 1
    • 2
    • 3
    • 4
    
    //?cmd=${phpinfo()}
    $str=$_GET['cmd'];
    eval ('$str="'.$str.'";')
    ?>
    php代码可以这样在双引号中被执行(bash中双引号和单引号解析变量是有区别的。在解析单引号的时候 , 被单引号包裹的内容中如果有变量 , 这个变量名是不会被解析成值的,但是双引号不同 , bash 会将变量名解析成变量的值再使用。)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    
    //?cmd=%27)phpinfo();//
    $str=$_GET['cmd'];
    eval ("strtolower('$str');")
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    
    preg_replace("/(.*?)<\/php>/e",'\1',"phpinfo()");
    //等价于
    preg_replace("/(.*?)<\/php>/e",'${1}',"phpinfo()");
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    https://github.com/Bypass007/Learn-security-from-0
    https://www.yuque.com/burpheart/phpaudit/php-chang-jian-lou-dong_dai-ma-zhu-ru

  • 相关阅读:
    nginx基础篇
    声音克隆,精致细腻,人工智能AI打造国师“一镜到底”鬼畜视频,基于PaddleSpeech(Python3.10)
    一文读懂VR数字展览会,从沉浸式体验到市场竞争力的全方位提升
    记一次 .NET 某电厂Web系统 内存泄漏分析
    java计算机毕业设计沙县小吃点餐系统源程序+mysql+系统+lw文档+远程调试
    KeeWiDB的高性能修炼之路:架构篇
    Dynamics 365 CRM 性能优化
    GoogLeNet 网络简介
    springboot+jsp商城会员积分管理系统
    Request body too large. The max request body size is 30000000 bytes.
  • 原文地址:https://blog.csdn.net/qq_55675216/article/details/126589058