• XSS.stack #1 – первый литературный журнал от юзеров форума

Как узнать соседей на шелле.

look2009

HDD-drive
Пользователь
Регистрация
30.04.2019
Сообщения
26
Реакции
2
По сути нужно узнать соседей на шелле, не руками, можо конешно использовать редактирование index.php с отстуком GET где будет $_SERVER['HTTP_HOST'], но следить как-то не очень хочется в файлах. Может есть скрипт парсинга хостов, например поиск конфига веб сервера (apache, ngnix) и выпаршивать домен и парсинг дирректорий на наличие домена. Т.е. действовать локально без вызова стороннего хоста. Может есть приязка к конфигам, может имя конфигов, или расширение и обязательного файл в папке с конфигом, т.е. программно как найти конфиги, они могут быть где угодно по факту, по дефолту то понятно. Может расширение и обязательно строка в этом файле по популяным веб серверам. Т.е. что-то обязательное на что можно орентироваться на конфиги веб серверов.
 
Последнее редактирование:
Если есть полный root-доступ, то, думаю, достаточно рекурсивно пройтись по всей файловой системе по текстовым файлам на наличие строчки server_name (для nginx)

grep -ri --include=\*.php 'eval' и подобное, если есть выполнение команд

egrep -r "shell_exec|passthru|system\(|eval\(|\sexec\(" --include "*.php"
Ну это то понятно $commands = ['apache2ctl -V', 'apachectl -V', 'httpd -V','nginx -V 2>&1'] в общем скорее всего без проходо рекурсивно всех каталогов не получится, но это долго для скрипта, отвалится по таймауту на стороне сервера. Проще править индекс и за пару дней всё собрать, боты, люди сами принесут.
 
Ну это то понятно $commands = ['apache2ctl -V', 'apachectl -V', 'httpd -V','nginx -V 2>&1'] в общем скорее всего без проходо рекурсивно всех каталогов не получится, но это долго для скрипта, отвалится по таймауту на стороне сервера. Проще править индекс и за пару дней всё собрать, боты, люди сами принесут.
Эм, а причем тут индекс?
 
Список процессов глянь ps axfuw увидишь что за веб-сервер работает apache или nginx конфиги лежат в /etc/apache2, /etc/httpd/, /etc/nginx в папке sites-available но у нормальных хостеров конфиги запрещено читать кому-попало, то есть там права 600 чаще всего. Выше скинули команду ['apache2ctl -V', 'apachectl -V', 'httpd -V','nginx -V 2>&1'] которая помогает глянуть где лежат конфиги если вдруг они в нестандартном месте, но я за много лет такого не встречал, какой смысл прятать конфиги когда можно просто им дать права 600 и не париться, ведь родительский процесс веб-сервера всеравно от root а дочерние уже идут пользовательские или www-data, то есть веб-сервер сможет прочитать конфиги без проблем.
 
Может есть скрипт парсинга хостов, например поиск конфига веб сервера (apache, ngnix) и выпаршивать домен и парсинг дирректорий на наличие домена

Python:
import os
import re
import glob

def find_domains():
    domains = set()

    
    apache_paths = [
        '/etc/apache2/sites-enabled/*',
        '/etc/apache2/conf-enabled/*',
        '/etc/httpd/conf.d/*.conf',
        '/etc/httpd/vhosts.d/*.conf'
    ]
    
    for path in apache_paths:
        for file in glob.glob(path):
            if not os.path.isfile(file):
                continue
            try:
                with open(file, 'r') as f:
                    content = f.read()
                
                
                vhost_blocks = re.findall(
                    r'<VirtualHost[^>]*>(.*?)</VirtualHost>',
                    content,
                    re.DOTALL | re.IGNORECASE
                )
                
                for block in vhost_blocks:
                    
                    server_names = re.findall(
                        r'ServerName\s+(\S+)',
                        block,
                        re.IGNORECASE
                    )
                    server_aliases = re.findall(
                        r'ServerAlias\s+(\S+)',
                        block,
                        re.IGNORECASE
                    )
                    for domain in server_names + server_aliases:
                        domains.add(domain.split(':')[0])
            except Exception:
                pass

    
    nginx_paths = [
        '/etc/nginx/conf.d/*.conf',
        '/etc/nginx/sites-enabled/*',
        '/usr/local/nginx/conf/vhosts/*.conf'
    ]
    
    for path in nginx_paths:
        for file in glob.glob(path):
            if not os.path.isfile(file):
                continue
            try:
                with open(file, 'r') as f:
                    content = f.read()
                
              
                server_blocks = re.findall(
                    r'server\s*\{([^\}]+)\}',
                    content,
                    re.DOTALL | re.IGNORECASE
                )
                
                for block in server_blocks:
                    
                    names = re.findall(
                        r'server_name\s+([^;]+);',
                        block,
                        re.IGNORECASE
                    )
                    for name_list in names:
                        for domain in name_list.split():
                            if domain not in {'_', 'default_server'}:
                                domains.add(domain.split(':')[0])
            except Exception:
                pass

    return sorted(domains)

