远程函数执行简单的

PHP命令注入攻击漏洞是PHP应用程序中常见的脚本漏洞之一,国内著名的Web开发框架thinkPHP;Web应用程序Discuz!、DedeCMS、PHPcms、帝国cms等都曾经存在过该类型高危漏洞。

0x2.1 实验1:不安全的功能实现方式

这里这个和DVWA的远程命令执行差不多 我们看看源码

<?php
    // IP(域名)
    $host = isset($_GET['url']) ? $_GET['url'] : '';
    // 判断$host是否为空
    if(empty($host)){
        $result = '';
        $target = '';
    } else {
        // 获取$host值
        $target = $host;

        // 判断当前系统类型,执行对应函数
        if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
            // Windows系统
            $cmd = shell_exec( 'ping  ' . $target ); // 未过滤函数
            // $cmd = shell_exec('ping '. escapeshellcmd($target)); // escapshellcmd过滤
        } else {
            // *nix系统
            $cmd = shell_exec( 'ping  -c 4 ' . $target ); // 未过滤函数
            // $cmd = shell_exec('ping  -c 4 '. escapeshellcmd($target)); // escapshellcmd过滤
        }

        // 格式化输出结果,将$cmd字符串中的“\n”替换为“<br>”
        $result = str_replace("\n","<br>",$cmd);
    }
?>

可以看见 ping功能直接使用了shell_exec来执行 且未对输入参数进行任何的过滤,那么远程代码执行就这样产生了

我们执行看看  (这里要注意 cmd的分隔符 那些是第一个执行成功第二个执行 ,第一个执行失败第二个也执行)

|ls

证实,只要是Linux的shell命令,都可以通过该payload的构造出想要去执行的shell命令,等同于给你一台可以操作的Linux服务器,你想怎么操作就怎么操作!这就是远程函数执行命令的高危漏洞

0x2.2 漏洞产生与攻击原理分析

漏洞的产生:
1、需求开发时候使用了shell_exec()危险函数来快速实现功能;
2、即使使用了危险函数也没有做过滤处理;
3、没有绕开危险函数来实现业务需求相同的功能。

攻击的原理:

shell_exec()

通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。也就是说, PHP先运行一个shell环境, 然后让shell进程运行你的命令, 并且把所有输出已字符串形式返回, 如果程序执行有错误或者程序没有任何输出, 则返回null。

    //函数用法
    shell_exec ( string $cmd ) : string

命令执行顺序:
payload 顺序执行

  1. baidu.com|ls|di

|命令链接符的执行顺序命令1、命令2、命令3;所以最终显示最后执行的命令3dir

payload 批量执行

  1. baidu.com;ls;di

;命令链接符是命令1、命令2、命令3依次一起执行,所以显示了全部命令的执行结果。

0x2.3 总结

为什么构造payload时候用到|;字符呢?
|;是命令的链接符,同时&可以用做命令链接符,但&与别的链接符不同的是,它不能直接放在url上访问执行,只能通过提交get/post表单;如果需要直接放在url上访问,那么需要有url编码%26,不然会被当成参数分隔符;

另外&&ll也可以使用,但他们运行原理又不是很相近。

所有的命令分割符如何构造payload呢?
在实验过程中我们我们得知在url链接上可以使用|;进行构造payload;其实他们也可以和&一样,用url编码进行访问。另外当我们在get表单提交数据的时候,提交的参数会被转成url编码。
| url编码 %7C
; url编码 %3B
& url编码 %26
空格url编码 %20
符号与url编码在构建payload时候很重要,建议大家在实际实验过程中去理解。

posted @ 2019-07-16 11:33  yourse1f  阅读(729)  评论(0编辑  收藏  举报