[系统安全] 四十六.Powershell恶意代码检测系列 (1)Powershell基础入门及管道和变量的用法
您可能之前看到過我寫的類似文章,為什么還要重復撰寫呢?只是想更好地幫助初學者了解病毒逆向分析和系統安全,更加成體系且不破壞之前的系列。因此,我重新開設了這個專欄,準備系統整理和深入學習系統安全、逆向分析和惡意代碼檢測,“系統安全”系列文章會更加聚焦,更加系統,更加深入,也是作者的慢慢成長史。換專業確實挺難的,逆向分析也是塊硬骨頭,但我也試試,看看自己未來四年究竟能將它學到什么程度,漫漫長征路,偏向虎山行。享受過程,一起加油~
前文帶領大家了解Metasploit技術,涉及后滲透相關的技術,包括信息收集、權限提權、移植漏洞模塊和后門。這篇文章詳細講解Powershell基礎入門知識,包括常見的用法,涉及基礎概念、管道和重定向、執行外部命令、別名用法、變量定義等。Powershell被廣泛應用于安全領域,甚至成為每一位Web安全必須掌握的技術。本文參考了Bilibili的Hack學習老師的課程,同時也結合了作者之前的編程經驗進行講解。作者作為網絡安全的小白,分享一些自學基礎教程給大家,希望你們喜歡。同時,這些大佬是真的值得我們去學習,獻上小弟的膝蓋~fighting!
- 只有更深入的了解PowerShell基礎及用法,才能更好地檢測惡意代碼
文章目錄
- 一.Powershell初識
- 1.基礎概念
- 2.為什么強大?
- 3.控制臺和快捷鍵
- 4.數學運算
- 二.Powershell管道和重定向
- 1.管道
- 2.重定向
- 三.Powershell執行外部命令及命令集
- 1.外部命令
- 2.命令集
- 四.Powershell別名使用
- 1.別名基本用法
- 2.自定義別名
- 五.Powershell變量基礎
- 1.基礎用法
- 2.變量操作
- 3.自動化變量
- 4.環境變量
- 六.Powershell調用腳本程序
- 1.腳本文件執行策略
- 2.調用腳本程序
- 七.總結
希望這些基礎原理能更好地幫助大家做好防御和保護,基礎性文章,希望對您有所幫助。作者作為網絡安全的小白,分享一些自學基礎教程給大家,主要是在線筆記,希望您們喜歡。同時,更希望您能與我一起操作和進步,后續將深入學習網絡安全和系統安全知識并分享相關實驗。總之,希望該系列文章對博友有所幫助,寫文不易,大神們不喜勿噴,謝謝!如果文章對您有幫助,將是我創作的最大動力,點贊、評論、私聊均可,一起加油喔!
作者的github資源:
- 逆向分析:https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis
- 網絡安全:https://github.com/eastmountyxz/NetworkSecuritySelf-study
從2019年7月開始,我來到了一個陌生的專業——網絡空間安全。初入安全領域,是非常痛苦和難受的,要學的東西太多、涉及面太廣,但好在自己通過分享100篇“網絡安全自學”系列文章,艱難前行著。感恩這一年相識、相知、相趣的安全大佬和朋友們,如果寫得不好或不足之處,還請大家海涵!
接下來我將開啟新的安全系列,叫“系統安全”,也是免費的100篇文章,作者將更加深入的去研究惡意樣本分析、逆向分析、內網滲透、網絡攻防實戰等,也將通過在線筆記和實踐操作的形式分享與博友們學習,希望能與您一起進步,加油~
- 推薦前文:網絡安全自學篇系列-100篇
前文分析:
- [系統安全] 一.什么是逆向分析、逆向分析基礎及經典掃雷游戲逆向
- [系統安全] 二.如何學好逆向分析及呂布傳游戲逆向案例
- [系統安全] 三.IDA Pro反匯編工具初識及逆向工程解密實戰
- [系統安全] 四.OllyDbg動態分析工具基礎用法及Crakeme逆向
- [系統安全] 五.OllyDbg和Cheat Engine工具逆向分析植物大戰僵尸游戲
- [系統安全] 六.逆向分析之條件語句和循環語句源碼還原及流程控制
- [系統安全] 七.逆向分析之PE病毒原理、C++實現文件加解密及OllyDbg逆向
- [系統安全] 八.Windows漏洞利用之CVE-2019-0708復現及藍屏攻擊
- [系統安全] 九.Windows漏洞利用之MS08-067遠程代碼執行漏洞復現及深度提權
- [系統安全] 十.Windows漏洞利用之SMBv3服務遠程代碼執行漏洞(CVE-2020-0796)復現
- [系統安全] 十一.那些年的熊貓燒香及PE病毒行為機理分析
- [系統安全] 十二.熊貓燒香病毒IDA和OD逆向分析(上)病毒初始化
- [系統安全] 十三.熊貓燒香病毒IDA和OD逆向分析(中)病毒釋放機理
- [系統安全] 十四.熊貓燒香病毒IDA和OD逆向分析–病毒釋放過程(下)
- [系統安全] 十五.Chrome瀏覽器保留密碼功能滲透解析、藍屏漏洞及某音樂軟件漏洞復現
- [系統安全] 十六.PE文件逆向基礎知識(PE解析、PE編輯工具和PE修改)
- [系統安全] 十七.Windows PE病毒概念、分類及感染方式詳解
- [系統安全] 十八.病毒攻防機理及WinRAR惡意劫持漏洞(腳本病毒、自啟動、定時關機、藍屏攻擊)
- [系統安全] 十九.宏病毒之入門基礎、防御措施、自發郵件及APT28宏樣本分析
- [系統安全] 二十.PE數字簽名之(上)什么是數字簽名及Signtool簽名工具詳解
- [系統安全] 二十一.PE數字簽名之(中)Signcode、PEView、010Editor、Asn1View工具用法
- [系統安全] 二十二.PE數字簽名之(下)微軟證書漏洞CVE-2020-0601復現及Windows驗證機制分析
- [系統安全] 二十三.逆向分析之OllyDbg動態調試復習及TraceMe案例分析
- [系統安全] 二十四.逆向分析之OllyDbg調試INT3斷點、反調試、硬件斷點與內存斷點
- [系統安全] 二十五.WannaCry勒索病毒分析 (1)Python復現永恒之藍漏洞實現勒索加密
- [系統安全] 二十六.WannaCry勒索病毒分析 (2)MS17-010漏洞利用及病毒解析
- [系統安全] 二十七.WannaCry勒索病毒分析 (3)蠕蟲傳播機制解析及IDA和OD逆向
- [系統安全] 二十八.WannaCry勒索病毒分析 (4)全網"最"詳細的蠕蟲傳播機制解讀
- [系統安全] 二十九.深信服分享之外部威脅防護和勒索病毒對抗
- [系統安全] 三十.CS逆向分析 (1)你的游戲子彈用完了嗎?Cheat Engine工具入門普及
- [系統安全] 三十一.惡意代碼檢測(1)惡意代碼攻擊溯源及惡意樣本分析
- [系統安全] 三十二.惡意代碼檢測(2)常用技術詳解及總結
- [系統安全] 三十三.惡意代碼檢測(3)基于機器學習的惡意代碼檢測技術
- [系統安全] 三十四.惡意代碼檢測(4)編寫代碼自動提取IAT表、字符串及時間戳溯源地區
- [系統安全] 三十五.Procmon工具基本用法及文件進程、注冊表查看
- [系統安全] 三十六.APT系列(1)APT攻擊溯源防御與常見APT組織的攻擊案例
- [系統安全] 三十七.APT系列(2)遠控木馬詳解與防御及APT攻擊中的遠控
- [系統安全] 三十八.APT系列(3)惡意代碼與APT攻擊中的武器(強推Seak老師)
- [系統安全] 三十九.APT系列(4)APT攻防溯源普及和醫療數據安全防御總結
- [系統安全] 四十.APT系列(5)APT組織常用WinRAR漏洞復現(CVE-2018-20250)及惡意軟件劫持
- [系統安全] 四十一.APT系列(6)Python解析PE文件并獲取時間戳判斷來源區域
- [系統安全] 四十二.APT系列(7)基于溯源圖的APT攻擊檢測安全頂會論文總結
- [系統安全] 四十三.APT系列(8)Powershell和PowerSploit腳本滲透攻擊手段詳解
- [系統安全] 四十四.APT系列(9)Metasploit技術之基礎用法萬字詳解及防御機理
- [系統安全] 四十五.APT系列(10)Metasploit后滲透技術信息收集、權限提權和功能模塊詳解
- [系統安全] 四十六.Powershell惡意代碼檢測系列 (1)Powershell基礎入門及管道和變量的用法
聲明:本人堅決反對利用教學方法進行犯罪的行為,一切犯罪行為必將受到嚴懲,綠色網絡需要我們共同維護,更推薦大家了解它們背后的原理,更好地進行防護。
一.Powershell初識
1.基礎概念
Windows PowerShell 是一種命令行外殼程序和腳本環境,使命令行用戶和腳本編寫者可以利用 .NET Framework的強大功能。它引入了許多非常有用的新概念,從而進一步擴展了您在 Windows 命令提示符和 Windows Script Host 環境中獲得的知識和創建的腳本。
傳統的CMD支持腳本編寫,但擴展性不好,而Powershell類似于Linux shell,具有更好的遠程處理、工作流、可更新的幫助、預定任務(Scheduled Job)、CIM等優點。
那么,如何進入Powershell呢?
一種方法是在運行中直接輸入Powershell打開,另一種方法是CMD中輸入Powershell打開。
不同操作系統內置的Powershell是不一樣的,比如win7或win2008,如何查看版本呢?
$psversiontable輸出結果如下圖所示:
2.為什么強大?
首先,它可以進行計算任務,包括計算1gb大小(以字節為單位),還有基本的運算。
其次,Powershell可以獲取計算機的服務詳細信息、狀態等。
get-service其顯示結果如下圖所示,采用動詞+名詞方式命名,比較清楚。
而CMD中無法獲取services的(輸入services.msc),它是以圖形化方式顯示出來的。
最后,由于Powershell具有以下特點,它被廣泛應用于安全領域,甚至成為每一位Web安全必須掌握的技術。
- 方便
- 支持面向對象
- 支持和.net平臺交互
- 強大的兼容性,和cmd、vbs相互調用
- 可擴展性好,它可以用來管理活動目錄、虛擬機產品等平臺
3.控制臺和快捷鍵
鼠標右鍵屬性,可以對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命令。
4.數學運算
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管道和重定向
1.管道
Powershell管道旨在將上一條命令的輸出作為下一條命令的輸出。
管道并不是什么新事物,以前的Cmd控制臺也有重定向的命令,例如Dir | More可以將結果分屏顯示。傳統的Cmd管道是基于文本的,但是Powershell管道是基于對象。例如:
linux:ls cmd:dir如果只獲取其中的name、mode值,則使用如下指令。
ls | format-table name, mode2.重定向
重定向旨在把命令的輸出保存到文件中,‘>’為覆蓋,’>>’追加。
ls | format-table name, mode > demo.txt type demo.txt上面代碼是將ls顯示文件內容的name和mode信息存儲至本地demo.txt文件夾中,再調用“type demo.txt”打印文件內容。如果兩個 >> 它會在原來的基礎上,再進行補充(類似 a+),而單個大于號是刪除原來的寫入(類似 w)。
輸出結果如下圖所示。
三.Powershell執行外部命令及命令集
1.外部命令
Powershell是CMD的一個擴展,仍然能夠讓CMD中的命令在Powershell中使用,Powershell初始化時會加載CMD應用程序,所以CMD命令正常情況下在Powershell中都能使用,例如ipconfig。
查看端口信息
netstat -ano包括協議、本地地址、外部地址、狀態、PID(進程號)。
查看網絡配置信息
ipconfig打印路由信息
route print自定義文件路徑,打開應用程序
start notepad notepadnotepad放在C盤下面的Windows\System32文件中,能夠直接打開。
系統變量
$env:pathPython可以直接打開,Wordpad不能打開,需要添加環境變量中。
2.命令集
通過get-command獲取所有命令,通常是動名詞的方式。
get-command獲取其用法的命令如下,簡稱gcm。
get-help get-command獲取進程信息
get-process獲取當前會話的別名
get-alias獲取輸入的歷史命令信息
get-history獲取當前時間
get-date四.Powershell別名使用
1.別名基本用法
獲取所有命令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時就會失效。
2.自定義別名
設置別名,將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變量基礎
1.基礎用法
Powershell變量跟PHP很類似,如下所示。
$name='eastmount' $name $age=28 $agePowershell對大小寫不敏感,$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,$n32.變量操作
變量的基本運算操作
$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-variable3.自動化變量
powershell打開會自動加載變量,例如:窗口打開它會自動加載大小,再比如程序的配置信息自動加載。
根目錄信息
$home當前進程的標志符,該自動化內置變量只能讀取,不能寫入。
$pid $$4.環境變量
查看當前環境變量
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")系統變量對所有用戶都生效,用戶變量只對當前用戶生效。
生效之后如下圖所示,用戶變量增加了相關值。
六.Powershell調用腳本程序
1.腳本文件執行策略
首先,發現我們的腳本文件是禁止執行的。
get-executionpolicy接著,我們嘗試獲取策略幫助信息。
get-help set-executionpolicy最后修改權限,讓其能運行Powershell腳本文件。
set-executionpolicy RemoteSigned它會提示你需要啟動管理員身份運行。
通過管理員身份打開CMD,再設置其權限即可,設置完成之后可以調用相關的腳本程序。
2.調用腳本程序
(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修改為如下內容,其中&表示運行。
運行命令:
下面方法也可以直接運行
start demo.bat demo.bat七.總結
寫到這里,這篇文章就介紹完畢,希望您喜歡,本文主要介紹PowerShell基礎之后,這將為后續PowerShell惡意代碼檢測提供基礎。文章非常長,作者也花費了很長時間,但相信只要你認真讀完,肯定會有收獲,尤其是對MSF的理解。
- 一.Powershell初識
1.基礎概念
2.為什么強大?
3.控制臺和快捷鍵
4.數學運算 - 二.Powershell管道和重定向
1.管道
2.重定向 - 三.Powershell執行外部命令及命令集
1.外部命令
2.命令集 - 四.Powershell別名使用
1.別名基本用法
2.自定義別名 - 五.Powershell變量基礎
1.基礎用法
2.變量操作
3.自動化變量
4.環境變量 - 六.Powershell調用腳本程序
1.腳本文件執行策略
2.調用腳本程序 - 七.總結
這篇文章中如果存在一些不足,還請海涵。作者作為網絡安全初學者的慢慢成長路吧!希望未來能更透徹撰寫相關文章。同時非常感謝參考文獻中的安全大佬們的文章分享,感謝師傅、師兄師弟、師姐師妹們的教導,深知自己很菜,得努力前行。
歡迎大家討論,是否覺得這系列文章幫助到您!任何建議都可以評論告知讀者,共勉。
- 逆向分析:https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis
- 網絡安全:https://github.com/eastmountyxz/NetworkSecuritySelf-study
(By:Eastmount 2022-01-15 夜于武漢 http://blog.csdn.net/eastmount/ )
參考文獻:
- [1] https://www.bilibili.com/video/av66327436 [推薦B站老師視頻]
- [2]《安全之路Web滲透技術及實戰案例解析》陳小兵老師
- [3] https://baike.baidu.com/item/Windows Power Shell/693789
- [4] https://www.pstips.net/powershell-piping-and-routing.html
- [5] https://www.pstips.net/using-the-powershell-pipeline.html
- [6] 微軟官方PowerShell文檔
總結
以上是生活随笔為你收集整理的[系统安全] 四十六.Powershell恶意代码检测系列 (1)Powershell基础入门及管道和变量的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [论文阅读] (17)CCS2019 针
- 下一篇: java信息管理系统总结_java实现科