Pikachu靶场之SSRF服务器端请求伪造

SSRF漏洞介绍

什么是SSRF漏洞

SSRF漏洞(服务器端请求伪造):是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)。

SSRF漏洞原理

SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。利用的是服务端的请求伪造。SSRF是利用存在缺陷的web应用作为代理攻击远程和本地的服务器。

SSRF漏洞利用手段

  • 可以对外网、内网、本地进行端口扫描,某些情况下端口的Banner会回显出来(比如3306的);
  • 攻击运行在内网或本地的漏洞程序(比如溢出);
  • 可以对内网Web应用进行指纹识别,原理是通过请求默认的文件得到特定的指纹;
  • 攻击内网或外网有漏洞的Web应用;
  • 使用file://协议读取本地文件(或其他协议)

SSRF漏洞防御手段

  • 禁止302跳转,或者每跳转一次都进行校验目的地址是否为内网地址或合法地址。
  • 过滤返回信息,验证远程服务器对请求的返回结果,是否合法
  • 禁用高危协议,例如:gopher、dict、ftp、file等,只允许http/https
  • 设置URL白名单或限制内网IP
  • 限制请求的端口为http的常用端口,或者根据业务需要开放远程调用服务的端口
  • catch错误信息,做统一的错误信息,避免黑客通过错误信息判断端口对应的服务

SSRF漏洞常见出现点

  • 分享:通过URL地址分享网页内容
  • 转码服务(通过URL地址把原地址的网页调优,使其适合手机屏幕的浏览)
  • 在线翻译
  • 图片加载与下载:通过URL地址加载或下载图片
  • 图片、文章收藏功能
  • 未公开的API实现及调用URL的功能
  • 从URL关键字中寻找

第一关 SSRF(curl)

第一关进入后如图所示,按照提示点击下图红框里面的连接。
在这里插入图片描述
然后就得到了下图红框里带参数的url,参数名是url,参数值是一个url。

在这里插入图片描述
注:如果这里使用的带端口域名进行访问,则url后面也要跟上相关域名才能正常访问。

由于这关题目所说使用curl函数,所以根据菜鸟教程中的文档介绍

PHP支持的由Daniel Stenberg创建的libcurl库允许你与各种的服务器使用各种类型的协议进行连接和通讯。
libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。
PHP中使用cURL实现Get和Post请求的方法
这些函数在PHP 4.0.2中被引入。

1.file协议查看本地文件

输入payload:

http://www.pikachu.com:90/vul/ssrf/ssrf_curl.php?url=file:///c:/windows/system32/drivers/etc/hosts

可以查看文件C:\Windows\System32\drivers\etc\hosts的内容
在这里插入图片描述

2.ftp协议查看内网ftp服务器上的文件

再来看一个ftp协议。

如果192.168.171.128这台pc可访问另一台pc(比如192.168.171.130)上的ftp服务,就可以通过这个ssrf漏洞结合ftp协议阅读ftp目录下的内容。

先在192.168.101.130上起一个ftp协议(我用的wftpd32,挺方便),新建用户,用户名和密码都是caker,目录也要设置一下

在这里插入图片描述
设置完后点击Done。
然后在桌面写入一个2.txt文件上传到ftp服务器上
在这里插入图片描述
1.登录ftp服务器
ftp 192.168.171.130
在这里插入图片描述
2.进入到待上传文件的本地目录
命令ftp>lcd C:\User\caker\Desktop
在这里插入图片描述
在这里插入图片描述
输入命令:ftp!dir可以查看本地目录中的文件和文件夹
在这里插入图片描述
输入命令:ftp>pwd检查ftp当前目录
在这里插入图片描述
上传文件
单文件上传:ftp>put name.txt

多文件上传:ftp>mput *.txt (上传目录下所有.txt文件),多文件上传需要将交互模式设置为关,使用命令:ftp>prompt
在这里插入图片描述
上传好文件后然后用另外一台虚拟机进行模拟攻击,输入payload

http://192.168.171.128:88/vul/ssrf/ssrf_curl.php?url=ftp://caker:caker@192.168.171.130/2.txt.txt

可以读到内网ftp服务器上的文件内容。(不知道为啥结尾多个1,这么一看,上面file协议读取的文件内容结尾也多个1)
在这里插入图片描述

3.dict协议扫描内网主机开放端口

使用dict协议可以获取内网主机开放端口相应服务的指纹信息,比如内网主机192.168.171.130上开了ftp服务的话,就可以通过payload

http://192.168.171.128:88/vul/ssrf/ssrf_curl.php?url=dict://192.168.171.130:21

获取相关服务信息
在这里插入图片描述
在实际中我们可以通过这个方法,使用burpsuit中的Intruder模块对0-65535端口进行爆破,来查看目标主机开放了那些服务。

代码分析

在这里插入图片描述

第二关 SSRF(file_get_content)

进入第二关还是一个连接,点击看看吧
在这里插入图片描述
同样的流程,同样的套路,又得到一个带参数的链接,参数名file,参数值是个url,或者说,是个文件路径
在这里插入图片描述
根据题目提示我们知道这里使用的是file_get_content()函数,所以我们需要先了解这个函数。

