当前位置: 首页 > news >正文

某公司站点的挖掘实战分享

站点名称:mxxxxxng.com
访问下一个系统 https://mxxxxxng.com/
直接请求跳转至登录页
登录测试
输入admin/admin弹出验证
验证成功后返回用户名或密码不正确
登录接口为/api/login 提交参数内容如图
直接在burp中重放下数据包,看看验证码是否可复用
重放数据包返回仍然是验证码可用,那就来暴力破解一波
结果发现使用123456可成功登录,本来想着过于顺利了,结果刚登录就提示无菜单权限,然后就又跳回了登录页面
分析登录过程
此时我们来看下数据包
通过数据包名称可看出此过程比较重要的接口
/api/login #登录数据包,返回token信息
/api/getLoginUser #获取登录账户身份及权限
/api/logout?0=eyJhxxxx #注销token,使权限失效
结合系统登录后的提示"无菜单权限",应该就是跟/api/getLoginUser接口返回数据有关了
来看下数据包内容
allPermissions中有很多值,说明权限应该还是有的,菜单的问题应该主要出现在menus对应的值为空,此时我猜想菜单的内容应该是在前端写好的,根据接口返回的menus具体值来展示不同的界面,那么就考虑在加载的js中查找menus,然后更改返回数据包来人工补充menus内容
打开浏览器的调试工具,搜索menus
从这部分内容中也可以证实之前的猜想是正确的,确实是根据menus的内容来判断
我们直接替换一下返回的menus,里面随便写入一个值,使其不进入这个逻辑判断中
配置完毕后重新登录,结果卡在了登录页面,同样没有跳转
查找接口
我们当前是可以拿到一个有效token的,所以即使访问不到管理员界面应该也是可以调用很多接口的,接下来我们从加载的js中筛选一下接口地址,burp中设置一下filter,仅展示js文件
设置后结果如下
由于我在burp中已安装插件HAE,点击具体的数据包,如果存在路径信息,HAE插件会帮我们提取出来 。
当前可以拿到token,所以不需要像测试未授权一样把所有接口枚举跑一遍看看哪些可以访问直接挑选看起来包含敏感信息的接口访问即可。
接口测试
比如这里面看到/sysUser/page接口,看起来是与系统用户相关的,我们请求看一下
需要注意的是从历史的接口请求中可以发现接口在域名的7788端口,且前面都有/api/
所以这里的/sysUser/page只是相对路径,真实地址应该是https://mxxxxxng.com:7788/api/sysUser/page   ,在实际测试的时候要注意这个问题
直接请求接口报401错误,很正常,因为我们没有带token访问,也说明此接口不存在未授权访问的问题回到之前登录时抓到的数据包,看看站点的认证数据是写在哪个header
这里面有两个header看名字都比较像负责认证的,分别是
X-Authorization
Authorization
接口实际认证一般只会根据一个header,所以我们可以挨个添加测试,好像一些网站cookie中存在很多值,但是真正与认证相关的一般只有session相关的值
由于登录后没有菜单权限,系统触发logout,之前包中的值已经失效了,我们可以单独发起一个登录请求,获取一个token
复制data中的值,添加到Authorization头中请求接口再测试一下
返回了系统中的账户,有54个,虽然没有密码但是拿这些账户枚举一波弱口令,应该是能找到一些能登录进系统的,这样就不用单独构造内容请求接口了
需要提取下全部的用户名作为字典,但是接口默认只返回了20个,通过返回内容猜测有pageSize参数控制返回大小
于是添加了一个pageSize参数,因为系统就54个账户,所以直接让pageSize=60就可以返回全部了
这里如果系统账户很多,超过1000个,就可以尝试结合pageNo来分页提取,否则一次取的账户数太多,对数据库的性能损耗也会变大,要根据实际情况修改参数值
把返回结果用正则提取下用户名信息,用到了在线正则 http://www.regex100.com/
通过正则表达式 "account":"[^"]+ 筛选出全部54个账户,结果粘贴到notepad++
替换 "account":" 为空即可得到我们需要的用户名字典
放到burp中暴力破解,先只跑123456,看看能否跑出账户
绝大部分账户都使用123456作为登录密码,我们随便找一个登录看看
我们来看下/api/getLoginUser接口的menus部分是怎么写的
看这个内容应该是在后端控制了,站点中对于特定功能访问urlxxx.com/#/xxxx的格式,最后的xxxx对应的是menuspath部分内容
此时我想既然已经成功登录了后台,那么替换token为管理员账户的,再请求相应页面是否可以使用管理员账户访问界面
打开开发者工具,替换下pro__Access-Token对应的值为admin账户的
替换后请求https://mxxxng.com/#/welcome
结果又触发了logout,返回到了登录页面
看起来admin账户没办法从界面管理了,于是继续看看当前账户的功能
个人设置处可以修改头像,有上传功能传了一个新头像,看下对应数据包
并没有返回上传路径,于是在个人信息处右键点击头像选择在新标签页中打开图片
blob协议是用来传输二进制数据的,这里的url对应的是图片的二进制数据,而非图片真实路径,故上传,暂时没有其他思路
发现接口路径规律
没有思路的时候就看一看历史的数据包,看到/api/getLoginUser 接口的时候,突然发现返回的权限列表,貌似与接口名称存在对应关系
比如之前从js文件读取到的路径信息也包括/sysUser/detail/sysUser/page这种,对应权限列表中的 sysUser:detail、sysUser:page
于是想到从这里看看有没有比较重要且不需要额外构造参数的接口,优先选择pagelist这种
随便先找个/api/sysOrg/page请求一下,确实返回了内容,说明存在此接口,也验证了我的猜想
那么剩下就是多找些接口读取信息
读取/api/sysExLog/page接口时,返回了一些登录错误的日志信息,可以看出有6927条记录,通过
pageSizepageNo参数可以查看到所有日志内容
发现真实管理员账户
我们让每页显示100条记录,且直接跳到最后一页看看都有什么内容
看到还会记录一些操作错误的日志,并且发现存在一个superAdmin的账户,这个在此
/api/sysUser/page接口是没有读到的
admin账户无法登录很可能是因为真正的管理员使用的是superAdmin这个账户登录,否则怎么可能管理员都没有菜单权限
于是对superAdmin进行了一波暴力破解
可惜并没有跑到密码,我们再继续看看其他接口
读到/api/sysOpLog/page的时候,惊喜的发现会记录详细的请求参数,正是我刚才暴力破解的密码数据,那么我们多翻一翻log,应该就可以读取到真正的密码了
28167条数据,最近的都是我们暴力破解的,所以我准备结合pageSizepageNo参数从后面往前读
burp中搜索password可以帮助更好的定位登录数据,有点遗憾的是log应该是只保留了60天左右,所以是不全的
这里先读到了一个之前暴力破解没跑出来的账户pxxx,利用读到的密码登录试下
发现这个账户权限比较大,并且还有系统管理的功能
系统管理只有机构管理功能,没有管理用户的功能,我们继续读log看看还有没有管理账户的
获取管理员账户密码
经历一番对log的翻阅,终于找到了superAdmin的密码 最终成功使用superAdmin登录管理后台
superAdmin账户是不在用户管理列表中的,最早从接口也没有读到这个账户,推测可能是硬编码写在 程序代码里了
大概的登录逻辑有可能是这样
if username == 'superAdmin' {
xxxxx
} else {
select xxxx from users xxxxx
}
这里其实还有一种测试思路就是看看能不能从js文件里获取更多的path地址,然后尝试在有一定权限的情况下越权访问
js文件获取接口思路
首先看下加载的js文件注意下,一般带有chunk-xxxxx的这种js文件,可能会有更多js文件没被加载,但是文件名会写到一个js文件中
chunk-75e74b52.2bac6cbf.js举例,我们把75e74b52作为关键词在开发者工具中搜索一下
"chunk-75e74b52": "2bac6cbf",
user: "40be2e4b",
fail: "8b5256dc"
因为我们已知有个chunk-75e74b52.2bac6cbf.js文件,正好是 "chunk-75e74b52": "2bac6cbf",
接。
所以就可以构造出其他js文件名user.40be2e4b.jsfail.8b5256dc.js 不过这里这两个js文件也已经加载过了,仅提供下这种思路,测试其他站点遇到类似情况可以参考,之前遇到过不少有几十个chunk
xxx.js文件,可以提取不少信息
http://www.dtcms.com/a/473902.html

