[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)

这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步。前文分享了XSS跨站脚本攻击,从原理、示例、危害到三种常见类型(反射型、存储型、DOM型),并结合代码示例进行详细讲解。这篇文章将讲解Powershell基础入门知识,包括常见的用法,涉及基础概念、管道和重定向、执行外部命令、别名用法、变量定义等。Powershell被广泛应用于安全领域,甚至成为每一位Web安全必须掌握的技术。

本文参考了Bilibili的Hack学习老师的课程,同时也结合了作者之前的编程经验进行讲解。作者作为网络安全的小白,分享一些自学基础教程给大家,希望你们喜欢。同时,更希望你能与我一起操作深入进步,后续也将深入学习网络安全和系统安全知识并分享相关实验。总之,希望该系列文章对博友有所帮助,写文不容易,大神请飘过,不喜勿喷,谢谢!

下载地址:https://github.com/eastmountyxz/NetworkSecuritySelf-study
百度网盘:https://pan.baidu.com/s/1dsunH8EmOB_tlHYXXguOeA 提取码:izeb

文章目录

  • 一.Powershell初识
    • 1.基础概念
    • 2.为什么强大?
    • 3.控制台和快捷键
    • 4.数学运算
  • 二.Powershell管道和重定向
    • 1.管道
    • 2.重定向
  • 三.Powershell执行外部命令及命令集
    • 1.外部命令
    • 2.命令集
  • 四.Powershell别名使用
    • 1.别名基本用法
    • 2.自定义别名
  • 五.Powershell变量基础
    • 1.基础用法
    • 2.变量操作
    • 3.自动化变量
    • 4.环境变量
  • 六.Powershell调用脚本程序
    • 1.脚本文件执行策略
    • 2.调用脚本程序
  • 七.总结

前文学习:
[网络安全自学篇] 一.入门笔记之看雪Web安全学习及异或解密示例
[网络安全自学篇] 二.Chrome浏览器保留密码功能渗透解析及登录加密入门笔记
[网络安全自学篇] 三.Burp Suite工具安装配置、Proxy基础用法及暴库示例
[网络安全自学篇] 四.实验吧CTF实战之WEB渗透和隐写术解密
[网络安全自学篇] 五.IDA Pro反汇编工具初识及逆向工程解密实战
[网络安全自学篇] 六.OllyDbg动态分析工具基础用法及Crakeme逆向破解
[网络安全自学篇] 七.快手视频下载之Chrome浏览器Network分析及Python爬虫探讨
[网络安全自学篇] 八.Web漏洞及端口扫描之Nmap、ThreatScan和DirBuster工具
[网络安全自学篇] 九.社会工程学之基础概念、IP获取、IP物理定位、文件属性
[网络安全自学篇] 十.论文之基于机器学习算法的主机恶意代码
[网络安全自学篇] 十一.虚拟机VMware+Kali安装入门及Sqlmap基本用法
[网络安全自学篇] 十二.Wireshark安装入门及抓取网站用户名密码(一)
[网络安全自学篇] 十三.Wireshark抓包原理(ARP劫持、MAC泛洪)及数据流追踪和图像抓取(二)
[网络安全自学篇] 十四.Python攻防之基础常识、正则表达式、Web编程和套接字通信(一)
[网络安全自学篇] 十五.Python攻防之多线程、C段扫描和数据库编程(二)
[网络安全自学篇] 十六.Python攻防之弱口令、自定义字典生成及网站暴库防护
[网络安全自学篇] 十七.Python攻防之构建Web目录扫描器及ip代理池(四)
[网络安全自学篇] 十八.XSS跨站脚本攻击原理及代码攻防演示(一)

前文欣赏:
[渗透&攻防] 一.从数据库原理学习网络攻防及防止SQL注入
[渗透&攻防] 二.SQL MAP工具从零解读数据库及基础用法
[渗透&攻防] 三.数据库之差异备份及Caidao利器
[渗透&攻防] 四.详解MySQL数据库攻防及Fiddler神器分析数据包

参考文献:

https://www.bilibili.com/video/av66327436 [推荐B站老师视频]
《安全之路Web渗透技术及实战案例解析》陈小兵老师
https://baike.baidu.com/item/Windows Power Shell/693789
https://www.pstips.net/powershell-piping-and-routing.html
https://www.pstips.net/using-the-powershell-pipeline.html

声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。


一.Powershell初识

1.基础概念

Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能。它引入了许多非常有用的新概念,从而进一步扩展了您在 Windows 命令提示符和 Windows Script Host 环境中获得的知识和创建的脚本。

传统的CMD支持脚本编写,但扩展性不好,而Powershell类似于Linux shell,具有更好的远程处理、工作流、可更新的帮助、预定任务(Scheduled Job)、CIM等优点。

那么,如何进入Powershell呢?
一种方法是在运行中直接输入Powershell打开,另一种方法是CMD中输入Powershell打开。

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第1张图片

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第2张图片

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第3张图片

