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

一、梦想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

posted @ 2024-08-15 16:43  Sunrise_P  阅读(128)  评论(0)    收藏  举报