zoukankan      html  css  js  c++  java
  • 如何利⽤360Quake挖掘某授权⼚商边缘站点漏洞

    0x00 360Quake牛刀小试

    在对某厂商进行授权安全测试时,苦于寻找资产,于是利用360quake的title搜索语法进行搜索边缘资产。

    搜到疑似该厂商的一个边缘站点。根据经验,像这种界面的系统一般多多少少都有漏洞。

    因为站点只有一个后台界面,所以我们的漏洞利用点一般先是寻找爆破弱口令账户,或者是找到一处全局越权。最好是弱口令账户。经过一些列的账户爆破处理,并没有一个有效用户可利用。于是乎只能寄托于能不能搞到这套系统的相似源码或者框架。

    这时候,我注意到之前quake搜索出来的结果。在360quake当中,对存在ico的站点会在搜索栏下告知站点ico的md5值。根据favicon的图标,我猜测这不是一套原生框架。

    删除对应的title关键词,可以根据favicon来搜索使用同套相似框架的站点。

    当然假如quake没有给出这个站点的icon值,你也可以根据 curl http://xxxx.com/favicon.ico|md5sum的方式,得到站点ico的md5,然后利用quake语法,favicon:"{MD5}"搜索。

    运气较好,在quake的第一页就发现了和厂商使用同样cms,并且明示用了什么框架的站点:jeecg-boot。

    0x01 如何利用360quake搜索相似站点,并获得源码

    这里一般我们搜索相似源码的站点有以下几种方式:

    • 1、根据favicon搜索
    • 2、根据首页页面里的一些特征,利用body:"{特征}"来搜索
    • 3、根据response里的header头特征来搜索,一般是在cookie里有设置特定的cookie。比如shiro的rememberMe=xxx,或者apache的ofbiz。

    搜索到相似站点后,有几种方式搞到源码:

    • 1、对相似站点进行入侵,getshell后获得源码(动静较大)
    • 2、对相似站点批量扫备份文件
    • 3、得知cms的名称去凌风云网盘搜索该cms源码是否有人分享
    • 4、闲鱼搜有没有对应源码有人在买卖
    • 5、去github,gitee搜有没有相似的源码,是否是根据别人的源码二次开发的成品

    0x02 步入正题,如何搞定这个cms。

    这里我们搜索到jeecg-boot是github上开源的成熟项目,项目成熟,不代表没有漏洞。成熟项目有成熟项目的好,就是有人会去发现漏洞,然后告知到github的issue上,你只要祈祷你遇到的站点不是最新版本就行。项目不成熟,只能你自己审计代码,好处就是用的人少,相对有漏洞的概率就大。

    根据 https://github.com/zhangdaiscott/jeecg-boot 项⽬可知,该项⽬是由java基于 springboot开发的。所以我第⼀时间阅读了这个项⽬的README。

    舒服,有fastjson和shiro,还有我熟悉的springboot的。

    首先,登录抓个包。

    符合站点描述缩写的,确实是可能使用了fastjson,整个response和request里的url都有springboot的气息。

    因为知道有shiro,但是shiro版本⼤于是1.4.0。所以有那个paddingoracle的漏洞,也有⼏个
    shiro配合springboot的url绕过漏洞。整理下⼏个漏洞的利⽤条件。

    paddingoracle的漏洞利⽤条件:

    • 1、需要登录后的rememberMe的值,也就是说需要账号密码。

    shiro的url验证绕过:

    • 1、不需要利⽤条件,但是前提是作者那样⼦配置认证⽅式,其次就是
      你有对应的后台漏洞的url。

    第⼀个paddingoracle暂时利⽤不了,只能从第⼆个shiro绕过找办法。

    因为是1.4.0所以那个
    反序列化还是存在的。因为只是key随机化了⽽已,查看项⽬,并没有设置固定的key,所以
    ⽤⼯具没跑出来key。
    于是乎,根据前面提到的,我们在issue上找到⼀个最近的sql注⼊漏洞。 https://github.com/ zhangdaiscott/jeecg-boot/issues/1887

    先看看这个url在未登陆下是啥情况。

    提示重新失效。然后根据shiro的最近⼏个未授权漏洞进⾏fuzz。当发现下图情况时候,返回码不
    ⼀样了。说明已经绕过了shiro认证。

    根据issues⾥的图⽚请求,进⾏填写剩余的get参数。成功获取到数据。

    注⼊点在code=处。mysql数据库。

    注入点很明显,直接可以用sqlmap。 --is-dba

    然后下载源代码,看看有没有upload的漏洞。找到⼀处新版被注释掉的上传代码(大概率可能有洞才被在新版注释掉)。

    //	@PostMapping(value = "/upload2")
    //	public Result<?> upload2(HttpServletRequest request, HttpServletResponse response) {
    //		Result<?> result = new Result<>();
    //		try {
    //			String ctxPath = uploadpath;
    //			String fileName = null;
    //			String bizPath = "files";
    //			String tempBizPath = request.getParameter("biz");
    //			if(oConvertUtils.isNotEmpty(tempBizPath)){
    //				bizPath = tempBizPath;
    //			}
    //			String nowday = new SimpleDateFormat("yyyyMMdd").format(new Date());
    //			File file = new File(ctxPath + File.separator + bizPath + File.separator + nowday);
    //			if (!file.exists()) {
    //				file.mkdirs();// 创建文件根目录
    //			}
    //			MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
    //			MultipartFile mf = multipartRequest.getFile("file");// 获取上传文件对象
    //			String orgName = mf.getOriginalFilename();// 获取文件名
    //			fileName = orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.indexOf("."));
    //			String savePath = file.getPath() + File.separator + fileName;
    //			File savefile = new File(savePath);
    //			FileCopyUtils.copy(mf.getBytes(), savefile);
    //			String dbpath = bizPath + File.separator + nowday + File.separator + fileName;
    //			if (dbpath.contains("\")) {
    //				dbpath = dbpath.replace("\", "/");
    //			}
    //			result.setMessage(dbpath);
    //			result.setSuccess(true);
    //		} catch (IOException e) {
    //			result.setSuccess(false);
    //			result.setMessage(e.getMessage());
    //			log.error(e.getMessage(), e);
    //		}
    //		return result;
    //	}
    

    构造请求包:

    根据代码,看下上传到哪⾥去了。

    ${jeecg.path.upload}

    可惜,这个站点的biz不可控,文件只能上传到和webapp同⽬录下的upload⽬录,那在web的URL下是访问不到我们的上传文件。如果是上传到webapp下⾯,那就可以访问到。

    0x03 后续渗透思路

    • 1、利用注入点,新增or修改后台某个账户为弱口令。
    • 2、利用弱口令账户登入系统,获取到rememberMe的正确值,使用shiro的paddingoracle的JRMP的gadget进行攻击。
    • 3、看了下项目,作者提供了便捷的docker方案。So后续渗透getshell后有大概率是在docker里。

    0x04 总结

    • 1、在日益艰难的web项目渗透下,利用现有的资产搜索引擎可以更好的帮我们掌握目标站点的情报。
    • 2、现在的入侵都不是一步水到渠成,往往需要迂回而上,越了解目标的环境,越有机会拿下目标站点。
  • 相关阅读:
    sql语句查询数据库中含有某字符串的表名
    PHP复制文件夹及文件夹内的文件
    Vue.js绑定内联样式
    Vue模板语法V-bind
    Vue实例
    Vue.js几个简单用法
    Git Pull Failed: cannot lock ref 'refs/remotes/origin/xxxxxxxx': unable to resolve ref
    SSM 框架详细整合教程(IDEA版)(Spring+SpringMVC+MyBatis)
    IntelliJ IDEA(2017/2018)安装图解与破解教程
    Hadoop集群单机伪分布搭建
  • 原文地址:https://www.cnblogs.com/ph4nt0mer/p/14250296.html
Copyright © 2011-2022 走看看