这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步。前文分享了Powershell基础入门知识,涉及基础概念、管道和重定向、执行外部命令、别名用法、变量定义等。这篇文章将从Powershell条件语句、循环语句、数组、函数 、字符串操作、注册表访问等方面讲解。Powershell被广泛应用于安全领域,甚至成为每一位Web安全必须掌握的技术。
本文参考了Bilibili的Hack学习老师的课程,同时也结合了作者之前的编程经验进行讲解。作者作为网络安全的小白,分享一些自学基础教程给大家,希望你们喜欢。同时,更希望你能与我一起操作深入进步,后续也将深入学习网络安全和系统安全知识并分享相关实验。总之,希望该系列文章对博友有所帮助,写文不容易,大神请飘过,不喜勿喷,谢谢!
下载地址:https://github.com/eastmountyxz/NetworkSecuritySelf-study
百度网盘:https://pan.baidu.com/s/1dsunH8EmOB_tlHYXXguOeA 提取码:izeb
文章目录
前文学习:
[网络安全自学篇] 一.入门笔记之看雪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跨站脚本攻击原理及代码攻防演示(一)
[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)
前文欣赏:
[渗透&攻防] 一.从数据库原理学习网络攻防及防止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
https://baike.baidu.com/item/注册表/101856
C# 系统应用之注册表使用详解 - Eastmount
声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。
一.Powershell操作符
常见的比较运算符包括:
- -eq 等于
- -ne 不等于
- -gt 大于
- -lt 小于
- -le 小于等于
- -contains 包含
- -notcontains 不包含
67 -eq 50
50 -eq 50
1gb -gt 1tb
(1,2,3) -contains 1
(1,2,3) -contains 2
(1,2,3) -contains 4
- 1
- 2
- 3
- 4
- 5
- 6

求反运算符:
- -not
$a=89 -gt 50
$a
-not $a
- 1
- 2
- 3

逻辑运算:
- -and 与运算
- -or 或运算
- -not 非运算
- -xor 异或运算
$true -and $true
$true -and $false
$true -or $false
$false -or $false
-not $true
$true -xor $true
- 1
- 2
- 3
- 4
- 5
- 6

比较数组和集合,从中筛选出不等于0的数字。
1,5,8,0,9 -ne 0
- 1

二.Powershell条件语句
1.if条件判断
if-elseif-else条件判断,执行操作用大括号表示。
$num=100
if($num -gt 90) {"大于90"} else {"小于等于90"}
if($num -gt 100) {"大于100"} else {"小于等于100"}
- 1
- 2
- 3

注意,if-else中间可以增加新的判断elseif,如下所示:
if($num -gt 100) {"大于100"} elseif ($num -eq 100) {"等于100"} else {"小于100"}
- 1

2.switch语句
Switch语句主要用于多种情况的判断,这里在本地创建一个test01.ps1文件,并执行该代码。

