通过url将整数传递给php$\u GET

通过url将整数传递给php$\u GET,php,type-conversion,ctf,Php,Type Conversion,Ctf,所以我正在做一些CTF,其中一个挑战是php类型的杂耍。代码看起来像这样 if($\u GET['var1']==hash('md4',$\u GET['var1'])) { //打印标志 } 所以我80%确定我需要传递一个整数,这样它才是真的,但我能操纵的只是url。我尝试使用python请求来完成这项工作,但仍然失败 导入请求 url='1〕http://example.com' params=dict(var1=0) r=requests.get(url=url,params=param

所以我正在做一些CTF,其中一个挑战是php类型的杂耍。代码看起来像这样

if($\u GET['var1']==hash('md4',$\u GET['var1']))
{
//打印标志
}
所以我80%确定我需要传递一个整数,这样它才是真的,但我能操纵的只是url。我尝试使用python请求来完成这项工作,但仍然失败

导入请求
url='1〕http://example.com'
params=dict(var1=0)
r=requests.get(url=url,params=params)

php是否会在特殊情况下将传入GET数组的变量视为int?或者有其他方法可以做到这一点?

这个CTF的答案可以在这里找到

一般的想法是查找一个以
0e
开头的值,其哈希值也以
0e
开头。该页面给出了一个
0e00133333334557778889
的示例,该示例生成的哈希值为
0e430451524824285414215559233446

这种符号称为科学符号。要理解这种类型的杂耍为什么有效,你需要理解这两个数字是什么。如果我们把科学记数法转换成十进制,这一点就显而易见了

0E001233333334557778889
=0×10123333333333455778889
0e434041524824285414215559233446
=0×104340411524824285414215559233446

从小学数学中我们知道,任何乘以0的东西都是0,这意味着两个数字都是0

$\u GET
$\u POST
超全局中提供的所有输入都是字符串类型。
由于PHP的类型杂耍系统,两个字符串都被视为用科学记数法编写的浮点数,当转换为浮点时,它们都等于0

也许只有我一个人,但什么是CTF?除非发生冲突,
$\u-GET['var1']
不能等于
hash('md4',$\u-GET['var1'])
。我猜@Ibu-CTF就是捕获标志。此外,也有可能出现这种情况。假设0的md4散列为ea5698173fc6fdbe30a9af462b9fc847。在php中,如果比较0和字符串,如果字符串不以int开头,它将始终返回true。您是否尝试过不传递任何内容?这应该给你两边的空值。