只会Top10也能挖SRC赚外快!全套信息收集、账号接管、多洞实战流程,可直接复刻

0x01 简介

深度复盘单一企业SRC全维度挖洞过程!整合多平台资产数据,通过手工测试突破防护限制,先后发现社区XSS、SQL盲注、接口越权、一键账号接管等漏洞。详解字典爆破、参数污染绕过、ticket劫持等核心技术技巧,干货实用性极强。

本文仅用于技术学习与合规交流,严禁非法滥用。因违规使用产生的一切后果,由使用者自行承担,与作者无关。

现在只对常读和星标的才展示大图推送,建议大家把渗透安全HackTwo“设为星标”,否则可能就看不到了啦!

参考文章:

末尾可领取挖洞资料/加圈子 #渗透安全HackTwo

0x02 正文详情

信息收集思路

开展目标企业资产摸排时,第一步全面梳理企业主体、下属分公司、子公司全部相关域名,尽可能收拢业务覆盖的所有线上入口。依托鹰图、Fofa 等网络空间测绘平台检索关键词,批量导出关联 IP、域名、端口、站点等线上资产清单。同时搭配子域名爆破工具二次主动探测,挖掘测绘平台遗漏的隐性子域名。

社区评论中的xss

在社区评论模块测试发现页面可正常解析 a 标签,尝试 javascript 伪协议被系统拦截过滤。转而测试各类鼠标触发事件,大量事件均可正常执行。但该评论需要后台人工审核才能对外展示,且漏洞无法窃取用户 Cookie,整体利用条件受限。最终该漏洞评估危害有限,平台发放 500 元漏洞奖金。这类 XSS 限制较多,难以实现高危攻击,属于低风险可利用漏洞。

在社区评论的地方

测一下a标签

发现可以解析

使用伪协议发现被过滤了

直接跑一遍事件,发现有太多可以用了,例如鼠标移动到元素上方触发的事件

由于弹不了cookie且评论需要审核才能发布,危害没有那么大,只给了500rmb

任意用户注册漏洞

置空鉴权字段不仅仅在登录口,在查询处,鉴权处都是很经典的思路如jwt置空加密字段,个人信息置空回显站点全部信息,最简单的思路往往能造成最致命的问题

置空鉴权字段不仅仅在登录口,在查询处,鉴权处都是很经典的思路如jwt置空加密字段,个人信息置空回显站点全部信息,最简单的思路往往能造成最致命的问题

进入站点简单熟悉一下业务,发现存在注册功能,未注册的账户会自动注册,登录注册均是同一接口(划重点)

正常bp抓包进行注册,接口/xjky-server/xjky-biz-server/app/open/sms/registerAndLogin记录了注册手机号及短信验证码以及一串不知道的tenantId,正确的验证码会返回Token,后续请求带上Token对用户进行身份信息认证

{"openId":“307332"password":“307332”"username":“15xxxxx454""tenantId":"0ff61e364ea44c44a9b27c9198alcdd9}

将此接口发送到重发器测试,置空验证码,同样成功请求并返回token,为了确认新生成的token是否为新号码,在此站点也测试了有一会,熟悉了业务,有一个接口可以通过token回显个人信息

替换后响应包返回loginId对应的正是我尝试任意注册的号,那么此账号已经成功被注册

记录好187号码所生成的token响应包,来到登录功能点,验证码随意输入,拦截响应包

替换响应内容为任意生成生成的token而后一直放包

会登录到187账户,图片未截取完,不过已经是进入了187个人信息页面

当我测试完成任意注册后,发觉登录口和注册均是一套接口,只是未登录过的账号会自动注册

/xjky-server/xjky-biz-server/app/open/sms/registerAndLogin

任意用户注册攻击置空验证会产生token,那么**如果是我拿到已登录的账户,在此登录口同样进行置空验证码操作,是否也会返回对应号码token**

我正常注册了一位138账户进行模拟,省略过程,直接来到登录口进行测试,模拟攻击者不知道验证码的情况,随意输入然后拦截响应包

纯粹的置空让其不做校验然后放包

同我想的一样,只要置空验证就可以绕过登录验证,直接根据号码生成token,直接任意用户登录接管账户,又可以吃N顿馒头了

从点到面的挖掘过程

