ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

31.07.2009, 11:07
|
|
Участник форума
Регистрация: 07.08.2008
Сообщений: 281
Провел на форуме: 3300342
Репутация:
165
|
|
Сообщение от cr0w
SeNaP
Скорее всего там пхп?
Примерчик:
Код:
<?php
if ( $_GET[pass] == '00' ) echo "В первом случае пароль верный. ";
if ( $_GET[pass] === '00' ) echo "И во втором случае тоже верный!";
?>
Если передать скрипту в параметре 'pass' любое колличество нулей, то пароль в первом if'e всегда будет верный. Во втором - только при двух нулях.
Т.е. в том скрипте некорректно реализована проверка верности пароля. А о разнице между '==' и '===' стоит почитать в док-ии по PHP. (:
Да, один ноль не прокатыват, токое ощущение, что просто его скрипт не замечает, просит ввести пароль.
Код:
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
Что то я вообще запутался
Последний раз редактировалось SeNaP; 31.07.2009 в 11:13..
|
|
|

31.07.2009, 11:39
|
|
Постоянный
Регистрация: 03.06.2009
Сообщений: 385
Провел на форуме: 3178262
Репутация:
389
|
|
Код:
if ($_GET[pass] == 00)
В этом случае $_GET[pass] при водится к строковому типу и сравнивается с 00, которое тоже приводится к строковому типу
Код:
'00' равно 00
00 равно 00
Код:
if ($_GET[pass] === 00)
В этом случае $_GET[pass] сравнивается с 00 c учётом типов
Код:
'00' не равно 00
00 равно 00
Если передать скрипту в параметре 'pass' любое колличество нулей, то пароль в первом if'e всегда будет верный. Во втором - только при двух нулях.
0 - универсальный => использование символов отличных от нуля даёт нормальный результат
Последний раз редактировалось FireFenix; 31.07.2009 в 11:47..
|
|
|

31.07.2009, 11:48
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
Код:
Что ты даешь, там нету способов внедрения шела.
например так:
Код:
https://forum.antichat.ru/showpost.php?p=565927&postcount=8
и причем здесь обязательно именно админка. Переведи для начала что такое "Remote Code Execution"
|
|
|

31.07.2009, 12:24
|
|
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме: 6075534
Репутация:
2731
|
|
Код:
http://moikabriz.ru/uslugi.php?uslugi=5
Инклюдит файл
Код:
http://moikabriz.ru/uslugi/uslugi5
Т.е. в скрипте что-то типа
PHP код:
<?php
include('uslugi/uslugi'.$_GET['id']);
?>
Соответственно
Код:
http://moikabriz.ru/uslugi.php?uslugi=/../uslugi5
должен заинклюдить тот же
Код:
http://moikabriz.ru/uslugi/uslugi5
, но нет - пишет нот фаунд.
Код:
http://moikabriz.ru/uslugi.php?uslugi=/../../index.php
должен заинклюдить индекс, но опять нот фаунд.
|
|
|

31.07.2009, 12:32
|
|
Познающий
Регистрация: 11.09.2008
Сообщений: 99
Провел на форуме: 2753780
Репутация:
585
|
|
SeNaP
Вот еще интересный пример:
Код:
<?php
if ( '000' == '000000' ) echo "Первое условие верно. ";
if ( '00789' == '000000000789' ) echo "Второе условие верно. ";
if ( "00abc" == "0000abc" ) echo "Третье условие верно";
?>
Выведет
Первое условие верно. Второе условие верно.
Т.е. при сравнении оператором '==' строк, состоящих из чисел, предваряемых нулями, нули эти, получается, "отбрасываются". Почему так - я пока не знаю, видимо какая-то фича пхп, постараюсь разобраться в этом.
|
|
|

31.07.2009, 12:36
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
а на
Код:
http://moikabriz.ru/uslugi.php?uslugi=../../../../../../../../../../../../../../etc/passwd
пишет
Код:
Operation not permitted
|
|
|

31.07.2009, 12:48
|
|
Познавший АНТИЧАТ
Регистрация: 15.01.2008
Сообщений: 1,166
Провел на форуме: 2459557
Репутация:
606
|
|
мод секурити или типа того... Бесполезно...
|
|
|

31.07.2009, 13:33
|
|
Reservists Of Antichat - Level 6
Регистрация: 22.01.2007
Сообщений: 616
Провел на форуме: 7452489
Репутация:
1359
|
|
Сообщение от mailbrush
Код:
http://moikabriz.ru/uslugi.php?uslugi=/../uslugi5
должен заинклюдить тот же
Код:
http://moikabriz.ru/uslugi/uslugi5
, но нет - пишет нот фаунд.
Код:
http://moikabriz.ru/uslugi.php?uslugi=/../../index.php
должен заинклюдить индекс, но опять нот фаунд.
*зачеркнуто*
Для начала определись что есть папка, и что есть файл.
Ты пытаешься подняться выше несуществующего файла
*/зачеркнуто*
соре ошибочка.
Ты пытаешься подняться выше несуществующего пути. вот.
Последний раз редактировалось geezer.code; 31.07.2009 в 13:37..
|
|
|

31.07.2009, 15:03
|
|
Members of Antichat - Level 5
Регистрация: 18.02.2008
Сообщений: 1,136
Провел на форуме: 17621293
Репутация:
4915
|
|
Сообщение от cr0w
Т.е. при сравнении оператором '==' строк, состоящих из чисел, предваряемых нулями, нули эти, получается, "отбрасываются". Почему так - я пока не знаю, видимо какая-то фича пхп, постараюсь разобраться в этом.
Строки, при таком сравнении, приводятся интерпритатором к числам, если в них вначале есть числа. Остальное отбрасывается. Посмотри вот так:
if ( 4 == '4abc' ) echo "условие верно. ";
Тоесть по сути ты сравниваешь
1. 0 с 0
2. 789 и 789
3. Нет чисел, тоесть 2 разных строки
Ну а "0" это не совсем число, при таком сравнении. Это у пыха "особенный символ"
if ( 0 == null ) echo "условие верно. ";
if ( 4 == '0004abc' ) echo "условие верно. ";
|
|
|

31.07.2009, 15:48
|
|
Познающий
Регистрация: 11.09.2008
Сообщений: 99
Провел на форуме: 2753780
Репутация:
585
|
|
jokester
Интерпретатор переводит строку к числу, когда у нее первый символ - цифра, если второй операнд - числовой (как в твоем примере). Но я в тех примерах сравнивал по две строки, а не числа со строками.
К тому же, если интерпретатор просто переводит эти строки в числа, то с нулем в начале, он по логике вещей скорее должен был бы считать их восьмеричными числами, но это не так: 0789 - не восьмеричное число.
По сути, скорее всего пхп сравнивает:
'' c '' (пустые строки)
'789' и '789' (именно строки, а не числа)
и строки '00abc' и '0000abc' - при наличии букв нули в строках не убираются, даже если вставить цифры:
Код:
<?php
if ( '0012a' == '000012a' ) echo "Условие верно";
?>
Результатом условия будет false.
add: впрочем, это пока просто мои предоложения - как будет время покопаюсь в сорсах php по этому поводу.
Последний раз редактировалось cr0w; 31.07.2009 в 15:57..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|