当前位置: 首页 > news >正文

SSRF服务器端请求伪造

凡是发起网络请求的地方,就有可能涉及ssrf
1.SSRF漏洞定义:
SSRF(Server-sideRequestForge)服务器端请求伪造,由于服务端提供了从其他服务器应用获取数据的功能,但没有对地址和协议等做过滤和限制。使得攻击者可以利用存在缺陷的web应用作为代理,攻击其远程和本地的服务器。正是因为它提由服务端发起的,所以它能绕过防火墙去访问内网里的数据,请求到与它相连而与外网隔离的内部系统

2.漏洞产生原因:
大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档,等等。

3.漏洞利用:
引发SSRF漏洞的几个函数:
file_get_contents() : 获取本地或者远程文件内容
fsockopen(): 获得套接字信息
curLexec(): 随意攻击内网中所有应用
fopen(): 打开文件或者URL
readfile(): 输出一个文件
1.file_get_contents0
功能:把整个文件读入一个字符串中,获取本地或者远程文件内容
语法:file_get_contents(path,include_path,context,start,max_length)

参数

path:必需。规定要读取的文件。
include_path:可选。如果也想在include_path中搜寻文件的话,可以将该参数设为"1”。
context:可选。规定文件句柄的环境,context是一套可以修改流的行为的选项,若使用null,则忽略。
start:可选。规定在文件中开始读取的位置。该参数是PHP5.1新加的。
max_length:可选,规定读取的字节数,该参数是PHP5.1新加的。

<?php
if(isset($_POST['url']))
{$content=file_get_contents($_PosT['url']);$tilenanel='./inages/'.rand().'.img';\file_put_contents($filenane,$content);echo $_POST['url'];$img="<img src=\"".$filenane."\"/>";
}
echo $iag:
?>

2.fsockopen0
功能:获得套接字信息
开启:编辑PHPini中allow_urlfopen选项
allow_url_fopen=On
参数:
hostname:如果安装了OpenSSL,那么你也许应该在你的主机名地址前面添加访问协议
SsI://或者是tIs://,从而可以使用基于TCP/IP协议的SSL或者TLS的客户端连接到远程主机。
port:端口号。如果对该参数传一个1,则表示不使用端口,例如unix://。
errno:如果errno的返回值为O,而且这个函数的返回值为FALSE,那么这表明该错误发生在套接字连接(connect0)调用之前,导致连接失败的原因最大的可能是初始化套接字的时候发生了错误。

errstr:错误信息将以字符串的信息返回。
timeout:设置连接的时限,单位为秒。
实例:

<<<EOF    HKHKHKHK字符串    EOF        尾部以EOF收尾

3.curLexeco
功能:执行一个CURL会话这个函数应该在初始化一个CURL会话并且全部的选项都被设
置后被调用。
语法:mixed curLexec(resource Sch)
参数:ch由curLinitO返回的cURL句柄。

curLexeco实例<?php
//创建一个CURL资源$ch = curl_init();
//设置URL和相应的选项
curl_setopt($ch,CURLoPT_URL,"http://ww.w3cschool.cc/");
curl_setopt($ch, CURLOPT_HEADER,0);
//抓取URL并把它传递给浏览器
curl_exec($ch);
//关闭CURL资源,并且释放系统资源
curl_close($ch);
?>

4.fopeno
功能:打开文件或者URL
语法:fopen(filename,mode,include_path,context)

参数

filename:必需。规定要打开的文件或URL。
mode:必需,规定要求到该文件/流的访问类型,可能的值见下表。
include_path:可选。如果也需要在include_path中检索文件的话,可以将该参数设为1或TRUE。
context:可选,规定文件句柄的环境,Context是可以修改流的行为的一套选项.

