七、跨站请求伪造-Medium

Ant大约 3 分钟

七、跨站请求伪造-Medium

一、漏洞原理

通过Medium的源代码可知,服务器对请求头部(Header)进行了检测,检测Referer字段中是否包含服务器地址,包含的话证明发起请求的页面是服务器自己的页面,而不是第三方页面。阻止了第三方页面的请求即可阻断攻击者跨站的条件。

Referer中包含Host,请求来自网站内部
Referer中包含Host,请求来自网站内部
Referer中不包含Host,请求来自网站外部
Referer中不包含Host,请求来自网站外部

源码解释:

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)。open in new window

创建以192.168.146.136命名的文件夹
创建以192.168.146.136命名的文件夹

将构造好的html文件放置到192.168.146.136文件夹下,通过http://192.168.146.137/192.168.146.136/CSRF.html访问CSRF文件。open in new window

burpsuite抓包查看Referer和Host字段
burpsuite抓包查看Referer和Host字段
  • 漏洞原理部分提到的第二种做法:

直接将构造好的的html页面命名为192.168.146.136.html,通过"http://192.168.146.137/192.168.146.136.htmlopen in new window"访问,Burpsuite 抓包结果如下:

burpsuite抓包查看Referer和Host字段
burpsuite抓包查看Referer和Host字段

修改完成后可以使用“Test Credentials”(测试凭证)功能检验密码是否修改成功。

点击“Test Credentials”测试账号密码是否正确
点击“Test Credentials”测试账号密码是否正确
提交后返回此提示即为账号密码正确
提交后返回此提示即为账号密码正确

三、漏洞防御

参见跨站请求伪造-Lowopen in new window

Loading...