[Системная безопасность] Серия Forty. Powershell Обнаружение вредоносного кода (1) Базовое введение в Powershell и использование каналов и переменных.
[Системная безопасность] Серия Forty. Powershell Обнаружение вредоносного кода (1) Базовое введение в Powershell и использование каналов и переменных.

В этой серии статей систематически и углубленно изучается безопасность системы, обратный анализ и обнаружение вредоносного кода. Статьи будут более целенаправленными, более систематическими и более глубокими. Это также история медленного роста автора. Долгий путь ведет в Хушан. Наслаждайтесь процессом и усердно работайте вместе~

В предыдущей статье подробно представлены основные знания об анализе происхождения вредоносного кода и инструменте BinDiff. В этой статье подробно объясняются базовые вводные знания Powershell, включая общее использование, включая основные понятия, каналы и перенаправление, выполнение внешних команд, использование псевдонимов, определения переменных и т. д. Powershell широко используется в области безопасности и даже стал технологией, которую должен освоить каждый веб-безопасник. В этой статье речь идет о курсах преподавателя Bilibili's Hack, а также для объяснения сочетается предыдущий опыт программирования автора. Будучи новичком в области сетевой безопасности, автор делится со всеми базовыми руководствами для самостоятельного изучения. Надеюсь, они вам понравятся. В то же время у этих больших парней действительно стоит поучиться, и я хотел бы предложить бой на коленях моему младшему брату~!

  • Только более глубокое понимание основ и использования PowerShell позволяет нам лучше обнаруживать вредоносный код.

Каталог статей:

  • 1. Первое знакомство с Powershell 1. Основные понятия 2. Почему это мощно? 3.Консоль и сочетания клавиш 4. Математические операции
  • 2. Конвейер Powershell и перенаправление 1. Трубопровод 2. Перенаправление
  • 3. Powershell выполняет внешние команды и наборы команд. 1.Внешние команды 2. Набор команд
  • 4. Использование псевдонимов Powershell 1. Базовое использование псевдонимов 2. Пользовательский псевдоним
  • 5. Основы переменных Powershell 1.Основное использование 2. Операции с переменными 3. Переменные автоматизации 4. Переменные среды
  • 6. Powershell вызывает программу-скрипт 1. Стратегия выполнения файла сценария 2. Вызовите программу-скрипт
  • 7. Резюме

Ресурсы автора на github:

  • Обратный анализ: https://github.com/eastmountyxz/ SystemSecurity-ReverseAnaанализ
  • Кибербезопасность: https://github.com/eastmountyxz/ Сеть Безопасность Самообучение

Будучи новичком в области сетевой безопасности, автор делится со всеми базовыми руководствами для самостоятельного обучения, в основном онлайн-заметками об инструментах безопасности и практических операциях. Надеюсь, вам это понравится. В то же время я надеюсь, что вы сможете работать и добиваться прогресса вместе со мной. В будущем я узнаю больше о сетевой безопасности и безопасности системы и поделюсь соответствующими экспериментами. Короче говоря, надеюсь, эта серия статей будет полезна блоггерам. Писать статьи непросто. Если мастерам это не нравится, пожалуйста, не пишите. Спасибо! Если статья окажется для вас полезной, это будет самой большой мотивацией для моего творчества. Ставьте лайк, оставляйте комментарии или напишите мне в личные сообщения. Давайте работать вместе!

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


1. Первое знакомство с Powershell

1. Основные понятия

Windows PowerShell — это оболочка командной строки и среда сценариев, которая позволяет пользователям командной строки и авторам сценариев использовать преимущества .NET Framework. В нем представлено множество новых полезных концепций, которые еще больше расширяют получаемые вами знания и сценарии, которые вы создаете в средах командной строки Windows и хоста сценариев Windows.

Традиционный CMD поддерживает сценарии, но его масштабируемость не очень хороша, в то время как Powershell похож на оболочку Linux и имеет преимущества лучшей удаленной обработки, рабочего процесса, обновляемой справки, запланированных задач (запланированное задание), CIM и других преимуществ.

Итак, как войти в Powershell? Один из методов — напрямую войти в Powershell, чтобы открыть его во время работы, а другой — войти в Powershell, чтобы открыть его в CMD.

Встроенный Powershell в разных операционных системах разный, например win7 или win2008. Как проверить версию?

Язык кода:javascript
копировать
$psversiontable

Результаты вывода показаны ниже:


2. Почему это мощно?

Во-первых, он может выполнять вычислительные задачи, включая расчет размера 1 ГБ (в байтах), а также базовые операции.

Во-вторых, Powershell может получить сведения об обслуживании, статусе и т. д. компьютера.

Язык кода:javascript
копировать
get-service

