DVWA详解:CSRF篇(上)

前言:

关于CSRF这个话题,一直是博主想写的话题而又迟迟没有写的,主要原因是,博主一直没能在HIGH难度下重现真正的CSRF漏洞(未禁用浏览器的"同源策略");最近闲了点,也就想起了这件事,于是又研究起"DVWA中CSRF的HIGH难度",在博主写了一堆JS测试代码再加上一系列资料搜索后,得出了一个结论:想在DVWA的HIGH难度,在不禁用"浏览器的同源策略"下,是无法实现"纯CSRF"攻击的(不结合其它漏洞)!当然,这个说法可能并不完全严谨,毕竟是否可以实现CSFR攻击还与浏览器的版本有关,在很旧很旧的浏览器上说不定真可以实现,但博主已经在XP时代的最高版本的CHROME浏览器上进行了测试,使用再旧的浏览器进行测试显然已经没意义了!

读了上面这段,估计有读者就开始质疑博主上面的结论了!明明网络上有一堆"DVWA的CSRF的全难度的通关教程或视频教程"啊,它们也没有禁用"同源策略"啊,它们不是成功了吗?是的,的确实是这样,"有教程"但不代表那些教程是正确的!而且博主说的是纯CSRF攻击!另外很多在百度流行的CSRF教程甚至不算教程,因为这些教程连重点也没有搞清楚,CSRF的重点是"CS",即"Cross-Site"!

如果你在找CSRF的教程,我建议你看这篇博文!虽然写得不算太好,但相比网络上的那些CSRF教程,博主这篇CSRF博文质量上明显会高得多,这是因为博主喜欢这个漏洞,感觉这样的漏洞大有作为(可惜博主的这种想法是错的);这篇博文,虽然博主写得比较全的,但真的没什么意义,了解CSRF后读者自然会明白~~

有些知识,还是先说一说比较好;关于什么是CSRF,英文全称是"Cross-site Request Forgery",中文意思是"跨站请求伪造/跨域请求伪造";这个名词中,关键字是"Cross-site",即"跨域"!!!什么是"Cross-site"?"Cross-site"实际就是"浏览器在访问B网站时,调用了A网站的资源或在A网站上执行了不应该的操作",对于CSRF攻击来说,一般指的是调用了敏感资源信息,例如:访问B网站却调用了A网站的COOKIE;现在再说说CSFR漏洞是怎么产生的吧,CSRF产生的主要原因是"浏览器的安全策略存在缺陷",也就是说,这是"浏览器"的BUG!!!怎么样?看完前面这句话,是不是与你对"传统的WEB安全漏洞"的理解不同?我们常说的"WEB安全漏洞",通常情况下,大部分人都会理解为"由于服务端的代码编写存在逻辑缺陷"从而引发漏洞(这的确是其中一个原因但不是主要原因),例如"SQL注入/文件上传/..."等等的这些漏洞;但CSRF不同,它产生的原因是因为"浏览器存在BUG"!!!这段的这个知识点很重要,但很少会被提及,这对于理解CSRF来说很重要(其实"XSS"也是与浏览器有关)!!!

上面已经简单解释了CSFR漏洞及其重要的关键字,下面进入正题,读者将可以了解到什么是真正的"Cross-site"及其危害,还有为什么CSRF在后来逐渐的不被提及~~

特别提示:如果你在实验过程中,直接复制本博客任意博文中的配置/代码,"空格"字符的前面将可能产生不可见的字符"M-BM-",从而造成文件不可用,这是字符编码的问题~若必需使用复制粘贴方式,请务必手动替换掉配置项中的所有空格!!!或尝试使用以下命令过滤掉所有"M-BM-"字符~

快速跳转

《 DVWA详解:CSRF篇(下)》

《 DVWA详解:CSRF篇(终)》

环境需求:

要模拟CSRF攻击,读者可以跟着本教程的代码去操作,大部分情况下,你只需要复制粘贴博文中的代码即可;读者需要"二台安装了DOCKER的虚拟机",再加上一个"旧版本的Chrome浏览器的PC(建议也使用虚拟机)",博主的环境如下:

1、"DOCKE虚拟机_A(IP:192.168.100.42"--> 安装了"DVWA";读者可以使用以下压缩包,通过DOCKER-COMPOSE快速部署起DVWA的2.3版本:百度网盘(提取码:7s4q)--> [ 文件名称:DVWA/DVWA-2.3.tar.gz ]

2、"DOCKE虚拟机_B(IP:192.168.100.56"--> 部署了一个NGINX用于模跨站攻击网站(会在网站上创建相应的攻击页面);

