php - 通过 url 将整数传递给 php $_GET

标签 php type-conversion ctf

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

if($_GET['var1'] == hash('md4', $_GET['var1']))
{
//print flag
}

所以我 80% 确定我需要传入一个整数,所以它会是真的,但我能操纵的只是 url。我尝试使用 python request 来做,但还是失败了。

import requests
url = 'http://example.com'
params = dict(var1=0)
r = requests.get(url=url, params=params)

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

最佳答案

可以在此处找到此 CT​​F 的答案 https://medium.com/@Asm0d3us/part-1-php-tricks-in-web-ctf-challenges-e1981475b3e4

一般的想法是找到一个以 0e 开头的值。它的哈希值也以 0e 开头.页面给出了0e001233333333333334557778889的例子产生 0e434041524824285414215559233446 的哈希值

这种记数法称为科学记数法。要了解为什么这种类型的杂耍有效,您需要了解这两个数字是什么。如果我们将科学记数法转换为十进制,那就很明显了。
0e001233333333333334557778889 = 0×1012333333333333345577788890e434041524824285414215559233446 = 0×10434041524824285414215559233446

从小学数学我们知道,任何乘以 0 的结果都是 0,这意味着两个数字都是 0。
$_GET 中提供的所有输入或 $_POST superglobals 是字符串类型。
多亏了 PHP 的类型杂耍系统,两个字符串都被视为用科学记数法编写的浮点数,当转换为浮点数时,它们都等于 0。

关于php - 通过 url 将整数传递给 php $_GET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56487143/

相关文章:

Jinja2 SSTI 过滤器旁路

php - MySQL数据库: high performance random lookups

php - ExpressionEngine 不关闭 MySQL 和 Apache 连接

type-conversion - 是否可以使用 VALUE 运算符将表数据转换为类似类型

android - 将数组缩减为单个整数会导致类型错误

javascript - Ajax分页链接定制

php - Xampp 上的 Symfony 开发速度非常慢,我该怎么办?

c# - 将字符串格式化为日期时间

python - 隐藏 Python 测验的答案