Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Таинственный баг в скрипте, не дырка.


Автор: SIMarOK 13.10.2005, 19:01
Есть скрипт, назовем его merch.php, в нем выполняются функции выбора различных вариантов и форма отправки пост запроса на удаленный сервер, а так же есть инклуд в файл, назовем его md5.php, в котором выполняется рандом числа($key) и определение от мат. вычисления определенного слова, к примеру $slovo, а также получаем число, $chis, все эти данные шифруются в md5 код, а именно $hash=md5($key, $chis, $slovo); и после чего все это записывается в мускул, а именно $key, $chis, $slovo, $hash. И после чего в вызывающим файле высвечивается этот md5( переменная $hash). Фишка в том, что не зная $key, узнать слово( а их всего 2) нельзя, ключ выдается после определенного действия альфа. Так вот, человек, назовем его хацкером, узнает нужны md5, с нужным словом, до совершения действия альфа, но как он это делает...

По логам вижу что он просто рефрешит файл merch.php раз десять( при этом как я и говорил ведется запись в дб ), после чего выбирает нужные поля в дб, с нужными md5, и совершает действие альфа только с ними...Никаких пост запросов к файлу он не отправляет, по логам апача видно что он запускает только этот файл, к другим не обращается. Проверив логи сервера панель что доступ к скриптам и аккаунту он не имеет, т.е. в мускул он не заходит...Расшифровать md5 тоже не реально...В скриптах дыр нету.

Не знаю что и думать....мистика? может кто знает в чем дело? помогите пожалуйста...

Автор: Mal Hack 13.10.2005, 19:28
Ну показывай код, будем смотреть...

Автор: SIMarOK 13.10.2005, 20:38
код то тут причем, дело не в коде.

Автор: Mal Hack 13.10.2005, 20:57
SIMarOK дело в коде по любому, иначе бы глюк мог быть один или два раза, не больше.

Автор: Guest 13.10.2005, 22:13
файл merch.php
Код

<?
if ($one <> '') {
$stav = "0.05";
$p=31131231;
}
elseif ($two <> '') {
$stav = "0.10";
$p=2121212;
}
include "md5.php";
echo '
<FORM action=https://tvo-tvo.com method=post name=veshe>
<center>
<input type=hidden name=stav value="'; echo $stav; echo '">
<input type="hidden" name="p" value="'; echo $p; print '">
<input type=hidden name=kod value="'; echo $hash; echo '">
 <INPUT name="submit2" type=submit class=submit2 value="Далее, на оплату">
<p class=text2> <b>md5-код:</b>
';
echo "$hash";


файл md5.php
Код

$key = rand(1,1003417843333333333);
$ran = rand(1,2);

if($ran == 1)
{
$slovo = "da";
}
if($ran == 2)
{
$slovo = "net";
}

$hash = md5($key.$slovo.$stav);

$que=@mysql_query ("SELECT * FROM `befo` ORDER BY `ID` DESC"); 
$ida = mysql_num_rows($que);
$id = $ida+1;
$ok=@mysql_query ("INSERT INTO befo values ('$id','$slovo','$key','$ran','$hash')");


Вот и весь код, но дело не в коде как я думаю. есть лишь наверно какой-то способ перехвата данных...

Автор: SIMarOK 13.10.2005, 22:17
это был я....

Автор: Mal Hack 13.10.2005, 22:25
1. mt_rand
2. А что мешает авто_инкренент на таблицу поставить, чтобы выкинуть один запрос и не делать $id = ... ??
3. != - не равно, а не <>
(вот тут и ошибка скорее всего.)

Автор: SIMarOK 13.10.2005, 22:26
и хацкер из за этого <> может просмотреть базу или ключ? но как?
Добавлено @ 22:26
Нужен именно id, он там используется в скрипте
Добавлено @ 22:30
Опишу его действия: 1) Обновляет файл merch.php раз 10-20, примерно 1 обновление приходится на 1 секунду, т.е. за это время не возможно скопировать сгенерировавшийся md5, значит он уже потом все что получилось просматривает и выбирает что нужно.
2) Уходит на минут 5-10, для обработки очевидно. При этом никаких конектов с сервером нет.
3) Приходит уже после совершения операции альфа, т.е. уже указав в коде, нужный md5( очевидно с харды переходит).

Автор: Mal Hack 13.10.2005, 22:35
Цитата(SIMarOK @ 13.10.2005, 23:26)
и хацкер из за этого <> может просмотреть базу или ключ? но как?