3、"安装旧版本的Chrome浏览器的PC(IP:192.168.100.X)"--> 测试CSRF攻击,建议使用WINDOW;读者可以从网盘中下载CHROME的旧版本使用,这个版本是32位的最后一个支持XP操作系统的免安装版本(要验证CSRF攻击,使用旧版本的浏览器更文件);百度网盘(提取码:7s4q)--> [ 文件名称:OTHER/chrome32_49.0.2623.75.exe ]

完成以操作后,环境大概如下图所示:

DVWA详解:CSRF篇(上)

主要攻击代码:

本处先说明针对DVWA上的CSRF漏洞,所使用的HTML攻击文件中的主要攻击代码是什么,见下;因为无论是"LOW"还是"MEDIUM"难度,实现"跨站请求伪造攻击"的HTML代码都是相同的,利用的是旧版本浏览器的安全漏洞,实现从站点"http://csrf.attack.loccal"跨站攻击"http://dvwa.domain.local"网站;原理在于,该版本的浏览器在解释带"src="选项的HTML标签时,不会验证"同源策略",在未正确处理"跨域"问题的情况下,意外的调用了"http://dvwa.domain.local"的COOKIE,造成"跨站请求攻击"成功;

在新版本的CHROME上,"src="选项的漏洞已经被修复;另外,在CHROME新版本的CHROME安全性上,GOOGLE针对COOKIE的安全性引入了新的安全机制,读者可以搜索"Cookie SameSite"来查找相关信息,这是COOKIE增加的其中一个安全属性(还增加了其它安全属性);

对于HIGH难度,要实现纯CSRF攻击需要禁用"同源策略",在禁用"同源策略"的情况下,上述方式也是有效的;

在官方的对CSRF漏洞的帮助文档上,表明CSRF在"MEDIUM/HIGH"难度下应结合其它漏洞一起使用(例如结合XSS使用,但如果结合XSS,那就不是纯CSRF攻击了),本篇博文中使用了HTML带"src="选项的标签,实现了CSRF攻击,这是一个意外的收获(基于所使用的浏览器的不安全性);

正如前面所说,CSRF的漏洞主要是来源于浏览器侧(服务端侧可通过增加代码的健壮性以进行防御),而一旦浏览器修复了漏洞,你就无法实验CSRF攻击了;这也就是为什么需要使用旧版本的CHRMOE浏览器进行测试,并且在新版本的浏览器上无法实验CSRF攻击的原因了;

LOW - 实验操作:

在"DOCKE虚拟机_B(IP:192.168.100.56)"执行以下操作,注意:

1、"index.html"这份文件不是必需的,只是用于方便测试,文件的HTML代码只是用于快速调用其对应的WEB页面(在新窗口中打开,可以使用JS代码实现打开后马上关闭实现更隐蔽的操作,但不便于实验所以没使用),包含了"LOW/MEDIUM"难度等级的快速调用;不创建"index.html"直接调用对应的页面也是可以的;

2:下面的SHELL代码未包含MEDIUM等级的WEB页面创建,MEDIUM难度的WEB页面创建,在MEDIUM等级中的说明中;

DVWA详解:CSRF篇(上)

以在"旧版本的Chrome浏览器的PC(IP:192.168.100.X)"上操作:

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

2、修改难度为"LOW";

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

  • A、点击'CSRF LOW - 修改密码为"adminroot"'按键就会将"admin"的密码修改为"adminroot"(以上操作实际就是访问了"http://csrf.attack.local/csrf/low.html"这个页面而且利用CSRF漏洞将密码修改成"adminroot");
  • B、点击'CSRF LOW - 修改密码为"password"'按键就会将"admin"的密码修改为"password"(以上操作实际就是访问了"http://csrf.attack.local/csrf/low_restore.html"这个页面而且利用CSRF漏洞将密码修改成"password");

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

以下相关的操作截图,读者可以参考操作过程:

DVWA详解:CSRF篇(上)

DVWA详解:CSRF篇(上)

小结:在登录了"http://dvwa.domain.local"的情况下,用户在访问了"http://csrf.attack.local/csrf/low.html"这个页面,在用户不知情的情况下,其在"http://dvwa.domain.local"网站的用户密码被修改了,这个过程对用户来说是无感知的;从用户的角度来说,在他下一次尝试登录"http://dvwa.domain.local"时,甚至不知道为什么会登录不成功,他甚至不会意识到自己被攻击了(你无法直观的从"http://csrf.attack.local/csrf/low.html"中看到你被攻击了);

LOW - 分析:

