DVWA详解:CSRF篇(下)

前言:

没什么特别的东西想说,本篇博文是DVWA中CSRF漏洞的HIGH难度讲解,关于本篇博文的实验环境,见"CSRF篇(上)";

快速跳转:

《 DVWA详解:CSRF篇(上)》

《 DVWA详解:CSRF篇(终)》

HIGH - 源码分析:

在HIGH难度下,博主选择的是先从源码解释开始说,感觉这样能更清楚的解释HIGH难度下的各种问题,以下为HIGH难度代码中的要点:

1、可以使用"GET/POST"请求进行密码修改(表明我们可以使用"GET/POST"请求的方式对该页面进行攻击);

2、无论使用"GET/POST"请求,均会使用"checkToken()"方法对提交的TOKEN进行对比验证;这就要求我们必需找到客户侧TOKEN的位置(发现TOKEN在HTML页面中,只是不直接显示);

3、无论使用"GET/POST"请求,我们均需要在请求中附带TOKEN;

4、无论使用"GET/POST"请求,每次访问CSRF页面,均会使用"generateSessionToken()"方法更新服务器的TOKEN信息(表明无论"GET/POST"请求,在每次提交请求前,我们需要想办法先获取到这个每次都不一样的TOKEN,才有机会成功修改密码);

下图为TOKEN在浏览器开发工具中的获取方法,从每次请求的响应数据中,可以很方便的看到当次的TOKEN值:

DVWA详解:CSRF篇(下)

HIGH - 实验操作(同源策略启用):

HIGH难度实际就是在主要难度在于使用了TOKEN验证,重点是那个TOKEN的值每次访问CSRF页面均会被更新(每次向"http://DAMAIN/vulnerabilities/csrf/"发送请求,服务端上的TOKEN会被更新),而HIGH难度下要更新密码,是需要在"GET/POST"请求中附带TOKEN的,所以,在每一次我们希望实施CSRF攻击时,均需要考虑如何获取这个TOKEN的值;

在同源策略启用的情况下,博主尝试以多种方式绕过浏览器的"同源检测"(该版本的浏览器在处理HTML的带"src="属性的标签存在缺陷),结果均失败,结论是,在浏览器同源策略启用的情况下,DVWA的HIGH难度的纯CSRF攻击无法实现(纯CSRF攻击是指在不结合其它漏洞的情况实现密码修改);博主尝试过以下方式:

1、使用"HTML标签的'src='属性"解决DVWA的COOKIE获取问题 + "使用'<iframe>'标签嵌入CSRF页面'再利用DOM操作提取TOKEN";代码大概如下所示,结果失败,主要失败原因是:在同源策略启用的情况下,DOM操作的作用域被严格的限制在其各自的"域"内("dvwa.domain.local"或"csrf.attack.local");假设下面的代码写在了"high.html",那么这份文件内的的DOM操作代码是无法访问"<iframe>"的HTML数据的;

DVWA详解:CSRF篇(下)

2、使用"Axios/Fetch/XMLHttpRequest"等方式发送请求获取CSRF页面再从响应数据中提取TOKEN + 构建"HTML带'src='的标签"进行攻击;代码大概如下所示,结果失败,主要失败原因是:"Axios/Fetch/XMLHttpRequest"等是严格遵守浏览器的同源策略的,这些JS库无法直接调用到DVWA站点的COOKIE~~;在缺失COOKIE的情况下甚至无法正确打开目标页面,自然也就无法获取到TOKEN了,即使HTML标签的"src="可以在该版本的CHROME上绕过同源策略获取到DVWA的COOKIE,也没有意义~~~

DVWA详解:CSRF篇(下)

3、使用"Axios/Fetch/XMLHttpRequest"等纯JS的方式,失败原因见"2"说明(无法解决COOKEI问题);

实际上,官方对CSRF攻击的帮助文档上,从MEDIUM难度开始,就没有希望你可以使用纯CSRF的方式实现攻击,官方帮助文档表明,在实施CSRF攻击时,建议结合XSS的方式进行攻击;

另外说一下关于网络上的CSRF的HIGH难度的解题方法存在的问题:A、有使用文件上传漏洞说实现了CSRF的,错!都上传文件了,肯定同源了,同源还能叫"Cross-Site"吗?B、还有使用"Burp Suite"拦截数据包修改请求的,这不叫"Cross-Site"!这叫中间人攻击!!!

CSRF最大的吸引力是"Cross-Site"!"Cross-Site"!"Cross-Site"!

