0x01 代码分析

后台地址:192.168.5.176/admin.php

admin admin

安装后的界面

在后台发布了一首新歌后,前台点进去到一个“下载LRC歌词”功能点的时候发现是使用readfile()函数的(readfile() 函数输出一个文件)

文件位置:\template\default\source\down.php

代码很短,这里下载文件漏洞我们重点关注readfile函数和传递给这个函数的参数,也就是$file,可以看到file这个变量是由geturl和getfield这两个函数得到的,跟进下这两个函数

首先geturl()函数路为/source/system/function_common.php。

这里file是我们传入的文件地址,这里首先通过正则来匹配判断,但是当file不符合正则规则而时候就直接复制给$url变量,即你上传什么,这里就读什么,读取下载的时候未作任何过滤操作. 那我们这里就是要控制传给geturl这个函数的参数即可,那我们继续来看看geturl函数里这个getfield函数是干什么的

文件位置:/source/system/function_common.php 和geturl在一个文件里

那么这里可以看到,getfield这个函数主要是查询下载文件的地址的。

$sql = "select ".$target." from ".tname($table)." where ".$object."='".$search."'";

这里就是查询in_lyic这个字段的值,而这个字段的值就是歌词文件的地址。

那么再回到我们最初的down文件理一下,这里我们要控制$file变量造成任意文件下载就必须对getfield函数里查询出来的文件下载地址进行控制,这样才可以达到任意文件下载而不是下载正常的歌词文件。

那么这个歌词地址是必须有后台权限,在管理页面添加音乐的时候指定歌词的地址

那么我们现在需要看看,后台这里新增音乐的文件,对填入的歌词文件的地址是否有过滤和替换之类的操作,这时候我们就转向上传的地方看看。

POST /admin.php?iframe=music&action=saveadd HTTP/1.1

Host: 192.168.5.176

User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Content-Type: application/x-www-form-urlencoded

Content-Length: 186

Referer: http://192.168.5.176/admin.php?iframe=music&action=add

Cookie: in_adminid=1; in_adminname=admin; in_adminpassword=c3284d0f94606de1fd2af172aba15bf3; in_permission=1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9

Connection: close

Upgrade-Insecure-Requests: 1

in_name=1&in_color=&in_classid=2&in_specialid=0&in_uname=admin&in_singerid=0&in_best=0&in_grade=3&in_points=0&in_tag=1&in_audio=1&in_cover=1&in_lyric=1&in_text=1&form2=%E6%8F%90%E4%BA%A4

请求的是admin.php文件 那我们看看这个admin.php

$iframe = !empty($_GET['iframe']) && in_array($_GET['iframe'], $frames) ? $_GET['iframe'] : 'login';

include_once 'source/admincp/module/'.$iframe.'.php';

随后这两行 通过get方式接受的iframe参数,来决定包含的文件的地址,

我们上面点击新增歌曲的数据包接受的参数是iframe=music&action=saveadd ,

那我们继续跟进,看看'source/admincp/module/music.php文件是否有我们上传代码

可以看到文件开头有个通过SafeRequest函数接收action参数的,看看这个函数

这个函数只是对接收的参数进行trim、addslashes和htmlspecialchars等字符转义、实体转义等过滤,这种过滤一般都是可绕过的。

接着回到music.php 寻找上传的相关代码

在music.php文件里往下翻可以到通过switch语句来选择执行的函数。我们提交的参数是

POST /admin.php?iframe=music&action=saveadd HTTP/1.1

就是调用saveadd这个函数 ,往下翻找到这个函数

$in_lyric = checkrename(SafeRequest("in_lyric","post"), 'attachment/music/lyric');

可以看到这行是对我们填写的歌词地址进行操作,然后通过下面数据库insert语句将歌词地址写入数据库。我们还需要看看这个checkrename做了什么

可以看到这里的cheackrename函数就是对传入的地址进行正则匹配然后替换成统一目录,并没有对传入的地址字符串本身进行任何过滤和限制,也就是说我们可以写任意的地址,配合网站首页的下载漏洞就造成了任意文件下载漏洞。

0x02漏洞利用

比如config.inc.php文件的物理路径为:

C:\phpStudy\PHPTutorial\WWW\source\system\config.inc.php

由于”\”会被过滤可使用”/”替换绕过

综合起来最终的payload为:

C:/phpStudy/PHPTutorial/WWW/source/system/config.inc.php