不同操作系统内置的Powershell是不一样的,比如win7或win2008,如何查看版本呢?

$psversiontable

输出结果如下图所示:

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第4张图片

2.为什么强大?

首先,它可以进行计算任务,包括计算1gb大小(以字节为单位),还有基本的运算。

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第5张图片

其次,Powershell可以获取计算机的服务详细信息、状态等。

get-service

其显示结果如下图所示,采用动词+名词方式命名,比较清楚。

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第6张图片

而CMD中无法获取services的(输入services.msc),它是以图形化方式显示出来的。

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第7张图片

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第8张图片

最后,由于Powershell具有以下特点,它被广泛应用于安全领域,甚至成为每一位Web安全必须掌握的技术。

  • 方便
  • 支持面向对象
  • 支持和.net平台交互
  • 强大的兼容性,和cmd、vbs相互调用
  • 可扩展性好,它可以用来管理活动目录、虚拟机产品等平台

3.控制台和快捷键

鼠标右键属性,可以对Powershell控制台进行编辑,并且它支持两种编辑模式,快速编辑模式默认钩上的。

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第9张图片

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第10张图片

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基础入门及常见用法(一)_第11张图片

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基础入门及常见用法(一)_第12张图片


二.Powershell管道和重定向

1.管道

Powershell管道旨在将上一条命令的输出作为下一条命令的输出。

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第13张图片

管道并不是什么新事物,以前的Cmd控制台也有重定向的命令,例如Dir | More可以将结果分屏显示。传统的Cmd管道是基于文本的,但是Powershell管道是基于对象。例如:

linux:ls
cmd:dir

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第14张图片

如果只获取其中的name、mode值,则使用如下指令。

ls | format-table name, mode

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第15张图片

2.重定向

重定向旨在把命令的输出保存到文件中,‘>’为覆盖,’>>’追加。

ls | format-table name, mode > demo.txt
type demo.txt

上面代码是将ls显示文件内容的name和mode信息存储至本地demo.txt文件夹中,再调用“type demo.txt”打印文件内容。如果两个 >> 它会在原来的基础上,再进行补充(类似 a+),而单个大于号是删除原来的写入(类似 w)。

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第16张图片
输出结果如下图所示。

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第17张图片


三.Powershell执行外部命令及命令集

1.外部命令

Powershell是CMD的一个扩展,仍然能够让CMD中的命令在Powershell中使用,Powershell初始化时会加载CMD应用程序,所以CMD命令正常情况下在Powershell中都能使用,例如ipconfig。

查看端口信息

netstat -ano

