Проблема Как обнаружить шелл на сервере

Z

zehrx

Сайт на работе взломали. Система - самопис, постоянно поддерживается и модифицируется. Мест для загрузки файлов нет. Сейчас даже file_get_contents нигде не используется, только curl для сбора инфы с внешки.
Fopen тоже не вижу. На что смотреть, как можно найти эту гадость. То что это шелл не точно, эту инфу дают сами взломщики. Просто хотелось бы полностью отработать эту версию.
 

Runinterface

Green Team
24.10.2016
51
41
BIT
0
А что именно взломали код поменяли?
И в чем суть взлома....точнее пожалуйста.
 
Z

zehrx

пока продемонстрировали только изменения в базе. Можете дать общие рекомендации?
 
A

a113

Да уж, соболезную взлому.
В двух словах (я буду кэпом): смотреть открытые порты, через которые могли подключиться. В принципе, если места под файлы реально нет, то как говорил Runinterface это SQL-инъекции, так как имеются изменения в БД.
Удачи в поисках и решении проблемы!
 
  • Нравится
Реакции: zehrx

ghostphisher

местный
07.12.2016
2 602
3 413
BIT
0
. То что это шелл не точно, эту инфу дают сами взломщики. Просто хотелось бы полностью отработать эту версию.

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

PS sqlmap - пройтись им вместе с той утилитой, ссылку на которую давал ранее. Для автоматизации процесса читаем эту тему https://codeby.net/threads/acs-auto-command-sqlmap-v1-0.59538/
 
  • Нравится
Реакции: Vertigo и a113
H

hdmoor

может пригодиться
msf auxiliary(smb_ms17_010) > run
 
F

foxovsky

если речь про веб-сервер, то советую пролистать логи — если у вас загружен шелл, то явно к нему были запросы
если есть дампы движка, то сравните актуальные файлы на сервере с последней сохраненной копией
 
Последнее редактирование модератором:
  • Нравится
Реакции: Vertigo и zehrx

Vertigo

Lex mea est Vulgate Linux
Gold Team
15.02.2017
1 318
3 999
BIT
3
Просто хотелось бы полностью отработать эту версию.
Порты открытые просмотрите , логи обязательно.
Возможно отсюда информация будет полезна.



 
Z

zehrx

Многие говорят про логи, а на что конкретно обращать внимание. Если логи большие как можно вычленить нужное?
 

Ondrik8

prodigy
Green Team
08.11.2016
1 129
3 188
BIT
0
Многие говорят про логи, а на что конкретно обращать внимание. Если логи большие как можно вычленить нужное?
в логах Вы увидите с какого адреса и когда подключились, если это был не грамотный взломщик! ну а так что бы узнать возможную дырку про сканируйте Акунетиксом или Vega, Nikto и т.д.
 
  • Нравится
Реакции: Vertigo

Vertigo

Lex mea est Vulgate Linux
Gold Team
15.02.2017
1 318
3 999
BIT
3
Многие говорят про логи, а на что конкретно обращать внимание. Если логи большие как можно вычленить нужное?
1.) Ищем файлы с завышенными правами доступа,нестандартные для Linux,
скрипты,пытающиеся запуститься от суперпользователя.
sudo find / -perm -u+s -ищем сет юзер айди бит.
Здесь смотрим,чтобы не оказалось помимо знакомых уже сторонних программ.
sudo find / -user root -perm -u+s -Тревогу надо бить ,если на выведенных файлах
также будет стоять u+s
sudo find / -user root -perm + 4000 -вывод в цифровом эквиваленте
+4000 -это и есть юзер бит.

sudo find / -perm -g+s -ищем для групп.
sudo ls -l/usr/bin/ файл -так смотрим права у конкретного файла
Если в консоли он подсвечивается жёлтым цветом-значит,всё нормально.
sudo find / -group root -perm -g+s - ищем группу с завышенными правами.
sudo find / -perm/u+s,g+s - так ищем и группы, и отдельные файлы.

2.) Проверяем теневые пароли
sudo cat /etc/passwd - выводит список пользователей и их пароли
Где указан х -это теневой пароль


sudo /etc/nologin - хорошо,если нет такого файла,если есть-беда
Сами такой создаём только в крайнем случае.Смысл такой:в систему никто,
кроме суперпольз-ля войти не может.Люди работают с сервером,заходит суперюзер-всех выкидывает,
сами потом тоже можем не зайти,будет постоянно запрашиваться пароль.
3.) sudo nmap local host -проверяем запущенные службы.

4.) cd /etc/init.d/,далее ls - проверяем скрипты.
sudo systemtcl disable назв_службы - тормозим скрипт если надо.
Причём это считается "человеческим отключением" вместо команд stop.
5.) sudo netstat -tuna - выведем все открытые порты tcp udp без служб