代码审计-(Ear Music).任意文件下载漏洞的更多相关文章

  1. 【代码审计】ThinkSNS_V4 任意文件下载漏洞分析

      0x00 环境准备 ThinkSNS官网:http://www.thinksns.com 网站源码版本:ThinkSNS V4  更新时间:2017-09-13 程序源码下载:http://www ...

  2. 代码审计之Finecms任意文件下载漏洞

    PS:该漏洞已被公布,只是学习.故自己跟着大佬的步伐审计. 文件地址:\controllers\ApiController.php Line 57 public function downAction ...

  3. 【代码审计】XYHCMS V3.5任意文件下载漏洞分析

      0x00 环境准备 XYHCMS官网:http://www.xyhcms.com/ 网站源码版本:XYHCMS V3.5(2017-12-04 更新) 程序源码下载:http://www.xyhc ...

  4. 【代码审计】CLTPHP_v5.5.3后台任意文件下载漏洞分析

      0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...

  5. 【代码审计】EasySNS_V1.6 前台任意文件下载漏洞分析

      0x00 环境准备 EasySNS官网:http://www.imzaker.com/ 网站源码版本:EasySNS极简社区V1.60 程序源码下载:http://es.imzaker.com/i ...

  6. PHP代码审计笔记--任意文件下载漏洞

    在文件下载操作中,文件名及路径由客户端传入的参数控制,并且未进行有效的过滤,导致用户可恶意下载任意文件.  0x01 客户端下载 常见于系统中存在文件(附件/文档等资源)下载的地方. 漏洞示例代码: ...

  7. 任意文件下载漏洞的接口URL构造分析与讨论

    文件下载接口的URL构造分析与讨论 某学院的文件下载接口 http://www.****.edu.cn/item/filedown.asp?id=76749&Ext=rar&fname ...

  8. 代码审计-phpcms9.6.2任意文件下载漏洞

    漏洞文件: phpcms\modules\content\down.php 1.在download函数中对文件的校验部分 首先 if(preg_match('/(php|phtml|php3|php4 ...

  9. ASP代码审计学习笔记 -5.文件下载漏洞

    文件下载漏洞 漏洞代码: <% function download(f,n) on error resume next Set S=CreateObject("Adodb.Stream ...

随机推荐

  1. Small Spring系列一:BeanFactory(一)

    人生如逆旅,我亦是行人. 前言 Spring是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用. 准备 bean-v1.xml配置b ...

  2. java使用FileSystem上传文件到hadoop分布式文件系统配置

    Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://sparkclust ...

  3. Delphi - 调用外部程序并阻塞到外部程序中

    Delphi 调用外部程序并阻塞到外部程序中 背景说明: 前段时间开发一个数据转换的系统,业务逻辑中说明数据需要压缩成.tar.gz格式. 我在Windows系统下采用,先生成批处理文件,然后调用Wi ...

  4. 带你入门SpringCloud统一配置 | SpringCloud Config

    前言 在微服务中众多服务的配置必然会出现相同的配置,如果配置发生变化需要修改,一个个去修改然后重启项目的方案是绝对不可取的.而 SpringCloud Config 就是一个可以帮助你实现统一配置选择 ...

  5. python+selenium一:对浏览器的常规操作

    # 1.打开Firefox浏览器 from selenium import webdriverdriver = webdriver.Firefox()driver.get("https:// ...

  6. Anroid逆向学习从编写so到静动态调试分析arm的一次总结

    Anroid逆向学习从编写so到静动态调试分析arm的一次总结 一.前言 最近跟着教我兄弟学逆向这篇教程学习Android逆向,在第七课后作业反复折腾了好几天,正好在折腾的时候对前面的学习总结一波,动 ...

  7. Day 2 总结

  8. Tcloud 云测平台-使用介绍

    Tcloud使用介绍 前端github地址:https://github.com/bigbaser/Tcloud后端github地址:https://github.com/bigbaser/Tclou ...

  9. Recovery启动流程(2)---UI界面【转】

    Recovery启动流程系列文章把recvoery目录下文件分成小块讲解,最后再以一条主线贯穿所有的内容.这篇文章主要讲解Recovery-UI的相关内容. 我们知道,当我们通过按键或者应用进入rec ...

  10. 睡梦中被拉起来执行Spring事务

    梦中惊醒 在Tomcat的线程池里,有这样一个线程,自打出生后,从来不去干活儿,有好多次走出线程池“这座大山”去看世界的机会,都被他拱手让给了弟兄们. 弟兄们给他取了个名字叫二师兄.没错,好吃懒做,饱 ...