Просто в таком случае у тебя переменная $stav не получает значения.

ЗЫ: Я тут че-то тупить начал. А суть проблемы в том, что кто-то данные берет или что? Сорри, день тяжелый был..

Автор: SIMarOK 13.10.2005, 22:37
Суть в том, что к примеру нужны те md5 в которых зашифровано слово da, и он узнает их...как я сам не знаю...
Добавлено @ 22:40
Цитата(Mal @ 13.10.2005, 22:35)
Цитата(SIMarOK @ 13.10.2005, 23:26)
и хацкер из за этого <> может просмотреть базу или ключ? но как?

Просто в таком случае у тебя переменная $stav не получает значения.

ЗЫ: Я тут че-то тупить начал. А суть проблемы в том, что кто-то данные берет или что? Сорри, день тяжелый был..

значения передаются...разве тут дырка есть?

Автор: Mal Hack 13.10.2005, 22:53
Цитата(SIMarOK @ 13.10.2005, 23:37)
значения передаются...разве тут дырка есть?

Код

<?php

$one = "";
$two = "";
$p = 0;
if ($one <> '') {
$stav = "0.05";
$p=31131231;
}
elseif ($two <> '') {
$stav = "0.10";
$p=2121212;
}

print $stav . "<br>" . $p;

?>



Цитата(SIMarOK @ 13.10.2005, 23:37)
Суть в том, что к примеру нужны те md5 в которых зашифровано слово da, и он узнает их...как я сам не знаю...

Заюзай mt_rand(); Это раз. два. В принципе можно раскрыть md5, т.к. в нем коллизию нашли.
Попробуй сделать тоже самое, но через хэш sha1();

Автор: SIMarOK 13.10.2005, 22:58
пасибо. Коллизию?

Автор: Mal Hack 13.10.2005, 23:00
Цитата(SIMarOK @ 13.10.2005, 23:58)
Коллизию?

http://forum.vingrad.ru/index.php?showtopic=45102&view=getnewpost

Автор: SIMarOK 13.10.2005, 23:05
А md5 от sha1 многим отличается?, можно как-то изменить, чтобы коллизия стала другой?
Добавлено @ 23:10
Но если знание коллизии сокращает только на 8 часов подбора, значит это тоже нето, т.к. он это делает не более чем за 5 минут
Добавлено @ 23:13
Цитата(Mal @ 13.10.2005, 22:53)

Код

<?php

$one = "";
$two = "";
$p = 0;
if ($one <> '') {
$stav = "0.05";
$p=31131231;
}
elseif ($two <> '') {
$stav = "0.10";
$p=2121212;
}

print $stav . "<br>" . $p;

?>


С этим кодом вовсе перестало функционировать, вместо подстановки теперь передаются начальные значения $one = "";
$two = "";
$p = 0;

но дело не в этом...

Автор: Mal Hack 13.10.2005, 23:18
Цитата(SIMarOK @ 14.10.2005, 00:05)
можно как-то изменить, чтобы коллизия стала другой?

Коллизия - читай баг.

Цитата(SIMarOK @ 14.10.2005, 00:05)
А md5 от sha1 многим отличается?

Это два разных алгоритма хэширования. Заменяй и не парься.

Автор: SIMarOK 13.10.2005, 23:20
т.е. если я только md5() заменю на sha1() то все, уже не сможет найти?
Добавлено @ 23:20
ок, спасибо, попробую

Автор: Mal Hack 13.10.2005, 23:20
Цитата(SIMarOK @ 14.10.2005, 00:05)
С этим кодом вовсе перестало функционировать, вместо подстановки теперь передаются начальные значения $one = "";

Я тебе пример показад при каких условиях у тебя не доходят нужные данные.

Автор: SIMarOK 13.10.2005, 23:21
Только если будет видно на сайте что это sha1, то он опять сможет узнавать?

Автор: Mal Hack 13.10.2005, 23:28
Цитата(SIMarOK @ 14.10.2005, 00:21)
Только если будет видно на сайте что это sha1, то он опять сможет узнавать?

1. Как он увидит?
2. В ША1 нет таких коллизий диких вроде... Почитай про криптографию...

Автор: SIMarOK 14.10.2005, 06:24
Но он же не записывает, при обновлении страницы, получившиеся md5, а только потом все просматривает, за 0.5-1 секунду это не возможно сделать...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)