
启动容器

来到题目,发现只有一个PHP动画,尝试按F12打开开发者选项/查看页面源代码发现不行,使用快捷键CTRL+SHIFT+I

这里提示了这篇黑暗的秘密,在URL栏上输入

来到全新页面,分析代码,经过POST传递过来的数据会经过intval()函数的检查,符合条件就返回flag,不符合条件就输出“你还未参透奥秘”
这里我们首先需要知道php中intval()函数的作用。
PHP中的intval()函数,主要用于获取变量的整数值
格式:
int intval(mixed $value, int $base = 10):int
$value:需要转换的标量值(数字、字符串、布尔值等)
$base:转换所用的进制(可选,默认为10)。仅在$value是字符串时生效。
如果设置为0,则根据字符串前缀自行判断
0x开头识别为16进制
0b开头识别为2进制,
0开头识别为8进制
常见用法及转换
浮点数截断:直接向下舍弃小数部分,不进行四舍五入
intval(4.2); // 4
intval(4.9); // 4
intval(-4.9); // -4
字符串转换:从字符串左侧开始解析,直到遇到第一个非有效数字字符停止;若开头不是数字则返回0.
intval(“42”); // 42
intval(“42abc”); // 42
intval(“abc42”); // 0
不同进制转换
intval(“1a”, 16); // 26 (16 进制)
intval(“012”, 8); // 10 (8 进制)
intval(“0x1a”, 0); // 26 (自动识别为 16 进制)
布尔与特殊值:
intval(true); // 1
intval(false); // 0
intval(null); // 0
intval([]); // 0 (空数组返回 0,非空数组返回 1)
解题思路:
核心,利用进制特性绕过
先把十进制47转成八进制为:57
在PHP字符串中表示8进制要加上前缀0,即057
由于传递方式使用的是$_POST[‘newstart2025’],所以必须构造POST请求
有以下几种方法
payload构造原理
Intval($answer,0) == 47(base为0时会根据前缀自动识别进制,解析后等于47)
①、使用hackbar构造
选择POST请求方式,URL为题目链接,Body参数默认即可
payload:
newstar2025=057/newstar2025=0x2f

拿到了flag

②、终端curl命令:
curl -X POST -d “newstar2025=057” http://题目URL









