分析一下有的dede没法猜目录的问题

前言

老生常谈了 不过当年被提出来的时候就看到很多消息说 本地一打一个准 实战一个都打不了 当时也没需求也没研究 正好hw看到一个红队跳板 稍微看看

测试

对于使用<通配的技巧 最初我还是在乌云社区上看到的 后来用过这个方法去配合serv-u跳目录问题 遍历了整个ftp 见https://hundan.org/2018/08/12/Serv-u%E8%B7%A8%E7%9B%AE%E5%BD%95/#exp 不过当时对此认知不够 以为通配符是ftp的问题

image-20220822060745015

消息是这样的 简单回溯一下 估计就是tag.htm被删了

image-20220726225016059

翻到最初的文章 我们注意到image-20220726225220431

回去检查各个文件引用 但是本地成功依旧是远端失败 怀疑可能修补了 下载了个最新版的dede

最新版并没有对这块做出改动 问题也可以成功复现 只能怀疑是被人改动了

image-20220727095712709

image-20220822060640126

image-20220822060713188

分析

通过后门拿到了程序 下载回来看了一下 确实有改动

image-20220822030306607

为了加快调试 用原版代码覆盖 的确成功复现

image-20220822033551029

image-20220822035051723

想了想 这个确实是解决了找后台的问题 搜了一下

image-20220822034458567

新的问题?

但是 是不是会引入新的问题? 这个文件的本意是为了拦截问题文件的上传 现在直接放行了 从设计上来说 是因为dede代码结构设计有点问题 导致没有上传行为 却进行了上传审计

经过简单的研判 找到了文章缩略图上传的地方 通过修改content-type即可绕过

image-20220822041227625

image-20220822041551007

而这在添加代码前是做不到的

image-20220822041635149

不过总的来说 到后台之后拿shell的方法很多 这个修正也还算能接受 有没有更好的修复方式?

更精确地说 我们需要判断出上传行为和找后台行为 上传行为的拦截在于判断 正常文件与恶意文件 找后台行为的拦截在于 正常文件和不存在的文件

知道这个 就很简单了 更好的修复方案应该是 加一段file_exists包裹住

image-20220822042549620

不过本身这个也不是什么大问题 而且也不能实质性解决问题 图片马也能绕过 把code写到相机制造者里 然后手动调整一下 即使修复也一样绕过 dede后台拿shell方法不少

image-20220822052005388

image-20220822052748876

image-20220822052034632


what’s more

反思?

这个方法真的能修复找后台的问题吗 关键在于如何进入这段 使得其造成差别

1
exit('Upload filetype not allow !');

image-20220822053347835

满足条件:getimagesize can’t return array or false

https://www.php.net/manual/en/function.getimagesize.php

按照手册来说是不行的 但是如果能够在后台目录里的文件 出现那么一个文件 使得包含其后出现fatal报错 停止运行 (或者notice/warning级别 但是前提是其能够显示) 源码里似乎有那么几条稍微符合这个条件 但并没有fatal级别的报错

image-20220822054112891

image-20220822054938942

……

不过事实上 即使有fatal级别的问题 也无法实现 因为默认后台目录里文件相当有限 也无法从前台控制 则无法构造恶意文件探测

跳转拼合的想法 二级目录回跳时会直接被处理掉 比如 ../123/.. 会直接被处理到 ../ 再进入系统 因此就算前台能传恶意文件也没用

基本上可以说 代码的修复确实解决了通过这个手段猜目录的问题 而带来的新问题可以忽略不计

更多的拓展思考

这个问题可以拓展到 后台目录与通配符的问题 以及一个读取的文件名可控的情况下 当然这个拓展其实非常狭隘

但是如果说 后台的图片比较大 非常大 这个时候就有余地了 就有一个时间差在里面

话又说回来 dedecms使用了大量的 @ 进行错误屏蔽 我不觉得这是一个好的行为 或许dede的这个 可以改一改 加点想法 做成ctf题目

当然我不觉得dedecms 找后台的思路 在这里就终结了 我觉得翻一翻php源码和dede源码 还能找到其他通配符出现的问题点

但是我现在还是没搞懂 攻击者是如何进入到跳板机的 只是 跳板机在我取证的时候手滑敲错了命令 后来管理员全部清理了 我也就无从考证了


burp repeater出问题了?

遇到了个有点不得其解的问题

repeat自动更新了content-length 导致发包后数据不对 上传上去的30kb变成48kb 文件无法读取 有点怀疑是burp的问题

关闭cl更新 又会导致一直reset

用hex模式把jpg改为php又正常了 可能是哪里自动处理了换行

点回第一个包 发送正常 再点一次 异常 自动更新cl 挺离谱的 可能真的是新版本burp的bug

image-20220822050923915

Author: hundan
Link: https://hundan.org/2022/07/26/分析一下有的dede没法猜目录的问题/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.