七、跨站请求伪造-Medium
七、跨站请求伪造-Medium
一、漏洞原理
通过Medium的源代码可知,服务器对请求头部(Header)进行了检测,检测Referer字段中是否包含服务器地址,包含的话证明发起请求的页面是服务器自己的页面,而不是第三方页面。阻止了第三方页面的请求即可阻断攻击者跨站的条件。
源码解释:
if( stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false )
这个判断语句中的stripos(string,find,start)含义为:在string字符串中查找find字符串第一次出现的位置,start表示开始搜索的位置,可以省略。
结合数字类型与布尔类型转换的规则,非0的数字都表示True,0代表False,这个判断的意思是只要find字符串在string中出现过即为True,否则为FALSE。
这样我们就很好理解源码判断的内容,判断服务器名称(Host)是否出现在Referer参数中,即判断当前的请求是否来自本网站的页面。
这种做法虽然可以在一定程度上防止攻击者跨站请求,但是并不是不能够绕过这种防御。我们可以看到,源码中的判断只是一个存在性判断,并没有限制Host出现在Referer路径的什么位置,所以攻击者可以在构造包含Host的路径,以此来绕过服务器的阻拦。常见做法有以下两种:
1.将包含恶意链接的html文件放到一个新的文件夹中,文件夹以被攻击服务器的Host(IP或域名)命名。
2.将包含恶意链接的html文件以被攻击服务器Host(IP或域名)命名;
二、漏洞利用
DVWA服务器地址为:192.168.146.136
攻击者服务器地址为:192.168.146.137
首先构造一个包含修改密码链接的页面,命名为CSRF.html。
<img src="http://192.168.146.136/dvwa/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change#" border="0" style="display:none;"/>
display:none 表示此图片不会显示在页面上,但是当页面打开的时候会自动访问图片地址,即攻击者构造的修改密码的链接。
为了让页面更逼真,对用户更具有欺骗性,可以用心设计一下页面内容以免用户产生怀疑,网上常用的做法是伪装成一个404页面。
- 漏洞原理部分提到的第一种做法:
第三方网站以小皮面板作为服务器,在www文件下新建文件,命名为192.168.146.136,将构造好的html页面放在此文件下,此时html页面的访问路径为“http://192.168.146.137/192.168.146.136/index.html”,html页面发送请求时的Referer为“http://192.168.146.137/192.168.146.136/index.html”,包含了被攻击网站的Host(192.168.146.136)。
将构造好的html文件放置到192.168.146.136文件夹下,通过http://192.168.146.137/192.168.146.136/CSRF.html访问CSRF文件。
- 漏洞原理部分提到的第二种做法:
直接将构造好的的html页面命名为192.168.146.136.html,通过"http://192.168.146.137/192.168.146.136.html"访问,Burpsuite 抓包结果如下:
修改完成后可以使用“Test Credentials”(测试凭证)功能检验密码是否修改成功。