CSRF
CSRF 漏洞原理
CSRF(Cross-site request forgery) 跨站请求伪造,由客户端发起,是一种劫持受信任用户向服务器发送非预期请求的攻击方式,与XSS相似,但比XSS更难防范,常与XSS一起配合攻击。
CSRF离不开Cookie,并不是说要获取Cookie,而是利用浏览器保存已有的Cookie数据来做跳转,而XSS恶意代码执行是辅助CSRF去执行,当然,XSS还有可能有其它用途,比如挖矿等等。现在基本上都不用打开另外一个页面去获取Cookie,结合XSS在本站下自动执行脚本动作,也不用获取Cookie,直接提交时默认就已经带上了本站的全部Cookie信息。所以这个XSS是实际操作CSRF是一个攻击概念
CSRF 漏洞检测
检测位置:修改、更新、添加信息、等地方
发送的数据包是否有token值
burpsuite检测csrf
防御方案
1、当用户发送重要的请求时需要输入原始密码
2、设置随机 Token(最有效)
3、检验 referer 来源,请求时判断请求链接是否为当前管理员正在使用的页面(管理员在编辑文章,黑客发来恶意的修改密码链接,因为修改密码页面管理员并没有在操作,所以攻击失败)
4、设置验证码
5、限制请求方式只能为 POST
SSRF
SSRF 漏洞原理
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为 它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统) SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。 注释:除了http/https等方式可以造成ssrf,类似tcp connect 方式也可以探测内网一些ip 的端口是否开发服务,只不过危害比较小而已。
SSRF 漏洞检测
各个协议调用探针:http,file,dict,ftp,gopher 等
漏洞攻击:端口扫描,指纹识别,漏洞利用,内网探针等
http://192.168.64.144/phpmyadmin/
file:///D:/www.txt
dict://192.168.64.144:3306/info
ftp://192.168.64.144:21
防御
1.禁止跳转
2.过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
3.禁用不需要的协议,仅仅允许http和https请求。可以防止类似于file://, gopher://, ftp:// 等引起的问题
4.设置URL白名单或者限制内网IP(使用gethostbyname()判断是否为内网IP)
5.限制请求的端口为http常用的端口,比如 80、443、8080、8090
6.统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
PHP | Java | curl | Perl | ASP.NET |
---|---|---|---|---|
√ | √ | √ | √ | √ |
√ | √ | √ | √ | √ |
—with-curlwrappers | before JDK1.7 | before 7.49.0不支持\x00 | √ | before version 3 |
—with-curlwrappers | X | before 7.49.0不支持\x00 | X | X |
—with-curlwrappers | X | √ | √ | √ |
√ | √ | √ | √ | √ |
√ | √ | √ | √ | √ |
—with-curlwrappers | X | √ | √ | √ |
—with-curlwrappers | X | √ | √ | X |
—with-curlwrappers | √ | √ | √ | √ |
—with-curlwrappers | √ | √ | √ | √ |
—with-curlwrappers | X | √ | X | X |
—with-curlwrappers | X | √ | X | X |
受限于allow_url_fopen | X | X | 受限于Net:SSH2 | X |
受限于allow_url_fopen | X | X | X | X |
受限于allow_url_fopen | X | X | X | X |
X | X | X | √ | X |
√ | X | X | X | X |
受限于allow_url_fopen | X | X | X | X |
演示案例:
Pikachu_CSRF 案例及 Burp 检测
Pikachu_CSRF 防御 Token 测试测试
SSRF_PHP,JAVA 漏洞代码协议运用
https://www.t00ls.net/articles-41070.html
SSRF_漏洞代码结合某漏洞利用测试
SSRF 实战_图片加载翻译转码等应用说明
涉及资源:
https://pan.baidu.com/s/1bp96ECJ
https://www.t00ls.net/articles-41070.html
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<form action="" method="POST">
请输入图片地址:<input type='text' name='url'>
<input type='submit' value="提交">
</form>
<?php
/*
$url=$_POST['url'];
$img =
file_get_contents('http://192.168.64.144:8080/?search==%00{.exec|cmd.exe%20/c%20net%20user%20t
est1234%201234%20/add.}');
echo $url;
echo $img;
//header("Content-Type: image/jpeg;text/html; charset=utf-8");
//echo $img;
//$file=fopen('x.png','w+');
//fwrite($file,$img);
//fclose($file);
*/
?>
<?php
$_POST['url'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $_POST['url']);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_exec($ch);
curl_close($ch);
?>