ssrf学习

本文最后更新于 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 资源
curl_setopt($curlobj, CURLOPT_POST, 0);
curl_setopt($curlobj,CURLOPT_URL,$link);
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);// 设置 URL 和相应的选项
$result=curl_exec($curlobj);// 抓取 URL 并把它传递给浏览器
curl_close($curlobj);// 关闭 cURL 资源,并且释放系统资源

$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


ssrf学习
http://example.com/2025/03/01/ssrf/
作者
清风
发布于
2025年3月1日
许可协议