从源代码中可以看到,在LOW等级下,针对"请求"的安全性检查,只依赖于保存在浏览器上的COOKIE;而DVWA的CSRF模块只验证了二次输入的密码是否一致,若一致则对密码进行MD5哈希后再进行数据库更新;从整个代码中"密码修改"的逻辑上来说存在以下问题:

1、使用了安全性较低的GET请求方式;

2、未对用户的输入进行过滤或做转义处理(会产生SQL漏洞,但与CSRF漏洞无关);

3、未二次校验浏览侧用户输入的合法性(仅使用了COOKIE而未使用其它二次校验方式,但是COOKIE由于浏览器的安全规则不完善,被跨域调用了);注意,这是LOW难度下产生CSRF的主要原因;

MEDIUM - 实验操作:

在"DOCKE虚拟机_B"(IP:192.168.100.56)执行以下操作;创建用于MEDIUM等级的CSRF攻击页面;

DVWA详解:CSRF篇(上)

以在"旧版本的Chrome浏览器的PC(IP:192.168.100.X)"上操作:

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

2、修改难度为"MEDIUM";

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

  • A、点击'CSRF MEDIUM - 修改密码为"adminroot"'按键就会将"admin"的密码修改为"adminroot"(以上操作实际就是访问了"http://csrf.attack.local/csrf/medium_dvwa.domain.local.html"这个页面而且利用CSRF漏洞将密码修改成"adminroot");
  • B、点击'CSRF MEDIUM- 修改密码为"password"'按键就会将"admin"的密码修改为"password"(以上操作实际就是访问了"http://csrf.attack.local/csrf/medium_restore_dvwa.domain.local.html.html"这个页面而且利用CSRF漏洞将密码修改成"password");

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

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

DVWA详解:CSRF篇(上)

小结:MEDIUM难度在服务端侧增加了二次校验以防止CSRF攻击,可惜校验逻辑存在缺陷,防护规则被攻击方通过重命名HTML文件名称给绕过了,详见下面分析;

MEDIUM - 分析:

从源代码中可以看到,相对于LOW等级,在MEDIUM等级下DVWA的CSRF模块增加了使用"stripos()"对浏览器侧的"用户输入的合法性"进行了验证;从整个代码中"密码修改"的逻辑上来说存在以下问题:

1、使用了安全性较低的GET请求方式;

2、未对用户的输入进行过滤或做转义处理(会产生SQL漏洞,但与CSRF漏洞无关);

3、使用了不合适的"stripos()"方法来验证合法性;"stripos()"的功能判断了"$_SERVER[ 'HTTP_REFERER' ]"中是否包含了"$_SERVER[ 'SERVER_NAME' ]",问题在于"$_SERVER[ 'HTTP_REFERER' ]"是"来源URL地址",于是,相对于攻击方来说,他只需要修改页面文件的名称,就可以绕过了PHP代码中的"跨域校验",这也就是为什么这此文件的名称会被命名为"medium_dvwa.domain.local.html""medium_restore_dvwa.domain.local.html"的原因;

关于绕过的逻辑,可以参考以下截图说明:

DVWA详解:CSRF篇(上)

DVWA详解:CSRF篇(上)

结:

至此,本篇关于DVWA上CSRF的"LOW/MEDIUM"难度的攻击过程已经完整展示了;使用了三台虚拟机来模拟,也是为了表现什么是CSRF及其有多大的危害;当然,写本篇博文的重点是为了表现"Cross-Site"这个关键字,这也是与网上其它博文不同的地方;同时这也是当初吸引博主重点关注CSRF攻击的原因!可惜在足够的理解CSRF后,博主发现这种攻击方式已经没有什么意义了~

"下篇"会介绍DVWA上CSRF的"HIGH"难度,会有解题过程,但因为解题过程需要禁用浏览器的"同源策略",这会让CSRF攻击变得意义不大,毕竟现实中没人会主动去禁用"同源策略";CHROME的"同源策略"在版本"4"时已经自带了,而博主在本篇博文中所使用的CHROME版本已经是"42"了,读者可以想"同源策略"这是多早以前的安全机制了;另外正如博主在前言中所说,产生CSRF漏洞的主要原因是浏览器上存在的BUG,现在博主在博文中所使用的CHROME版本,已经是WINDOW XP时代的了,在这样的浏览器上也无法实现HIGH难度下的CSRF攻击(启用"同源策略"的情况下),更别说现在是2024年了;在"下篇"的内容中,博主再尝试解释清楚这些东西吧~~

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

发表评论

表情
还能输入210个字