包括协议、本地地址、外部地址、状态、PID(进程号)。
[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第18张图片

查看网络配置信息

ipconfig

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第19张图片

打印路由信息

route print

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第20张图片

自定义文件路径,打开应用程序

start notepad
notepad

notepad放在C盘下面的Windows\System32文件中,能够直接打开。
[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第21张图片

系统变量

$env:path

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第22张图片

Python可以直接打开,Wordpad不能打开,需要添加环境变量中。

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第23张图片

2.命令集

通过get-command获取所有命令,通常是动名词的方式。

get-command

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第24张图片

获取其用法的命令如下,简称gcm。

get-help get-command

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第25张图片

获取进程信息

get-process

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第26张图片

获取当前会话的别名

get-alias

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第27张图片

获取输入的历史命令信息

get-history

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第28张图片

获取当前时间

get-date

在这里插入图片描述


四.Powershell别名使用

1.别名基本用法

获取所有命令get-command可以用别名gcm替代。

get-command
gcm

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第29张图片

获取当前目录的所有文件信息get-childitem,可以用ls、dir两个命令达到同样的效果。

get-childitem
ls
dir

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第30张图片

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第31张图片

获取相关的帮助信息,其命令如下:

get-help get-childitem

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第32张图片

获取别名所对应真实的命令

get-alias -name ls
get-alias -name dir

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第33张图片

查找所有以Remove开头的别名

get-alias | where{$_.definition.startswith("Remove")}

其中,where来做一个管道的筛选,$_表示当前的元素,definition 定义一个字符串数组类型。Powershell支持.net强大的类库,里面的definition包括字符串startswith操作,获取字符串开头函数。

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第34张图片

查找所有别名,并调用sort降序排序及计算排列。

get-alias | group-object definition | sort -descending Count

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第35张图片

注意:自定义别名是临时生效的,当关闭Powershell时就会失效。

2.自定义别名

设置别名,将notepad设置为新的别名pad。pad打开notepad,表明我们的别名创建成功。

set-alias -name pad -value notepad

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第36张图片

别名是临时生成的,关掉Powershell即可失效,也可以撰写命令删除。

del alias:pad

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第37张图片

保存别名

export-alias demo.ps
dir
type demo.ps

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第38张图片

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第39张图片

导入别名命令如下,其中-force表示强制导入。

import-alias -force demo.ps

五.Powershell变量基础

1.基础用法

Powershell变量跟PHP很类似,如下所示。

$name='eastmount'
$name
$age=28
$age

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第40张图片

Powershell对大小写不敏感,$a 和 $A 一样。复杂变量用大括号引起来,但不建议同学们这里定义。

${"I am a" var ()}="yxz"
${"I am a" var ()}
$n=(7*6+8)/2
$n=3.14

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第41张图片

变量也可以设置等于命令。

$n=ls

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第42张图片

变量多个同时赋值,但不建议这么写。

$n1=$n2=$n3=25
$n1,$n2,$n3

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第43张图片

2.变量操作

变量的基本运算操作

$a=2
$b=10
$c=a+b
$a,$b,$c

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第44张图片

传统变量交换方法

$num1=10
$num2=20
$temp=$num1
$num1=$num2
$num2=$temp
$num1,$num2

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第45张图片

现在变量交换的写法

$num1=10
$num2=20
$num1,$num2=$num2,$num1
$num1,$num2

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第46张图片

查看当前的变量

ls variable:

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第47张图片

查找特定的变量值,星号表示代替所有的值(num开头)。

ls variable:num*
ls variable:num1

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第48张图片

查找变量是否存在

test-path variable:num1
test-path variable:num0

在这里插入图片描述

删除变量

del variable:num1
test-path variable:num1

在这里插入图片描述

专用变量管理的命令

clear-variable
remove-variable
new-variable

3.自动化变量

powershell打开会自动加载变量,例如:窗口打开它会自动加载大小,再比如程序的配置信息自动加载。

根目录信息

$home

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第49张图片

当前进程的标志符,该自动化内置变量只能读取,不能写入。

$pid
$$

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第50张图片

4.环境变量

查看当前环境变量

ls env:

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第51张图片

打印某个环境变量的值

$env:windir

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第52张图片

创建新的环境变量

$env:name='eastmount'
ls env:na*

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第53张图片

删除环境变量

del env:name
ls env:na*

在这里插入图片描述

更新环境变量,注意它只是临时生效,并不会记录到我们的系统中。

$env:OS
$env:OS="Linux"
$env:OS

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第54张图片

永久生效如何实现呢?增加路径至环境变量PATH中,只对User用户生效。

[environment]::setenvironmentvariable("PATH","E:\","User")
[environment]::getenvironmentvariable("PATH","User")

系统变量对所有用户都生效,用户变量只对当前用户生效。

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第55张图片

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第56张图片

生效之后如下图所示,用户变量增加了相关值。
[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第57张图片


六.Powershell调用脚本程序

1.脚本文件执行策略

首先,发现我们的脚本文件是禁止执行的。

get-executionpolicy

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第58张图片

接着,我们尝试获取策略帮助信息。

get-help set-executionpolicy

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第59张图片

最后修改权限,让其能运行Powershell脚本文件。

set-executionpolicy RemoteSigned

它会提示你需要启动管理员身份运行。
[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第60张图片

通过管理员身份打开CMD,再设置其权限即可,设置完成之后可以调用相关的脚本程序。

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第61张图片

2.调用脚本程序

(1) 定义一个demo.bat文件,其内容如下,关闭回写,打印hello world。

@echo off
echo hello world

运行命令打开:

cd desktop
.\demo.bat

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第62张图片

(2) 定义一个demo.vbs文件,内容如下:

msgbox "CSDN Eastmount"

运行命令打开:

cd desktop
.\demo.vbs

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第63张图片

(3) 运行Powershell脚本文件也类似。

$number=49
switch($number)
{
	{($_ -lt 50) -and ($_ -gt 40)} {"此数值大于50且小于40"}
	50 {"此数值等于50"}
	{$_ -gt 50} {"此数值大于50"}
}

运行结果如下图所示:

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第64张图片
[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第65张图片

那么,如何在CMD中运行Powershell文件呢?
我们将demo.bat修改为如下内容,其中&表示运行。

@echo off
powershell "&'C:\Users\yxz\Desktop\demo.ps1'" 

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第66张图片
运行命令:

cd desktop
.\demo.bat

下面方法也可以直接运行

start demo.bat
demo.bat

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第67张图片


七.总结

“没有网络安全就没有国家安全,没有信息化就没有现代化”,这是我第三次听院士授课。每次的感受都很震撼,他们是这个国家的脊梁,总能站在国家和民族的角度去思考问题、解决问题,用通俗易懂的图表去诠释知识,去构建祖国的重大工程和梦想,致敬。侠之为大,为国为民。补充一句,沈院士很早就到了会场修改PPT,特别增加了区块链的知识。

[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)_第68张图片

很多大牛和老师的分享都让我受益匪浅,来自清华大学和俄亥俄州立大学的两位张老师的分享是我第三次听了,但还是很懵,下次争取能听懂。来年在雄安新区举办,希望能像学弟和学妹一样,站上讲台,加油!

(By:Eastmount 2019-10-28 下午6点 http://blog.csdn.net/eastmount/ )


你可能感兴趣的:(网络安全,Web安全,渗透&攻防)