pikache靶场通关——SSRF攻击

文章目录

  • 前言
  • 环境
  • 第一关、SSRF(curl)
    • Step.1、http协议链接本地文件
    • Step.2、file协议读取C盘下的配置文件
    • Step.3、dict协议扫描内网其他主机的端口开放情况
    • Step.4、使用burp扫描内网其他主机的端口开放情况
    • Step.5、后端源码分析
  • 第二关、SSRF(file_get_content)
    • Step.1、连接指定网址
    • Step.2、file协议读取C盘下的配置文件
    • Step.3、php伪协议读取php源码
    • Step.4、http协议读对方根目录的文件
    • Step.5、后端源码分析
      • file_get_contents 与 curl_exec的区别


前言

SSRF(Server-Side Request Forgery:服务器端请求伪造)

其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制
导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据

数据流:攻击者----->服务器---->目标地址

根据后台使用的函数的不同,对应的影响和利用方法又有不一样

PHP中下面函数的使用不当会导致SSRF:
file_get_contents()
fsockopen()
curl_exec()

如果一定要通过后台服务器远程去对用户指定(“或者预埋在前端的请求”)的地址进行资源请求,则请做好目标地址的过滤。

在这里插入图片描述
靶场一共有2关,现我们就开始通关吧。


环境

靶场安装机器:Windows10(192.168.1.106)


第一关、SSRF(curl)

在这里插入图片描述
如图,就一个链接,点击它看看吧
在这里插入图片描述

Step.1、http协议链接本地文件

在网站输入框中的url=后面改成:127.0.0.1/2.php
在这里插入图片描述
发现可以链接根目录的文件

Step.2、file协议读取C盘下的配置文件

把url=后面的内容修改为:file:///C:/Windows/win.ini
在这里插入图片描述
也可以顺利读出来。

Step.3、dict协议扫描内网其他主机的端口开放情况

我这里探测的主机是192.168.1.114
在这里插入图片描述
如图,显示无权限链接,就说明该主机开启了数据库。

这里同理,也可以使用burp,来查看该主机开启了什么端口。具体操作步骤如下。

Step.4、使用burp扫描内网其他主机的端口开放情况

为了节省时间就扫描了0~65535端口的主机来进行探测

抓包,并把抓到的包发送到攻击模块
在这里插入图片描述

配置payload,为了节省时间,就扫描了1~8080端口
在这里插入图片描述
在这里插入图片描述
设置为单线程准确性更高

结果如下:
在这里插入图片描述
到这里第一关通关

Step.5、后端源码分析

在这里插入图片描述
前端传进来的url被后台使用curl_exec()进行了请求,然后将请求的结果又返回给了前端。


第二关、SSRF(file_get_content)

在这里插入图片描述
点击一下,看看
在这里插入图片描述

Step.1、连接指定网址

这里就直接是选用baidu了
在这里插入图片描述

Step.2、file协议读取C盘下的配置文件

把url=后面的内容修改为:file:///C:/Windows/win.ini
在这里插入图片描述

Step.3、php伪协议读取php源码

这里读取的是一个放在www目录下的2.php文件
php://filter/read=convert.base64- encode/resource= ../../../2.php
在这里插入图片描述

Step.4、http协议读对方根目录的文件

我这里读取一个名为hello.txt的文件内容
在这里插入图片描述
第二关通关

Step.5、后端源码分析

在这里插入图片描述
本关使用了file_get_contents() 函数,该函数将指定 URL 的文件读入成一个字符串并返回。

file_get_contents 与 curl_exec的区别

  1. curl_exec 支持更多协议,有http、https、ftp、gopher、telnet、dict、file、ldap;模拟 Cookie 登录,爬取网页;FTP 上传下载。

  2. file_get_contents 只能使用 GET 方式获取数据。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/4409.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot小结

目录 基本介绍 SpringBoot快速入门 开发步骤 1.创建新模块 2 .创建 Controller 3 启动服务器 可能会出现的问题:端口被占用 解决方法: 1. 暴力:找到占用的端口号,并且找到对应的进程,杀死该进程,释放…

计算机网络-数据链路层上篇

目录 一、数据链路层概述 二、封装成帧 三、差错检测 (一)奇偶校验 (二)循环冗余校验CRC 四、可靠传输 (一)停止-等待协议SW (二)后退N帧协议GBN (三&#xff…

AutoSAR系列讲解(入门篇)4.6-BSW的Watchdog功能

一、架构与术语解释 前面都挺难的吧?实践出真知,后面实践篇的时候,大家应该就能明白了。这一节就来讲个简单的功能------看门狗。看门狗想必大家应该都再熟悉不过了吧,主要就下面三层结构,简单明了,这节确实…

mac 文件批量重命名001开始

mac 文件批量重命名001开始,怎么操作?我们平时在整理办公文件的时候,经常需要对文件的名称进行修改,将文件修改为数字形式的名称,例如001、002、003、004......这样的形式,尤其是某项工作涉及非常多文件的时…

进程的基本概念解读

目录 什么是进程 PCB OS中用于管理控制的数据结构 进程控制块PCB的作用 进程控制块中的信息 前趋图 背景 作用 表示 示例 程序的顺序执行 程序顺序执行的特征 程序的并发执行 程序的并发执行的特征 例题解读 进程的三种基本状态 进程的三种状态之间的转换 进…

Spring面试题--Spring的bean的生命周期

这个问题比较困难,设计到了spring的底层,但是通过这个的学习,可以帮助我们了解Spring容器是如何管理和创建bean实例,以及方便调试和解决问题。 BeanDefinition bean的定义信息,Spring容器在进行实例化时,…

初学mybatis(二)CRUD操作及配置解析

学习回顾:初学mybatis(一) 一、namespace 1、将上面案例中的UserMapper接口改名为 UserDao;2、将UserMapper.xml中的namespace改为为UserDao的路径 .3、再次测试 结论: 配置文件中namespace中的名称为对应Mapper接口或…

常州工学院数字图像处理及应用2022-2023第二学期实验报告 + 期末

《数字图像处理及应用》 课程 实验报告书 专业班级: 21计二 姓 名: 王梓权 学 号: 21030228 指导教师: 徐则中 计算机信息工程学院 《数字图像处理》实验 实验教学目的和要求 《数字图像处理》课程内容是一门综合…

Linux 用户名称高亮和最近路径显示

1、通常情况下,Linux中的路径名称会不断叠加显示,如下图,这样看起来会很长。 2、为了设置路径只是当前最近的文件路径,先进入自己的家目录,然后进入.bashrc: 3、在.bashrc文件中的最后一行加入以下内容…

【Data Studio 2.1.0连接openGauss2.1.0】

Data Studio 2.1.0连接openGauss2.1.0 一、实验环境说明二、配置客户端接入方式三、Data Studio2.1.0连接openGauss数据库 一、实验环境说明 openGauss2.1.0版本Data Studio 2.1.0 版本 二、配置客户端接入方式 【以下操作是omm用户进行】 修改配置文件pg_hba.conf&#xf…

tiny tool - get_file_path_name_by_drop_file

文章目录 tiny tool - get_file_path_name_by_drop_file概述工程效果收获的知识点vs2022工程, 必须自己设置对话框可以接受文件的风格vs2022建立的工程, 默认是unicode编码, 设置剪贴板数据时, 必须要设置为unicode的格式, 否则剪切板中只有第一个字符工程主要实现END tiny too…