mode参数可能的值
"r":只读方式打开,将文件指计指向文件头。
"r+":读写方式打开,将文件指针指向文件头。
"w":写入方式打开,将文件指针指向文件头并将文件大小截为零,如果文件不存在则尝试创建
"w+":读写方式打开,将文件指针指向文件头并将文件大小截为零,如果文件不存在则尝试创建
"a":写入方式打开,将文件指针指向文件末尾,如果文件不存在则尝试创建。
"a+":读写方式打开,将文件指针指向文件末尾,如果文件不存在则尝试创建
“x"创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则fopen()调用失败并返回
FALSE,并生成一条EWARNING级别的错误信息,如果文件不存在则尝试创健之。这和给底         层的open(2)系统调用指定OEXCL|O_CREAT标记是等价的。此选项被PHP4.3.2以及以后的           版本所支持,仅能用于本地文件。
"x+":创建并以读写方式打开,将文件指针指向文件头、如果文件已存在,则fopen(调用失并返回
FALSE,并生成一条EWARNING级别的错误信息,如果文件不存在则尝试创健之。这和给底          层的OPeN(2)系统调用指定OEXCL|OCREAT标记是等价的.此选项被PHP4.3.2以及以后的版          本所支持,仅能用于本地文件。

如果PHP认为filename指定的是一个本地文件,将尝试在该文件上打开一个流。该文件
必须是PHP可以访问的,因此需要确认文件访问权限允许该访问。如果激活了安全模式或
者open_basedir则会应用进一步的限制。
如果PHP认为filename指定的是一个已注册的协议,而该协议被注册为一个网络URL,
PHP将检查并确认allow_urLfopen已被激活。如果关闭了,PHP将发出一个警告,而
fopen的调用则失败。

如:

<?php
$file = fopen("test.txt","r");
$file= fopen("/home/test/test.txt","r");
$file fopen("/home/test/test.gif","wb");
$file=fopen("http://ww.example.com/","r");
$file = fopen("ftp://user:passwordgexample.com/test.txt","w");
?>

5.readfile0
功能:输出一个文件,读入一个文件并写入到输出缓冲
语法:readfile(filename,include_path,context)。如果在php.ini文件中“fopenwrappers”已经被激活,则在本函数中可以把URL作为文件
名来使用

4.SSRF的业务场景
1.分享:通过URL地址分享网页内容
2.转码服务(手机也适配)
3.在线翻译(百度翻译搜索检索IP的网址:http://www.ip.cn)
4.图片加载与下载通过URL地址加载或下载图片
5.图片、文章收藏功能
6.未公开的api实现以及其他调用URL的功能
7.从uRL关键字中寻找(share、wap、url、link、src、source、target、sourceURI、imageURL、domain)
8.图片加载与下载
9.未公开的api实现以及其他调用URL的功能

5.漏洞危害:
具体危害取决于,内网和本机涉及哪些漏洞有什么功能
1.对目标服务器所在的内网进行IP存活性扫描和端口扫描(Nmap)
2.利用扫描的指纹信息判断开放的服务,从而对内网的主机进行攻击
3.识别内网WEB应用指纹,判断应用类型进行攻击
4.使用特定协议攻击应用(gopher、dict、file、FTP/SFTP等)
5.扫描内网开放的端口
6.读取主机任意文件
7.攻击内网应用,如redis,mysql等
8.可以向内部任意主机的任意端口发送精心构造的数据包payload

6.漏洞挖掘思路:
思路一:黑白盒
1、白盒:找能够发起请求的函数

<?php$URL =$_GET['url'];$CH=CURL_INIT();CURL_SETOPT(SCH, CURLOPT_URL, $URL);CURL_SETOPT($CH, CURLOPT_HEADER, FALSE);CURL_SETOPT(SCH, CURLOPT_RETURNTRANSFER,TRUE);CURL_SETOPT($CH, CURLOPT_SSL_VERIFYPEER, FALSE);CURL_SETOPT(SCH, CURLOPT_FOLLOWLOCATION, TRUE);$RES=CURL EXEC($CH);CURL_CLOSE($CH);echo $RES;

2、黑盒:看URL传参,urI中出现协议和域名,就有可能存在
url=http://此处可以是dnslog域名(获得随机域名)
url=file://
相关关键字:share、wap、url、link、src、source、target、display、sourceURI、
imageURL、domain

3、检测SSRF是否存在
(1)dnslog辅助:
测试方法:可以在测试点输入dnslog域名,看是否能访问到,如果dnslog有反应,说明有极高概率,漏洞存在

思路二:
能发起网络请求的地方就有可能存在SSRF
1、如何确定是否存在ssrf:
1.要能让目标发起网络请求
2.首先要能确定能访问外网,利用dnslog,如果有反应说明可以访问外网
3.接下来确定是否访问内网,本来我们是访问不到内网,但我们可以通过如网页翻译SSRF访问对
方服务器内网,如:dict:/P地址端口号对对方内网开启那些端口进行探测,可以跑端口(1-
65535)得出开放什么端口后,在点开开放端口页面看开启那些服务
能访问外网(一般不认)
能访问内网
能访问本机
3、相关案例手法:
分享:通过URL地址分享网页内容。
在线翻译。
图片的加载与下载:通过URL地址加载或下载图片,要注意区分是客户端发送的请求还是服务端发送的请求。
图片,文章收藏功能。
未公开的api实现以及其他调用URL的功能。

7.漏洞防范:
1.通过正则表达式编写不允许访问本机和内网1
2.用户指定(或者预埋在前端的请求)的地址进行资源请求则请做好目标地址的过滤
3.限制协议只为HTTP、HTTPS,减少其他如file://、gOpher://和ftp://等可能引起的问题协议
4.禁止3xx跳转,重定向
5.设置URL白名单或者限制内网IP


文章转载自:

http://xu1QeqPY.kLzdy.cn
http://mPgBlTRo.kLzdy.cn
http://khEmeNPS.kLzdy.cn
http://2M7cFuye.kLzdy.cn
http://vhmkigKY.kLzdy.cn
http://lZ0hyNzz.kLzdy.cn
http://ZwBZPhnW.kLzdy.cn
http://eoKrrGDi.kLzdy.cn
http://CbI1dTmD.kLzdy.cn
http://vMwDUfzS.kLzdy.cn
http://18zUI8eL.kLzdy.cn
http://taMJFoKh.kLzdy.cn
http://eWYwJsSw.kLzdy.cn
http://o8tOd0DN.kLzdy.cn
http://rztNZCjA.kLzdy.cn
http://IMWmZKmn.kLzdy.cn
http://BHgu3dgl.kLzdy.cn
http://UsKoH7dg.kLzdy.cn
http://dOcfZMGo.kLzdy.cn
http://lHgSzRGE.kLzdy.cn
http://s7kKGEbI.kLzdy.cn
http://zJm6LrTL.kLzdy.cn
http://Mg7H7Fog.kLzdy.cn
http://h28aqkgA.kLzdy.cn
http://alKNzUru.kLzdy.cn
http://CA1wToql.kLzdy.cn
http://5Y2riIAN.kLzdy.cn
http://fmpMJq9w.kLzdy.cn
http://xm1mIL04.kLzdy.cn
http://71DaRGeO.kLzdy.cn
http://www.dtcms.com/a/383365.html

相关文章:

  • Spring事务注解@Transactional核心机制详解
  • [问题记录]刚下载的Qt,跑项目出现的问题
  • ACP笔记(二):大模型的问答工作流程及影响大模型内容生成的随机生成参数
  • 安卓学习 之 Activity的生明周期
  • 如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘pandas’ 问题
  • SPSS绘制ROC曲线并计算灵敏度、特异度
  • 健康的饮食习惯是什么样的
  • [Windows] 电脑清理软件 AppCleaner v3.3.6626.24371
  • Git版本控制工具+基础命令
  • 通用引用与重载的困境:Effective Modern C++ 条款27的技术总结
  • [数据结构总结篇]--线性表
  • 【Javaweb学习|实训总结|Week2】个人疑问记录、大模型API接入
  • srm招标采购询价供应商管理系统源码(java源码➕vue前端➕数据库操作文档➕软件文档)
  • 蚂蚁S19 Pro Hyd 184T矿机参数分析及其特点
  • Coze源码分析-资源库-创建知识库-基础设施/存储/安全
  • 国家标准项目管理专业人员五级划分解析
  • c++---map和set
  • Python可微分编程革命:JAX与PyTorch2.0的梯度计算架构剖析
  • 【Linux】人事档案——用户及组管理
  • JavaScript对象创建方式完全指南:从原始到现代的演进之路
  • 深入探讨 HarmonyOS 新一代声明式 UI:从 ArkTS 与 ArkUI 到高级应用实践
  • React组件通信的6种艺术:从单向传值到全局共享
  • Go 消息队列学习指南
  • 导购类电商平台的服务容错机制:Sentinel在微服务稳定性保障中的应用
  • 基于HTML2WEB和DEEPSEEK实现web设计
  • 网络系统设计方案: eNSP、华为、网络架构设计、小型局域网、DHCP\MSTP\VRRP\VLAN\RIP
  • 视觉 AI 如何优化产品图片分类?
  • Linux《线程(上)》
  • LeetCode 2565.最少得分子序列
  • Petalinux相关配置——ZYNQ通过eMMC启动