我打赌我学习PowerShell的方法是错误的,所以我可能需要您的帮助,本博客的读者们。如果只是为了组织我的知识并将其用于对抗恶意软件,而不仅仅是为了弄清楚它是如何被用于恶意软件的。

这是我第一次认真看PowerShell是我想弄清楚某个恶意软件在做什么。但当时我学到的最重要的教训是,PowerShell是非常通用的,它的执行策略几乎不能阻止任何人在受感染的计算机上执行恶意行为。

这两种特性使它成为黑客、笔测试人员和恶意软件作者手中的强大武器。鉴于目前使用合法工具和程序进行攻击的趋势,我想了解更多关于它的信息,看看我们如何利用它。就像白帽黑客一样。

跳过执行策略

PowerShell执行策略控制PowerShell可以对当前系统执行多少操作。可能的设置可以在Technet的这篇文章中找到使用Set-ExecutionPolicy Cmdlet,其中“受限”是默认设置。

限制吗?

但我首先注意到的一件事是,绕过这个限制是多么的微不足道。运行PowerShell程序最简单的方法是“管道”它并添加一个-executionpolicy绕过开关。这将确保命令在不考虑当前执行策略的情况下运行。如果脚本太复杂而无法管道,您可以对整个脚本进行编码(base64),并使用开关-EncodedCommand.对于恶意软件作者来说,这有一个额外的好处,那就是普通用户要花更多的时间来弄清楚他们做了什么。

基础知识

Cmdlets

但让我们先从最基本的开始。PowerShell使用所谓的cmdlets.这些cmdlets通常执行一个任务并返回一个。net对象,该对象可以通过管道连接到下一个命令。它们不是像我们在命令提示符中使用的一些命令那样独立的可执行程序,而是。net框架类。

命名约定

Windows PowerShell使用动词-名词对作为cmdlets以及它们的派生类。这使得我们很容易理解将要发生什么。举个例子,如果我们看cmdletConvertTo-Xml应该足够清楚地知道当你使用它时会发生什么。和cmdlets这不是很清楚,或者你什么时候想知道更多cmdlet或其语法,您可以使用得到帮助cmdlet。

得到帮助

别名

然而,在此上下文中需要了解的另一件重要事情是别名,特别是在对脚本进行反向工程时。很多cmdlets有一个别名可以触发cmdlet,但这并没有使用它们的命名约定。例如,别名是用来做什么的cmdletRemove-Item.基本概述cmdlets、别名和函数可以通过运行get命令这将显示一个广泛的列表。

get命令

这是对我所掌握的工作知识的一个快速总结,加上一些去混淆技术和大量的“查找资料”,这足以帮助我理解其他人在做什么。但是我觉得是时候学习更多的东西了,因为我最擅长用动手的方法,在下一篇文章中,我们将做一些基本的编程。

到时候见!