6.) nmap , проверяем сами себя,какие порты торчат наружу.
7.) sudo lsof -list open files - выводим открытые файлы.
8.) sudo lsof -i - смотрим все открытые соединения,здесь же
увидим какой пользователь использует протокол,описание файла,его права.
Полезно для поиска файлов,занятых конкретным процессом.
Например:sudo lsof -c назв_проги - увидим всё,что она использует.
Какие файлы открыты конкретным пользователем.

9.) sudo lsof -i : номер_порта - увидим,какие демоны и интерфейсы используют этот порт.
10.) Часто требуется и обратный ход в отличии от п.9 -поиск процесса ,который занимает
файл или сокет.Для этого используется утилита fuser,она покажет польз-ля,pid,доступ.
sudo fuser номер_порта /tcp ,например. Покажет процесс с id
ps номер_id -выскочит служба,которая использует этот порт.

11.) Смотрим кто входил/пытался войти в систему.
Windows- смотрим в диспетчере задач
Linux - применяем утилиты w,who,last,lastb,users.
w -когда была загружена,сколько открыто интерфейсов,кто в системе.Здесь же
смотрим jcpu -это время которое использовано всеми процессами.
pcpu - время , использ.конкретным процессом.
w имя_пользователя - так можно смотреть по конкретному польз-лю.
who -b - когда была последняя загрузка системы.
who -qH -все логины с паролями что сейчас в системе.
who -uH -кто вошёл,время,порты.
who -aH - отвечает на вопрос кто,где,когда.
users - проверяем всех пользователей в системе.
last - последние логины , кто и когда входил.
last reboot - когда система перезагружалась
lastb - здесь неудачные попытки входа в систему,пытался подобрать пароль.

12.) cd /var/log ,далее ls - здесь все файлы btmp
13.) cd /var/run - ls - здесь все файлы utmp.

Можно и так,если нет времени копаться в /var/log/syslog
Напишите,если не получится что-либо выяснить , то будем ещё думать.
 

Ondrik8

prodigy
Green Team
08.11.2016
1 129
3 188
BIT
0
Может пригодится?

The Web Exploit Detector is a Node.js application (and NPM module) used to detect possible infections, malicious code and suspicious files in web hosting environments. This application is intended to be run on web servers hosting one or more websites. Running the application will generate a list of files that are potentially infected together with a description of the infection and references to online resources relating to it.

As of version 1.1.0 the application also includes utilities to generate and compare snapshots of a directory structure, allowing users to see if any files have been modified, added or removed.

The application is hosted here on GitHub so that others can benefit from it, as well as allowing others to contribute their own detection rules.
 
Z

zehrx

1.) Ищем файлы с завышенными правами доступа,нестандартные для Linux,
скрипты,пытающиеся запуститься от суперпользователя.
sudo find / -perm -u+s -ищем сет юзер айди бит.
Здесь смотрим,чтобы не оказалось помимо знакомых уже сторонних программ.
sudo find / -user root -perm -u+s -Тревогу надо бить ,если на выведенных файлах
также будет стоять u+s
sudo find / -user root -perm + 4000 -вывод в цифровом эквиваленте
+4000 -это и есть юзер бит.

sudo find / -perm -g+s -ищем для групп.
sudo ls -l/usr/bin/ файл -так смотрим права у конкретного файла
Если в консоли он подсвечивается жёлтым цветом-значит,всё нормально.
sudo find / -group root -perm -g+s - ищем группу с завышенными правами.
sudo find / -perm/u+s,g+s - так ищем и группы, и отдельные файлы.

2.) Проверяем теневые пароли
sudo cat /etc/passwd - выводит список пользователей и их пароли
Где указан х -это теневой пароль


sudo /etc/nologin - хорошо,если нет такого файла,если есть-беда
Сами такой создаём только в крайнем случае.Смысл такой:в систему никто,
кроме суперпольз-ля войти не может.Люди работают с сервером,заходит суперюзер-всех выкидывает,
сами потом тоже можем не зайти,будет постоянно запрашиваться пароль.
3.) sudo nmap local host -проверяем запущенные службы.

4.) cd /etc/init.d/,далее ls - проверяем скрипты.
sudo systemtcl disable назв_службы - тормозим скрипт если надо.
Причём это считается "человеческим отключением" вместо команд stop.
5.) sudo netstat -tuna - выведем все открытые порты tcp udp без служб


6.) nmap , проверяем сами себя,какие порты торчат наружу.
7.) sudo lsof -list open files - выводим открытые файлы.
8.) sudo lsof -i - смотрим все открытые соединения,здесь же
увидим какой пользователь использует протокол,описание файла,его права.
Полезно для поиска файлов,занятых конкретным процессом.
Например:sudo lsof -c назв_проги - увидим всё,что она использует.
Какие файлы открыты конкретным пользователем.

