dvwa—csrf
-
csrf,通过欺骗,是受害者替攻击者执行操作。是一种对网站的恶意利用,通过伪造来自授信用户的请求来利用受信任的网站。
- 我们这一次拿知名的靶站DVWA来看,此次成因是利用网站cookie在浏览器不过期,只要用户不关闭浏览器或者退出,在这个期间我们就可以发送构造好的csrf脚本包含csrf脚本的链接,利用的是网站的“信任”以及用户的一个登录状态
-
1.low,首先使用火狐浏览器登录账户后修改密码,我们通过浏览器的网络选项或者是burpsuite进行查看http请求的返回信息
-
http://www.dvwadvwa.com/dvwadvwa/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#
- 从这里我们得知此次请求为get请求,需要注意的是CSRF最关键的是利用受害者的cookie向服务器发送伪造请求,所以如果受害者之前用Chrome浏览器登录的这个系统,而用搜狗浏览器点击这个链接,攻击是不会触发的,因为搜狗浏览器并不能利用Chrome浏览器的cookie,所以会自动跳转到登录界面。
- 所以说其实csrf、ssrf、xss都有相似的点,那就是都是基于用户的信任,但是较后者条件会更苛刻一些,在这里我们使用火狐浏览器做实验
-
我们在自己的服务器上创建一个html文件,内容如下:
<html> <body> <script> window.location.href="http://http://www.dvwadvwa.com/dvwadvwa/vulnerabilities/csrf/?password_new=abcdefg&password_conf=abcdefg&Change=Change#" </script> </body> </html>
- 我们访问我们的html文件后,页面发生跳转
-
我们发现我们使用abcdef这个密码登陆成功。
-
2.medium级别
-
通过代码我们能看出此关较第一关多了一个stripos函数的验证,我们首先需要知道stripos这个函数是一个什么函数
-
接下来我们看看会是什么样的运行结果
-
返回值是一个int类型,看样子有点像是’2’在字符串‘1234567’里面的位置,即下标,我们不妨在做一个实验
-
由此我们可以得知此函数的确是我们预想的,是探测字符位置的一个函数,而题目中函数里面的内容HTTP_REFERER(http包头的Referer参数的值,表示来源地址),SERVER_NAME(http包头的Host参数,及要访问的主机名)
-
也就是说,此代码是将访问的主机名放入到Referer来源地址进行比较,若是存在则会执行下面的代码。(过滤规则是http包头的Referer参数的值中必须包含主机名)我们可以通过修改文件名来伪造,进行绕过,将文件更改为
stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false
-
<html> <body> <script> window.location.href="http://www.dvwadvwa.com/dvwadvwa/vulnerabilities/csrf/?password_new=ftpftpftp&password_conf=ftpftpftp&Change=Change#" </script> </body> </html>
我们访问我们本地的文件,并通过burpsuite查看结果
-
我们使用新密码进行登录,发现登陆成功,密码修改成功!(注意:由于我们利用的是用户的信任来获取服务器的信任,所在在此期间登陆的状态是不能消失的,也就是要保持后台的登陆以及使用相同的浏览器)