文件安全-文件包含-动态调试-xhcms

1.安装好xhcms,查看index.php文件。



2.存在include关键字,可以存在文件包含漏洞。看上面代码的逻辑,对r的传参添加魔术引号,如果r没有值,则变量action默认为index,否则就为r的值。先看下file文件夹有哪些文件,随便选择一个进行传参。





当给r传参为download时,直接就跳转到了下载界面,并且是以php文件解析。所以如果files文件下有一个txt文件,也会按照php文件解析执行。

3.在files文件下新建一个1.txt.php文件,里面写上phpinfo函数。



4.给r传参1.txt,phpinfo函数就被执行了。



5.这个文件不一定要放在files目录下,可以放在任意地方,通过目录穿透来进行访问。例如在根目录下创建shell.php文件。



6.给r传参"../shell",phpinfo函数就会被执行。

文件安全-文件删除-关键字搜索-zzzcms

1.跟文件删除有关的函数为unlink,所以全局搜索unlink关键字。



2.可以看到del_file函数中有unlink函数,并且会删除变量file的文件,如果要造成任意文件删除,就得看变量file能不能被我们控制。所以先查看哪里调用了del_file函数。



3.可以看到save.php文件中的delfile函数调用了del_file函数,并且变量file是由我们的传参决定的,所以此处肯定存在任意文件删除。接下来就看哪里调用delfile函数了。



4.可以看到还是在save.php文件中会调用delfile函数,只需要让变量act的值为delfile即可,这里变量act是由我们控制的。所以就可以构造利用链了,访问save.php,对变量act进行get传参,赋值为delfile,再对变量path进行post传参,赋值为我们想要删除的文件路径。但是这里需要注意,在delfile函数中做了一定的过滤。文件路径中必须带有upload、template、runtime、backup四个关键字中的一个才能进入if循环执行删除文件。



5.先在template目录下新建一个1.txt文件。



6.这里还需要注意一点,必要要进入后台登录之后才能触发,如果没有进行登录,则会返回false,下面的代码就不会执行了。



7.但当给path传参"../template/1.txt",发现文件并没有删除,有可能是路径出现了问题。所以在代码中将路径进行输出。





8.说明$_SERVER['DOCUMENT_ROOT']的值为"D:/phpStudy/PHPTutorial/WWW",重新构造路径。



发现template目录下的1.txt被删除了。



9.可以利用该漏洞删除install目录下的install.lock文件,重新安装cms,就可以执行很多操作了。

文件安全-文件下载-功能点定位-earmusic

1.由于文件下载没有特定的函数,通过搜索关键字没什么用,只能根据应用的功能去尝试。



2.抓包,看下下载功能触发的是哪段代码。

点击查看代码
GET /template/default/source/audio.php?id=13 HTTP/1.1
Host: 127.0.0.1:8086
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Referer: http://127.0.0.1:8086/index.php/music/13/
Cookie: in_userid=1; in_username=admin; in_userpassword=49ba59abbe56e057
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1

3.找到audio.php文件,看下源代码。



4.看到了readfile函数,这就是一个下载功能的函数。$file是通过geturl函数和$row['in_audio']获得。查看下geturl函数。

geturl函数位于/source/system/function_common.php文件中



geturl函数会对$file进行判断,如果符合正则表达式的判断,就会对url进行拼接;如果file为空,也会根据不同情况进行url拼接;如果都不是,就会把file直接赋值给url,即你传入什么,url就为什么。

再看下$row['in_audio'],$row是通过SQL查询语句获得的,看下music表的结构。



那$row['in_audio']取的就是music表中的in_audio字段的值。

SQL查询语句是根据$id来取值的,$id是通过intval和SafeRequest函数对get传参的id处理后得到。intval函数用于获取变量的整数值。SafeRequest函数位于/source/system/function_common.php文件中。



所以如果能够控制music表中in_audio字段的值,就可以实现任意文件下载。所以去查找哪里可以修改in_audio的值。发现add.php文件中可以修改。



根据文件路径source/user/music/add.php,应该是跟添加音乐相关的功能。找到对应界面,查看源代码,搜索in_audio关键词,发现对应的是音频地址。



5.尝试上传一个音乐,看看数据库是否存在。





证实音频地址的内容对应数据库中的in_audio字段。

