什么是SSRF
- 服务器端请求伪造(
SSRF
)是指攻击者能够从易受攻击的Web
应用程序发送精心设计的请求的对其他网站进行攻击。(利用一个可发起网络请求的服务当作跳板来攻击其他服务)。 CSRF
(跨站/客户端请求伪造) => 浏览器因为Js
偷偷的发送数据包
SSRF
(服务器端请求伪造) => 服务器因为你的传参偷偷发送数据包- 攻击者能够利用目标帮助攻击者访问其他想要攻击的目标,即
A
让B
帮忙访问C
。
SSRF的危害
-
扫描内部网络。
mysql -h 主机地址 -u 用户名 -p 用户密码
-
隐藏攻击者【当做跳板机来躲避追踪】。
-
攻击目标本机【
dict://
探测端口的协议、file://
读取文件的协议】。
注意: PHP代码
-
向内部任意主机的任意端口发送精心构造的数据包。
-
DOS
攻击。 -
SSRF
+XSS
【http://kypt8004.ia.aqlab.cn/FeedbackView.asp
这个网址本身具有XSS
漏洞】,即可读取目标网站源码。
注意
- 有些网站对
127.0.0.1
的访问是不设防的。 WAF
【架在公网设备上】不会拦截你的SSRF
攻击。- 传参在中存在
http
请求,说明可能存在SSRF
漏洞。
SSRF核心代码
<?php
$URL = $_GET['url'];
$CH = CURL_INIT();
CURL_SETOPT($CH, CURLOPT_URL, $URL);
CURL_SETOPT($CH, CURLOPT_HEADER, FALSE);
CURL_SETOPT($CH, CURLOPT_RETURNTRANSFER, TRUE);
CURL_SETOPT($CH, CURLOPT_SSL_VERIFYPEER, FALSE);
CURL_SETOPT($CH, CURLOPT_FOLLOWLOCATION, TRUE);
$RES = CURL_EXEC($CH);
CURL_CLOSE($CH);
echo $RES;
?>
核心: 穿过防火墙,攻击内网。
练习
- 我们尝试用提示的网址,发现url传参。
- 尝试使用
dict
协议扫描目录,http://ud768019.ia.aqlab.cn/index.php?url=dict://127.0.0.1:81
,发现存在81
端口。【使用burp
即可跑出81
端口】 - 我们尝试访问一下,发现页面返回空白,查看源码,即可在源码中发现flag。
- 但需要注意一点,我们直接在
url
栏中访问81
端口是访问不到的,因为我们用127.0.0.1:81
端口,是当前存在SSRF
漏洞主机的81
端口,而我们在url
栏的http://ud768019.ia.aqlab.cn:81/
是指这个域名IP
对应的81
端口,这两者不一样。