потестил, ну вобщем-то ничего ты с этого не поимеешь, просто почему-то криво обрабатываются пароли состоящие из "0", ни с какими другими символами больше не прокатывает.
SeNaP Скорее всего там пхп? Примерчик: Code: <?php if ( $_GET[pass] == '00' ) echo "В первом случае пароль верный. "; if ( $_GET[pass] === '00' ) echo "И во втором случае тоже верный!"; ?> Если передать скрипту в параметре 'pass' любое колличество нулей, то пароль в первом if'e всегда будет верный. Во втором - только при двух нулях. Т.е. в том скрипте некорректно реализована проверка верности пароля. А о разнице между '==' и '===' стоит почитать в док-ии по PHP.
Что ты даешь, там нету способов внедрения шела. Ответ остается открытым: Как залить шел на mybb имея админку??? все мозга уничтожил (((
Да, один ноль не прокатыват, токое ощущение, что просто его скрипт не замечает, просит ввести пароль. Code: PHP не проверяет равенство типов при двойном равно (==), автоматически приводя их к строковому. Для верного сравнения данных разных типов применяется тройное равно (===). Неправильное использование двойного равно, например, в авторизации, == может обернуться уязвимостью. PHP код: $aaa = 123456; if( '123456' == $aaa ){echo '<br>ok!';}else{echo '<br>no.';} if( '123456' === $aaa ){echo '<br>ok!';}else{echo '<br>no.';} ok! no. (C)Alekt Что то я вообще запутался
Code: if ($_GET[pass] == 00) В этом случае $_GET[pass] при водится к строковому типу и сравнивается с 00, которое тоже приводится к строковому типу Code: '00' равно 00 00 равно 00 Code: if ($_GET[pass] === 00) В этом случае $_GET[pass] сравнивается с 00 c учётом типов Code: '00' не равно 00 00 равно 00 0 - универсальный => использование символов отличных от нуля даёт нормальный результат
Code: Что ты даешь, там нету способов внедрения шела. например так: Code: https://forum.antichat.ru/showpost.php?p=565927&postcount=8 и причем здесь обязательно именно админка. Переведи для начала что такое "Remote Code Execution"
Code: http://moikabriz.ru/uslugi.php?uslugi=5 Инклюдит файл Code: http://moikabriz.ru/uslugi/uslugi5 Т.е. в скрипте что-то типа PHP: <?php include('uslugi/uslugi'.$_GET['id']); ?> Соответственно Code: http://moikabriz.ru/uslugi.php?uslugi=/../uslugi5 должен заинклюдить тот же Code: http://moikabriz.ru/uslugi/uslugi5 , но нет - пишет нот фаунд. Code: http://moikabriz.ru/uslugi.php?uslugi=/../../index.php должен заинклюдить индекс, но опять нот фаунд.
SeNaP Вот еще интересный пример: Code: <?php if ( '000' == '000000' ) echo "Первое условие верно. "; if ( '00789' == '000000000789' ) echo "Второе условие верно. "; if ( "00abc" == "0000abc" ) echo "Третье условие верно"; ?> Выведет Т.е. при сравнении оператором '==' строк, состоящих из чисел, предваряемых нулями, нули эти, получается, "отбрасываются". Почему так - я пока не знаю, видимо какая-то фича пхп, постараюсь разобраться в этом.
а на Code: http://moikabriz.ru/uslugi.php?uslugi=../../../../../../../../../../../../../../etc/passwd пишет Code: Operation not permitted
*зачеркнуто* Для начала определись что есть папка, и что есть файл. Ты пытаешься подняться выше несуществующего файла */зачеркнуто* соре ошибочка. Ты пытаешься подняться выше несуществующего пути. вот.
Строки, при таком сравнении, приводятся интерпритатором к числам, если в них вначале есть числа. Остальное отбрасывается. Посмотри вот так: if ( 4 == '4abc' ) echo "условие верно. "; Тоесть по сути ты сравниваешь 1. 0 с 0 2. 789 и 789 3. Нет чисел, тоесть 2 разных строки Ну а "0" это не совсем число, при таком сравнении. Это у пыха "особенный символ" if ( 0 == null ) echo "условие верно. "; if ( 4 == '0004abc' ) echo "условие верно. ";
jokester Интерпретатор переводит строку к числу, когда у нее первый символ - цифра, если второй операнд - числовой (как в твоем примере). Но я в тех примерах сравнивал по две строки, а не числа со строками. К тому же, если интерпретатор просто переводит эти строки в числа, то с нулем в начале, он по логике вещей скорее должен был бы считать их восьмеричными числами, но это не так: 0789 - не восьмеричное число. По сути, скорее всего пхп сравнивает: '' c '' (пустые строки) '789' и '789' (именно строки, а не числа) и строки '00abc' и '0000abc' - при наличии букв нули в строках не убираются, даже если вставить цифры: Code: <?php if ( '0012a' == '000012a' ) echo "Условие верно"; ?> Результатом условия будет false. add: впрочем, это пока просто мои предоложения - как будет время покопаюсь в сорсах php по этому поводу.
cr0w Он так-же приведёт строки к числу если обе строки состоят только из цифр. add/ Так что вроде всё логично. Это строки, т.к. буквы присутствуют: Code: if ( '0012a' == '000012a' ) echo "Условие верно"; А вот это уже числа: if ( 4 == '4abc' ) // сдесь т.к. один из операндов число if ( '000' == '000000' ) // ну а тут if ( '00789' == '000000000789' ) // всё числа PS Спасибо Qwazar, направил на путь истиный
раз удалил тему мою кто то напишу тут есть XSS спер куки...тока спер я PHPSESSID а с логином и пассом куки не сперлось что это мне дает? можно ли что нибудь с этим сделать?
jokester В целом, ты тут прав. Хотя насчет "логичности" таких преобразований типов можно было бы поспорить. Но в документации такое поведение, вобщем-то, кое-как зафиксировано, т.ч. ресерчить тут вроде как и нечего.