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的伪协议

相关推荐
苏能润滑油油液文哥7 小时前
储能液冷安全边界解析:从热失控链条看冷却液的介入区间与选型指标
安全
Lcr3s9 小时前
我的DVWA靶场实践_Low难度
安全
亚远景aspice9 小时前
亚远景-低空经济与具身智能:具身智能飞行器量产落地,过程合规与安全体系怎么搭
人工智能·安全·过程改进·低空经济·研发管理·亚远景科技·过程能力评估
EasyGBS9 小时前
水域乱象难管控?国标GB28181视频平台EasyGBS视频+AI双引擎赋能河湖监管
深度学习·安全·gb28181
万年咸鱼10 小时前
HTTPS 是如何保证传输安全的?
网络协议·安全·https
JackieDYH10 小时前
深入理解iframe的allow属性与安全实践-iframe权限点
安全
OxYGC12 小时前
Spring 面经系列 · 第 1 篇:Bean 生命周期、单例语义、依赖注入与线程安全
java·安全·spring
himobrinehacken13 小时前
位运算揭秘:左右移与符号位陷阱
c语言·c++·算法·安全
mmsx13 小时前
Android 安全校验下沉到原生层:防 patch 与构建期自动化
android·安全·自动化
上海广测检测科技有限公司13 小时前
无线鼠标出口欧盟CE认证准备要点:RED指令下的射频、安全与电池义务梳理
经验分享·安全