6.在audio.php文件的同目录下新建一个1.php文件,尝试去下载它。



成功下载,但是文件中的内容不一致。



7.抓包看一下,发现是能够读到文件内容的,也不知道是什么原因。



8.在实战中,会去下载一些数据库的相关配置文件,数据库配置文件位于/source/system/config.inc.php.



构造payload。



下载,发现文件名变成了Safety filter,数据库中in_audio字段也变成了Safety filter。



看来是做了过滤。搜索Safety filter关键字,看下是哪里做了过滤。是/source/system/function_common.php文件中的checkrename函数做的过滤.



checkrename函数通过正则表达式进行匹配,过滤了"./"等,所以可以通过写绝对路径来绕过。



下载,成功读取到配置文件。

CNVD拿1DAY-删除&读取&写入-梦想CMS

任意文件删除漏洞

先上cnvd官网,查找关于梦想CMS相关的漏洞,这里有一个任意文件删除漏洞,查看详情。



漏洞点位于后台Ba.cl.php文件,上梦想CMS官网下载源码,看下后台文件有哪些是Ba开头的文件。



只存在两个Ba开头的文件。又由于是文件删除漏洞,所以可以搜索unlink关键字。在BackdbAction.class.php文件中找到一处。



$dir由ROOT_PATH、file/back/、$filename进行拼接得到,如果$filename可以被控制就可以实现任意文件删除。看下哪里调用了delOne函数。



有两处地方调用了,先看下第一处地方delbackdb函数。$filename由get传参得到,如果该文件存在就会被删除。在file/back目录下创建一个1.txt文件。



访问BackdbAction.class.php文件,调用delbackdb函数,给filename传参1.txt。





已经被删除了。如果要删除其他目录的文件,利用目录穿透实现,尝试删除install目录下的install_ok.txt文件。



删除成功。



任意文件读取漏洞&写入漏洞

看下官网通报。



由于是个低危漏洞,大概率存在于后台。搜索文件读取的函数(file_get_contents、fopen等)。



查找到一处变量可控的,如果读到内容就返回,没有读到内容就提示。看哪里调用了getcon函数。



只有在editfile函数中调用了,会读取"$this->config['template'].$dir"对应文件的内容。先看$this->config['template']对应的是什么。



$dir是由get传参获得,如果想要读取template目录下的文件不需要目录穿透,如果要读取其他目录下的文件就需要目录穿透。

尝试读取根目录下的admin.php



成功读取。



尝试读取inc/db.inc.php文件。





读取完之后,在文件里随便写点东西后提交。



再看源代码中的db.inc.php文件,发现我们写的内容被写到了源代码中。



这个功能还是跟editfile函数挂钩,再看editfie函数,确实存在修改文件的功能。



看下put函数的定义。



调用了file_put_contents函数,该函数就是用来写文件的,所以put函数就是一个写文件函数。

"$this->config['template'].$dir.'/'.$_POST['filename']"是写入的文件名,"string::stripslashes($_POST['temcontent'])"是写入的内容。如果temcontent传参是有值的,就会执行写入操作。尝试向1.php文件中写入phpinfo函数



查看template目录下,成功生成1.php。