相关文章:

  • 第三方和审核场景回调还是主动查询
  • Git基本命令的使用(超详细)
  • NC40 链表相加(二)
  • 网安面试题收集(3)
  • JetLinks设备接入的认识与理解
  • 从HashMap到ConcurrentHashMap深入剖析Java并发容器的演进与实战
  • 做一组静态页面网站多少钱网站源码上传到哪个文件夹
  • 威海市城乡建设局网站网络整合营销服务商
  • 从报头到路由器——【网络编程】详解 IP 协议:报头字段、路由器功能、网段划分和分片传输
  • 网站验证北京建网站开发
  • 设计模式篇之 装饰器模式 Decorator
  • 虚幻引擎虚拟制片入门教程 之 创建项目及启用插件
  • 淳安县建设网站王璞网站开发实战答案
  • Linux禁用自带键盘和触摸板(无需每次开机重置)
  • 149、【OS】【Nuttx】【周边】效果呈现方案解析:VSCode 打开外部链接(二)
  • Apache Commons IO:文件流处理利器,让Java IO操作更简单
  • 哪个网站做简历免费自己做免费网站
  • 医院预约挂号|基于Java+vue的医院预约挂号系统小程序的设计与实现(源码+数据库+文档)
  • 翻转二叉树---超全详细解
  • AI智能体全球应用调查报告:从“对话”到“做事”的变革
  • Linux网络之----网络编程
  • [Power BI] CALCULATETABLE函数
  • 3494. 酿造药水需要的最少总时间
  • 沐风老师3DMAX科研绘图插件DNA生成器使用方法详解
  • 宁波做网站gs什么是网络营销的职能
  • AI编程工具(Cursor/Copilot/灵码/文心一言/Claude Code/Trae)AI编程辅助工具全方位比较
  • FastGPT入门实战
  • 数据结构笔试核心考点
  • 用python做购物网站万网搜官网
  • 创建qq网站如何做网站流量分析报表