[系统安全] 四十六.Powershell恶意代码检测系列 Powershell基础入门及管道和变量的用法
Posted Eastmount
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[系统安全] 四十六.Powershell恶意代码检测系列 Powershell基础入门及管道和变量的用法相关的知识,希望对你有一定的参考价值。
您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。换专业确实挺难的,逆向分析也是块硬骨头,但我也试试,看看自己未来四年究竟能将它学到什么程度,漫漫长征路,偏向虎山行。享受过程,一起加油~
前文带领大家了解Metasploit技术,涉及后渗透相关的技术,包括信息收集、权限提权、移植漏洞模块和后门。这篇文章详细讲解Powershell基础入门知识,包括常见的用法,涉及基础概念、管道和重定向、执行外部命令、别名用法、变量定义等。Powershell被广泛应用于安全领域,甚至成为每一位Web安全必须掌握的技术。本文参考了Bilibili的Hack学习老师的课程,同时也结合了作者之前的编程经验进行讲解。作者作为网络安全的小白,分享一些自学基础教程给大家,希望你们喜欢。同时,这些大佬是真的值得我们去学习,献上小弟的膝盖~fighting!
- 只有更深入的了解PowerShell基础及用法,才能更好地检测恶意代码
文章目录
- 一.Powershell初识
- 二.Powershell管道和重定向
- 三.Powershell执行外部命令及命令集
- 四.Powershell别名使用
- 五.Powershell变量基础
- 六.Powershell调用脚本程序
- 七.总结
希望这些基础原理能更好地帮助大家做好防御和保护,基础性文章,希望对您有所帮助。作者作为网络安全的小白,分享一些自学基础教程给大家,主要是在线笔记,希望您们喜欢。同时,更希望您能与我一起操作和进步,后续将深入学习网络安全和系统安全知识并分享相关实验。总之,希望该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!如果文章对您有帮助,将是我创作的最大动力,点赞、评论、私聊均可,一起加油喔!
作者的github资源:
- 逆向分析:https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis
- 网络安全:https://github.com/eastmountyxz/NetworkSecuritySelf-study
从2019年7月开始,我来到了一个陌生的专业——网络空间安全。初入安全领域,是非常痛苦和难受的,要学的东西太多、涉及面太广,但好在自己通过分享100篇“网络安全自学”系列文章,艰难前行着。感恩这一年相识、相知、相趣的安全大佬和朋友们,如果写得不好或不足之处,还请大家海涵!
接下来我将开启新的安全系列,叫“系统安全”,也是免费的100篇文章,作者将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等,也将通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步,加油~
- 推荐前文:网络安全自学篇系列-100篇
前文分析:
- [系统安全] 一.什么是逆向分析、逆向分析基础及经典扫雷游戏逆向
- [系统安全] 二.如何学好逆向分析及吕布传游戏逆向案例
- [系统安全] 三.IDA Pro反汇编工具初识及逆向工程解密实战
- [系统安全] 四.OllyDbg动态分析工具基础用法及Crakeme逆向
- [系统安全] 五.OllyDbg和Cheat Engine工具逆向分析植物大战僵尸游戏
- [系统安全] 六.逆向分析之条件语句和循环语句源码还原及流程控制
- [系统安全] 七.逆向分析之PE病毒原理、C++实现文件加解密及OllyDbg逆向
- [系统安全] 八.Windows漏洞利用之CVE-2019-0708复现及蓝屏攻击
- [系统安全] 九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度提权
- [系统安全] 十.Windows漏洞利用之SMBv3服务远程代码执行漏洞(CVE-2020-0796)复现
- [系统安全] 十一.那些年的熊猫烧香及PE病毒行为机理分析
- [系统安全] 十二.熊猫烧香病毒IDA和OD逆向分析(上)病毒初始化
- [系统安全] 十三.熊猫烧香病毒IDA和OD逆向分析(中)病毒释放机理
- [系统安全] 十四.熊猫烧香病毒IDA和OD逆向分析–病毒释放过程(下)
- [系统安全] 十五.Chrome浏览器保留密码功能渗透解析、蓝屏漏洞及某音乐软件漏洞复现
- [系统安全] 十六.PE文件逆向基础知识(PE解析、PE编辑工具和PE修改)
- [系统安全] 十七.Windows PE病毒概念、分类及感染方式详解
- [系统安全] 十八.病毒攻防机理及WinRAR恶意劫持漏洞(脚本病毒、自启动、定时关机、蓝屏攻击)
- [系统安全] 十九.宏病毒之入门基础、防御措施、自发邮件及APT28宏样本分析
- [系统安全] 二十.PE数字签名之(上)什么是数字签名及Signtool签名工具详解
- [系统安全] 二十一.PE数字签名之(中)Signcode、PEView、010Editor、Asn1View工具用法
- [系统安全] 二十二.PE数字签名之(下)微软证书漏洞CVE-2020-0601复现及Windows验证机制分析
- [系统安全] 二十三.逆向分析之OllyDbg动态调试复习及TraceMe案例分析
- [系统安全] 二十四.逆向分析之OllyDbg调试INT3断点、反调试、硬件断点与内存断点
- [系统安全] 二十五.WannaCry勒索病毒分析 (1)Python复现永恒之蓝漏洞实现勒索加密
- [系统安全] 二十六.WannaCry勒索病毒分析 (2)MS17-010漏洞利用及病毒解析
- [系统安全] 二十七.WannaCry勒索病毒分析 (3)蠕虫传播机制解析及IDA和OD逆向
- [系统安全] 二十八.WannaCry勒索病毒分析 (4)全网"最"详细的蠕虫传播机制解读
- [系统安全] 二十九.深信服分享之外部威胁防护和勒索病毒对抗
- [系统安全] 三十.CS逆向分析 (1)你的游戏子弹用完了吗?Cheat Engine工具入门普及
- [系统安全] 三十一.恶意代码检测(1)恶意代码攻击溯源及恶意样本分析
- [系统安全] 三十二.恶意代码检测(2)常用技术详解及总结
- [系统安全] 三十三.恶意代码检测(3)基于机器学习的恶意代码检测技术
- [系统安全] 三十四.恶意代码检测(4)编写代码自动提取IAT表、字符串及时间戳溯源地区
- [系统安全] 三十五.Procmon工具基本用法及文件进程、注册表查看
- [系统安全] 三十六.APT系列(1)APT攻击溯源防御与常见APT组织的攻击案例
- [系统安全] 三十七.APT系列(2)远控木马详解与防御及APT攻击中的远控
- [系统安全] 三十八.APT系列(3)恶意代码与APT攻击中的武器(强推Seak老师)
- [系统安全] 三十九.APT系列(4)APT攻防溯源普及和医疗数据安全防御总结
- [系统安全] 四十.APT系列(5)APT组织常用WinRAR漏洞复现(CVE-2018-20250)及恶意软件劫持
- [系统安全] 四十一.APT系列(6)Python解析PE文件并获取时间戳判断来源区域
- [系统安全] 四十二.APT系列(7)基于溯源图的APT攻击检测安全顶会论文总结
- [系统安全] 四十三.APT系列(8)Powershell和PowerSploit脚本渗透攻击手段详解
- [系统安全] 四十四.APT系列(9)Metasploit技术之基础用法万字详解及防御机理
- [系统安全] 四十五.APT系列(10)Metasploit后渗透技术信息收集、权限提权和功能模块详解
- [系统安全] 四十六.Powershell恶意代码检测系列 (1)Powershell基础入门及管道和变量的用法
声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。
一.Powershell初识
1.基础概念
Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能。它引入了许多非常有用的新概念,从而进一步扩展了您在 Windows 命令提示符和 Windows Script Host 环境中获得的知识和创建的脚本。
传统的CMD支持脚本编写,但扩展性不好,而Powershell类似于Linux shell,具有更好的远程处理、工作流、可更新的帮助、预定任务(Scheduled Job)、CIM等优点。
那么,如何进入Powershell呢?
一种方法是在运行中直接输入Powershell打开,另一种方法是CMD中输入Powershell打开。
不同操作系统内置的Powershell是不一样的,比如win7或win2008,如何查看版本呢?
$psversiontable
输出结果如下图所示:
2.为什么强大?
首先,它可以进行计算任务,包括计算1gb大小(以字节为单位),还有基本的运算。
其次,Powershell可以获取计算机的服务详细信息、状态等。
get-service
其显示结果如下图所示,采用动词+名词方式命名,比较清楚。
而CMD中无法获取services的(输入services.msc),它是以图形化方式显示出来的。
最后,由于Powershell具有以下特点,它被广泛应用于安全领域,甚至成为每一位Web安全必须掌握的技术。
- 方便
- 支持面向对象
- 支持和.net平台交互
- 强大的兼容性,和cmd、vbs相互调用
- 可扩展性好,它可以用来管理活动目录、虚拟机产品等平台
3.控制台和快捷键
鼠标右键属性,可以对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命令。
4.数学运算
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管道和重定向
1.管道
Powershell管道旨在将上一条命令的输出作为下一条命令的输出。
管道并不是什么新事物,以前的Cmd控制台也有重定向的命令,例如Dir | More可以将结果分屏显示。传统的Cmd管道是基于文本的,但是Powershell管道是基于对象。例如:
linux:ls
cmd:dir
如果只获取其中的name、mode值,则使用如下指令。
ls | format-table name, mode
2.重定向
重定向旨在把命令的输出保存到文件中,‘>’为覆盖,’>>’追加。
ls | format-table name, mode > demo.txt
type demo.txt
上面代码是将ls显示文件内容的name和mode信息存储至本地demo.txt文件夹中,再调用“type demo.txt”打印文件内容。如果两个 >> 它会在原来的基础上,再进行补充(类似 a+),而单个大于号是删除原来的写入(类似 w)。
输出结果如下图所示。
三.Powershell执行外部命令及命令集
1.外部命令
Powershell是CMD的一个扩展,仍然能够让CMD中的命令在Powershell中使用,Powershell初始化时会加载CMD应用程序,所以CMD命令正常情况下在Powershell中都能使用,例如ipconfig。
查看端口信息
netstat -ano
包括协议、本地地址、外部地址、状态、PID(进程号)。
查看网络配置信息
ipconfig
打印路由信息
route print
自定义文件路径,打开应用程序
start notepad
notepad
notepad放在C盘下面的Windows\\System32文件中,能够直接打开。
系统变量
$env:path
Python可以直接打开,Wordpad不能打开,需要添加环境变量中。
2.命令集
通过get-command获取所有命令,通常是动名词的方式。
get-command
获取其用法的命令如下,简称gcm。
get-help get-command
获取进程信息
get-process
获取当前会话的别名
get-alias
获取输入的历史命令信息
get-history
获取当前时间
get-date
四.Powershell别名使用
1.别名基本用法
获取所有命令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
查找所有以Remove开头的别名
get-alias | where$_.definition.startswith("Remove")
其中,where来做一个管道的筛选,$_表示当前的元素,definition 定义一个字符串数组类型。Powershell支持.net强大的类库,里面的definition包括字符串startswith操作,获取字符串开头函数。
查找所有别名,并调用sort降序排序及计算排列。
get-alias | group-object definition | sort -descending Count
注意:自定义别名是临时生效的,当关闭Powershell时就会失效。
2.自定义别名
设置别名,将notepad设置为新的别名pad。pad打开notepad,表明我们的别名创建成功。
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变量基础
1.基础用法
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
2.变量操作
变量的基本运算操作
$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
3.自动化变量
powershell打开会自动加载变量,例如:窗口打开它会自动加载大小,再比如程序的配置信息自动加载。
根目录信息
$home
当前进程的标志符,该自动化内置变量只能读取,不能写入。
$pid
$$
4.环境变量
查看当前环境变量
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")
系统变量对所有用户都生效,用户变量只对当前用户生效。
生效之后如下图所示,用户变量增加了相关值。
六.Powershell调用脚本程序
1.脚本文件执行策略
首先,发现我们的脚本文件是禁止执行的。
get-executionpolicy
接着,我们尝试获取策略帮助信息。
get-help set-executionpolicy
最后修改权限,让其能运行Powershell脚本文件。
set-executionpolicy RemoteSigned
它会提示你需要启动管理员身份运行。
通过管理员身份打开CMD,再设置其权限即可,设置完成之后可以调用相关的脚本程序。
2.调用脚本程序
(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"
运行结果如下图所示:
那么,如何在CMD中运行Powershell文件呢?
我们将demo.bat修改为如下内容,其中&表示运行。
@echo off
powershell "&'C:\\Users\\yxz\\Desktop\\demo.ps1'"
运行命令:
cd desktop
.\\demo.bat
下面方法也可以直接运行
start demo.bat
demo.bat
七.总结
写到这里,这篇文章就介绍完毕,希望您喜欢,本文主要介绍PowerShell基础之后,这将为后续PowerShell恶意代码检测提供基础。文章非常长,作者也花费了很长时间,但相信只要你认真读完,肯定会有收获,尤其是对MSF的理解。
- 一.Powershell初识
1.基础概念
2.为什么强大?
3.控制台和快捷键
4.数学运算 - 二.Powershell管道和重定向
1.管道
2.重定向 - 三.Powershell执行外部命令及命令集
1.外部命令
2.命令集 - 四.Powershell别名使用
1.别名基本用法
2.自定义别名 - 五.Powershell变量基础
1.基础用法
2.变量操作
3.自动化变量
4.环境变量 - 六.Powershell调用脚本程序
1.脚本文件执行策略
2.调用脚本程序 - 七.总结
这篇文章中如果存在一些不足,还请海涵。作者作为网络安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,感谢师傅、师兄师弟、师姐师妹们的教导,深知自己很菜,得努力前行。
欢迎大家讨论,是否觉得这系列文章帮助到您!任何建议都可以评论告知读者,共勉。
- 逆向分析:https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis
- 网络安全:https://github.com/eastmountyxz/NetworkSecuritySelf-study
(By:Eastmount 2022-01-15 夜于武汉 http://blog.csdn.net/eastmount/ )
参考文献:
- [1] https://www.bilibili.com/video/av66327436 [推荐B站老师视频]
- [2]《安全之路Web渗透技术及实战案例解析》陈小兵老师
- [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] 微软官方PowerShell文档
以上是关于[系统安全] 四十六.Powershell恶意代码检测系列 Powershell基础入门及管道和变量的用法的主要内容,如果未能解决你的问题,请参考以下文章
[系统安全] 四十二.Powershell恶意代码检测系列 论文总结及抽象语法树(AST)提取
[系统安全] 四十二.Powershell恶意代码检测系列 论文总结及抽象语法树(AST)提取
[系统安全] 四十三.Powershell恶意代码检测系列 抽象语法树自动提取万字详解
[系统安全] 四十三.Powershell恶意代码检测系列 抽象语法树自动提取万字详解