PHP项目&MVC文件安全&上传&包含&下载&删除&读取等的更多相关文章

  1. MVC文件上传与下载

    MVC文件上传与下载 MVC文件上传与下载 想想自己从毕业到工作也有一年多,以前公司的任务的比较重,项目中有的时候需要用到什么东西都去搜索一下,基础知识感觉还没有以前在学校中的好.最近开始写博客,真的 ...

  2. 通过JAVA对FTP服务器连接,上传,下载,读取,移动文件等

    记录一次对FTP服务器文件内容 通过Java程序对FTP服务器文件处理:连接,上传,下载,读取,移动文件等. 需求描述:今天接到一个任务,在Java项目中,读取FTP服务器上的一些文件,进行一些业务操 ...

  3. web项目的文件上传和 下载

    文件上传和下载在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用Java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件 ...

  4. MVC文件上传和下载

    1.单个文件上传 HTML写法:form表单中加enctype="multipart/form-data" <form aciont="" method= ...

  5. spring mvc文件上传和下载

    首先要导入2个包(上传文件包和io的包)

  6. C# 文件操作(上传,下载,读取,写入)

    1. 通过byte[]数据下载文件(这种方法可用于以开放Api的形式传递文件内容) public void FileDownLoadByByte(byte[] fileData, string fil ...

  7. 简单的使用git克隆上传创建下载删除

    首先我们下载个git 官网:https://git-scm.com/ 我这里下的是64-bit windows setup 下载完成后安装: 一直下一步就好 安装完成后进行打开! 现在我们需要去官网注 ...

  8. ubuntu 16 搭建只能上传不可下载删除ftp服务

    安装 VSFTPD,(建议使用FileZill测试,报错能看到原因) 如果使用window文件管理连接,要注意下图的设置 使用 apt-get 安装 vsftpd sudo apt-get insta ...

  9. 0062 Spring MVC的文件上传与下载--MultipartFile--ResponseEntity

    文件上传功能在网页中见的太多了,比如上传照片作为头像.上传Excel文档导入数据等 先写个上传文件的html <!DOCTYPE html> <html> <head&g ...

  10. .net mvc + layui做图片上传(二)—— 使用流上传和下载图片

    摘要:上篇文章写到一种上传图片的方法,其中提到那种方法的局限性,就是上传的文件只能保存在本项目目录下,在其他目录中访问不到该文件.这与浏览器的安全性机制有关,浏览器不允许用户用任意的路径访问服务器上的 ...

随机推荐

  1. STM32CubeMX教程25 PWR 电源管理 - 睡眠、停止和待机模式

    1.准备材料 开发板(正点原子stm32f407探索者开发板V2.4) STM32CubeMX软件(Version 6.10.0) 野火DAP仿真器 keil µVision5 IDE(MDK-Arm ...

  2. TypeScript数组类型定义

    第一种方式:可以在元素类型后面接上 [],表示由此类型元素组成的一个数组: var arr: number[] = [1, 2, 3]; //数字类型的数组 var arr2: string[] = ...

  3. 如何在centos7中完全卸载Python3

    如何在centos7中完全卸载Python3?根据查到的资料,主要就是卸载,然后删除一些软连接删除干净,逻辑很简单,贴一些具体的操作代码,记录下来 . 卸载Python3的步骤 #卸载python3 ...

  4. lua开发和调试环境

    Lua开发环境搭建 Lua官网提供源码下载需要自己编译,Lua官网:https://www.lua.org/ftp/ lua for windows.exe(占二十多MB那个) 目前在网络上没有找到 ...

  5. vue 进阶学习(二):node.js、npm、webpack、vue-cli

    node.js.npm.webpack.vue-cli 前言:主要对插件的描述,安装,卸载.使用以及注意点 1 node.js 说明:是一个基于 Chrome V8 引擎的 JavaScript 运行 ...

  6. 【编写环境二】python库scipy.stats各种分布函数生成、以及随机数生成【泊松分布、正态分布等】

    平时我们在编写代码是会经常用到一些随机数,而这些随机数服从一定的概率分布. 1.泊松分布.正态分布等生成方法 1.1常见分布: stats连续型随机变量的公共方法: *离散分布的简单方法大多数与连续分 ...

  7. 谁更适合搭配甜点显卡?i7-13700KF、锐龙7 7800X3D对比:游戏相当 生产力Intel强了50%

    一.前言:如果搭配2000元甜点显卡 i7-13700KF和锐龙7 7800X3D谁更有性价比? 现在AMD最受欢迎的处理器无疑是拥有96MB三级缓存的锐龙7 7800X3D,这是一颗专为游戏而生的处 ...

  8. Umi配置路由

    一.Umi路由的概念 在 Umi 中,你可以在 config/config.js 文件中使用 routes 属性来配置路由.routes 属性是一个数组,每个元素都表示一个路由对象.每个路由对象都包含 ...

  9. 基本数据类型(primitive type)

    数据类型 数据类型分为基本数据类型(primitive type)和引用数据类型(reference type) 基本数据类型(primitive type) 数值类型 整数类型 浮点类型 字符类型 ...

  10. 一文详解应用安全防护ESAPI

    本文分享自华为云社区<应用安全防护ESAPI>,作者: Uncle_Tom. 1. ESAPI 简介 OWASP Enterprise Security API (ESAPI)是一个免费. ...