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

當前位置:首頁 > 科技  > 軟件

Havoc遠控源碼剖析(協議篇)

來源: 責編: 時間:2023-09-28 10:09:09 336觀看
導讀近期閱讀了一款開源遠控Havoc的源碼,留下了一些筆記,干脆發出來一起學習一下,這個遠控據說使用了很多高端免殺技術,比如Ekko,Ziliean,FOLIAGE睡眠混淆,返回地址欺騙,Indirect SysCall,Etw Patch,堆加密等等。前言FullSessionG

近期閱讀了一款開源遠控Havoc的源碼,留下了一些筆記,干脆發出來一起學習一下,這個遠控據說使用了很多高端免殺技術,比如Ekko,Ziliean,FOLIAGE睡眠混淆,返回地址欺騙,Indirect SysCall,Etw Patch,堆加密等等。P1S28資訊網——每日最新資訊28at.com

前言

Pasted image 20230906161038.pngP1S28資訊網——每日最新資訊28at.com

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

握手前校驗

首先只有POST請求會被處理,其他請求都是直接跳fake404頁面。P1S28資訊網——每日最新資訊28at.com

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

request里首先是對請求的header頭進行判斷,不符合直接跳fake404。P1S28資訊網——每日最新資訊28at.com

Pasted image 20230906160945.pngP1S28資訊網——每日最新資訊28at.com

具體的Header頭定義在havoc.yaotl中。P1S28資訊網——每日最新資訊28at.com

Pasted image 20230906160453.pngP1S28資訊網——每日最新資訊28at.com

然后是檢查url、ua,同樣是不符合跳fake404,默認配置的url是這樣子的。P1S28資訊網——每日最新資訊28at.com

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

Pasted image 20230906161244.pngP1S28資訊網——每日最新資訊28at.com

數據包的處理

經過一連串的判斷后,來到parseAgentRequest函數,開始對Body內容進行判斷。P1S28資訊網——每日最新資訊28at.com

Pasted image 20230906161529.pngP1S28資訊網——每日最新資訊28at.com

在ParseHeader中,最終是返回Header結構。P1S28資訊網——每日最新資訊28at.com

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

Pasted image 20230906162130.pngP1S28資訊網——每日最新資訊28at.com

NewParser時,試圖將body內容賦值給Parser結構的buffer中,至于bigEndian默認是true。P1S28資訊網——每日最新資訊28at.com

type Parser struct {	buffer    []byte	bigEndian bool}

這里似乎將數據包分為了三種情況:P1S28資訊網——每日最新資訊28at.com

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

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

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

所以一個正常數據包的結構大致應該如下所示。P1S28資訊網——每日最新資訊28at.com

Pasted image 20230906172119.pngP1S28資訊網——每日最新資訊28at.com

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

Pasted image 20230906170312.pngP1S28資訊網——每日最新資訊28at.com

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

Agent注冊

繼續跟進到DemonAgent,進來直接查AgentID;P1S28資訊網——每日最新資訊28at.com

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

函數內容是迭代Teamserver中所有的Agent,true的話就是已經存在,先看false情況,也就是注冊的功能。P1S28資訊網——每日最新資訊28at.com

Pasted image 20230906171621.pngP1S28資訊網——每日最新資訊28at.com

再次切掉一個CommandID,如果CommandID等于agent.DEMON_INIT也就是99,就意味著是注冊包,然后切掉RequestID丟掉,進入注冊流程。P1S28資訊網——每日最新資訊28at.com

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

接著從末尾切出AESKey和AESIv,并調用Parser.DecryptBuffer對Parser.buffer進行解密,解密完的結果放回buffer里。P1S28資訊網——每日最新資訊28at.com

Pasted image 20230906204004.pngP1S28資訊網——每日最新資訊28at.com

所以數據包具體應該是這樣的。P1S28資訊網——每日最新資訊28at.com

Pasted image 20230906204313.pngP1S28資訊網——每日最新資訊28at.com

至于解密出來的buffer,據官方說法如下。P1S28資訊網——每日最新資訊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

如果注冊成功,將返回這個Agent的AgentID。P1S28資訊網——每日最新資訊28at.com

Pasted image 20230906205319.pngP1S28資訊網——每日最新資訊28at.com

心跳包

回到AgentExist,如果已經注冊,進入心跳包流程。P1S28資訊網——每日最新資訊28at.com

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

先根據ID查出對象,更新心跳時間,同樣切出Command和RequestID。P1S28資訊網——每日最新資訊28at.com

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

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

Pasted image 20230906210103.pngP1S28資訊網——每日最新資訊28at.com

