十大漏洞之CSRF

CSRF(Cross-Site Request Forgery,跨站伪造请求)是一种网络攻击方式,在受害者不知道的情况下,伪造受害者请求发送攻击站点,从而在未授权的情况下,执行操作。

CSRF漏洞简介:

用户与网站之间的通信连接记忆是通过Cookies,当攻击者通过非法手段获取受害者的cookies时,就能以受害者的身份伪造登录网站,从而修改收好这的信息,盗取受害者敏感信息,盗取钱财,

CSRF与XSS的区别于合作:

CSRF:网站存在csrf漏洞,攻击者构造恶意代码,受害者点击恶意代码,攻击者完成CSRF攻击
XSS: 网站存在xss漏洞,攻击者构造恶意代码,受害者点击恶意代码,攻击者获取受害者的一些信息,比如COOKIE等,攻击者完成攻击。

CSRF攻击原理:

CSRF是建立在会话的基础上攻击的

http://www.example.om/aa.php?user=dd&money=1000
http://www.example.om/aa.php?user=cc&money=1000
http://www.ggg258.com/zhuan/?d=><SCRIPT>alert("XSS")</SCRIPT>&t=3(一次攻击)

本来受害方是转给dd,1000元钱,攻击者修改了代码,直接转给了cc1000元钱,完成CSRF攻击

CSRF攻击的流程:

攻击一般分成5步;

1,浏览器登录并访问网站A;
2,验证成功,生成cookie,创建了回话;
3,攻击者构造恶意网址,用户访问恶意地址;
4,攻击者获取受害者Cookie,访问网站A;
5,攻击者模仿用户登录访问A成功。

攻击原理的两个侧重点

1,CSRF的攻击建立在浏览器与web服务器的会话之中
2,欺骗用户访问url

CSRF漏洞产生的原因:

站外

外部提交数据导致的攻击,尝尝出现在留言板,评论,,或者是带有站外链接的恶意回复,站外的web页面编写脚本伪造文件请求,或者和自动提交的表单,一起提交GET,POST请求,当用户用户点击的时候,就强迫发起请求了。

站内

程序员滥用$_REQUEST变量造成的。攻击者利用CSRF创建条件,攻击者在帖子或者留言链接里,加入而已代码,受害者访问就被迫发起这些请求。

CSRF漏洞的检测:

检测CSRF漏洞,最简单的方法是抓取一个正常的请求的数据包,去掉Referer字段,再次提交,如果提交成功,那么基本是可以确定存在CSRF漏洞

同时也有一些工具:CSRFTester,CSRF Request Builder等,

以CSRFTaster工具为例讲解工具原理,首先需要抓取我们在浏览器中访问过的所有链接以及所有表单信息,然后通过在CSRFTester中修改相应的表单等信息,重新提交,这就相当于一次伪造客户端请求,如果修改后的还能提交成功,那么久存在CSRD漏洞,同时可以用于CSRF攻击。

CSRD攻击的危害

账户的密码被盗,账号钱财被盗,网站用户被非法添加用户,非法被下载文件,敏感信息泄露等。

CSRF现实案例

案例一,dz论坛中的CSRF

管理员,使用的是amdin用户

本地搭建dz论坛,admin用户登录,管理中心,数据备份,点击提交备份,这个点burp抓到post包,使用burp,修改成get包.
http://www.example.com/dz/us_server/admin.php?m=db&a=operate&t=export&appid=0&backupdir=xxxx%26backupfilename%3Daaaa,使用firebox提交,开始备份数据。

攻击者,使用普通用户操作

发帖,快速发帖,在插入图片地址处,插入我们构造的地址,
http://www.example.com/dz/us_server/admin.php?m=db&a=operate&t=export&appid=0&backupdir=xxx%26backupfilename%3Daaaa
宽高不写。诱骗管理员点击这个帖子。

这个时候,如果管理员点击我们发的帖子,浏览的时候,就会触发这个备份链接,导致数据库的备份。

这个时候攻击者,访问

http://www.example.com/dz/uc_server/data/backup/xxxx/aaaa-1.sql

就能看到数据库信息啦,可以使用迅雷直接下载。

案例二,DVWA中的CSRF

low–>

产生的原因,没有做任何验证

修改密码,新的密码,不需要原密码,直接就是让你设置新的密码,导致直接修改

http://www.example.com/dvwa/csrf/?password_new=aaa&password_conf=aaa&Change=Change#

构造xss,留言等,执行这行代码,修改它的密码

http://www.example.com/dvwa/csrf/?password_new=aaa&password_conf=ddd&Change=Change#

medium–>

产生的原因,没有referer验证

源代码审计出来的,必须修改referer地址为127.0.0.1/dvwa/csrf..

high—>

第三方而已插入,可以添加referer验证

当我们单独拿出来这个访问链接的时候,是不存在referer的,这个时候就需要我们去构造一个包发送,添加referer字段

案例三,本地网络设备中的CSRF

无线路由器的配置

外网是不能访问的,而且大多数是没有被修改的密码,
在登录状态,被攻击这访问带有CSRF攻击代码的网页时,就被迫开启了远程web管理功能 ,

csrf代码如下:

src=http://192.168.1.1/userRpm/ManageControlRpm.htm?port=80&ip=255.255.255.255&Save=%81%A3+%84%E6

让对方点击我们构造的链接,使用GET方式发起的CSRF攻击,通过社工或者发邮件的方式,让受害者点击我们构造的链接,

FAST无线宽带路由器的web管理的默认密码是admin

案例四,后台中的CSRF

管理员admin登录到后台,发现加入账号和密码,不需要原来的账号和密码,这个时候,我们可以burp拦截数据包

右击—>Engagement tools—>CSRF—>就能看到我们的csrf代码了拷贝出来,—>csrf.html

然后通过xss漏洞,进行触发这个csrf.html,这个时候就添加了账号。

CSRF的防御

1,服务端的防御
    http referer字段验证
    在请求地址中加token验证
    在http自定义属性并验证
2,不要使用$_request
3, 使用验证码,使用密码确认
4,用户端不要随便点击有问题的联机
5,在本地搭建病毒库