Результат отображения показан на рисунке ниже с использованием метода именования глагол + существительное, который относительно ясен.

Однако услуги невозможно получить в CMD (введите Services.msc), который отображается графически.

Наконец, поскольку Powershell обладает следующими характеристиками, он широко используется в области безопасности и даже стал технологией, которую должен освоить каждый веб-безопасник.

  • удобный
  • Поддержка объектно-ориентированного
  • Поддержка взаимодействия с платформой i.net
  • Сильная совместимость, cmd и vbs могут звонить друг другу.
  • Он обладает хорошей масштабируемостью и может использоваться для управления такими платформами, как активный каталог и продукты виртуальных машин.

3.Консоль и сочетания клавиш

Свойства правой кнопки мыши позволяют редактировать консоль Powershell и поддерживают два режима редактирования. Режим быстрого редактирования подключен по умолчанию.

Сочетания клавиш Powershell включают в себя:

Язык кода:javascript
копировать
ALT+F7      Очистить историю команд
PgUp PgDn   Перевернуть страницу
Enter       Выполнить текущую команду
End         Переместить курсор в конец текущей команды
Del         Удалить введенные командные символы, начиная справа
Esc         Очистить текущую командную строку
F2          Автоматически добавлять исторические команды к указанным символам
F4          Удалить командную строку до указанного символа справа от курсора
F7          Диалоговое окно, показывающее историю командной строки
F8          Получить историю командной строки, содержащую указанные символы
F9          Выберите команду в соответствии с номером истории командной строки. Номер истории можно просмотреть с помощью F7. 
влево/вправо        Переместить курсор влево или вправо
вверх и вниз        Переключить историю командной строки
Home        Переместите курсор в самый левый конец символа командной строки.
Backspace   Удалить символы командной строки справа
Ctrl+C      Отменить выполнение команды
Tab         Автоматически заполнять имена команд или файлов

Например, используйте сочетание клавиш Ctrl+C, чтобы прервать выполнение команды ping, используйте сочетание клавиш Tab, чтобы завершить команду service.msc;


4. Математические операции

Powershell поддерживает математические операции, такие как:

Язык кода:javascript
копировать
PS C:\Users\yxz> 2+4
6
PS C:\Users\yxz> 4-2
2
PS C:\Users\yxz> 4*3
12
PS C:\Users\yxz> 9%2
1
PS C:\Users\yxz> (1+3*5)/2
8
PS C:\Users\yxz> 1gb/1mb
1024
PS C:\Users\yxz> 1gb/1mb*18kb
18874368
PS C:\Users\yxz> 1gb -gt 1mb
True
PS C:\Users\yxz> 0xabcd
43981

Отображаемый результат показан ниже:


2. Конвейер Powershell и перенаправление

1. Трубопровод

Конвейеры Powershell предназначены для использования выходных данных предыдущей команды в качестве выходных данных следующей команды.

Каналы — не новая вещь. В предыдущей консоли Cmd также были команды перенаправления, такие как Dir | More, которые могут отображать результаты на разделенном экране. Традиционные конвейеры Cmd основаны на тексте, а конвейеры Powershell — на объектной основе. Например:

Язык кода:javascript
копировать
linux:ls
cmd:dir

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

Язык кода:javascript
копировать
ls | format-table name, mode

2. Перенаправление

Перенаправление предназначено для сохранения вывода команды в файл.,‘>’покрыть,’>>’добавление。

Язык кода:javascript
копировать
ls | format-table name, mode > demo.txt
type demo.txt

Приведенный выше код сохраняет имя и информацию о режиме содержимого файла, отображаемого ls, в локальной папке demo.txt, а затем вызывает «type demo.txt» печатает содержимое файла. Если два >> Он будет дополняться на первоначальной основе (аналогично a+), а один знак больше удаляет исходную запись (аналогично w)。

Результат показан ниже.


3. Powershell выполняет внешние команды и наборы команд.

1.Внешние команды

Powershell — это расширение CMD, которое по-прежнему позволяет использовать команды CMD в Powershell. Powershell загружает приложение CMD при его инициализации, поэтому команды CMD можно использовать в Powershell при обычных обстоятельствах, например, ipconfig.

Просмотр информации о порте

Язык кода:javascript
копировать
netstat -ano

Включая протокол, локальный адрес, внешний адрес, статус, PID (номер процесса).

Просмотр информации о конфигурации сети

Язык кода:javascript
копировать
ipconfig

Распечатать информацию о маршрутизации

Язык кода:javascript
копировать
route print

Настройте путь к файлу и откройте приложение

Язык кода:javascript
копировать
start notepad
notepad

Блокнот находится в файле Windows\System32 на диске C и может быть открыт напрямую.

системные переменные

Язык кода:javascript
копировать
$env:path

Python можно открыть напрямую, но нельзя открыть Wordpad. Его необходимо добавить в переменную среды.


2. Набор команд

Получите все команды с помощью get-command, обычно в форме герундия.

Язык кода:javascript
копировать
get-command

Команда для его использования выглядит следующим образом и называется gcm.

Язык кода:javascript
копировать
get-help get-command

Получить информацию о процессе

Язык кода:javascript
копировать
get-process

Получить псевдоним текущего сеанса

Язык кода:javascript
копировать
get-alias

Получить входную историческую информацию о командах

Язык кода:javascript
копировать
get-history

Получить текущее время

Язык кода:javascript
копировать
get-date

4. Использование псевдонимов Powershell

1. Базовое использование псевдонимов

Получить все команды get-command можно заменить псевдонимом gcm.

Язык кода:javascript
копировать
get-command
gcm

Чтобы получить всю информацию о файле текущего каталога get-childitem, вы можете использовать команды ls и dir для достижения того же эффекта.

Язык кода:javascript
копировать
get-childitem
ls
dir

Чтобы получить соответствующую справочную информацию, команда выглядит следующим образом:

Язык кода:javascript
копировать
get-help get-childitem

Получите реальную команду, соответствующую псевдониму

Язык кода:javascript
копировать
get-alias -name ls
get-alias -name dir

Найти все псевдонимы, начинающиеся с «Удалить»

Язык кода:javascript
копировать
get-alias | where{$_.definition.startswith("Remove")}

Среди них, где используется для фильтрации конвейера, $_ представляет текущий элемент, а определение определяет тип массива строк. Powershell поддерживает мощную библиотеку классов .net. Определение внутри включает операцию запуска строки и функцию получения начала строки.

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

Язык кода:javascript
копировать
get-alias | group-object definition | sort -descending Count

Примечание. Пользовательские псевдонимы являются временными, срок их действия истекает после закрытия Powershell.


2. Пользовательский псевдоним

Установите псевдоним и установите блокнот в качестве нового псевдонима. Pad открывает блокнот, указывая, что наш псевдоним был успешно создан.

Язык кода:javascript
копировать
set-alias -name pad -value notepad

Псевдоним создается временно и станет недействительным после отключения Powershell, или вы можете написать команду для его удаления.

Язык кода:javascript
копировать
del alias:pad

Сохранить псевдоним

Язык кода:javascript
копировать
export-alias demo.ps
dir
type demo.ps

Команда для импорта псевдонимов выглядит следующим образом, где -force означает принудительный импорт.

Язык кода:javascript
копировать
import-alias -force demo.ps

5. Основы переменных Powershell

1.Основное использование

Переменные Powershell очень похожи на PHP, как показано ниже.

Язык кода:javascript
копировать
$name='eastmount'
$name
$age=28
$age

Powershell не чувствителен к регистру,a и A Такой же. Комплексные переменные заключаются в фигурные скобки, но учащимся не рекомендуется определять их здесь.

Язык кода:javascript
копировать
${"I am a" var ()}="yxz"
${"I am a" var ()}
$n=(7*6+8)/2
$n=3.14

Переменные также могут быть установлены равными командам.

Язык кода:javascript
копировать
$n=ls

Многим переменным можно присваивать значения одновременно, но это не рекомендуется.

Язык кода:javascript
копировать
$n1=$n2=$n3=25
$n1,$n2,$n3

2. Операции с переменными

Основные операции с переменными

Язык кода:javascript
копировать
$a=2
$b=10
$c=a+b
$a,$b,$c

Традиционный метод обмена переменными

Язык кода:javascript
копировать
$num1=10
$num2=20
$temp=$num1
$num1=$num2
$num2=$temp
$num1,$num2

Как теперь написать обмен переменными

Язык кода:javascript
копировать
$num1=10
$num2=20
$num1,$num2=$num2,$num1
$num1,$num2

Просмотр текущих переменных

Язык кода:javascript
копировать
ls variable:

Чтобы найти конкретное значение переменной, звездочка заменяет все значения (начиная с num).

Язык кода:javascript
копировать
ls variable:num*
ls variable:num1

Найти, существует ли переменная

Язык кода:javascript
копировать
test-path variable:num1
test-path variable:num0

удалить переменную

Язык кода:javascript
копировать
del variable:num1
test-path variable:num1

Команды для управления выделенными переменными

Язык кода:javascript
копировать
clear-variable
remove-variable
new-variable

3. Переменные автоматизации

Powershell автоматически загрузит переменные при открытии. Например, он автоматически загрузит размер при открытии окна. Другой пример — информация о конфигурации программы будет автоматически загружена.

информация о корневом каталоге

Язык кода:javascript
копировать
$home

Идентификатор текущего процесса. Эту автоматизированную встроенную переменную можно только читать, но не записывать.

Язык кода:javascript
копировать
$pid
$$

4. Переменные среды

Просмотр текущих переменных среды

Язык кода:javascript
копировать
ls env:

Распечатать значение переменной среды

Язык кода:javascript
копировать
$env:windir

Создайте новые переменные среды

Язык кода:javascript
копировать
$env:name='eastmount'
ls env:na*

Удалить переменные среды

Язык кода:javascript
копировать
del env:name
ls env:na*

Обновите переменную среды. Обратите внимание, что она действует только временно и не будет записана в нашей системе.

Язык кода:javascript
копировать
$env:OS
$env:OS="Linux"
$env:OS

Как добиться стойкого эффекта? Добавление пути к переменной среды PATH действует только для пользователя User.

Язык кода:javascript
копировать
[environment]::setenvironmentvariable("PATH","E:\","User")
[environment]::getenvironmentvariable("PATH","User")

системные переменные действуют для всех пользователей, а пользовательские переменные действуют только для текущего пользователя.

После вступления в силу, как показано на рисунке ниже, пользовательская переменная увеличивает соответствующее значение.


6. Powershell вызывает программу-скрипт

1. Стратегия выполнения файла сценария

Во-первых, мы обнаружили, что наш файл сценария запрещен к выполнению.

Язык кода:javascript
копировать
get-executionpolicy

Далее мы пытаемся получить справочную информацию по политике.

Язык кода:javascript
копировать
get-help set-executionpolicy

Наконец, измените разрешения, чтобы он мог запускать файл сценария Powershell.

Язык кода:javascript
копировать
set-executionpolicy RemoteSigned

Вам будет предложено начать работу от имени администратора.

Откройте CMD от имени администратора, а затем установите его разрешения. После завершения настроек вы можете вызвать соответствующую программу-скрипт.


2. Вызовите программу-скрипт

(1) Определите файл demo.bat со следующим содержимым, отключите обратную запись и напечатайте hello world.

Язык кода:javascript
копировать
@echo off
echo hello world

Запустите команду для открытия:

Язык кода:javascript
копировать
cd desktop
.\demo.bat

(2) Определите файл demo.vbs со следующим содержимым:

Язык кода:javascript
копировать
msgbox "CSDN Eastmount"

Запустите команду для открытия:

Язык кода:javascript
копировать
cd desktop
.\demo.vbs

(3) Запуск файлов сценариев Powershell также аналогичен.

Язык кода:javascript
копировать
$number=49
switch($number)
{
  {($_ -lt 50) -and ($_ -gt 40)} {"Это значение больше 50 и меньше 40"}
  50 {"Это значение равно 50"}
  {$_ -gt 50} {"Это значение больше 50"}
}

Результаты запуска показаны на рисунке ниже:

Итак, как запустить файлы Powershell в CMD? Изменяем demo.bat до следующего содержания,в&означает бег。

Язык кода:javascript
копировать
@echo off
powershell "&'C:\Users\yxz\Desktop\demo.ps1'" 

Запустить команду:

Язык кода:javascript
копировать
cd desktop
.\demo.bat

Следующий метод также можно запустить напрямую

Язык кода:javascript
копировать
start demo.bat
demo.bat

7. Резюме

На этом этапе эта статья представлена. Надеюсь, она вам понравится. В этой статье в основном представлены основы PowerShell, которые послужат основой для последующего обнаружения вредоносного кода PowerShell. Статья очень длинная, и автор потратил много времени, но я считаю, что если вы ее внимательно прочитаете, вы обязательно что-то приобретете, особенно свое понимание MSF.

  • 1. Первое знакомство с Powershell
  • 2. Конвейер Powershell и перенаправление
  • 3. Powershell выполняет внешние команды и наборы команд.
  • 4. Использование псевдонимов Powershell
  • 5. Основы переменных Powershell
  • 6. Powershell вызывает программу-скрипт

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

(Автор: Eastmount, 26 ноября 2022 г., Ночь на Марсе)

Рекомендации, спасибо этим замечательным ребятам.

  • [1] https://www.bilibili.com/video/av66327436 [Рекомендуемые видео учителей со станции B]
  • [2] «Технология проникновения в сеть безопасных дорог и практический анализ случаев», преподаватель Чэнь Сяобин
  • [3] https://baike.baidu.com/item/Windows Power Shell/693789
  • [4] https://www.pstips.net/powershell-piping-and-routing.html
  • [5] https://www.pstips.net/using-the-powershell-pipeline.html
  • [6] Официальная документация Microsoft по PowerShell.
boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода