日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

Havoc遠(yuǎn)控源碼剖析(協(xié)議篇)

來源: 責(zé)編: 時(shí)間:2023-09-28 10:09:09 361觀看
導(dǎo)讀近期閱讀了一款開源遠(yuǎn)控Havoc的源碼,留下了一些筆記,干脆發(fā)出來一起學(xué)習(xí)一下,這個(gè)遠(yuǎn)控?fù)?jù)說使用了很多高端免殺技術(shù),比如Ekko,Ziliean,FOLIAGE睡眠混淆,返回地址欺騙,Indirect SysCall,Etw Patch,堆加密等等。前言FullSessionG

近期閱讀了一款開源遠(yuǎn)控Havoc的源碼,留下了一些筆記,干脆發(fā)出來一起學(xué)習(xí)一下,這個(gè)遠(yuǎn)控?fù)?jù)說使用了很多高端免殺技術(shù),比如Ekko,Ziliean,FOLIAGE睡眠混淆,返回地址欺騙,Indirect SysCall,Etw Patch,堆加密等等。FMf28資訊網(wǎng)——每日最新資訊28at.com

前言

Pasted image 20230906161038.pngFMf28資訊網(wǎng)——每日最新資訊28at.com

話不多說,直接進(jìn)入主題,遠(yuǎn)控提供了HTTP(S)、SMB的Agent,SMB是內(nèi)網(wǎng)中繼直連用的,直接來看HTTP(S)方面的代碼。。FMf28資訊網(wǎng)——每日最新資訊28at.com

握手前校驗(yàn)

首先只有POST請(qǐng)求會(huì)被處理,其他請(qǐng)求都是直接跳fake404頁面。FMf28資訊網(wǎng)——每日最新資訊28at.com

h.GinEngine.POST("/*endpoint", h.request)h.GinEngine.GET("/*endpoint", h.fake404)

request里首先是對(duì)請(qǐng)求的header頭進(jìn)行判斷,不符合直接跳fake404。FMf28資訊網(wǎng)——每日最新資訊28at.com

Pasted image 20230906160945.pngFMf28資訊網(wǎng)——每日最新資訊28at.com

具體的Header頭定義在havoc.yaotl中。FMf28資訊網(wǎng)——每日最新資訊28at.com

Pasted image 20230906160453.pngFMf28資訊網(wǎng)——每日最新資訊28at.com

然后是檢查url、ua,同樣是不符合跳fake404,默認(rèn)配置的url是這樣子的。FMf28資訊網(wǎng)——每日最新資訊28at.com

Uris = [    "/funny_cat.gif",    "/index.php",    "/test.txt",    "/helloworld.js"]

Pasted image 20230906161244.pngFMf28資訊網(wǎng)——每日最新資訊28at.com

數(shù)據(jù)包的處理

經(jīng)過一連串的判斷后,來到parseAgentRequest函數(shù),開始對(duì)Body內(nèi)容進(jìn)行判斷。FMf28資訊網(wǎng)——每日最新資訊28at.com

Pasted image 20230906161529.pngFMf28資訊網(wǎng)——每日最新資訊28at.com

在ParseHeader中,最終是返回Header結(jié)構(gòu)。FMf28資訊網(wǎng)——每日最新資訊28at.com

type Header struct {	Size       int	MagicValue int	AgentID    int	Data       *parser.Parser}

Pasted image 20230906162130.pngFMf28資訊網(wǎng)——每日最新資訊28at.com

NewParser時(shí),試圖將body內(nèi)容賦值給Parser結(jié)構(gòu)的buffer中,至于bigEndian默認(rèn)是true。FMf28資訊網(wǎng)——每日最新資訊28at.com

type Parser struct {	buffer    []byte	bigEndian bool}

這里似乎將數(shù)據(jù)包分為了三種情況:FMf28資訊網(wǎng)——每日最新資訊28at.com

p.Length()小于4的情況下,直接丟棄該包,返回空的Response;FMf28資訊網(wǎng)——每日最新資訊28at.com

p.Length()等于4的情況下,直接將所有data復(fù)制到Header.Data中;FMf28資訊網(wǎng)——每日最新資訊28at.com

p.Length()大于4的情況下,將從末尾分別切出Size、MagicValue、AgentID,各為4個(gè)字節(jié);FMf28資訊網(wǎng)——每日最新資訊28at.com

所以一個(gè)正常數(shù)據(jù)包的結(jié)構(gòu)大致應(yīng)該如下所示。FMf28資訊網(wǎng)——每日最新資訊28at.com

Pasted image 20230906172119.pngFMf28資訊網(wǎng)——每日最新資訊28at.com

然后如果切出的MagicValue等于DEMON_MAGIC_VALUE,也就是0xDEADBEEF。FMf28資訊網(wǎng)——每日最新資訊28at.com

Pasted image 20230906170312.pngFMf28資訊網(wǎng)——每日最新資訊28at.com

意味著是普通Deomon,否則是第三方Agent...等會(huì),它是不是忘了什么?加解密呢?這不是白給么,建議做blueteam的小伙伴加一下流量規(guī)則。FMf28資訊網(wǎng)——每日最新資訊28at.com

Agent注冊(cè)

繼續(xù)跟進(jìn)到DemonAgent,進(jìn)來直接查AgentID;FMf28資訊網(wǎng)——每日最新資訊28at.com

if Teamserver.AgentExist(Header.AgentID){	...}else{	...}

函數(shù)內(nèi)容是迭代Teamserver中所有的Agent,true的話就是已經(jīng)存在,先看false情況,也就是注冊(cè)的功能。FMf28資訊網(wǎng)——每日最新資訊28at.com

Pasted image 20230906171621.pngFMf28資訊網(wǎng)——每日最新資訊28at.com

