点击蓝字
关注我们
声明
本文作者:说书人&Wendell
本文字数:约1503字
阅读时长:约5分钟
附件/链接:点击查看原文下载
本文属于【狼组安全社区】原创奖励计划,未经许可禁止转载
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,狼组安全团队以及文章作者不为此承担任何责任。
狼组安全团队有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经狼组安全团队允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
❝
某次渗透测试中,有一个基于thinadmin二开的站点,通过nday和弱口令爆破均无果。目标网站的icon图标和单位本身没啥关系,且不是框架本身的icon,于是去测绘上搜了一下发现互联网有大量的同类系统,判定为通用系统。
由于本次给了一大批目标,在目标中通过icon进行匹配,还发现了另外一个同icon但是界面不同的系统,通过接口对比发现为同一套后端。该系统存在弱口令,进了后台通过后台某个功能点getshell。不过这个洞依赖管理员认证,且在不同的环境下有不同的限制,不通用,无法应用到第一个系统中,于是对源码进行审计。
组合拳getshell
过程中和团队的Wendell
的师傅一起来看,代码量不大,整体大致过了一遍,没啥前台可以利用的点,而且前面那个后台洞存在特殊限制,所以思路是先尝试解决鉴权的问题,然后重新找一处利用点进行getshell。
按照惯例,先找sink点,找到app/data/controller/api/auth/Center.php
,发现其中的image
方法可写入文件
该方法接收base64并作为文件内容,格式上满足如图所示的正则表达式即可,另外后缀也可控,可以直接写入php文件。除此之外,请求头需要Client-Key: cnmdsb
(996程序员悄咪咪在代码中口吐芬芳)
该方法需要鉴权,接下来我们去查看认证逻辑,在app/data/controller/api/Auth.php
中找到鉴权相关方法
接收两个请求头参数,判断type
,然后走到getUser()
方法
先看TYPES[$this->type]
定义了哪些,在app/data/service/UserAdminService.php
中
然后再跟进getUser()
方法
这里还需要一个token,走到UserTokenService::instance()->check($this->type, $token)
里面,继续跟进
可以看到这里需要从数据库查询了,没啥可绕的。不过换种思路,因为根据源码结构可以看到有业务端路由和管理端路由,而且管理员认证和上面的认证是不一样的,所以可以找一找用户端是否可以注册。不过大致看了下,没找到注册的页面也没看到普通用户登录的页面,但是找到了注册的接口app/data/controller/api/Login.php
先根据代码进行路由和参数的构造,成功注册用户,并且直接返回了token
至此形成了闭环,成功getshell,收获通用0day一枚。
极安斥候平台已实现对应的指纹识别以及漏洞检测插件
作者
说书人
极安科技CTO
扫描关注公众号回复加群
和师傅们一起讨论研究~
长
按
关
注
WgpSec狼组安全团队
微信号:wgpsec
Twitter:@wgpsec
原文始发于微信公众号(白帽子):记某次渗透测试中的0day挖掘
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论