Передача целого числа в 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×1012333333333333345577788890e434041524824285414215559233446
= 0×10434041524824285414215559233446
Из математики начальной школы мы знаем, что все, что умножается на 0, равно 0, что означает, что оба числа равны 0.
Все входные данные представлены в $_GET
или $_POST
суперглобальные объекты имеют строковый тип. Благодаря системе манипулирования типами PHP обе строки обрабатываются как числа с плавающей запятой, записанные в научной нотации, и при приведении к типу float они обе равны 0.