<?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-18 16:06:11
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){$num = $_GET['num'];if($num==="4476"){die("no no no!");}if(intval($num,0)===4476){echo $flag;}else{echo intval($num,0);}
}
intval($var,$base),其中var必填,base可选,这里base=0,则表示根据var开始的数字决定使用的进制: 0x或0X开头使用十六进制,0开头使用八进制,否则使用十进制。 这里===表示类型和数值必须相等,我们可以使用4476的八进制或十六进制绕过检测。 paylod:num=010574或num=0x117c
可以使用科学计数法进行绕过 ?num=4476.0 /** intval('4476.0')=4476 小数点
intval('+4476.0')=4476 正负号 intval('4476e0')=4476 科学计数法 intval('0x117c')=4476 16进制 intval('010574')=4476 8进制 intval(' 010574')=4476 8进制+空格 **/
有关这个函数intval(str,int)的讲解: 关于他的使用,当你使用 intval($_GET['num'], 0) 时,PHP 将对字符串 4476# 进行整数转换,PHP 的 intval 函数会从字符串的开始部分提取有效数值,直到遇到非数字字符就停止了,所以当你传入4476的时候,只要在其后面加入特殊符号的url编码值即可绕过 示例:?num=4476%23 ?num=4476%09 等等