file_get_contents() 把整个文件读入一个字符串中。
该函数是用于把文件的内容读入到一个字符串中的首选方法。如果服务器操作系统支持,还会使用内存映射技术来增强性能。

主要用来读取文件的

1.file读取本地文件

一说到读文件首先就想到file协议了,先来试一下payload:

http://192.168.171.128:88/vul/ssrf/ssrf_fgc.php?file=file:///C:windows/win.ini

在这里插入图片描述
读取成功

如果对伪协议不是很了解的话,可以查看我的这篇文章查看相关伪协议命令
文件包含漏洞全面详解

2.php://filter/读取php源代码

php伪协议中可以通过php://filter来读取文件源码,比如我们想读取WWW目录下中的inclue.php文件,需要跨三层目录。
在这里插入图片描述
使用payload:

http://www.pikachu.com:90/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=../../../include.php

得到源码的base64编码
在这里插入图片描述
复制出来之后网上解码
在这里插入图片描述

3.http协议请求内网资源

通过phpstudy在192.168.171.130的pc上搭建了一个http服务,并在服务器写入了一个1.txt的文件,文件内容为hello world。
在这里插入图片描述
然后浏览器输入payload:

http://192.168.171.128:88/vul/ssrf/ssrf_fgc.php?file=http://192.168.171.130/1.txt

成功读取到1.txt的内容
在这里插入图片描述

3.ftp读取内网上传文件

试了下ftp,没有成功
payload和上一关一样

http://192.168.171.128:88/vul/ssrf/ssrf_fgc.php?file=ftp://caker:caker@192.168.171.130/2.txt.txt

在这里插入图片描述
输入后没有反应

到wftpd32的界面对比后发现。这一关的请求发送后比上一关多了一个/,不知道怎么产生的。
在这里插入图片描述

代码分析

源代码如下,这关主要想要告诉我们,使用file_get_contert函数后,肯定能用php://filter伪协议进行一个源码读取,还有就是http服务进行一个内网请求。
在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
程声明:该课程是教学使用,视频内涉及漏洞利用方法,请勿在互联网环境中使用;维护互联网安全,人人有责。实验所需环境:vmware;kali虚拟机一台;windows server一台;有docker环境的Linux虚拟机环境下载地址在购买课程后单独发送 【课程配套资源】1、Python脚本(Margin老师自研,不光能学漏洞,还能学Python,实在是划算)2、与Margin老师实时互动3、免费的CISP-PTE考试技巧指导(Margin老师与CISP-PTE的负责人很熟的,非常多的一手消息^o^)4、Margin老师的内部直播可以优先参加5、Margin老师的课程基于CISP-PTE的知识体系进一步扩展,使课程内容更贴近实战   【课程主要解决问题】1、CSRF、SSRF搞不清楚?2、SSRF原理是什么?危害大小?如何利用SSRF获取主机权限?如果使用Python提高挖洞效率?3、Gopher协议、Dict协议?完全没听过啊,没关系,看完课程后你门清。4、SSRF渗透Redis数据库,Redis客户端和服务器端怎么通信?通信报文是怎么样的?看这里就行。5、SSRF渗透Struts2总是失败?不知道如何编码?不知道如何使用Gopher协议?来这里。6、SSRF表面简单,实则有无数坑,通过视频提高学习效率吧。 【CISP-PTE介绍】1、CISP-PTE是进入网络安全行业的TOP1认证,能帮你梳理完整的网络安全知识体系2、有PTE证书在网络安全公司是免技术笔试的,怎么样?是不是很棒。3、Margin老师的课程基于CISP-PTE的知识体系进一步扩展,使课程内容更贴近实战本课程属于CISP-PTE渗透测试工程师认证体系的课程,但内容更加丰富。CISP-PTE是国内第一个以动手实操为主的网络安全认证,该注册考试是为了锻炼考生世界解决网络安全问题的能力,持续增强我国的网络安全水平和防御能力,促进国内网络防御能力的不断提高。考试内容从多个层面进行,考点和网络安全动态相结合,真实的反应出真实的网络环境中发现的各种问题。如果要考取CISP-PTE证书需要掌握以下内容:1、Web安全基础,注入漏洞、上传漏洞、跨站脚本漏洞、访问控制漏洞、会话管理漏洞哦等。2、中间件的安全知识,如:Apache,IIS,Tomcat,以及 JAVA 开发的中间件 Weblogic,Jboss, Websphere 等,且要了解中间件加固方法,在攻与防的能力上不断提升。3、操作系统安全,包含Windows和Linux操作系统,从账户管理、文件系统权限、日志审计等方面讲解,了解常见的漏洞方式和加固方法。4、数据库安全,包含MSSQL、MYSQL、ORACLE、REDIS数据,了解常用的数据库漏洞和题全方法,保证数据库的安全性。 【关于Margin老师】· Margin/教育系统网络安全保障人员认证首批讲师/高级讲师· 擅长CTF/Web安全/渗透测试 /系统安全· 3年研发/擅长Java/Python/某银行现金循环机业务系统开发者· 曾参与开发网络安全认证教材· 知乎专栏/CISP-PTE渗透测试工程师学习· 4年线下网络安全讲师/2000+线下学员/100000+线上学员
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值