<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惡意代碼檢測系列 (2)Powershell基礎語法和注冊表操作

    VSole2022-11-30 16:14:41

    一.Powershell操作符

    常見的比較運算符包括:

    • -eq 等于
    • -ne 不等于
    • -gt 大于
    • -lt 小于
    • -le 小于等于
    • -contains 包含
    • -notcontains 不包含
    67 -eq 5050 -eq 501gb -gt 1tb(1,2,3) -contains 1(1,2,3) -contains 2(1,2,3) -contains 4
    

    求反運算符:

    • -not
    $a=89 -gt 50$a-not $a
    

    邏輯運算:

    • -and 與運算
    • -or 或運算
    • -not 非運算
    • -xor 異或運算
    $true -and $true$true -and $false$true -or $false$false -or $false-not $true$true -xor $true
    

    比較數組和集合,從中篩選出不等于0的數字。

    1,5,8,0,9 -ne 0
    


    二.Powershell條件語句

    1.if條件判斷

    if-elseif-else條件判斷,執行操作用大括號表示。


    $num=100if($num -gt 90) {"大于90"} else {"小于等于90"}if($num -gt 100) {"大于100"} else {"小于等于100"}
    

    注意,if-else中間可以增加新的判斷elseif,如下所示:

    if($num -gt 100) {"大于100"} elseif ($num -eq 100) {"等于100"} else {"小于100"}
    

    2.switch語句

    Switch語句主要用于多種情況的判斷,這里在本地創建一個test01.ps1文件,并執行該代碼。

    傳統的if判斷如下:

    $num=56if($num -gt 50 -and $num -lt 60) {    "大于50并且小于60"} elseif ($num -eq 50) {    "等于50"}else{    "小于50"}
    

    去到桌面1019文件夾,輸入“.\test01.ps1”執行代碼,再打印該文件的源代碼。

    switch語句如下:$_表示對變量取值。

    $num=56switch($num){    {$_ -lt 50} {"此數值小于50"}    {$_ -eq 50} {"此數值等于50"}    {$_ -gt 50} {"此數值大于50"}}
    


    三.Powershell循環語句

    1.foreach循環

    這里定義數組采用“$arr=1…10”實現,表示1到10的數字,在調用foreach循環輸出。


    $arr=1..10foreach ($n in $arr){ $n*$n }
    

    定義文件“test03.ps1”,只輸出偶數內容。

    $arr=1..10foreach ($n in $arr){    if (($n%2) -eq 0 )    {        $n    }}
    

    接著利用foreach操作文件目錄,將C盤python34文件夾下的路徑全部提取出來,賦值到file中輸出。

    foreach ($file in dir c:\python34){    if($file.length -gt 1kb)    {        $file.name        $file.length    }}
    

    原始文件內容如下所示:

    也可以定義變量來指定路徑

    $path_value = dir c:\python34foreach ($file in $path_value){    if($file.length -gt 1kb)    {        $file.name        $file.length    }}
    

    2.while循環

    while循環需要注意循環的終止條件,防止出現死循環,而do_while循環是先執行一次循環體,再進行判斷。

    下面這段代碼是經典運算:1+2+3+…+99,文件名為“test05.ps1”。

    $i=1$s=0while($i -lt 100){    $s = $s + $i    $i = $i + 1}$s$i
    

    do_whlie先執行循環體,再進行條件判斷,如下所示:

    $num=15do{    $num    $num=$num-1}while($num -gt 10)
    

    3.break和continue關鍵詞

    break跳出整個循環,停止執行;continue跳出當前循環一次,繼續執行下一個判斷。

    break:下面這個代碼當數值小于6繼續執行,當其等于4停止循環。


    $i=1while($i -lt 6){    if($i -eq 4)    {        break    }    else    {        $i        $i++    }}
    

    continue:跳過了中間等于4的內容。

    $i=1while($i -lt 6){    if($i -eq 4)    {        $i++        continue    }    else    {        $i        $i++    }}
    

    4.for循環

    利用for循環實現1+2+…+100的代碼如下(test09.ps1)。

    $sum=0for($i=1;$i -le 100;$i++){    $sum=$sum+$i}$sum
    

    學習Powershell基礎語法之后,更重要的是解決實際問題,后續作者將繼續深入學習。


    5.switch循環

    使用switch循環實現輸出數組1到10,并進行奇數和偶數判斷

    $num=1..10switch($num){    default{"number=$_"}}
    $num=1..10switch($num){    {($_ % 2) -eq 0} {"$_ 數值是偶數"}    {($_ % 2) -ne 0} {"$_ 數值是奇數"}}
    


    四.Powershell數組

    1.數組定義

    數組定義一種方法是逗號隔開不同的元素,另一種是通過兩個點來定義數組。


    $arr=1,2,3,4,5$arr=1..5
    

    判斷是否是一個數組,使用如下語句。

    $arr -is [array]
    

    數組可以接受不同的數值。

    $arr=1,3.14,"yangxiuzhang"$arr$arr -is [array]
    

    空數組定義如下:

    $arr=@()$arr$arr -is [array]
    

    下面簡單比較只有一個元素數組和變量的對比。

    $arr=,"hello"$arr$arr -is [array]
    $arr=1$arr$arr -is [array]
    

    數組也可以是一個變量或命令,此時它仍然是一個數組。

    $arr=ipconfig$arr$arr -is [array]
    


    2.訪問數組

    首先定義一個多鐘類型的數組。

    $arr=1,"hello world",(get-date)$arr
    

    訪問數組特定元素,第一個元素,獲取兩個元素,獲取最后一個元素。

    $arr[0]$arr[0,1]$arr[-1]
    //提取部分元素$arr[0..2]
    

    獲取數組元素大小調用count實現。

    $num = $arr[0..2]$num.count
    

    如何將數組倒序輸出呢?如下所示。

    $arr[($arr.count)..0]
    

    數組添加一個元素代碼如下:

    $arr=1,"hello world",(get-date)$arr+="csdn"$arr$arr.count
    

    更多數組操作,推薦讀者結合實際應用進行學習。


    五.Powershell函數

    1.自定義函數及調用

    函數通常包括函數名、參數、函數體,下面是定義及調用一個myping函數的代碼(test11.ps1)。

    function myping(){    ping www.baidu.com   }
    myping
    

    同樣,上面的代碼可以修改為指定參數。

    function myping($site){    ping $site}myping www.baidu.com
    

    下面這個代碼是接收兩個參數并顯示的功能。

    function myinfo($name,$age){    $info="I am $name, and i am $age years old."    write-host $info}myinfo yxz,28
    


    2.函數返回值

    函數返回值通過return實現,可以返回多個值。下面是test13.ps1例子。

    function add($num1,$num2){   $sum=$num1+$num2   return $sum}add 2 4
    function fun($num1,$num2){   $sum=$num1+$num2   $sum.gettype()   $sum.gettype().fullname   return $sum}fun 2.2 4.3
    //多個返回值function other($num1,$num2,$num3){    $value=$num1,$num2,$num3    return $value}other 2.2 4 6
    


    六.Powershell字符串及交互

    1.定義文本及轉義字符

    表達式中可以定義只,如下所示。同時,單引號和雙引號可以相互嵌套,這和JAVA、PHP、Python中的變量套接類似。

    "hello world $(get-date)""hello world $(5*7)""hello, my name is 'yangxiuzhang'"
    

    輸出結果如下圖所示:

    在Powershell中,轉義字符不再是斜杠(\)而是(`),如下所示。

    • `n 換行
    • `r 回車符
    • `t tab鍵
    • `b 退格符
    • `’ 單引號
    "hello,`n my name is `'yangxiuzhang`'"
    

    2.用戶交互

    read-host 讀取用戶的輸入。

    $input = read-host "請輸入您的姓名""您好!您輸入的姓名是:$input"
    

    3.格式化字符串

    傳統的多個變量輸出方法:

    $name="yangxiuzhang"$age=25$body="strong"$height=1.72"My name is $name, i am $age years old, and my body is $body, my height is $height"
    

    格式化字符串輸出方法:

    "My name is {0}, i am {1} years old, and my body is {2}, my height is {3}" -f $name,$age,$body,$height
    

    4.字符串操作

    任何編程語言,都繞不過字符串操作,在網絡安全領域,獲取ip地址、URL拼接、圖片或腳本文件獲取等都涉及字符串操作,下面進行簡單分享。

    字符串分割

    $str="c:\windows\system32\demo.txt"$str.split("\")//數組類型,可以通過數組下標訪問$str.split("\").gettype()
    

    獲取圖片名稱

    $str="https://blog.csdn.net/Eastmount/102781411/logo.png"$str.split("/")[-1]
    

    是否以某個字符結尾和是否包含某個字符。

    $str.endswith("png")$str.contains("csdn")
    

    字符串比較,-1表示兩個字符串不一樣,相等輸出0。

    $str="https://blog.csdn.net/Eastmount/102781411/logo.png"$str.compareto("window")$str.compareto("https://blog.csdn.net/Eastmount/102781411/logo.png")
    

    其他操作如下:

    //獲取下標$str.indexof("s")
    //字符插入$str.insert(4,"yxz")
    //字符串替換$str.replace("n","N")
    


    七.Powershell注冊表操作

    注冊表(Registry,繁體中文版Windows操作系統稱之為登錄檔)是Microsoft Windows中的一個重要的數據庫,用于存儲系統和應用程序的設置信息。早在Windows 3.0推出OLE技術的時候,注冊表就已經出現。隨后推出的Windows NT是第一個從系統級別廣泛使用注冊表的操作系統。但是,從Microsoft Windows 95操作系統開始,注冊表才真正成為Windows用戶經常接觸的內容,并在其后的操作系統中繼續沿用至今。

    在CMD中輸入regedit即可打開注冊表,如下圖所示。

    注冊表圖形化界面顯示如下,包括各種程序的配置信息,不能隨便修改它,很容易造成系統故障。

    • HKEY_CLASSES_ROOT:定義文檔的類型\類以及與類型關聯的信息以及COM組件的配置數據
    • HKEY_CURRENT_USER:包含當前登錄到Windows的用戶的配置信息
    • HKEY_LOCAL_MACHINE:包含與計算機相關的配置信息,不管用戶是否登錄
    • HKEY_USERS:包含有關默認用戶配置的信息
    • HKEY_CURRENT_CONFIG:包含有關非用戶特定的硬件的配置信息

    在Powershell中顯示注冊表指令如下:

    cd hkcu:dir
    

    對應注冊表圖形界面。

    cd systemdir
    

    對應圖形界面。

    其他訪問也類似。

    cd HKLM:
    

    對應圖形界面:

    讀取鍵值

    get-itemproperty
    

    設置鍵值

    set-itemproperty
    

    由于注冊表不能隨便修改,很容易造成系統故障,后續隨著作者深入學習,了解更多網絡安全中Powershell及注冊表工作再來分享,希望讀者喜歡該系列文章。


    八.總結

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

    • 一.Powershell操作符
    • 二.Powershell條件語句
    • 三.Powershell循環語句
    • 四.Powershell數組
    • 五.Powershell函數
    • 六.Powershell字符串及交互
    • 七.Powershell注冊表操作

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

    powershellnum
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    系統安全第41篇是PowerShell系列的基礎知識和注冊表操作,希望您喜歡
    系統安全第40篇文章介紹PowerShell基礎知識,希望您喜歡
    AI安全論文第17篇介紹Overview撰寫方式及頂會精句摘抄
    文章主要內容記錄對某次應急事件中獲取到的特殊釣魚樣本的分析,該樣本通過sapien powershell studio將powershell代碼封裝成可執行文件來繞過一些查殺和限制;0x01 背景某次應急事件中拿到一個攻擊者使用的釣魚樣本,這個樣本比較有意思和之前的分析有些不同,第一次分析也算曲折,此文記錄下對該樣本的分析過程。光從行為側去下結論是不太行的。
    文章主要內容記錄對某次應急事件中獲取到的特殊釣魚樣本的分析,該樣本通過sapien powershell studio將powershell代碼封裝成可執行文件來繞過一些查殺和限制;0x01 背景某次應急事件中拿到一個攻擊者使用的釣魚樣本,這個樣本比較有意思和之前的分析有些不同,第一次分析也算曲折,此文記錄下對該樣本的分析過程。光從行為側去下結論是不太行的。
    我們對異常 PowerShell 腳本的深入分析揭示了與 Gootkit 加載程序相關的入侵集。過去,Gootkit 使用免費軟件安裝程序來屏蔽惡意文件;現在它使用法律文件來誘騙用戶下載這些文件。我們通過托管擴展檢測和響應 (MxDR)以及調查 PowerShell 腳本的標志來發現這種策略,該標志使我們能夠阻止它造成任何損壞并丟棄其有效負載。
    2022.02.03~02.10 攻擊團伙情報 Shuckworm組織持續針對烏克蘭實體發起攻擊 Charming Kitten武器庫更新,新增PowerShell后門 雙尾蝎組織新活動使用政治主題誘餌針對巴勒斯坦實體和活動家 Gamaredon APT組織積極瞄準烏克蘭進行攻擊 ACTINIUM組織針對烏克蘭攻擊活動分析 Molerats使用新惡意軟件針對中東政府、外交以及航空實體 Kimsu
    解析 DeathStalker
    2020-08-25 10:59:49
    DeathStalker:一個獨特的攻擊組織,似乎針對的是金融領域的律師事務所和公司。 Powersing工具鏈 總覽 攻擊者的最新方式依賴于相同的入侵媒介:帶有包含惡意LNK文件的附加存檔的魚叉式網絡釣魚電子郵件。 盡管看起來...
    上周,該威脅組織受到韓國外交部的制裁。賠償金將由谷歌管理層自行決定,并且在 12 個月內最高不超過 100 萬美元。該計劃目前涵蓋由 SCC Premium 的虛擬機威脅檢測支持的 Compute Engine 虛擬機和計算環境。
    第 2 章 shell權限提升,簡稱提權。它用于執行各種網絡交互,包括在枚舉期間抓取 banner 等。但它們默認情況下很少安裝 Socat。模塊與 socat 和 netcat 一樣,提供了用于接收反彈 shell 的功能。雖然 msfvenom 可以生成除 reverse 和 bind shell 之外的 payload,但這不是本文的重點。一般情況下,反向 shell 更容易執行和調試。以下會給出反彈 shell 和 正向 shell 的示例,請注意它們間的區別。這里重要的是我們正在攻擊機上監聽,并收到了來自目標的連接。請注意,這并非特定于 Windows。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类