首页 > 其他分享 >代码审计(文件读取、下载、写入)

代码审计(文件读取、下载、写入)

时间:2024-08-15 16:50:39浏览次数:6  
标签:审计 audio 读取 写入 file php template

一、梦想CMS 1.4后台任意文件读取漏洞复现

国家信息安全漏洞共享平台 (cnvd.org.cn)

通过找关键词file_get_contents

1、进入后台观察url,是通传参地址来进行访问的,猜测通过文件读取;

image-20240812231323498

2、分析读取的原理

通过搜索文件读取的函数找一下实现的位置

image-20240812231617754

发现有path参数的,判断是否是可控传参

image-20240812231649240

此处发现path目前不可控,追踪使用getcon方法的地方,发现editfile方法通过可控传参dir输入目标路径+template拼接为最终具体路径赋值给path,然后通过file_get_contents($path)读取目标文件

image-20240812231944138

image-20240812232035982

image-20240812234307194

3、实现文件读取

发现是通过参数m读取类,a读取方法中的方法

image-20240812234801842

image-20240812234815956

因为默认文件读取是读取template文化夹中,我们可以放一个1.txt在里面测试是否能够读取成功;image-20240812235416155

我们可以通过读取template类中的editfile方法通过dir传参来实现文件读取

/admin.php?m=template&a=editfile&dir=1.txt读取到1.txt

image-20240812235448417

我们可以通过../来突破限制读取于template文件夹

/admin.php?m=template&a=editfile&dir=../inc/db.inc.php 来读取数据库配置文件

image-20240812235805005

image-20240812235932999

二、梦想CMS 1.4后台任意文件写入漏洞复现

国家信息安全漏洞共享平台 (cnvd.org.cn)

通过找关键词file_put_contents

file_put_contents($path,$data)疑似存在可控的地址和可控的写入内容

image-20240813142227719

定位到put方法中发现可以出发file_put_contents函数,定位到调用put方法的editfile方法;

先判断settemcontent是否为真,为真进入执行put方法,其中$path为template/$dir/$filename,$data为$temcontent;

image-20240813142419004

image-20240813142627776

我们可以通过一下payload写入一个储在template路径下内容为<?php phpinfo();?>,文件名为2.php;可以通过给dir传参写入到其他位置,实现任意文件写入;

Get:http://lmxcms1.4.com/admin.php?m=template&a=editfile&dir=

Post: settemcontent=1&filename=2.php&temcontent=<?php phpinfo();?>

image-20240813143745198

image-20240813143758463

三、earcms文件下载——通过功能点定位

点击下载进行抓包获取到url然后审计audio.php

image-20240813172111630

http://earmusic1.com/template/default/source/audio.php?id=1

在audio.php中发现下载的代码,下载目标传参是$file,审计能否控制$file进行任意文件下载;

image-20240813172841586

1、看到id是通过saferequest方法进行get或者post传参,此步只是进行传参的判断

image-20240813172402117

image-20240813172454961

2、追随到$file位置通过geturl方法赋值,参数为$row['in_audio'];

image-20240813174803848

$row是通过getrow方法通过sql查询方法获取到music表中并且in_id列与$id相同的行的所有数据的数组,

image-20240813174737407

image-20240813174932434

所以$row['in_audio']就代表sadas

image-20240813175235647

3、geturl方法中,判断不是以file不是以data/attachment就原样返回url,这里相当于geturl(sadas),所以最后原样返回sadas数据到$file中,最后下载file内容

image-20240813173153260

image-20240813175756715

image-20240813180045198

4、所以我们可以控制数据库music表中的in_audio列进行写入代码,我们就可以下载执行后的代码,比如可以写入数据库配置文件的地址,将数据库配置文本下载下来;

image-20240813180206225

5、通过上传音乐来控制in_audio列的值;说明是在音频地址;

image-20240813191747421

image-20240813191817710

可以在音频地址实现任意文件下载

http://earmusic1.com/template/default/source/audio.php?id=5

下载数据库配置文件;

image-20240813192303710image-20240813192353409image-20240813192547272

image-20240813192518815