然后判斷命令,是任務回顯還是GET_JOB。P1S28資訊網——每日最新資訊28at.com

Pasted image 20230906210153.pngP1S28資訊網——每日最新資訊28at.com

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

Pasted image 20230906211059.pngP1S28資訊網——每日最新資訊28at.com

沒有細看,大意是對內網SMB Agent進行Socks代理時的特殊處理。P1S28資訊網——每日最新資訊28at.com

小結

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

CobaltStrike、Sliver常用的基本RSA+AES模式都沒有實現到,甚至AES密鑰同加密包一同發送。這個水準屬于是有點讓人失望了,希望在Agent端能夠讓人改觀。P1S28資訊網——每日最新資訊28at.com

本文作者:t43, 轉載請注明來自FreeBuf.COMP1S28資訊網——每日最新資訊28at.com

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

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

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

下一篇: 消息隊列技術選型:這七種消息場景一定要考慮!

標簽:
  • 熱門焦點
  • 小米官宣:2023年上半年出貨量中國第一!

    今日早間,小米電視官方微博帶來消息,稱2023年小米電視上半年出貨量達到了中國第一,同時還表示小米電視的巨屏風暴即將開始。“公布一個好消息2023年#小米電視上半年出貨量中國
  • 石頭智能洗地機A10 Plus體驗:雙向自清潔治好了我的懶癌

    一、前言和介紹專為家庭請假懶人而生的石頭科技在近日又帶來了自己的全新旗艦新品,石頭智能洗地機A10 Plus。從這個產品名上就不難看出,這次石頭推出的并不是常見的掃地機器
  • 一年經驗在二線城市面試后端的經驗分享

    忠告這篇文章只適合2年內工作經驗、甚至沒有工作經驗的朋友閱讀。如果你是2年以上工作經驗,請果斷劃走,對你沒啥幫助~主人公這篇文章內容來自 「升職加薪」星球星友 的投稿,坐
  • Java NIO內存映射文件:提高文件讀寫效率的優秀實踐!

    Java的NIO庫提供了內存映射文件的支持,它可以將文件映射到內存中,從而可以更快地讀取和寫入文件數據。本文將對Java內存映射文件進行詳細的介紹和演示。內存映射文件概述內存
  • 十個簡單但很有用的Python裝飾器

    裝飾器(Decorators)是Python中一種強大而靈活的功能,用于修改或增強函數或類的行為。裝飾器本質上是一個函數,它接受另一個函數或類作為參數,并返回一個新的函數或類。它們通常用
  • 電視息屏休眠仍有網絡上傳 愛奇藝被質疑“薅消費者羊毛”

    記者丨寧曉敏 見習生丨汗青出品丨鰲頭財經(theSankei) 前不久,愛奇藝發布了一份亮眼的一季報,不僅營收和會員營收創造歷史最佳表現,其運營利潤也連續6個月實現增長。自去年年初
  • 梁柱接棒兩年,騰訊音樂闖出新路子

    文丨田靜 出品丨牛刀財經(niudaocaijing)7月5日,企鵝FM發布官方公告稱由于業務調整,將于9月6日正式停止運營,這意味著騰訊音樂長音頻業務走向消亡。騰訊在長音頻領域還在摸索。為
  • 自律,給不了Keep自由!

    來源 | 互聯網品牌官作者 | 李大為編排 | 又耳 審核 | 谷曉輝自律能不能給用戶自由暫時不好說,但大概率不能給Keep自由。近日,全球最大的在線健身平臺Keep正式登陸港交所,努力
  • iQOO Neo8 Pro真機諜照曝光:天璣9200+和V1+旗艦雙芯加持

    去年10月,iQOO推出了iQOO Neo7系列機型,不僅搭載了天璣9000+,而且是同價位唯一一款天璣9000+直屏旗艦,一經上市便受到了用戶的廣泛關注。在時隔半年后,
Top 主站蜘蛛池模板: 耒阳市| 土默特左旗| 西充县| 开远市| 巨鹿县| 纳雍县| 中牟县| 隆尧县| 吉隆县| 新宁县| 深水埗区| 玉林市| 清苑县| 安宁市| 上林县| 达州市| 读书| 紫阳县| 五寨县| 凤阳县| 曲松县| 襄汾县| 达拉特旗| 汾阳市| 界首市| 故城县| 涿州市| 张家川| 玉门市| 永胜县| 凤山县| 汝阳县| 湟中县| 资中县| 宿州市| 锦屏县| 清徐县| 铅山县| 长丰县| 会理县| 通海县|