简单说明一下什么是"同源策略"吧,"同源策略"一般是相对浏览器来说的,指的一般是浏览器的安全策略,其主要作用是限制各个"域"之间的资源访问,从URL的角度来说,就是要求"协议"、"域名"、"端口"三者的统一,其会影响至DOM/JS的跨域操作;当然,"同源策略"并不是浏览器所独有的,但一般人接触到"同源策略"最直观的软件就是浏览器;实际上,服务端侧也是存在"同源策略"的,但一般会被称之为"CORS(跨域资源共享)",这两者的关键点均是"协议/域名/端口",基本上你将两者放在一起来理解完全没有问题;关于"同源策略",网络上有更多更详细的解释,本处只简单的点明一下其重点,如果你依然不太明白什么是同源策略,你可以搜索一些相关的文章来研究~~

DVWA详解:CSRF篇(下)

DVWA详解:CSRF篇(下)

HIGH - 实验操作(同源策略禁用):

在浏览器禁用"同源策略"的情况下,前面介绍的三种方式,均可以实现纯CSRF攻击(读者可以自己使用上面的代码进行测试);可见浏览器"同源策略"的重要性与必要性;在上面的介绍中,博文中未附带"3"方式的"纯JS方式的HTML代码"的攻击方式,本节将在同源策略禁用的情况下,使用JS的方式(Axios),实现纯CSRF攻击;

下面,我们需要:1、更新"index.html"("上篇"的教程中博主未为HIGH难度编写快速调用页面的代码,本处更新一下);2、创建"csrf/high.html"用于将密码修改成"adminroot"(浏览器禁用同源策略);3、创建"csrf/high_restore.html"用于将密码还原成"password"(浏览器禁用同源策略);

DVWA详解:CSRF篇(下)

在完成上面代码的更新操作后,为了模拟本次实验,我们需要在浏览器上禁用"同源策略",见下说明:

DVWA详解:CSRF篇(下)

使用"已经禁用了'同源检测'的旧版本的Chrome浏览器(IP:192.168.100.X)",按以下方式操作:

1、打开"http://dvwa.domain.local"进行登录(这一步的操作是为了让浏览器获取COOKIE,用于被"http://csrf.attack.local"网站进行攻击);

2、修改难度为"HIGH";

3、在浏览器的新窗口中打开"http://csrf.attack.local/index.html",你可以选择以下操作:

  • A、点击'CSRF HIGH - 修改密码为"adminroot"'按键就会将"admin"的密码修改为"adminroot"(以上操作实际就是访问了"http://csrf.attack.local/csrf/high.html"这个页面而且利用CSRF漏洞将密码修改成"adminroot")(禁用浏览器"同源检测"的状态下);
  • B、点击'CSRF HIGH - 修改密码为"password"'按键就会将"admin"的密码修改为"password"(以上操作实际就是访问了"http://csrf.attack.local/csrf/high_restore.html"这个页面而且利用CSRF漏洞将密码修改成"password")(禁用浏览器"同源检测"的状态下);

4、假设我们执行了"A"操作,返回在"DVWA",使用CSRF页面中的测试登录测试功能(点击"Test Credentials"弹出子页面),使用"admin/adminroot"进行登录测试,发现成功登录了,密码由原来默认的"password"密码被修改为"adminroot";

以下相关操作截图,诸可以参考操作:

DVWA详解:CSRF篇(下)

小结:浏览器的"同源策略"非常重要,我们日常浏览互联网的过程中,一直受"同源策略"的保护;从上面的实验可以知道,如果没有"同源策略",我们日常访问互联的过程中,将多么的不安全;

结:

DVWA的CSRF篇到这里算是完结了,从实验过程来说,"LOW/MEDIUM"难度的CSRF模拟攻击似乎是更有代表性,毕竟这两次的模拟攻击均不需要禁用浏览器的"同源策略";HIGH难度在禁用浏览器的"同源策略"下也可以实现纯CSRF攻击,但这显然没什么说服力;

不过,在2024年讨论CSRF攻击,实在是意义不大;现代浏览器在"同源策略"的安全处理上,已经非常完善了,而服务端侧,也有"CORS"技术机制处理类似的安全问题;现在,你想找一个存在CSRF漏洞,并且可以绕过现代浏览器的安全机制,实现CSRF攻击的有价值的站点,几乎是没有可能的;大部分情况下,我们都只能从DVWA这些漏洞测试平台,去体现当年CSRF的辉煌了~~

在这之后,博主可能会写一篇"CSRF篇(终)",使用官方的方式,在HIGH难度下,使用"XSS + CSRF"相结合的方式,实现CSRF的HIGH难度下的攻击,看情况吧~本篇完~~

DVWA详解:CSRF篇(下):等您坐沙发呢!

发表评论

表情
还能输入210个字