if __name__ == "__main__":
    domains = find_domains()
    print("Найдены домены:")
    for domain in domains:
        print(f" - {domain}")
 
а если сосед чуть умнее полена и накинет самую банальную base64 обфускацию?
Даже в этом случае все равно будет eval (либо assert, preg_replace /e для старых php), есть еще вариантс с serialize, но там надо понимать как работает код.
З.Ы. И чет я так понял, что товарищ ТС не очень умеет выражать свои мысли и спрашивал про соседние сайты на сервере, а не про соседей на шелле.
 
Эм, а причем тут индекс?
А при том, что при открыйтии соседа этот индекс отправит тебе хост где он поправлен.

Список процессов глянь ps axfuw увидишь что за веб-сервер работает apache или nginx конфиги лежат в /etc/apache2, /etc/httpd/, /etc/nginx в папке sites-available но у нормальных хостеров конфиги запрещено читать кому-попало, то есть там права 600 чаще всего. Выше скинули команду ['apache2ctl -V', 'apachectl -V', 'httpd -V','nginx -V 2>&1'] которая помогает глянуть где лежат конфиги если вдруг они в нестандартном месте, но я за много лет такого не встречал, какой смысл прятать конфиги когда можно просто им дать права 600 и не париться, ведь родительский процесс веб-сервера всеравно от root а дочерние уже идут пользовательские или www-data, то есть веб-сервер сможет прочитать конфиги без проблем.
Я не только про хостеров, а автоматически хочу правильно найдти соседей. Через php шелл врядли, что везде есть shell_exec|passthru|system

Python:
import os
import re
import glob

def find_domains():
    domains = set()

   
    apache_paths = [
        '/etc/apache2/sites-enabled/*',
        '/etc/apache2/conf-enabled/*',
        '/etc/httpd/conf.d/*.conf',
        '/etc/httpd/vhosts.d/*.conf'
    ]
   
    for path in apache_paths:
        for file in glob.glob(path):
            if not os.path.isfile(file):
                continue
            try:
                with open(file, 'r') as f:
                    content = f.read()
               
               
                vhost_blocks = re.findall(
                    r'<VirtualHost[^>]*>(.*?)</VirtualHost>',
                    content,
                    re.DOTALL | re.IGNORECASE
                )
               
                for block in vhost_blocks:
                   
                    server_names = re.findall(
                        r'ServerName\s+(\S+)',
                        block,
                        re.IGNORECASE
                    )
                    server_aliases = re.findall(
                        r'ServerAlias\s+(\S+)',
                        block,
                        re.IGNORECASE
                    )
                    for domain in server_names + server_aliases:
                        domains.add(domain.split(':')[0])
            except Exception:
                pass

   
    nginx_paths = [
        '/etc/nginx/conf.d/*.conf',
        '/etc/nginx/sites-enabled/*',
        '/usr/local/nginx/conf/vhosts/*.conf'
    ]
   
    for path in nginx_paths:
        for file in glob.glob(path):
            if not os.path.isfile(file):
                continue
            try:
                with open(file, 'r') as f:
                    content = f.read()
               
             
                server_blocks = re.findall(
                    r'server\s*\{([^\}]+)\}',
                    content,
                    re.DOTALL | re.IGNORECASE
                )
               
                for block in server_blocks:
                   
                    names = re.findall(
                        r'server_name\s+([^;]+);',
                        block,
                        re.IGNORECASE
                    )
                    for name_list in names:
                        for domain in name_list.split():
                            if domain not in {'_', 'default_server'}:
                                domains.add(domain.split(':')[0])
            except Exception:
                pass

    return sorted(domains)

if __name__ == "__main__":
    domains = find_domains()
    print("Найдены домены:")
    for domain in domains:
        print(f" - {domain}")
Спасибо, копипаст с чат гпт или откуда там это хорошо. Но я уже нашёл и для WAMP и подобных.

В общем понятно, стандартных решений нет, придётся по старинке инклудится в индекс соседа и ждать в надежде, что люди ли боты его вызовут.
 
А при том, что при открыйтии соседа этот индекс отправит тебе хост где он поправлен.
что за темные практики? При открытии индекса соседа, твой индекс тебе ниче не отправит.
Если на твой индекс ведут несколько доменов, то да, отправит. Но при чем тут соседи?
 
что за темные практики? При открытии индекса соседа, твой индекс тебе ниче не отправит.
Если на твой индекс ведут несколько доменов, то да, отправит. Но при чем тут соседи?
Рекурсивно ищем index.php в папках на 2 уровня выше искомого index.php и если права есть их те что нашли правим, отправить нам хост ну и бекдор сложить. Потом юзаем.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх