CSRF(跨站请求伪造)
CSRF是利用了服务端对客户端的信任,是一种挟制用户在当前已登录的web应用程序上执行非本意操作的攻击方法。简单来说就是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾认证过的网站并进行一些操作从而达到攻击效果。
如何利用(以DVWA靶场做例)
1、对CSRF模块用burpsuit工具进行抓包,选择bp csrf poc模块。
2、修改功能参数生成html。
3、点击Test in browser,伪造url地址。
4、通过浏览器打开。
5、诱导点击,达到修改密码的效果。
如何防御
- 检测referer头,设置url白名单。
- 使用同源策略。
- 随机token值需使用强加密,且有一定位数(在当前站点无XSS的情况下,最好带当前pc的mac地址、时间戳、经纬度),token值应当在请求头中,不应在cookie中。
SSRF(服务端请求伪造)
服务端提供了从其他服务器应用获取数据的功能,但没对目标地址做严格过滤和限制,导致攻击者可以通过任意网址让后端服务器对其发送请求,并返回该目标地址的请求数据。
可以用来做什么
- 读取敏感文件(只能读存在ssrf漏洞的服务器,即本地文件)。
http://ip/ssrf.php?url=file:///etc/passwd
- 读取端口。
http://ip1:port/ssrf.php?url=dict://ip2
- gopher协议,利用格式,构造GET、POST请求。
curl -v gopher://ip:port/_"任意文档信息"
浏览器中 url+gopher://ip:port/_"任意文档信息"
#"_"为占位符,可以为任意字符
- http/https协议。
http://ip1:port/ssrf.php?url=http://ip2
ssrf.php内容
<?php
function curl($url){
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_exec($ch);
curl_close($ch);
}
$url = $_GET['url'];
curl($url);
?>
//源自网络
危害
- 可以通过外网访问,获取内网的操作系统(通过大小写敏感判断)、端口(服务、协议、应用)等banner信息。
- 可攻击内网的脆弱系统如存在rce、弱口令、空口令等。
- 可获取内网敏感资源、本地文件等。
如何防御
- 白名单限制服务器获取的资源和协议,只允许访问http和https请求。
- 黑名单过滤file\gopher\dict等无关协议。
*注意区分ssrf和任意url跳转漏洞302重定向
url跳转漏洞学习参考