Передача целого числа в php $_GET через URL

Итак, я делаю немного CTF, и одна из проблем связана с жонглированием типа php. Код выглядит примерно так

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

Так что я был на 80% уверен, что мне нужно передать целое число, чтобы оно было правдой, но все, что я могу манипулировать, - это URL. Я попытался использовать запрос Python, но все равно не получилось.

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

Есть ли особый случай, когда php будет обрабатывать передачу переменной в массив GET как int? Или есть другой способ сделать это?

0 ответов

Ответ на этот CTF можно найти здесь https://medium.com/@Asm0d3us/part-1-php-tricks-in-web-ctf-challenges-e1981475b3e4

Общая идея состоит в том, чтобы найти значение, которое начинается с 0e и его хеш также начинается с 0e. На странице приведен пример0e001233333333333334557778889 который производит хэш 0e434041524824285414215559233446

Это обозначение называется научным обозначением. Чтобы понять, почему такое жонглирование шрифтами работает, вам нужно понять, каковы оба числа. Если перейти от научных обозначений к десятичным, это станет очевидным.

0e001233333333333334557778889= 0×101233333333333334557778889
0e434041524824285414215559233446= 0×10434041524824285414215559233446

Из математики начальной школы мы знаем, что все, что умножается на 0, равно 0, что означает, что оба числа равны 0.

Все входные данные представлены в $_GET или $_POSTсуперглобальные объекты имеют строковый тип. Благодаря системе манипулирования типами PHP обе строки обрабатываются как числа с плавающей запятой, записанные в научной нотации, и при приведении к типу float они обе равны 0.

Другие вопросы по тегам