Как обойти окно uac powershell
Перейти к содержимому

Как обойти окно uac powershell

Introduction

Welcome again. This time we ae going to craft a PowerShell Script to bypass UAC.

In other words, we are going to use a Medium Integrity process that belongs to a Local Administrator to spawn a new High Integrity process, with all privileges available.

What is UAC?

UAC (User Account Control) is a security feature, introduced from Windows 7 and onward versions of Windows. This prevents that even a local administrator account can’t execute changes to operating system, unless the user specifically chooses to. It is very common to see desktop users working with Administrators account (not recommended, but common), so even if a Malware, using a compromised Local Administrator account, tries to change something in the registry, or create a new service in the system, UAC won’t let that happen.

Until someone found a way to bypass it. And there are a lot of UAC bypasses since Windows 7. It became so common that even Microsoft treats this kind of problem as “non-priority” security issue.

One way of checking if you are in a Medium Integrity process is to run the command whoami /priv and see if all privileges are available.

The image above depicts a medium integrity process, as you can see, it does not have all privileges.

When you start something “As Administrator”, and run whoami /priv , you will find out that there is a lot more.

How to Bypass UAC in newer Windows versions

I digged the internet for some bypass that could affect my own machine. And I found the amazing research of Oddvar Moe about exploiting microsoft “cmstp.exe” as a way to bypass UAC.

Later on, after more reading from Oddvar post, I stumbled with Tyler Applebaum powershell script that could trigger this vulnerabiity as well.

With all these information, I decided to work in this technique and develop my own, but to keep originality, I chose to code it in C#, so we can produce a PowerShell script with DLL reflection and very few strings so AMSI will have a hard time blocking it.

The resulting C# code is this one:

Name it “Source.cs”.

To compile it, use the following syntax, in a PowerShell shell that is in the same directory as this source.

Now you have this “dll” with our C# code.

To use this bypass directly from DLL, check this powershell trick:

And a high-integrity cmd.exe should pop up in your screen!

As you can see, we have gone from a non-UAC process and spawned a Administrator process!

I tested this technique with Windows 10 build 17134, version 1803 and it worked flawlessly!

Weaponizing with PowerShell

Now we go to automation. To create a PowerShell script to exploit this technique, I have used the same old DLL reflection that I always like to use.

This is enough. You can import this function and execute it like this, to spawn an elevated process:

I hope you liked to know more about this technique. Bypassing UAC is an important step when compromising Local Administrator accounts. After UAC, you can “get system” very easily.

zc00l blog

  • zc00l blog

This blog have the purpose of ilustrating some of my adventures in the world of penetration testing, welcome to my world!

Запускать исполняемый файл без всплывающего окна UAC от имени администратора

Я провожу большое исследование, в котором у нас есть сотрудники из разных стран, собирающие информацию о планшетных компьютерах под управлением Windows 10 Enterprise. Каждому сотруднику назначается планшет, и они входят в систему со своим стандартным именем пользователя и паролем. Эти пользователи не имеют прав локального администратора на машинах, но все планшеты имеют одно имя пользователя и пароль администратора, которые я знаю, и они одинаковы для всех планшетов.

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

Мне нужно обновить все планшеты с исправлением ошибок для программного обеспечения, которое они используют на планшетах, и я хотел бы сделать это во время процесса синхронизации. Исправление ошибки содержится в простом исполняемом файле, который можно легко отправить на планшеты сотрудников вместе с любым кодом, который мне нравится, во время синхронизации. Если бы пользователи запускали программу синхронизации как администраторы, это не было бы проблемой, так как я мог бы просто запустить исполняемый файл через скрипт в конце синхронизации. Но это не так, поэтому я пытаюсь найти способ запустить сценарий (мне все равно, что это такое. Это может быть командный файл Windows, сценарий vbs, VB.NET, powershell, и т. д.), и пусть этот сценарий выполняется с правами администратора и запускает установку без вмешательства запроса UAC.

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

  1. Отправьте исполняемый файл обновления ошибки на планшетный компьютер (теперь я могу это сделать)
  2. Разработайте собственный код, который передаст учетные данные администратора на планшет и установит исполняемый файл в 1 без появления UAC (я могу отправить сценарий на планшет во время синхронизации, но не знаю, как выполнить его как администратор, не получая приглашения UAC ).

Есть идеи, как я могу это сделать? Я исследовал это весь день с минимальным успехом, используя сценарии PowerShell, подобные описанным здесь и здесь. Это было самое близкое, что я получил после сохранения учетных данных в $cred , но он продолжал выдавать мне подсказку UAC:

ОБНОВЛЕНИЕ

