CSRF原理

CSRF漏洞定义

CSRF(Cross-site request forery,XSRF)跨站请求伪造,也被称为One Click Attack或Session Riding。
CSRF与XSS的区别:
1、XSS利用站点内的信任用户,盗取cookie
2、CSRF通过伪装成受信任的用户请求受信任的网站

CSRF漏洞原理

利用目标用户的合法身份,以目标用户的名义执行某些非法操作
例如:
转账链接:http://www.xxx.com/pay.php?user=xx&money=100
构造恶意链接:http://www.xxx.com/pay.php?user=恶意用户&money=10000

CSRF漏洞利用简单示例

环境:bwapp
示例:bwapp - CSRF(change password)-low
修改密码为test(原密码为bug)
CSRF漏洞基础学习(笔记)
复制该链接
http://bwapp:8089/csrf_1.php?password_new=test&password_conf=test&action=change

退出登录,尝试使用bug登录,登录失败,使用test登录,登录成功。修改复制的链接为:
http://bwapp:8089/csrf_1.php?password_new=bug&password_conf=bug&action=change
即还原为默认密码bug,访问链接,密码修改成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YP5G5dWN-1596627637670)(https://upload-images.jianshu.io/upload_images/21035483-6db2067eb2c53477.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

无防护的CSRF漏洞利用

GET型CSRF

构造GET型URL,提交username和password参数,以此新建用户和密码
例如:
http://url/new_user.php?username=admin123&password=123
对于此类漏洞,可以通过隐藏利用诱导用户点击链接,例如制作一个中奖页面,将链接隐藏在img标签src属性中,当用户访问页面时,链接就会自动加载访问。

POST型CSRF

设置表单用于提交,将用户注册信息隐藏,并将链接放在action中,例如:

CSRF自动化探测

手动探测原理

手动探测原理在于探测web应用程序具有防止CSRF的措施(HTTP Referer头、是否设置Token、HTTP头自定义)。

自动化探测工具

CSRFTester(抓取表单信息重新提交)
1、设置浏览器代理:127.0.0.1:8080
2、登录web应用程序,提交表单,在CSRF工具中修改表单内容,查看是否更改,如果更改则存在CSRF漏洞。
3、生成POC代码(burpsuite(仅专业版)也可生成,抓取请求后,右键-Engagement tools-Generate CSRF POC)
4、使用服务器搭建CSRF POC访问页面

CSRF漏洞Token防御

漏洞修补逻辑

漏洞实质:服务器无法准确判断当前请求是否是合法用户自定义操作。一般情况下,服务器给予的合法令牌(登录成功时获得)会写入表单隐藏域的value值中,随表单内容一起提交。令牌正确才执行操作。

生成Token代码

Token:识别操作是否是当前用户自己操作的唯一凭证,需设置为难以**的内容,例如:

<?php function token_s(){ $salt="hello".date("h:i:s"); $token_r=md5($salt); return $token_r; } $token=token_s(); echo $token; ?>

使用Token进行CSRF漏洞防御

1、登录验证成功之后,在SESSION[“user_token”]中保存Token
2、在后台操作,增删改表单中添加隐藏域hidden,设置value为Token
3、提交验证Token是否正确

CSRF绕过Referer技巧

Referer防御CSRF原理

用户点击被构造好的CSRF利用页面,在用户执行对应操作时,提交的HTTP请求中有对应的Referer值,此时服务器判断Referer值是否与当前服务器域名有关,不相关则不执行操作。
代码大致如下:

<?php if(strpos($_SERVER['HTTP_REFERER'],'xxx.com')!=false){ //判断成功 } else{ //判断失败 } ?>

绕过Referer技巧

如果服务端只判断当前的Referer中是否具有域名,则可以直接新建文件夹进行绕过

GET型CSRF漏洞利用方法

链接利用

利用a标签可以携带GET型参数,例如:
<a href=“url/?new_user.php?username=恶意用户&password=123”>点击

iframe利用

iframe标签内容会在页面加载过程中自动加载,src指向页面请求的位置(注:可设置iframe的style=“display:none”,以此不显示加载内容),例如:

<iframe src=“url/?new_user.php?username=恶意用户&password=123” style=“display:none” />

img标签利用

<img src=“url/?new_user.php?username=恶意用户&password=123” >

CSS-background利用

body{
background:url(“url/?new_user.php?username=恶意用户&password=123”);
}

1、验证码防御(强制与用户互动)
2、Referer Check(主要用于防止盗链,也可以检查请求是否合法)
3、Anti CSRF Token防御(生成随机且不易猜测的参数但如果Token泄露,也可能遭受到CSRF攻击,例如GET型泄露(页面包含CSRF漏洞基础学习(笔记),那么请求中的Referer就会携带对应的GET Token)和POST型泄露(利用XSS盗取cookie,获取存储在其中的Token))

相关文章:

  • 2021-08-31
  • 2021-06-08
  • 2021-07-24
  • 2021-11-25
  • 2021-08-01
  • 2021-06-07
猜你喜欢
  • 2021-12-29
  • 2021-12-28
  • 2022-01-06
  • 2021-08-29
  • 2021-11-10
  • 2022-12-23
  • 2021-12-18
相关资源
相似解决方案