标签:审计,audio,读取,写入,file,php,template
From: https://www.cnblogs.com/sunrise123/p/18361301

相关文章

  • 读取配置连接信息,利用mybatis进行数据库连接操作
    mybatisConnConfig.properties配置文件内容default.configpath=config/mybatis/mybatis-config.xmldw.jdbc.system.driver=com.mysql.jdbc.Driverdw.jdbc.system.url=dw.jdbc.system.username=dw.jdbc.system.password=ralid.jdbc.system.driver=com.mysql.jdbc.Driver......
  • Uefi ABL读取XBL设置的标志位
    PBL(启动固化程序)->XBL(扩展引导加载程序,负责初始化芯片驱动和核心应用功能。XBL通常会加载一些平台相关的驱动程序,并提供通用接口)->ABL(应用引导加载程序,负责引导操作系统的启动。)高通启用UEFI架构的bootloader,有些时候有些状态值,需要ABL阶段获取.上层思维总是以属性来开端,实......
  • java使用动态链接库读取Fanuc设备,在linux环境部署时报错:FOCAS2 log file is not found
    在linux环境中,使用java调用动态链接库的方式读取Fanuc,报错“FOCAS2logfileisnotfound”解决办法linux环境使用cnc_allclibhndl3之前,需要先使用cnc_startupprocess启用并指定日志文件,否则会报错:"FOCAS2logfileisnotfound"。会包含cnc_startupprocess,windows的dll库......
  • JAVA字段审计功能-对比修改前后变化并使用枚举Enums进行翻译
    最近接到了一个业务是,审计客户和合同的字段变化,要明细到使用系统的人员能看懂(大概就是我们存入数据库是12什么的进行翻译)返回的信息大概就是:客户A的客户状态从客户状态A 修改成了 客户状态B,客户性别从客户性别A变成了客户性别B。我实现的思路大概就是:1、获取到......
  • 代码审计修改
    js解决可能会引发TypeError解决方法:检查变量是否为 null 或 undefined。使用可选链(OptionalChaining)操作符 ?.。提供默认值或初始值。//假设myObject可能是null或undefinedletmyObject=getObject();//假设这个函数可能返回null或und......
  • openGauss怎么工作SQL函数接口读取逻辑解码结果?
    功能描述在openGauss中如果实现数据复制呢?可以通过数据迁移工具定期向目标数据库进行数据库的同步,说的定期,这就意味着这种方式不能满足数据实时复制的需求。在openGauss中为我们提供了逻辑解码功能,工作原理就是反解xlog,从而生成逻辑日志,在目标数据库中通过对逻辑进行解析......
  • 编写一个程序,打开和读取一个文本文件,并统计文件中每个单词出现的次数。用改进的二叉查
    /编写一个程序,打开和读取一个文本文件,并统计文件中每个单词出现的次数。用改进的二叉查找树存储单词及其出现的次数。程序在读入文件后会提供一个有三个选项菜单。第一个选项是列出所有的单词和出现的次数。第二个选项是让用户输入一个单词,程序报告该单词在文件中出现的次数。......
  • java 读取文件夹文件
    以下是多种不同的Java实现方法来读取文件夹中的文件:方法一:使用File类importjava.io.File;publicclassReadFilesInFolder{publicstaticvoidmain(String[]args){Filefolder=newFile("folderPath");File[]files=folder.listFiles();......
  • 【笔记】从0开始的代码审计
    【笔记】从0开始的代码审计代码审计思路敏感函数回溯参数调用过程首先特别关注程序敏感函数点,如:SQL语句拼合处、call_user_func、eval、unserialize、HTTP_CLIENT_IP等然后回溯参数调用过程查看是否全部过滤或者过滤不全,如:程序可能开启magic_quotes_gpc(转义大部分符号),但是部......
  • # Android开发 - FileWriter 类写入文件解析
    FileWriter是什么FileWriter是一个用于将字符数据写入文件中的类。在Java中,它使得文件的写入操作变得简单直观FileWriter继承自OutputStreamWriter类,进一步继承自WriterFileWriter构造方法FileWriter(StringfileName):创建一个FileWriter对象,用于写入指定文件......