一、梦想CMS 1.4后台任意文件读取漏洞复现
通过找关键词file_get_contents
1、进入后台观察url,是通传参地址来进行访问的,猜测通过文件读取;
2、分析读取的原理
通过搜索文件读取的函数找一下实现的位置
发现有path参数的,判断是否是可控传参
此处发现path目前不可控,追踪使用getcon方法的地方,发现editfile方法通过可控传参dir输入目标路径+template拼接为最终具体路径赋值给path,然后通过file_get_contents($path)读取目标文件
3、实现文件读取
发现是通过参数m读取类,a读取方法中的方法
因为默认文件读取是读取template文化夹中,我们可以放一个1.txt在里面测试是否能够读取成功;
我们可以通过读取template类中的editfile方法通过dir传参来实现文件读取
/admin.php?m=template&a=editfile&dir=1.txt
读取到1.txt
我们可以通过../来突破限制读取于template文件夹
/admin.php?m=template&a=editfile&dir=../inc/db.inc.php
来读取数据库配置文件
二、梦想CMS 1.4后台任意文件写入漏洞复现
通过找关键词file_put_contents
file_put_contents($path,$data)疑似存在可控的地址和可控的写入内容
定位到put方法中发现可以出发file_put_contents函数,定位到调用put方法的editfile方法;
先判断settemcontent是否为真,为真进入执行put方法,其中$path为template/$dir/$filename,$data为$temcontent;
我们可以通过一下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();?>
三、earcms文件下载——通过功能点定位
点击下载进行抓包获取到url然后审计audio.php
http://earmusic1.com/template/default/source/audio.php?id=1
在audio.php中发现下载的代码,下载目标传参是$file,审计能否控制$file进行任意文件下载;
1、看到id是通过saferequest方法进行get或者post传参,此步只是进行传参的判断
2、追随到$file位置通过geturl方法赋值,参数为$row['in_audio'];
$row是通过getrow方法通过sql查询方法获取到music表中并且in_id列与$id相同的行的所有数据的数组,
所以$row['in_audio']就代表sadas
3、geturl方法中,判断不是以file不是以data/attachment就原样返回url,这里相当于geturl(sadas),所以最后原样返回sadas数据到$file中,最后下载file内容
4、所以我们可以控制数据库music表中的in_audio列进行写入代码,我们就可以下载执行后的代码,比如可以写入数据库配置文件的地址,将数据库配置文本下载下来;
5、通过上传音乐来控制in_audio列的值;说明是在音频地址;
可以在音频地址实现任意文件下载
http://earmusic1.com/template/default/source/audio.php?id=5
下载数据库配置文件;
标签:审计,audio,读取,写入,file,php,template From: https://www.cnblogs.com/sunrise123/p/18361301