起初登录界面无法暴力破解,注册流程也需要人工审核。翻阅帮助手册摸清账号命名规则,账号为机构简称搭配学号,默认密码和账号一致。登录需要携带凭证,密码经过 Base64 编码。先后搭建学生、教师两套字典爆破,学生账号无果,爆破教师账号时多次出现 500 报错,最终成功跑出两个高权限教师账号。平台按学校做好隔离,不同院校数据互不互通。

获取多个测试账号

登录界面如下,如图是无法进行爆破密码的

正常注册也是需要审核

好在还有一个帮助页面,有个使用手册

手册就有几个非常关键的信息,给出了演示环境的账号格式,真实的账号格式为简称+学号,简称可以直接登录页面查询,默认密码即为账号,学号的格式基本也是固定的,很容易就找到

回到登录页面看下流程,这里有个获取类似于凭证的请求包

最后一个数据包则带着这个凭证还有账号密码去请求,密码一眼就能看出来是base64编码,这就可以尝试爆破测试账号,一个大公司每个系统的项目组都不一样,而都需要从这个界面登录,理论上应该有非常多的测试账号,能爆破出来测试账号最好,测试风险低点

稍微构造下字典,爆破方式选择第三个,两个字典一一对应的去跑,第二个字典选择base64编码即可

这里爆破了400个账号是没有爆破成功,在刚刚学生使用手册的地方还有一个教师手册

继续构造字典爆破一波,这里爆破到200多之后都是500服务器错误了,不过好在成功爆出来两个

接下来就是开盲盒时间,使用上面账号登录直接就是金色传说,权限很高的教师账号

这里教师账号管理功能只有两个账号,估计往上还有个超管的权限,学生账号就比较多了,一共1w多个,均为测试大学下的测试账号,这里是看不到其他真实学校的账号的,估计学校和学校之间做了很明确的隔离限制

任意账号接管

平台个人中心支持微信绑定登录,刷新页面的数据包依靠用户 ID 生成微信绑定链接。ID 无法直接遍历,但考试、作业等功能接口会泄露各类账号 ID。拿到目标 ID 替换请求参数,即可生成他人的微信绑定地址。扫码完成绑定后清理缓存,就能用微信登录接管账号。学生端接口可轻易拿到教师 ID,低权限账号也能拿下高权限账户,风险覆盖面广。

右上角个人设置功能,有个绑定微信的功能

这里F5刷新一下,会加载如下数据包,会根据id值返回一个绑定微信到此账号的链接,因为是可以使用微信直接登录此平台的,只要获取到目标账号id值就可以把我的微信尝试绑定到目标账号上,虽然是不可遍历的,但是有很多途径可以获取到这个id值

在一个考试的系统中,有个新建题库功能

过程中可以选择显示全部教学负责人

开启抓包,返回了目标id

在一开始数据包直接替换这个id即可

打开访问,然后拿自己微信扫一扫提示微信号绑定成功

这里需要先清除下浏览器缓存,然后拿这个微信扫码登录,成功接管了其他账号

这个功能需要教师权限才行,不过拿学生账号也很容易接管到教师的账号,例如下面功能点

抓包即可看到教师的id,其他类似于老师发布的作业、公告、考试功能都可以获取到这个值

1-click任意账号接管

跳转子系统过程中抓包发现 302 跳转携带 ticket 参数,后续凭借 ticket 换取登录 token。修改跳转链接 service 地址为自身服务器,即可诱导用户访问并劫持 ticket。ticket 存在时效性,需要快速拿凭证换取 token,超时则失效。拿到有效 token 替换至浏览器请求,就能直接登录受害者子系统账号。该漏洞操作简便,一次诱导便可完成账号接管,危害范围覆盖全部关联子业务。

跳转到某个系统的时候发现如下数据包,302跳转的时候有个ticket

下一个数据包则是带着上面的ticket去获取一个token

拿着这个token就可以登录到这个子系统了

这里将第一个数据包中的service参数中的url改为baidu.com

这时如果把百度改为自己的服务器,就可以盗取到受害者的这个ticket,再通过这个ticket获取token,然后接管受害者账号,这里本地启动一下http作为演示

成功获取到ticket

这里需要快一点获取token,不然ticket就会失效

直接替换token浏览器打开即可