传统的if判断如下:
$num=56
if($num -gt 50 -and $num -lt 60)
{
"大于50并且小于60"
}
elseif ($num -eq 50)
{
"等于50"
}
else
{
"小于50"
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
去到桌面1019文件夹,输入“.\test01.ps1”执行代码,再打印该文件的源代码。

switch语句如下:$_表示对变量取值。
$num=56
switch($num)
{
{$_ -lt 50} {"此数值小于50"}
{$_ -eq 50} {"此数值等于50"}
{$_ -gt 50} {"此数值大于50"}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7

三.Powershell循环语句
1.foreach循环
这里定义数组采用“$arr=1…10”实现,表示1到10的数字,在调用foreach循环输出。
$arr=1..10
foreach ($n in $arr){ $n*$n }
- 1
- 2

定义文件“test03.ps1”,只输出偶数内容。
$arr=1..10
foreach ($n in $arr)
{
if (($n%2) -eq 0 )
{
$n
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8

接着利用foreach操作文件目录,将C盘python34文件夹下的路径全部提取出来,赋值到file中输出。
foreach ($file in dir c:\python34)
{
if($file.length -gt 1kb)
{
$file.name
$file.length
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8

原始文件内容如下所示:

也可以定义变量来指定路径
$path_value = dir c:\python34
foreach ($file in $path_value)
{
if($file.length -gt 1kb)
{
$file.name
$file.length
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
2.while循环
while循环需要注意循环的终止条件,防止出现死循环,而do_while循环是先执行一次循环体,再进行判断。
下面这段代码是经典运算:1+2+3+…+99,文件名为“test05.ps1”。
$i=1
$s=0
while($i -lt 100)
{
$s = $s + $i
$i = $i + 1
}
$s
$i
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9

do_whlie先执行循环体,再进行条件判断,如下所示:
$num=15
do
{
$num
$num=$num-1
}
while($num -gt 10)
- 1
- 2
- 3
- 4
- 5
- 6
- 7

3.break和continue关键词
break跳出整个循环,停止执行;continue跳出当前循环一次,继续执行下一个判断。
break: 下面这个代码当数值小于6继续执行,当其等于4停止循环。
$i=1
while($i -lt 6)
{
if($i -eq 4)
{
break
}
else
{
$i
$i++
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13

continue: 跳过了中间等于4的内容。
$i=1
while($i -lt 6)
{
if($i -eq 4)
{
$i++
continue
}
else
{
$i
$i++
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14

4.for循环
利用for循环实现1+2+…+100的代码如下(test09.ps1)。
$sum=0
for($i=1;$i -le 100;$i++)
{
$sum=$sum+$i
}
$sum
- 1
- 2
- 3
- 4
- 5
- 6
学习Powershell基础语法之后,更重要的是解决实际问题,后续作者将继续深入学习。

5.switch循环
使用switch循环实现输出数组1到10,并进行奇数和偶数判断。
$num=1..10
switch($num)
{
default{"number=$_"}
}
n
u
m
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
o
p
e
r
a
t
o
r
"
>
=
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
n
u
m
b
e
r
"
>
1.
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
n
u
m
b
e
r
"
>
.
10
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
k
e
y
w
o
r
d
"
>
s
w
i
t
c
h
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
(
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
v
a
r
i
a
b
l
e
"
>
num</span><span class="token operator">=</span><span class="token number">1.</span><span class="token number">.10</span> <span class="token keyword">switch</span><span class="token punctuation">(</span><span class="token variable">
num</span><spanclass="tokenoperator">=</span><spanclass="tokennumber">1.</span><spanclass="tokennumber">.10</span><spanclass="tokenkeyword">switch</span><spanclass="tokenpunctuation">(</span><spanclass="tokenvariable">num)
{
{(
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
o
p
e
r
a
t
o
r
"
>
_</span> <span class="token operator">%</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token operator">-</span>eq <span class="token number">0</span><span class="token punctuation">}</span> <span class="token punctuation">{</span><span class="token double-quoted-string string">"<span class="token interpolation"><span class="token variable">
</span><spanclass="tokenoperator"> 数值是偶数"}
{(
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
o
p
e
r
a
t
o
r
"
>
_</span> <span class="token operator">%</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token operator">-</span>ne <span class="token number">0</span><span class="token punctuation">}</span> <span class="token punctuation">{</span><span class="token double-quoted-string string">"<span class="token interpolation"><span class="token variable">
</span><spanclass="tokenoperator"> 数值是奇数"}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12

四.Powershell数组
1.数组定义
数组定义一种方法是逗号隔开不同的元素,另一种是通过两个点来定义数组。
$arr=1,2,3,4,5
$arr=1..5
- 1
- 2
判断是否是一个数组,使用如下语句。
$arr -is [array]
- 1

数组可以接受不同的数值。
$arr=1,3.14,"yangxiuzhang"
$arr
$arr -is [array]
- 1
- 2
- 3
空数组定义如下:
$arr=@()
$arr
$arr -is [array]
- 1
- 2
- 3

下面简单比较只有一个元素数组和变量的对比。
$arr=,"hello"
$arr
$arr -is [array]
a
r
r
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
o
p
e
r
a
t
o
r
"
>
=
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
n
u
m
b
e
r
"
>
1
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
v
a
r
i
a
b
l
e
"
>
arr</span><span class="token operator">=</span><span class="token number">1</span> <span class="token variable">
arr</span><spanclass="tokenoperator">=</span><spanclass="tokennumber">1</span><spanclass="tokenvariable">arr
$arr -is [array]
- 1
- 2
- 3
- 4
- 5
- 6
- 7

数组也可以是一个变量或命令,此时它仍然是一个数组。
$arr=ipconfig
$arr
$arr -is [array]
- 1
- 2
- 3

2.访问数组
首先定义一个多钟类型的数组。
$arr=1,"hello world",(get-date)
$arr
- 1
- 2

访问数组特定元素,第一个元素,获取两个元素,获取最后一个元素。
$arr[0]
$arr[0,1]
$arr[-1]
//提取部分元素
$arr[0..2]
- 1
- 2
- 3
- 4
- 5
- 6

获取数组元素大小调用count实现。
$num = $arr[0..2]
$num.count
- 1
- 2
如何将数组倒序输出呢?如下所示。
$arr[($arr.count)..0]
- 1

数组添加一个元素代码如下:
$arr=1,"hello world",(get-date)
$arr+="csdn"
$arr
$arr.count
- 1
- 2
- 3
- 4

更多数组操作,推荐读者结合实际应用进行学习。
五.Powershell函数
1.自定义函数及调用
函数通常包括函数名、参数、函数体,下面是定义及调用一个myping函数的代码(test11.ps1)。
function myping()
{
ping www.baidu.com
}
myping
- 1
- 2
- 3
- 4
- 5
- 6

同样,上面的代码可以修改为指定参数。
function myping($site)
{
ping $site
}
myping www.baidu.com
- 1
- 2
- 3
- 4
- 5
下面这个代码是接收两个参数并显示的功能。
function myinfo($name,$age)
{
$info="I am $name, and i am $age years old."
write-host $info
}
myinfo yxz,28
- 1
- 2
- 3
- 4
- 5
- 6

2.函数返回值
函数返回值通过return实现,可以返回多个值。下面是test13.ps1例子。
function add($num1,$num2)
{
$sum=$num1+$num2
return $sum
}
add 2 4
function fun(
n
u
m
1
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
,
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
v
a
r
i
a
b
l
e
"
>
num1</span><span class="token punctuation">,</span><span class="token variable">
num1</span><spanclass="tokenpunctuation">,</span><spanclass="tokenvariable">num2)
{
s
u
m
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
o
p
e
r
a
t
o
r
"
>
=
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
v
a
r
i
a
b
l
e
"
>
sum</span><span class="token operator">=</span><span class="token variable">
sum</span><spanclass="tokenoperator">=</span><spanclass="tokenvariable">num1+
n
u
m
2
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
v
a
r
i
a
b
l
e
"
>
num2</span> <span class="token variable">
num2</span><spanclass="tokenvariable">sum.gettype()
s
u
m
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
.
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
f
u
n
c
t
i
o
n
"
>
g
e
t
t
y
p
e
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
(
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
)
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
.
<
/
s
p
a
n
>
f
u
l
l
n
a
m
e
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
k
e
y
w
o
r
d
"
>
r
e
t
u
r
n
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
v
a
r
i
a
b
l
e
"
>
sum</span><span class="token punctuation">.</span><span class="token function">gettype</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>fullname <span class="token keyword">return</span> <span class="token variable">
sum</span><spanclass="tokenpunctuation">.</span><spanclass="tokenfunction">gettype</span><spanclass="tokenpunctuation">(</span><spanclass="tokenpunctuation">)</span><spanclass="tokenpunctuation">.</span>fullname<spanclass="tokenkeyword">return</span><spanclass="tokenvariable">sum
}
fun 2.2 4.3
//多个返回值
function other(
n
u
m
1
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
,
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
v
a
r
i
a
b
l
e
"
>
num1</span><span class="token punctuation">,</span><span class="token variable">
num1</span><spanclass="tokenpunctuation">,</span><spanclass="tokenvariable">num2,KaTeX parse error: Expected '}', got 'EOF' at end of input: …oken variable">value=
n
u
m
1
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
,
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
v
a
r
i
a
b
l
e
"
>
num1</span><span class="token punctuation">,</span><span class="token variable">
num1</span><spanclass="tokenpunctuation">,</span><spanclass="tokenvariable">num2,
n
u
m
3
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
k
e
y
w
o
r
d
"
>
r
e
t
u
r
n
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
v
a
r
i
a
b
l
e
"
>
num3</span> <span class="token keyword">return</span> <span class="token variable">
num3</span><spanclass="tokenkeyword">return</span><spanclass="tokenvariable">value
}
other 2.2 4 6
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24

六.Powershell字符串及交互
1.定义文本及转义字符
表达式中可以定义只,如下所示。同时,单引号和双引号可以相互嵌套,这和JAVA、PHP、Python中的变量套接类似。
"hello world $(get-date)"
"hello world $(5*7)"
"hello, my name is 'yangxiuzhang'"
- 1
- 2
- 3
输出结果如下图所示:

在Powershell中,转义字符不再是斜杠(\)而是(`),如下所示。
- `n 换行
- `r 回车符
- `t tab键
- `b 退格符
- `’ 单引号
"hello,`n my name is `'yangxiuzhang`'"
- 1


2.用户交互
read-host 读取用户的输入。
$input = read-host "请输入您的姓名"
"您好!您输入的姓名是:$input"
- 1
- 2

3.格式化字符串
传统的多个变量输出方法:
$name="yangxiuzhang"
$age=25
$body="strong"
$height=1.72
"My name is $name, i am $age years old, and my body is $body, my height is $height"
- 1
- 2
- 3
- 4
- 5

格式化字符串输出方法:
"My name is {0}, i am {1} years old, and my body is {2}, my height is {3}" -f $name,$age,$body,$height
- 1

4.字符串操作
任何编程语言,都绕不过字符串操作,在网络安全领域,获取ip地址、URL拼接、图片或脚本文件获取等都涉及字符串操作,下面进行简单分享。
字符串分割
$str="c:\windows\system32\demo.txt"
$str.split("\")
//数组类型,可以通过数组下标访问
$str.split("\").gettype()
- 1
- 2
- 3
- 4

获取图片名称
$str="https://blog.youkuaiyun.com/Eastmount/102781411/logo.png"
$str.split("/")[-1]
- 1
- 2

是否以某个字符结尾和是否包含某个字符。
$str.endswith("png")
$str.contains("csdn")
- 1
- 2

字符串比较,-1表示两个字符串不一样,相等输出0。
$str="https://blog.youkuaiyun.com/Eastmount/102781411/logo.png"
$str.compareto("window")
$str.compareto("https://blog.youkuaiyun.com/Eastmount/102781411/logo.png")
- 1
- 2
- 3

其他操作如下:
//获取下标
$str.indexof("s")
//字符插入
$str.insert(4,“yxz”)
//字符串替换
$str.replace(“n”,“N”)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8

七.Powershell注册表操作
注册表(Registry,繁体中文版Windows操作系统称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。早在Windows 3.0推出OLE技术的时候,注册表就已经出现。随后推出的Windows NT是第一个从系统级别广泛使用注册表的操作系统。但是,从Microsoft Windows 95操作系统开始,注册表才真正成为Windows用户经常接触的内容,并在其后的操作系统中继续沿用至今。
在CMD中输入regedit即可打开注册表,如下图所示。


注册表图形化界面显示如下,包括各种程序的配置信息,不能随便修改它,很容易造成系统故障。
- HKEY_CLASSES_ROOT:定义文档的类型\类以及与类型关联的信息以及COM组件的配置数据
- HKEY_CURRENT_USER:包含当前登录到Windows的用户的配置信息
- HKEY_LOCAL_MACHINE:包含与计算机相关的配置信息,不管用户是否登录
- HKEY_USERS:包含有关默认用户配置的信息
- HKEY_CURRENT_CONFIG:包含有关非用户特定的硬件的配置信息

在Powershell中显示注册表指令如下:
cd hkcu:
dir
- 1
- 2

对应注册表图形界面。

cd system
dir
- 1
- 2

对应图形界面。

其他访问也类似。
cd HKLM:
- 1

对应图形界面:

读取键值
get-itemproperty
- 1

设置键值
set-itemproperty
- 1
由于注册表不能随便修改,很容易造成系统故障,后续随着作者深入学习,了解更多网络安全中Powershell及注册表工作再来分享,希望读者喜欢该系列文章。
作者作为网络安全的小白,分享一些自学基础教程给大家,希望你们喜欢。同时,更希望你能与我一起操作深入进步,后续也将深入学习网络安全和系统安全知识并分享相关实验。总之,希望该系列文章对博友有所帮助,写文不容易,大神请飘过,不喜勿喷,谢谢!共勉~
(By:Eastmount 2019-10-29 中午12点 http://blog.youkuaiyun.com/eastmount/ )
</div>
本文深入探讨Powershell的高级编程技巧,涵盖条件与循环语句、数组操作、函数定义与调用、字符串处理及注册表访问。适合网络安全与系统管理员进阶学习。
5815

被折叠的 条评论
为什么被折叠?



