<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    [系統安全] 四十.Powershell惡意代碼檢測系列 (1)Powershell基礎入門及管道和變量的用法

    VSole2022-11-28 09:42:48

    作者作為網絡安全的小白,分享一些自學基礎教程給大家,主要是關于安全工具和實踐操作的在線筆記,希望您們喜歡。同時,更希望您能與我一起操作和進步,后續將深入學習網絡安全和系統安全知識并分享相關實驗。總之,希望該系列文章對博友有所幫助,寫文不易,大神們不喜勿噴,謝謝!如果文章對您有幫助,將是我創作的最大動力,點贊、評論、私聊均可,一起加油喔!

    聲明:本人堅決反對利用教學方法進行犯罪的行為,一切犯罪行為必將受到嚴懲,綠色網絡需要我們共同維護,更推薦大家了解它們背后的原理,更好地進行防護。(參考文獻見后)

    一.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+46PS C:\Users\yxz> 4-22PS C:\Users\yxz> 4*312PS C:\Users\yxz> 9%21PS C:\Users\yxz> (1+3*5)/28PS C:\Users\yxz> 1gb/1mb1024PS C:\Users\yxz> 1gb/1mb*18kb18874368PS C:\Users\yxz> 1gb -gt 1mbTruePS C:\Users\yxz> 0xabcd43981
    

    顯示結果如下圖所示:


    二.Powershell管道和重定向

    1.管道

    Powershell管道旨在將上一條命令的輸出作為下一條命令的輸出。

    管道并不是什么新事物,以前的Cmd控制臺也有重定向的命令,例如Dir | More可以將結果分屏顯示。傳統的Cmd管道是基于文本的,但是Powershell管道是基于對象。例如:

    linux:lscmd:dir
    

    如果只獲取其中的name、mode值,則使用如下指令。

    ls | format-table name, mode
    


    2.重定向

    重定向旨在把命令的輸出保存到文件中,‘>’為覆蓋,’>>’追加。

    ls | format-table name, mode > demo.txttype 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 notepadnotepad
    

    notepad放在C盤下面的Windows\System32文件中,能夠直接打開。

    系統變量

    $env:path
    

    Python可以直接打開,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-commandgcm
    

    獲取當前目錄的所有文件信息get-childitem,可以用ls、dir兩個命令達到同樣的效果。

    get-childitemlsdir
    

    獲取相關的幫助信息,其命令如下:


    get-help get-childitem
    

    獲取別名所對應真實的命令

    get-alias -name lsget-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.psdirtype demo.ps
    

    導入別名命令如下,其中-force表示強制導入。

    import-alias -force demo.ps
    

    五.Powershell變量基礎

    1.基礎用法

    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
    


    2.變量操作

    變量的基本運算操作

    $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:num1test-path variable:num0
    

    刪除變量

    del variable:num1test-path variable:num1
    

    專用變量管理的命令

    clear-variableremove-variablenew-variable
    

    3.自動化變量

    powershell打開會自動加載變量,例如:窗口打開它會自動加載大小,再比如程序的配置信息自動加載。

    根目錄信息

    $home
    

    當前進程的標志符,該自動化內置變量只能讀取,不能寫入。

    $pid$$
    


    4.環境變量

    查看當前環境變量

    ls env:
    

    打印某個環境變量的值

    $env:windir
    

    創建新的環境變量

    $env:name='eastmount'ls env:na*
    

    刪除環境變量

    del env:namels 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 offecho hello world
    

    運行命令打開:

    cd desktop.\demo.bat
    

    (2) 定義一個demo.vbs文件,內容如下:

    msgbox "CSDN Eastmount"
    

    運行命令打開:

    cd desktop.\demo.vbs
    

    (3) 運行Powershell腳本文件也類似。

    $number=49switch($number){  {($_ -lt 50) -and ($_ -gt 40)} {"此數值大于50且小于40"}  50 {"此數值等于50"}  {$_ -gt 50} {"此數值大于50"}}
    

    運行結果如下圖所示:

    那么,如何在CMD中運行Powershell文件呢?

    我們將demo.bat修改為如下內容,其中&表示運行。

    @echo offpowershell "&'C:\Users\yxz\Desktop\demo.ps1'" 
    

    運行命令:

    cd desktop.\demo.bat
    

    下面方法也可以直接運行

    start demo.batdemo.bat
    


    七.總結

    寫到這里,這篇文章就介紹完畢,希望您喜歡,本文主要介紹PowerShell基礎之后,這將為后續PowerShell惡意代碼檢測提供基礎。文章非常長,作者也花費了很長時間,但相信只要你認真讀完,肯定會有收獲,尤其是對MSF的理解。

    • 一.Powershell初識
    • 二.Powershell管道和重定向
    • 三.Powershell執行外部命令及命令集
    • 四.Powershell別名使用
    • 五.Powershell變量基礎
    • 六.Powershell調用腳本程序

    篇文章中如果存在一些不足,還請海涵。作者作為網絡安全初學者的慢慢成長路吧!希望未來能更透徹撰寫相關文章。同時非常感謝參考文獻中的安全大佬們的文章分享,深知自己很菜,得努力前行。愛你們喔,祝大家安好。

    powershell命令模式
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    PowerShell入門學習
    2022-03-13 06:42:08
    PowerShell簡介 PowerShell是一種命令行外殼程序和腳本環境,它置于Windows7/Windows Server2008 R2及以上更高的版本中。它可以執行Linux系統下的一些命令,這是非常強大的一點。它的腳本后綴為(.ps1),可在磁盤中執行,也可無需寫入磁盤直接在內存中運行。 PowerShell的優點 1、Windows7以上的操作系統默認安裝。 2、Power
    PowerSploit這是眾多PowerShell攻擊工具中被廣泛使用的PowerShell后期漏洞利用框架,常用于信息探測、特權提升、憑證竊取、持久化等操作。Empire基于PowerShell的遠程控制木馬,可以從憑證數據庫中導出和跟蹤憑據信息,常用于提供前期漏洞利用的集成模塊、信息探測、憑據竊取、持久化控制。
    這凸顯了開發檢測惡意 PowerShell 命令的有效方法的迫切需要。在這項工作中,我們通過實施幾個新穎的惡意 PowerShell 命令檢測器并評估它們的性能來應對這一挑戰。在這項工作中,我們使用 AMSI 提供的信息對惡意 PowerShell 代碼檢測進行了首次研究。
    時間線11 月 10 日,我們發現了一次多階段 PowerShell 攻擊,該攻擊使用冒充哈薩克斯坦衛生部的
    仙人掌勒索軟件團伙聲稱已經黑入了瑞典最大的連鎖超市Coop,并威脅要公開大量個人信息,超過2萬個目錄。 據了解,Coop在瑞典大約有800家商店,這些商店分屬于29個消費者協會,擁有350萬個會員,Coop所有在業務中創造的盈余都會給會員分成,或者再投資于業務中,循環往復,以此獲得更多收益。
    hoaxshell是一款功能強大的非傳統Windows反向Shell,當前版本的Microsoft Defender和部分反病毒解決方案基本無法檢測到hoaxshell的存在。該工具易于使用,不僅可以生成其自己的PowerShell Payload,而且還可以支持加密,可以幫助廣大研究人員測試Windows系統的安全性。
    作為一個加密貨幣挖礦軟件,StripedFly常年隱藏在一個支持Linux和Windows的復雜模塊化框架后面。
    為了與惡意擴展程序進行通信,開發者使用了命令和控制服務器(C2),這與之前用于安裝擴展程序的安裝服務器不同。該惡意軟件使用各種擴展功能,使其在用戶瀏覽器中占有一席之地。
    對 Black Kingdom 分析表明,它存在一些bug和關鍵性的加密缺陷,由于使用了硬編碼密鑰,受害者可利用其解密文件。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类