sql注入1

访问站点内嵌的业务地址,提交数据时发现内容直接拼接进 SQL 语句。直接注入会抛出 SQL 报错,于是对照页面返回语句调整闭合方式,利用 order by 判断出数据表存在四列。随后使用联合查询测试回显位置,页面多位置均可正常带出查询内容。依靠可回显的注入点顺利读取数据库数据,整体利用门槛较低,仅需要调整语句闭合逻辑即可绕过基础拦截完成脱库。

点击其中某个系统,js里面有几个地址

访问之后是下面这个页面,随便输入点击提交

直接可以登录并且加载很多同一个数据包,具体如下

随便输入几个字符,可以看到是拼接到了sql语句里面

这里尝试注入,都提示sql异常

这里先按照他返回的语句重新写上,然后再把后面的注释掉,观察哪里可以加入注入语句

这里把order by语句当成正常的联合查询就行,先判断是有四列

然后使用联合查询判断回显位,发现全部回显了

成功注出数据

sql注入2

课程系统存在 order by 字段注入,sleep 延时会触发 403 封禁。测试发现 if 函数不受拦截,借助参数污染完成绕过,执行延时可延迟 4 秒,推测是语句重复执行导致。确认数据表共 8 列,延时函数无法使用便选择布尔盲注逐字符猜解。最终测出数据库名一共八位字符,该注入较为隐蔽,常规扫描很难发现,依赖参数拼接技巧才可利用。

其中某个学习课程系统

典型的 order by 注入,后端语句大概为 order by asc 这样

这里随便输入一个比较大的数,基本可以确定存在sql注入,如果不存在注入应该返回还是上面那个正常的值,然后判断列数是有8列

尝试if函数,发现不会被拦截

加入sleep函数直接403

经过测试,在后面拼接orderType使用参数污染即可绕过,当条件1=1时延时4秒,这里为什么会延时四秒?大概率是因为他有两条数据,查询了两次之类的

剩下就是基础的盲注了,判断当前数据库共有8位

越权

我注册普通账号,账号本身无任何业务数据。通过脚本爬取前端暴露的一百多个接口,批量尝试请求,多数返回报错,少数正常回显数据。顺着有效接口找到配套新增、修改、删除接口,修改请求参数重放数据包,成功改动他人数据。很多站点仅做前端限制,后端鉴权缺失,借助前端泄露接口 Fuzz 测试,就能实现水平越权篡改数据。

某个系统,注册的账号但是没有任何数据

前端有很多接口,写个脚本爬取一下,一共100多个接口

构造字典跑一下,其中很多403、504、400,只有几个接口返回了数据

这时候返回包的参数是非常有用的,可以先全局搜索一下这个有数据的接口,发现还有新增、删除、编辑等功能点

替换接口,把上面返回包的第一条数据复制到请求包,然后修改某个参数的值为下面这样

再去查询的那个数据包查看,这条数据成功被修改了

其他类似于你只有查询的权限,但通过前端泄露的接口(一般都会写在一块,实在没有可以fuzz一波)可以越权编辑、删除

未授权文件上传

某个系统前端泄露了路由

当我直接浏览器访问的时候他会加载一些接口,返回code为401,然后跳到登录界面

自动修改返回的值为200

再重新浏览器访问path来到下面这个页面,实际还是没有权限的,这里有两个主要思路,第一就是去找上传文件下载文件的功能点,一般这种地方不会做鉴权,第二就是它会加载很多登录页面没有的js文件,去寻找有没有能深入利用的地方

这里就找到了一个新增的功能点,有个添加附件的功能,这里如果点击受托人也是没有权限

可以未授权上传svg文件导致xss

0x03 总结

一开始东一榔头西一棒子乱测毫无收获,沉下心收拢全网资产手工细抠,接连挖出 XSS、多类型 SQL 注入、验证码绕过任意注册、多重账号接管、越权与未授权上传漏洞。各类绕过技巧全靠抓包反复试错,老系统防护套路多,踩坑无数才找到突破口。挖洞不靠工具堆料,拼细心和耐心,慢慢扒接口总能揪出问题,合规挖洞拿赏金,安心薅补贴!🔥喜欢这类文章或挖掘SRC技巧文章师傅可以点赞转发支持一下谢谢!