命令执行漏洞学习总结

2018-07-31  本文已影响0人  SunJ3t

1. 远程命令执行漏洞

1. 利用系统函数实现远程命令执行

在PHP下,允许命令执行的函数有:

如果页面中存在这些函数并且对于用户的输入没有做严格的过滤,那么就可能造成远程命令执行漏洞

  1. eval()函数
<?php
$a = $_GET['a'];
eval($a);
?>
http://127.0.0.1/oscommand/1.php?a=phpinfo();
  1. assert()函数

assert() 会检查指定的 assertion 并在结果为 FALSE 时采取适当的行动

<?php
$a = $_GET['a'];
assert($a);
?>
http://127.0.0.1/oscommand/1.php?a=phpinfo();
http://127.0.0.1/oscommand/1.php?a=phpinfo()

ps: eval()和assert()区别
eval()函数正确执行需要满足php的代码规范,而assert()函数则不存在这个问题,对于php的代码规范要求不高

  1. preg_replace()函数
<?php
$a = $_GET['a'];
echo preg_replace("/test/e", $a, "just test!")
?>
http://127.0.0.1/oscommand/1.php?a=phpinfo()

ps: 在php5.4及以下版本中,preg_replace()可正常执行代码,而在php5.5及后续版本中会提醒"/e"修饰符已被弃用,要求用preg_replace_callback()函数来代替。

  1. call_user_func()函数
<?php
call_user_func($_GET['a'],$_GET['b']);
?>
http://127.0.0.1/oscommand/1.php?a=assert&b=phpinfo()
  1. 其他函数

2. 系统命令执行漏洞

  1. 系统命令执行的函数
  1. 环境分析
<?php
if (isset($_POST['submit'])){
    $target = $_REQUEST['ip'];
    
    if(isset(php_uname('s'), 'Windows NT')) {
        $cmd = shell_exec('ping ' . $taeget);
        echo '<pre>'.$cmd.'</pre>';
    } else {
            $cmd = shell_exec('ping -c 3 ' . $target);
            echo '<pre>'.$cmd.'</pre>'
    }
}

页面通过request获取传入的ip参数,并获取当前系统类型之后拼接相应命令"ping + target IP"并执行,在此过程中IP参数可控,所以在IP可拼接命令。

127.0.0.1&&whoami
127.0.0.1;whoami
127.0.0.1||whoami
  1. 防范措施
$substitutions = array(
    '&&' => '',
    ';' => '',
    '||' => '',
);
$target = str_replace(array_keys($substitutions), $substitution, $target);
上一篇 下一篇

猜你喜欢

热点阅读