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

zyNo.25

SSRF漏洞

在了解ssrf漏洞前先了解curl命令的使用

1.curl命令的使用

基本格式:curl<参数值>请求地址

get请求:curl http://127.0.0.1

post请求:curl -X POST -d "a=1&b=2" http://127.0.0.1/(其中,使用-X参数来指定请求模式,-d参数来指定发送数据)

带cookie请求:curl -- cookie "PHPSESSID=xxxxxxx" http://127.0.0.1

上传文件:curl -F "file=@/etc/passwd" http://127.0.0.1(-F参数来表示上传文件请求,file是文件上传
中html form表单的name值,=@是格式,后面跟要上传的本地文件路径。)

协议补充

 file协议:一般用于读取本地文件。

Gopher协议:是一个可以发送自定义TCP数据的协议。(由于可以发送任意的TCP数据,这也大大拓宽了攻击面。)将HTTP包转换成Gopher只需要把特殊字符URL编码即可。

eg:

http请求:

发送的URL格式:

(其他的TCP数据只要将其不可见字符URL编码后按照格式即可发送。)

 dict协议:当我们发送dict://127.0.0.1:80/test123时,我们可以使用nc监听80端口,然后接收到的数据如下:我们仅仅能控制其中一行内容,那么对于这个协议可以用于攻击那些支持单行命令的应用,如Redis。Redis的控制命令(如SET user admin)是可以单行输入执行的。而像HTTP这类命令必须有一个跨多行的完整的请求格式才算正常请求,不然就不会被解析。

2. SSRF漏洞的基础概念

(1)概念:SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。ssrf是利用存在缺陷的web应用作为代理攻击远程和本地的服务器。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)

(2)形成原因:SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。

3.SSRF漏洞挖掘

(1)分享:通过URL地址分享网页内容

(2)在线翻译:通过URL地址翻译对应文本的内容。提供此功能的国内公司有百度、有道等。

(3)图片、文章收藏功能:此处的图片、文章收藏中的文章收蒙就类似于分享功能中获取URL地址中title以及文本的内容作为显示,目的还是为了更好的用户体验。

例如title参数是文章的标题地址,代表了一个文章的地址链接,请求后返回文章是否保存,收藏的返回信息。如果保存,收藏功能采用了此种形式保存文章,则在没有限制参数的形式下可能存在SSRF。

(4)从URL关键字中寻找
利用google 语法加上这些关键字去寻找SSRF漏洞

share
wap
url
link
src
source
target
u
display
sourceURl
imageURL
domain

4.产生SSRF漏洞的函数

1、file_get_contents:

下面的代码使用file_get_contents函数从用户指定的url获取图片。然后把它用一个随即文件名保存在硬盘上,并展示给用户。

<?php
if (isset($_POST['url'])) 
{ 
$content = file_get_contents($_POST['url']); 
$filename ='./images/'.rand().';img1.jpg'; 
file_put_contents($filename, $content); 
echo $_POST['url']; 
$img = "<img src=\"".$filename."\"/>"; 
} 
echo $img; 
?>

2、sockopen():

以下代码使用fsockopen函数实现获取用户制定url的数据(文件或者html)。这个函数会使用socket跟服务器建立tcp连接,传输原始数据。

<?php 
function GetFile($host,$port,$link) 
{ 
$fp = fsockopen($host, intval($port), $errno, $errstr, 30); 
if (!$fp) { 
echo "$errstr (error number $errno) \n"; 
} else { 
$out = "GET $link HTTP/1.1\r\n"; 
$out .= "Host: $host\r\n"; 
$out .= "Connection: Close\r\n\r\n"; 
$out .= "\r\n"; 
fwrite($fp, $out); 
$contents=''; 
while (!feof($fp)) { 
$contents.= fgets($fp, 1024); 
} 
fclose($fp); 
return $contents; 
} 
}
?>

3、curl_exec():

cURL这是另一个非常常见的实现,它通过 PHP获取数据。文件/数据被下载并存储在“curled”文件夹下的磁盘中,并附加了一个随机数和“.txt”文件扩展名。

<?php 
if (isset($_POST['url']))
{
$link = $_POST['url'];
$curlobj = curl_init();
curl_setopt($curlobj, CURLOPT_POST, 0);
curl_setopt($curlobj,CURLOPT_URL,$link);
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($curlobj);
curl_close($curlobj);
 
$filename = './curled/'.rand().'.txt';
file_put_contents($filename, $result); 
echo $result;
}
?>

五、SSRF漏洞利用(危害)

主要是用来进行内网探测,也可以说是内网信息收集,存活主机和开放端口。

1.可以对外网服务器所在的内网进行端口扫描,获取一些服务的banner信息;

2.有时候还可以攻击运行在内网或本地的应用程序;比如通过ssrf给内网的redis写定时任务,实现反弹shell

3.对内网web应用进行指纹识别;

4.攻击内外网的web应用,比如struts2,sq注入等;

6.SSRF中URL的伪协议

相关文章:

  • 卷积神经网络之AlexNet经典神经网络,实现手写数字0~9识别
  • 鸿蒙NEXT开发-网络管理
  • 嵌入式面试高频面试题:嵌入式系统调试方法大全
  • MySQL 主从复制原理及其工作过程
  • makefile+LSF
  • SpringBoot2.0整合Redis(Lettuce版本)
  • 前端504错误分析
  • 23种设计模式 - 命令模式
  • k8s学习记录(二):Pod基础篇
  • Go 之 Windows下 Beego 项目的搭建
  • 鸿蒙状态管理概述 v2
  • 计算机组成原理——输入/输出系统(十六)
  • 【分布式】Hadoop完全分布式的搭建(零基础)
  • Windows 11运行《拳皇98UM》等老游戏闪退解决方案
  • 《运维工程师如何利用DeepSeek实现智能运维:分级实战指南》
  • qt的下载安装详细介绍
  • 8.【线性代数】——求解Ax=b
  • C++:类之间的关系
  • 基于golang语言开发publicChain项目实战教程
  • Aseprite绘画流程案例(3)——卡通独角兽可爱
  • 微软宣布将裁员3%
  • 中美是否计划讨论美方以芬太尼为由对华征收的特别关税?外交部回应
  • 多家中小银行存款利率迈入“1时代”
  • 明查|印度空军“又有一架战机被巴基斯坦击落,飞行员被俘”?
  • 美国三大指数全线高开:纳指涨逾4%,大型科技股、中概股大涨
  • 从“求生”到“生活”:医保纳入创新药让梗阻性肥厚型心肌病患者重拾生活掌控权