什么是SSRF
SSRF(服务端请求伪造漏洞)由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据。
一般情况下,SSRF针对的都是一些外网无法访问的内网,所以需要SSRF使目标后端去访问内网,进而达到我们攻击内网的目的。
通过SSRF,我们可以访问目标内网的redis服务,mysql服务,smpt服务,fastcgi服务等
造成漏洞的一些函数
file_get_contents():将整个文件或一个url所指向的文件读入一个字符串中。
readfile():输出一个文件的内容。
fsockopen():打开一个网络连接或者一个Unix套接字连接。
curl_exec():初始化一个新的会话,返回一个cURL句柄,供curl_setopt(),curl_exec()和curl_close()函数使用。
fopen():打开一个文件文件或者URL。
1、网络安全学习路线2、电子书籍(白帽子)3、安全大厂内部视频4、份src文档5、常见安全面试题6、ctf大赛经典题目解析7、全套工具包8、应急响应笔记
file_get_contents()/readfile()
?php$url=$_GET[url];;echofile_get_contents($url);?
fsockopen()
fsockopen($hostname,$port,$errno,$errstr,$timeout)用于打开一个网络连接或者一个Unix套接字连接,初始化一个套接字连接到指定主机(hostname),实现对用户指定url数据的获取。该函数会使用socket跟服务器建立tcp连接,进行传输原始数据。fsockopen()将返回一个文件句柄,之后可以被其他文件类函数调用(例如:fgets(),fgetss(),fwrite(),fclose()还有feof())。如果调用失败,将返回false
?php$host=$_GET[url];$fp=fsockopen($host,80,$errno,$errstr,30);if(!$fp){echo"$errstr($errno)br/\n";}else{$out="GET/HTTP/1.1\r\n";$out.="Host:$host\r\n";$out.="Connection:Close\r\n\r\n";fwrite($fp,$out);while(!feof($fp)){echofgets($fp,);}fclose($fp);}?
curl_exec()
?php$url=$_POST[url];$ch=curl_init($url);//创造一个curl资源curl_setopt($ch,CURLOPT_HEADER,0);//设置url和相应的选项curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);$result=curl_exec($ch);//抓取url并将其传递给浏览器curl_close($ch);//关闭curl资源echo($result);?
接下来我就SSRF涉及的协议和一些bypass结合一些CTF进行分析
SSRF攻击中涉及的一些协议
因为只是展示各个协议的用途,所以这里就不自己搭环境,直接用CTFHUB的技能树了