9.) sudo lsof -i : номер_порта - увидим,какие демоны и интерфейсы используют этот порт.
10.) Часто требуется и обратный ход в отличии от п.9 -поиск процесса ,который занимает
файл или сокет.Для этого используется утилита fuser,она покажет польз-ля,pid,доступ.
sudo fuser номер_порта /tcp ,например. Покажет процесс с id
ps номер_id -выскочит служба,которая использует этот порт.

11.) Смотрим кто входил/пытался войти в систему.
Windows- смотрим в диспетчере задач
Linux - применяем утилиты w,who,last,lastb,users.
w -когда была загружена,сколько открыто интерфейсов,кто в системе.Здесь же
смотрим jcpu -это время которое использовано всеми процессами.
pcpu - время , использ.конкретным процессом.
w имя_пользователя - так можно смотреть по конкретному польз-лю.
who -b - когда была последняя загрузка системы.
who -qH -все логины с паролями что сейчас в системе.
who -uH -кто вошёл,время,порты.
who -aH - отвечает на вопрос кто,где,когда.
users - проверяем всех пользователей в системе.
last - последние логины , кто и когда входил.
last reboot - когда система перезагружалась
lastb - здесь неудачные попытки входа в систему,пытался подобрать пароль.

12.) cd /var/log ,далее ls - здесь все файлы btmp
13.) cd /var/run - ls - здесь все файлы utmp.

Можно и так,если нет времени копаться в /var/log/syslog
Напишите,если не получится что-либо выяснить , то будем ещё думать.


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

1. Теневые пароли, на что конкретно обратить внимание, у меня все записи вида
name:x:1:1:group:/sbin/nologin
2. Скриптов, всего пара, названия адекватные. Тоже если возможно, можете дать рекомендации на что смотреть?
3. Если открытых портов много, netstat -tuna выдало просто тонны строк, что с ними делать? Припроверке nmap из вне видно всего 3 порта
4. lsof -i - вывод большой, но все под php-fpm и основным пользователем, значит все нормально?
 

Vertigo

Lex mea est Vulgate Linux
Gold Team
15.02.2017
1 318
3 999
BIT
3
1. Теневые пароли, на что конкретно обратить внимание
2. Скриптов, всего пара, названия адекватные.
3. Если открытых портов много, netstat -tuna выдало просто тонны строк, что с ними делать?
4. lsof -i - вывод большой, но все под php-fpm и основным пользователем, значит все нормально?

Абсолютно нормальные вопросы.
1. Третий параметр,после х . Цифра 0-означает только суперпользователя (root)
У остальных юзеров такого быть не должно,у них другие цифры.
2. Если всё знакомо и привычно,значит всё хорошо. Неизвестное пробиваем в интернете.
3. Всё надо смотреть. Бывает так,к примеру,что не пользуетесь ssh (порт 22) , или telnet (порт 23),а там
установленное соединение ,а не прослушивающее. В логах такое тоже отображается с ip-адресами.
4. Здесь всё в порядке.

Возможно у файлов были изменены атрибуты (иное расширение,лишний символ в имени)
а) sudo find . -name ‘*.ph*’ -сtime -7 -так можно проверить это за недельный срок.

б) sudo find . -name ‘*.ph*’ -newermt 2017-05-12 ! -newermt 2017-05-22 -ls - так можно проверить возможное изменение файлов
за заданный интервал времени.( числа ставим свои).
в) sudo find . -name ‘*.ph*’ -mtime -7 -то же ,что и в предыдущей команде , только за прошедшую неделю.
г) Очень много полезного может сделать утилита lynis .
д ) И утилиты по поиску руткитов. У нас печатали материал по ним. Есть ещё al-bolit ,
но я только слышал о такой ,ни разу не пользовался,поэтому ничего не могу о ней сказать .
 

Citizen0

Green Team
07.02.2017
203
228
BIT
0
В принципе, если места под файлы реально нет, то как говорил Runinterface это SQL-инъекции, так как имеются изменения в БД.
Не факт.
Загружаем вредоносный файл на сервер, обращаемся к нему, чтобы внести изменения в БД, удаляем файл.
Или, имея доступ к PMA, творим, что хотим.
Многие говорят про логи, а на что конкретно обращать внимание. Если логи большие как можно вычленить нужное?
Вы же сами написали, что были произведены изменения в БД. С этого и начните. Ищите в логах "UPDATE", "название_таблицы" и др.
2. Скриптов, всего пара, названия адекватные. Тоже если возможно, можете дать рекомендации на что смотреть?
Внутрь заглянуть и сравнить с исходниками. Если файлов много, то используйте какую-нибудь программу. Даже тот же total commander может справиться с этим.

Обязательно поменяйте логины/пароли.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!