DedeCMS的两个小trick

0x00 前言

昨天晚上做了一个神奇的梦,梦到了我高中时候晚自习在偷偷的看《黑客攻防技术宝典》,当年的事情无论是苦是乐,回忆起来总是感觉非常的美好。但是,现实就是现实,梦境还是要被舍友的闹铃声打破,在大梦初醒后,我仿佛有一种“垂死梦中惊坐起”的感觉,是谁为我织出了这么美好的一个梦境?难道织梦CMS(DedeCMS)又要出0day了?于是,我立马从床上跳了下来,打开电脑,从官网下载了最新版的织梦CMS(DedeCMS V5.7 SP2正式版),心想着一定要代码审计一波带走。于是乎,就有了你现在正在阅读的这篇文章。

0x01 服务器任意(图片)文件删除漏洞

漏洞产生在文件:\member\edit_face.php

第39行的unlink() 函数引起了我的注意

函数的参数是 $cfg_basedir和$oldface

先看了一下变量 $cfg_basedir

cfg开头的变量在DedeCMS中都是一些配置参数(cfg是config缩写),一般无法控制。

看上图,$cfg_basedir是写死在配置文件中的

再看 $oldface

我全局搜索了一下,发现 $oldface 在当前文件中并没有定义,那我是否可以通过变量覆盖的方式来控制这个变量?

跟进到第九行,包含了config.php

继续跟进,在 config.php第76行包含了/include/common.inc.php

在 /include/common.inc.php中把 $_GET $_POST $_COOKIE 中的变量解析了出来。

那么 $oldface就可以用变量覆盖的方式进行赋值。

既然 $oldface 可控,那我就要研究一下有没对这个变量进行严格的过滤。

在 \member\edit_face.php 第37行,限制了文件结尾后缀名是jpg、gif、png ,这是此漏洞最大的一个限制,似乎没法绕过。

在 \member\edit_face.php 第25行,限制了这个变量必须以 $userdir 的值开头,$userdir 即为储存当前用户上传头像的文件夹,

$userdir = ‘\uploads\userup\’+ 当前用户的userid

但是这里并没有过滤点号,因此可以路径回溯绕过!

漏洞复现如下:

打开页面\member\edit_face.php

在上传文件后抓包:

如图,我在上传图片的请求包中增加一个oldface参数,指向服务器根目录的一个图片文件,发包后就能成功删除。

0x02 DedeCMS后台登录处一个小trick

首先找到后台登录验证身份处,在 /dede/login.php 第74行,调用了userLogin的checkUser方法,这个方法用来验证管理员凭证。

跟进去,到了 /dede/include/userlogin.class.php 第240行

在第248行的SQL语句中发现用户名是用 like 进行模糊查询。

而且,在245行的正则表达式中发现用户名中可以包含下划线( _ )

在取出用户名后再比较密码,若用户名与密码匹配则登录成功。

这里存在的一个问题是用户名处用 like 进行模糊查询,而且没有过滤下划线,下划线在 like 中可以用来匹配单个字符,因此,即使我不知道管理员用户名,也可以登录后台。

漏洞复现如下:

若管理员是 admin 则我在后台输入 _____ 即可登录后台(五个下滑线,与管理员用户名字节数相同)

原文发布于微信公众号 - ChaMd5安全团队(chamd5sec)

原文发表时间:2018-04-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏安恒网络空间安全讲武堂

MOCTF WEB 题解

0x00 MOCTF平台是CodeMonster和Mokirin这两支CTF战队所搭建的一个CTF在线答题系统。网址是http://www.moctf.com/...

83790
来自专栏进击的程序猿

分布式共享内存

本文是论文Treadmarks: Distributed Shared Memory on Standard Workstations and Operatin...

25120
来自专栏斑斓

框架 | spray-routing的核心流程

最近我们在一个项目上使用spray来发布restful service。 ? spray是个性能很好而且功能非常完整的service框架,包含很多组件,从底层h...

46860
来自专栏Golang语言社区

Golang-简洁的并发

转载原文:http://www.yankay.com/go-clear-concurreny/ 多核处理器越来越普及。有没有一种简单的办法,能够让我们写的软件释...

40440
来自专栏美团技术团队

Node.js Stream - 进阶篇

在构建较复杂的系统时,通常将其拆解为功能独立的若干部分。这些部分的接口遵循一定的规范,通过某种方式相连,以共同完成较复杂的任务。譬如,shell通过管道|连接各...

44640
来自专栏NetCore

一个让人遗忘的角落—Exception(三)

最近有点事,把这个系列给落下了,给大家道个歉,这里还要感谢我的老婆,谢谢她一直对我的支持:) 系列回顾: 1.一个被人遗忘的角落—Exception(一) 2...

22160
来自专栏JavaEdge

操作系统之存储管理一、基本概念:地址重定位二、地址重定位三、物理内存管理四、连续内存管理方案五、离散内存管理方案(重点)六、交换技术七、虚拟存储技术八、页表及页表项的设计三、虚拟页式存储中软件相关策略

51680
来自专栏自然语言处理

数据分析:基于Python的自定义文件格式转换系统

无论读者现在是做数据挖掘、数据分析、自然语言处理、智能对话系统、商品推荐系统等等,都不可避免的涉及语料的问题即大数据。数据来源无非分为结构化数据、...

21520
来自专栏Golang语言社区

Go-简洁的并发

多核处理器越来越普及。有没有一种简单的办法,能够让我们写的软件释放多核的威力?是有的。随着Golang, Erlang, Scala等为并发设计的程序语言的兴起...

457120
来自专栏FreeBuf

WireShark+Winhex:流量分析的好搭档

这篇文章你将学会的知识点有 1、进阶的wireshark的流量分析、解码、追踪流、导出文件 2、利用hackbar进行base64、URL编码转换 3、利用wi...

96760

扫码关注云+社区

领取腾讯云代金券