拿到源码安装好,注册账号登录进去存在上传功能点

点击进去发现可以上传文件,先随便填写并上传

开启数据库监控发现把数据都插入prefix_music这个表中

接下来看prefix_music表中存储的数据

这样就可以发现对应的字段的关系
然后打开phpstorm分析对应的源码/template/default/source/audio.php
此处代码是个执行下载的流程

使用readfile读取$file路径中的文件,那么如果$file我们可控的话就可以造成任意文件读取,所以跟踪$file观察是否可控

第25行发现取$row中的in_audio的数据
再跟进$row

正是数据库执行我们想要下载的音乐的结果,in_id是我们想要下载的音乐的编号,回到上面prefix_music表中字段对应的关系便知道了in_audio正是我们上传的音频地址
而第25行又使用geturl方法再跟进观察

使用了正则匹配
这里的话是data/attachment 这个作为被匹配一次
然后plugin.php可以单独被匹配,所以我们不以data/attachment开头或者路径中又plugin.php,而我们再使用geturl这个函数的时候并没有给$type赋值,所以我们可以直接返回$file
而我们也应该考虑下上传路径的时候有没有过滤
所以抓包分析下上传地址
earmusic/source/user/music/ajax.php?ac=add&name=asdadasd&classid=1&audio=asdasdasdasd&specialid=0&singerid=0&tag=
定位到此处观察

这里应该对我们audio即我们上传的路径进行过滤,跟进checkname

第266行再次过滤 过滤了 .和\ 要想绕过我们需要使用绝对路径就行了
payload:D:/phpStudy/WWW/EarMusic/source/system/config.inc.php
源码很短,写的很水,大佬误喷