再次切掉一個(gè)CommandID,如果CommandID等于agent.DEMON_INIT也就是99,就意味著是注冊(cè)包,然后切掉RequestID丟掉,進(jìn)入注冊(cè)流程。FMf28資訊網(wǎng)——每日最新資訊28at.com

Agent = agent.ParseDemonRegisterRequest(Header.AgentID, Header.Data, ExternalIP)if Agent == nil {    return Response, false}go Agent.BackgroundUpdateLastCallbackUI(Teamserver)

接著從末尾切出AESKey和AESIv,并調(diào)用Parser.DecryptBuffer對(duì)Parser.buffer進(jìn)行解密,解密完的結(jié)果放回buffer里。FMf28資訊網(wǎng)——每日最新資訊28at.com

Pasted image 20230906204004.pngFMf28資訊網(wǎng)——每日最新資訊28at.com

所以數(shù)據(jù)包具體應(yīng)該是這樣的。FMf28資訊網(wǎng)——每日最新資訊28at.com

Pasted image 20230906204313.pngFMf28資訊網(wǎng)——每日最新資訊28at.com

至于解密出來的buffer,據(jù)官方說法如下。FMf28資訊網(wǎng)——每日最新資訊28at.com

[ Agent ID     ] 4 bytes <-- this is needed to check if we successfully decrypted the data			[ Host Name    ] size + bytes			[ User Name    ] size + bytes			[ Domain       ] size + bytes			[ IP Address   ] 16 bytes?			[ Process Name ] size + bytes			[ Process ID   ] 4 bytes			[ Parent  PID  ] 4 bytes			[ Process Arch ] 4 bytes			[ Elevated     ] 4 bytes			[ Base Address ] 8 bytes			[ OS Info      ] ( 5 * 4 ) bytes			[ OS Arch      ] 4 bytes			..... more

如果注冊(cè)成功,將返回這個(gè)Agent的AgentID。FMf28資訊網(wǎng)——每日最新資訊28at.com

Pasted image 20230906205319.pngFMf28資訊網(wǎng)——每日最新資訊28at.com

心跳包

回到AgentExist,如果已經(jīng)注冊(cè),進(jìn)入心跳包流程。FMf28資訊網(wǎng)——每日最新資訊28at.com

/* get our agent instance based on the agent id */Agent = Teamserver.AgentInstance(Header.AgentID)Agent.UpdateLastCallback(Teamserver)

先根據(jù)ID查出對(duì)象,更新心跳時(shí)間,同樣切出Command和RequestID。FMf28資訊網(wǎng)——每日最新資訊28at.com

Command = uint32(Header.Data.ParseInt32())RequestID = uint32(Header.Data.ParseInt32())

這里有點(diǎn)小混亂,劃分了第一次post的包和重連的包,如果是第一次提交,先進(jìn)行解密(小聲叨叨:那重連的包不用解密了?)FMf28資訊網(wǎng)——每日最新資訊28at.com

Pasted image 20230906210103.pngFMf28資訊網(wǎng)——每日最新資訊28at.com

然后判斷命令,是任務(wù)回顯還是GET_JOB。FMf28資訊網(wǎng)——每日最新資訊28at.com

Pasted image 20230906210153.pngFMf28資訊網(wǎng)——每日最新資訊28at.com

如果是GET_JOB,就從Agent.GetQueuedJobs()拿任務(wù),又分別對(duì)COMMAND_PIVOT、COMMAND_SOCKET、COMMAND_FS、COMMAND_MEM_FILE額外追加了一些參數(shù),尤其是COMMADN_PIVOT內(nèi),如果是DEMON_PIVOT_SMB_COMMAND另外特殊處理。另外三個(gè)還沒有開發(fā)完畢,是空著的。FMf28資訊網(wǎng)——每日最新資訊28at.com

Pasted image 20230906211059.pngFMf28資訊網(wǎng)——每日最新資訊28at.com

沒有細(xì)看,大意是對(duì)內(nèi)網(wǎng)SMB Agent進(jìn)行Socks代理時(shí)的特殊處理。FMf28資訊網(wǎng)——每日最新資訊28at.com

小結(jié)

算了,通訊協(xié)議這部分大概就看到這里了,總結(jié)一下,其通訊協(xié)議整體來說是不那么可靠的。FMf28資訊網(wǎng)——每日最新資訊28at.com

CobaltStrike、Sliver常用的基本RSA+AES模式都沒有實(shí)現(xiàn)到,甚至AES密鑰同加密包一同發(fā)送。這個(gè)水準(zhǔn)屬于是有點(diǎn)讓人失望了,希望在Agent端能夠讓人改觀。FMf28資訊網(wǎng)——每日最新資訊28at.com

本文作者:t43, 轉(zhuǎn)載請(qǐng)注明來自FreeBuf.COMFMf28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-11886-0.htmlHavoc遠(yuǎn)控源碼剖析(協(xié)議篇)

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 50 種 ES6 模塊,面試被問麻了

下一篇: 消息隊(duì)列技術(shù)選型:這七種消息場(chǎng)景一定要考慮!

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 主站蜘蛛池模板: 嘉峪关市| 长丰县| 六枝特区| 邹城市| 中西区| 阳泉市| 瓮安县| 全椒县| 乌苏市| 屯昌县| 准格尔旗| 荣昌县| 江陵县| 财经| 丹凤县| 确山县| 新巴尔虎左旗| 临城县| 北宁市| 开鲁县| 绥化市| 金坛市| 汤阴县| 嘉禾县| 山东省| 固镇县| 万年县| 五大连池市| 郧西县| 晋中市| 克拉玛依市| 平遥县| 那坡县| 乐平市| 朝阳市| 三明市| 阿瓦提县| 长海县| 双辽市| 信丰县| 会同县|