本文最后更新于 2025年4月24日 晚上
ssrf学习
SSRF漏洞介绍
SSRF,一种由攻击者构造请求,由服务端发起请求的安全漏洞,一般时作用于外网无法访问的系统,因此服务端发起,让服务端来访问我们
漏洞产生的相关函数
1
| file_get_contents()、fsockopen()、curl_exec()、fopen()、readfile()
|
(1)file_get_contents()
1 2 3 4 5 6
| file_get_content函数从用户指定的url获取内容,然后指定一个文件名j进行保存,并展示给用户。file_put_content函数把一个字符串写入文件中。
<?php $url = $_GET['url'];; echo file_get_contents($url); ?>
|
(2)fsockopen()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| fsockopen函数实现对用户指定url数据的获取,该函数使用socket(端口)跟服务器建立tcp连接,传输数据。变量host为主机名,port为端口,errstr表示错误信息将以字符串的信息返回,30为时限
<?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()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| curl_exec函数用于执行指定的cURL会话
<?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; } ?>
|
漏洞可利用的相关协议
file协议
1 2
| http://example.com/ssrf.php?url=file:///etc/passwdhttp://example.com/ssrf.php?url=file:///C:/Windows/win.ini //可以尝试从文件系统中获取文件
|
dic/ftp协议
使用dict协议可以获取内网主机开放端口相应服务的指纹信息
1 2 3 4
| //dict http://example.com/pikachu/vul/ssrf/ssrf_curl.php?url=dict://192.168.190.130:80 //ftp http://example/pikachu/vul/ssrf/ssrf_curl.php?url=ftp://192.168.190.130:80
|
gopher 协议
gopher协议支持发出GET、POST请求,是ssrf利用中最强大的协议
1
| gopher://<host>:<port>/<gopher-path>_<发送的TCP数据>
|
保护
1.ip地址过滤,可用进制转换绕过
2.域名解析绕过,搞个网站,绑定本地ip让服务端访问
3.0也代表127.0.0.1,即ping 0=ping 127.0.0.1
4.3xx重定向
1 2
| <?php header("Location:http://127.0.0.1/flag.php");
|
5.@绕过
可用http://aaaa@qqww.com等效于http://qqww.com