这是做者的系列网络安全自学教程,主要是关于网安工具和实践操做的在线笔记,特分享出来与博友共勉,但愿您们喜欢,一块儿进步。前文分享了XSS跨站脚本攻击,从原理、示例、危害到三种常见类型(反射型、存储型、DOM型),并结合代码示例进行详细讲解。这篇文章将讲解Powershell基础入门知识,包括常见的用法,涉及基础概念、管道和重定向、执行外部命令、别名用法、变量定义等。Powershell被普遍应用于安全领域,甚至成为每一位Web安全必须掌握的技术。php
本文参考了Bilibili的Hack学习老师的课程,同时也结合了做者以前的编程经验进行讲解。做者做为网络安全的小白,分享一些自学基础教程给你们,但愿大家喜欢。同时,更但愿你能与我一块儿操做深刻进步,后续也将深刻学习网络安全和系统安全知识并分享相关实验。总之,但愿该系列文章对博友有所帮助,写文不容易,大神请飘过,不喜勿喷,谢谢!html
下载地址:https://github.com/eastmountyxz/NetworkSecuritySelf-study
百度网盘:https://pan.baidu.com/s/1dsunH8EmOB_tlHYXXguOeA 提取码:izeblinux
前文学习:
[网络安全自学篇] 一.入门笔记之看雪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跨站脚本攻击原理及代码攻防演示(一)git
前文欣赏:
[渗透&攻防] 一.从数据库原理学习网络攻防及防止SQL注入
[渗透&攻防] 二.SQL MAP工具从零解读数据库及基础用法
[渗透&攻防] 三.数据库之差别备份及Caidao利器
[渗透&攻防] 四.详解MySQL数据库攻防及Fiddler神器分析数据包github
参考文献:web
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正则表达式
声明:本人坚定反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络须要咱们共同维护,更推荐你们了解它们背后的原理,更好地进行防御。算法
Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者能够利用 .NET Framework的强大功能。它引入了许多很是有用的新概念,从而进一步扩展了您在 Windows 命令提示符和 Windows Script Host 环境中得到的知识和建立的脚本。shell
传统的CMD支持脚本编写,但扩展性很差,而Powershell相似于Linux shell,具备更好的远程处理、工做流、可更新的帮助、预约任务(Scheduled Job)、CIM等优势。数据库
那么,如何进入Powershell呢?
一种方法是在运行中直接输入Powershell打开,另外一种方法是CMD中输入Powershell打开。
不一样操做系统内置的Powershell是不同的,好比win7或win2008,如何查看版本呢?
$psversiontable
输出结果以下图所示:
首先,它能够进行计算任务,包括计算1gb大小(以字节为单位),还有基本的运算。
其次,Powershell能够获取计算机的服务详细信息、状态等。
get-service
其显示结果以下图所示,采用动词+名词方式命名,比较清楚。
而CMD中没法获取services的(输入services.msc),它是以图形化方式显示出来的。
最后,因为Powershell具备如下特色,它被普遍应用于安全领域,甚至成为每一位Web安全必须掌握的技术。
鼠标右键属性,能够对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
若是只获取其中的name、mode值,则使用以下指令。
ls | format-table name, mode
重定向旨在把命令的输出保存到文件中,‘>’为覆盖,’>>’追加。
ls | format-table name, mode > demo.txt type demo.txt
上面代码是将ls显示文件内容的name和mode信息存储至本地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
notepad放在C盘下面的Windows\System32文件中,可以直接打开。
系统变量
$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
查找全部以Remove开头的别名
get-alias | where{$_.definition.startswith("Remove")}
其中,where来作一个管道的筛选,$_表示当前的元素,definition 定义一个字符串数组类型。Powershell支持.net强大的类库,里面的definition包括字符串startswith操做,获取字符串开头函数。
查找全部别名,并调用sort降序排序及计算排列。
get-alias | group-object definition | sort -descending Count
注意:自定义别名是临时生效的,当关闭Powershell时就会失效。
设置别名,将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变量跟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"} }
运行结果以下图所示:
那么,如何在CMD中运行Powershell文件呢?
咱们将demo.bat修改成以下内容,其中&表示运行。
@echo off powershell "&'C:\Users\yxz\Desktop\demo.ps1'"
运行命令:
cd desktop .\demo.bat
下面方法也能够直接运行
start demo.bat demo.bat
“没有网络安全就没有国家安全,没有信息化就没有现代化”,这是我第三次听院士授课。每次的感觉都很震撼,他们是这个国家的脊梁,总能站在国家和民族的角度去思考问题、解决问题,用通俗易懂的图表去诠释知识,去构建祖国的重大工程和梦想,致敬。侠之为大,为国为民。补充一句,沈院士很早就到了会场修改PPT,特别增长了区块链的知识。
不少大牛和老师的分享都让我受益不浅,来自清华大学和俄亥俄州立大学的两位张老师的分享是我第三次听了,但仍是很懵,下次争取能听懂。来年在雄安新区举办,但愿能像学弟和学妹同样,站上讲台,加油!
(By:Eastmount 2019-10-28 下午6点 http://blog.csdn.net/eastmount/ )