После некоторой дополнительной работы, я думаю, я смогу запустить это, если бы я мог каким-то образом отключить управление UAC с помощью сценария, который может запускаться под учетной записью обычного пользователя и передавать ему учетные данные администратора. Есть идеи, как я могу это сделать? Если бы я мог заставить это работать, даже после перезагрузки, я бы смог выполнить то, что мне нужно.

4 ответа

Фактическая проблема, с которой вы столкнулись, заключается в том, что вы хотите обновить свое приложение, но оно находится в папке Program Files (или в другом месте, которое обычным пользователям не разрешено изменять).

Чтобы позволить любому пользователю обновлять вашу программу, вы должны предоставить всем пользователям Полный доступ к вашей папке. В идеале установщик вашего приложения внес бы эту настройку в DACL во время установки (когда установщик работал от имени администратора).

На данный момент вам придется выполнить последнее единовременное требование о повышении уровня пользователей до администратора. Затем вы можете отключить всю безопасность в своем приложении, позволяя любому пользователю (злонамеренному или нет) изменять ваше приложение по своему желанию.

С реализацией псевдокода:

Нет ничего необычного в том, что приложения могут быть изменены любым пользователем: большинство MMO устанавливают обновления во время игры. MMO обычно имеют прокладку от Microsoft, которая дает все пользовательский контроль над папкой приложения.

Запустите сценарий как учетную запись администратора домена . и установите политику выполнения перед запуском сценария, затем запустите от имени администратора . некоторые приложения все еще придирчивы к UAC, но Set-ExecutionPolicy [bypass / remotesigned] гарантирует, что вы повторно не запрашивается. однако совместное использование и разрешения могут по-прежнему быть проблемой, если учетная запись администратора домена не имеет доступа к общему ресурсу. psexec делает это, но это буквально вопрос того, что я только что упомянул, и файл psexec, по сути, записывает разрешения к концу скрипта. Цель заключалась в том, чтобы убедиться, что пароли не были написаны в виде открытого текста, он хеширует значение пароля. в любом случае, если вы хотите, чтобы это было сделано безопасно, с помощью GPO и убедитесь, что права доступа к файлу / общий ресурс находятся на самом высоком уровне, может вызвать повторение запроса. вот почему вы увидите, что в некоторых пакетных файлах используется% 1% 2% 3% 4% 5% 6% 7% 8% 9 . это потому, что он автоматически запрашивает повышение прав и будет повторяться в итеративном цикле, пока не появится приглашение UAC. в этом нет необходимости.

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

Этот вопрос относится к категории «когда люди просят дыры в безопасности как функции».

Вы не можете обойти (или, если вы предпочитаете эту формулировку, «программно принять») приглашение UAC и автоматически повысить уровень без интерактивного подтверждения. UAC разработан специально для предотвращения этого. (Если бы это было возможно, все вредоносные программы сделали бы это.)

Это не вещь PowerShell, а общая вещь Windows 10. Для этого вам нужно отключить UAC. Однако опыта работы с ним в Windows 10 пока нет.

Вы можете попробовать установить для раздела реестра EnableLUA значение 0 . Ключ можно найти в: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

Как обойти окно uac powershell

Работая станция на windows 7 c Powershell 3.0

Состоит в домене

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

Задача:
— Запустить скрипт Powershell при включении компа от имени вошедшего пользователя (он всего один и является администратором да этом ПК)
— Скрипт делает запрос на сайт компании, поэтому от имени "система" не получится — у нее нет туда доступа.

— Скрипт должен запускаться без каких либо подтверждений со стороны пользователя.

— решение желательно средствами Powershell

Если запускать скрипт не от имени администратора — появляется окно авторизации на сервер содержащий сайт.

$url = "http://www.localsite.ru/home/pr"
$request = "ser15&UWS_EV=18&UWS_ST_TIME=01.10.2017+08%3A00&UWS_USID=078"
$http_request = New-Object -ComObject Msxml2.XMLHTTP
$http_request.open(‘POST’, $url, $false)
$http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8")
$http_request.setRequestHeader("X-Requested-With", "XMLHttpRequest")
$http_request.send($request)
echo $http_request.statusText

Что уже сделано:

1. Сделано задание в планировщике заданий:

— От имени моего пользователя

— Выполнять вне зависимости от регистрации пользователя

— Выполнять с наивысшими правами

Результат выполнения задания: Это задание в это время выполняется 0x41301

И висит так очень долго, как выяснил — запрашивает авторизацию на этот сетевой ресурс.

Если отключить UAC — задание выполняется быстро и без проблем.

2. Сделал обычный ярлык на этот скрипт и хотел его закинуть в автозагрузку, но в свойствах ярлыка не активна галочка "запускать от имени администратора" для файлов *.PS1 и *.BAT как это можно обойти не нашел

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *