В этой серии статей систематически и углубленно изучается безопасность системы, обратный анализ и обнаружение вредоносного кода. Статьи будут более целенаправленными, более систематическими и более глубокими. Это также история медленного роста автора. Долгий путь ведет в Хушан. Наслаждайтесь процессом и усердно работайте вместе~
В предыдущей статье подробно представлены основные знания об анализе происхождения вредоносного кода и инструменте BinDiff. В этой статье подробно объясняются базовые вводные знания Powershell, включая общее использование, включая основные понятия, каналы и перенаправление, выполнение внешних команд, использование псевдонимов, определения переменных и т. д. Powershell широко используется в области безопасности и даже стал технологией, которую должен освоить каждый веб-безопасник. В этой статье речь идет о курсах преподавателя Bilibili's Hack, а также для объяснения сочетается предыдущий опыт программирования автора. Будучи новичком в области сетевой безопасности, автор делится со всеми базовыми руководствами для самостоятельного изучения. Надеюсь, они вам понравятся. В то же время у этих больших парней действительно стоит поучиться, и я хотел бы предложить бой на коленях моему младшему брату~!
Каталог статей:
Ресурсы автора на github:
Будучи новичком в области сетевой безопасности, автор делится со всеми базовыми руководствами для самостоятельного обучения, в основном онлайн-заметками об инструментах безопасности и практических операциях. Надеюсь, вам это понравится. В то же время я надеюсь, что вы сможете работать и добиваться прогресса вместе со мной. В будущем я узнаю больше о сетевой безопасности и безопасности системы и поделюсь соответствующими экспериментами. Короче говоря, надеюсь, эта серия статей будет полезна блоггерам. Писать статьи непросто. Если мастерам это не нравится, пожалуйста, не пишите. Спасибо! Если статья окажется для вас полезной, это будет самой большой мотивацией для моего творчества. Ставьте лайк, оставляйте комментарии или напишите мне в личные сообщения. Давайте работать вместе!
Заявление: Я решительно выступаю против использования методов обучения для совершения преступлений. Все преступные деяния будут строго наказываться. Зеленые сети необходимо поддерживать вместе. Я также рекомендую всем понять лежащие в их основе принципы и лучше их защищать. (см. ссылки ниже)
Windows PowerShell — это оболочка командной строки и среда сценариев, которая позволяет пользователям командной строки и авторам сценариев использовать преимущества .NET Framework. В нем представлено множество новых полезных концепций, которые еще больше расширяют получаемые вами знания и сценарии, которые вы создаете в средах командной строки Windows и хоста сценариев Windows.
Традиционный CMD поддерживает сценарии, но его масштабируемость не очень хороша, в то время как Powershell похож на оболочку Linux и имеет преимущества лучшей удаленной обработки, рабочего процесса, обновляемой справки, запланированных задач (запланированное задание), CIM и других преимуществ.
Итак, как войти в Powershell? Один из методов — напрямую войти в Powershell, чтобы открыть его во время работы, а другой — войти в Powershell, чтобы открыть его в CMD.
Встроенный Powershell в разных операционных системах разный, например win7 или win2008. Как проверить версию?
$psversiontable
Результаты вывода показаны ниже:
Во-первых, он может выполнять вычислительные задачи, включая расчет размера 1 ГБ (в байтах), а также базовые операции.
Во-вторых, Powershell может получить сведения об обслуживании, статусе и т. д. компьютера.
get-service
Результат отображения показан на рисунке ниже с использованием метода именования глагол + существительное, который относительно ясен.
Однако услуги невозможно получить в CMD (введите Services.msc), который отображается графически.
Наконец, поскольку Powershell обладает следующими характеристиками, он широко используется в области безопасности и даже стал технологией, которую должен освоить каждый веб-безопасник.
Свойства правой кнопки мыши позволяют редактировать консоль Powershell и поддерживают два режима редактирования. Режим быстрого редактирования подключен по умолчанию.
Сочетания клавиш Powershell включают в себя:
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;
Powershell поддерживает математические операции, такие как:
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
Отображаемый результат показан ниже:
Конвейеры Powershell предназначены для использования выходных данных предыдущей команды в качестве выходных данных следующей команды.
Каналы — не новая вещь. В предыдущей консоли Cmd также были команды перенаправления, такие как Dir | More, которые могут отображать результаты на разделенном экране. Традиционные конвейеры Cmd основаны на тексте, а конвейеры Powershell — на объектной основе. Например:
linux:ls
cmd:dir
Если вы хотите получить только значения имени и режима, используйте следующие инструкции.
ls | format-table name, mode
Перенаправление предназначено для сохранения вывода команды в файл.,‘>’покрыть,’>>’добавление。
ls | format-table name, mode > demo.txt
type demo.txt
Приведенный выше код сохраняет имя и информацию о режиме содержимого файла, отображаемого ls, в локальной папке demo.txt, а затем вызывает «type demo.txt» печатает содержимое файла. Если два >> Он будет дополняться на первоначальной основе (аналогично a+), а один знак больше удаляет исходную запись (аналогично w)。
Результат показан ниже.
Powershell — это расширение CMD, которое по-прежнему позволяет использовать команды CMD в Powershell. Powershell загружает приложение CMD при его инициализации, поэтому команды CMD можно использовать в Powershell при обычных обстоятельствах, например, ipconfig.
Просмотр информации о порте
netstat -ano
Включая протокол, локальный адрес, внешний адрес, статус, PID (номер процесса).
Просмотр информации о конфигурации сети
ipconfig
Распечатать информацию о маршрутизации
route print
Настройте путь к файлу и откройте приложение
start notepad
notepad
Блокнот находится в файле Windows\System32 на диске C и может быть открыт напрямую.
системные переменные
$env:path
Python можно открыть напрямую, но нельзя открыть Wordpad. Его необходимо добавить в переменную среды.
Получите все команды с помощью get-command, обычно в форме герундия.
get-command
Команда для его использования выглядит следующим образом и называется gcm.
get-help get-command
Получить информацию о процессе
get-process
Получить псевдоним текущего сеанса
get-alias
Получить входную историческую информацию о командах
get-history
Получить текущее время
get-date
Получить все команды get-command можно заменить псевдонимом gcm.
get-command
gcm
Чтобы получить всю информацию о файле текущего каталога get-childitem, вы можете использовать команды ls и dir для достижения того же эффекта.
get-childitem
ls
dir
Чтобы получить соответствующую справочную информацию, команда выглядит следующим образом:
get-help get-childitem
Получите реальную команду, соответствующую псевдониму
get-alias -name ls
get-alias -name dir
Найти все псевдонимы, начинающиеся с «Удалить»
get-alias | where{$_.definition.startswith("Remove")}
Среди них, где используется для фильтрации конвейера, $_ представляет текущий элемент, а определение определяет тип массива строк. Powershell поддерживает мощную библиотеку классов .net. Определение внутри включает операцию запуска строки и функцию получения начала строки.
Найдите все псевдонимы и вызовите сортировку, чтобы отсортировать их в порядке убывания и вычислить расположение.
get-alias | group-object definition | sort -descending Count
Примечание. Пользовательские псевдонимы являются временными, срок их действия истекает после закрытия Powershell.
Установите псевдоним и установите блокнот в качестве нового псевдонима. Pad открывает блокнот, указывая, что наш псевдоним был успешно создан.
set-alias -name pad -value notepad
Псевдоним создается временно и станет недействительным после отключения Powershell, или вы можете написать команду для его удаления.
del alias:pad
Сохранить псевдоним
export-alias demo.ps
dir
type demo.ps
Команда для импорта псевдонимов выглядит следующим образом, где -force означает принудительный импорт.
import-alias -force demo.ps
Переменные Powershell очень похожи на PHP, как показано ниже.
$name='eastmount'
$name
$age=28
$age
Powershell не чувствителен к регистру,a и A Такой же. Комплексные переменные заключаются в фигурные скобки, но учащимся не рекомендуется определять их здесь.
${"I am a" var ()}="yxz"
${"I am a" var ()}
$n=(7*6+8)/2
$n=3.14
Переменные также могут быть установлены равными командам.
$n=ls
Многим переменным можно присваивать значения одновременно, но это не рекомендуется.
$n1=$n2=$n3=25
$n1,$n2,$n3
Основные операции с переменными
$a=2
$b=10
$c=a+b
$a,$b,$c
Традиционный метод обмена переменными
$num1=10
$num2=20
$temp=$num1
$num1=$num2
$num2=$temp
$num1,$num2
Как теперь написать обмен переменными
$num1=10
$num2=20
$num1,$num2=$num2,$num1
$num1,$num2
Просмотр текущих переменных
ls variable:
Чтобы найти конкретное значение переменной, звездочка заменяет все значения (начиная с num).
ls variable:num*
ls variable:num1
Найти, существует ли переменная
test-path variable:num1
test-path variable:num0
удалить переменную
del variable:num1
test-path variable:num1
Команды для управления выделенными переменными
clear-variable
remove-variable
new-variable
Powershell автоматически загрузит переменные при открытии. Например, он автоматически загрузит размер при открытии окна. Другой пример — информация о конфигурации программы будет автоматически загружена.
информация о корневом каталоге
$home
Идентификатор текущего процесса. Эту автоматизированную встроенную переменную можно только читать, но не записывать.
$pid
$$
Просмотр текущих переменных среды
ls env:
Распечатать значение переменной среды
$env:windir
Создайте новые переменные среды
$env:name='eastmount'
ls env:na*
Удалить переменные среды
del env:name
ls env:na*
Обновите переменную среды. Обратите внимание, что она действует только временно и не будет записана в нашей системе.
$env:OS
$env:OS="Linux"
$env:OS
Как добиться стойкого эффекта? Добавление пути к переменной среды PATH действует только для пользователя User.
[environment]::setenvironmentvariable("PATH","E:\","User")
[environment]::getenvironmentvariable("PATH","User")
системные переменные действуют для всех пользователей, а пользовательские переменные действуют только для текущего пользователя.
После вступления в силу, как показано на рисунке ниже, пользовательская переменная увеличивает соответствующее значение.
Во-первых, мы обнаружили, что наш файл сценария запрещен к выполнению.
get-executionpolicy
Далее мы пытаемся получить справочную информацию по политике.
get-help set-executionpolicy
Наконец, измените разрешения, чтобы он мог запускать файл сценария Powershell.
set-executionpolicy RemoteSigned
Вам будет предложено начать работу от имени администратора.
Откройте CMD от имени администратора, а затем установите его разрешения. После завершения настроек вы можете вызвать соответствующую программу-скрипт.
(1) Определите файл demo.bat со следующим содержимым, отключите обратную запись и напечатайте hello world.
@echo off
echo hello world
Запустите команду для открытия:
cd desktop
.\demo.bat
(2) Определите файл demo.vbs со следующим содержимым:
msgbox "CSDN Eastmount"
Запустите команду для открытия:
cd desktop
.\demo.vbs
(3) Запуск файлов сценариев Powershell также аналогичен.
$number=49
switch($number)
{
{($_ -lt 50) -and ($_ -gt 40)} {"Это значение больше 50 и меньше 40"}
50 {"Это значение равно 50"}
{$_ -gt 50} {"Это значение больше 50"}
}
Результаты запуска показаны на рисунке ниже:
Итак, как запустить файлы Powershell в CMD? Изменяем demo.bat до следующего содержания,в&означает бег。
@echo off
powershell "&'C:\Users\yxz\Desktop\demo.ps1'"
Запустить команду:
cd desktop
.\demo.bat
Следующий метод также можно запустить напрямую
start demo.bat
demo.bat
На этом этапе эта статья представлена. Надеюсь, она вам понравится. В этой статье в основном представлены основы PowerShell, которые послужат основой для последующего обнаружения вредоносного кода PowerShell. Статья очень длинная, и автор потратил много времени, но я считаю, что если вы ее внимательно прочитаете, вы обязательно что-то приобретете, особенно свое понимание MSF.
Если в этой статье есть какие-то недостатки, пожалуйста, простите меня. Путь медленного роста автора как новичка в области сетевой безопасности! Я надеюсь написать более подробные статьи об этом в будущем. В то же время я очень благодарен экспертам по безопасности в справочной литературе за то, что они поделились своими статьями. Я знаю, что у меня это плохо получается и мне придется много работать, чтобы двигаться вперед. Я вас всех люблю и желаю вам всего наилучшего.
(Автор: Eastmount, 26 ноября 2022 г., Ночь на Марсе)
Рекомендации, спасибо этим замечательным ребятам.