Показать полную графическую версию : [решено] Раскодировать обратно php
Доброго времени суток, вот такая вот задачка: есть кусок кода
# reg
function create_url()
{
$arr = array('a','b','c','d','e','f',
'g','h','i','j','k','l',
'm','n','o','p','r','s',
't','u','v','w','x','y',
'z',
'A','B','C','D','E','F',
'G','H','I','J','K','L',
'M','N','O','P','R','S',
'T','U','V','W','X','Y',
'Z',
'1','2','3','4','5','6',
'7','8','9','0');
$url = "";
for($i = 0; $i < 6; $i++) {
$random = rand(0, count($arr) - 1);
$url .= $arr[$random];
} return $url;
}
if(@$_GET['do']=='reg')
я так понимаю что это кодирует символы - у мну из 12345 получилось 827ccb0eea8a706c4c34a16891f84e7b, так вот мне надо обратно - как ???
из 12345 получилось 827ccb0eea8a706c4c34a16891f84e7b »
Это в результате md5("12345") получается такая строка. К вышеприведённой функции не имеет никакого отношения.
Да ? странно.. а что делает эта функция??
http://ru.wikipedia.org/wiki/Md5 - это про md5.
А если вы о вышеприведённой, то она просто генерирует случайную приставку к URL'у.
Немного уточню ситуевину, есть многопользовательский сниффер (работает с бд mysql) вот выдержка из кода регистрации:
<font color="#6495ED"> Заполните все окна рагистрации<br><br></font>
<tr><td><font color="#6495ED" size="2">Логин:</font></td><td><input type="text" name="user" style="width:150px; height:22px; background:#000000; border:1px solid #00cc99; color:#ffffff;"></td></tr>
<tr><td><font color="#6495ED" size="2">Пароль:</font></td><td><input type="password" name="pass" style="width:150px; height:22px; background:#000000; border:1px solid #00cc99; color:#ffffff;"></td></tr>
<tr><td><font color="#6495ED" size="2">Повтор:</font></td><td><input type="password" name="pass2" style="width:150px; height:22px; background:#000000; border:1px solid #00cc99; color:#ffffff;"></td></tr>
<tr><td><a title="" onclick="javascript:document.images.cap.src='captcha.php'">
<img id="cap" src='captcha.php'></a></td><td><input type="text" name="cap" style="width:150px; height:22px; background:#000000; border:1px solid #00cc99; color:#ffffff;"></th></td></tr>
<tr><td><input type="submit" value="ок" id="reg" style="width:56px; height:25px;"></td></tr>
</form>
<?
if(isset($_POST['user']) && isset($_POST['pass']) && isset($_POST['pass2']) && isset($_POST['cap'])) {
if($_POST['user']!=='')
if($_POST['pass']==$_POST['pass2']) {
if($_SESSION['cap_code']==null) {
echo '<meta http-equiv="Refresh" content="1; url=index.php?do=reg "/>';
} elseif($_POST['cap']=="") {
echo 'Введите код';
}
elseif($_POST['cap'] == $_SESSION['cap_code']) {
$user=mysqli_real_escape_string($c,htmlspecialchars($_POST['user']));
$q=mysqli_query($c,"SELECT * FROM `sniffuser` where user='$user'");
if(mysqli_num_rows($q)>0) {
echo 'Пользователь с таким именем <br>уже зарегистрирован';
} else {
$pass=md5($_POST['pass']);
$url=create_url();
do {
$q = mysqli_query($c,"SELECT * FROM `sniffuser` WHERE url = '$url'");
}
while(mysqli_num_rows($q)>0);
mysqli_query($c,"INSERT INTO sniffuser(url,user,pass) VALUES('$url','$user','$pass')");
echo 'Registration complete. Now you please be moved ..';
echo '<meta http-equiv="Refresh" content="1; url=index.php "/>';
}
}
} else {
echo 'Пароли не совпадают';
}
}
}
вот что в базе на выходе
-- Дамп данных таблицы `sniffuser`
--
INSERT INTO `sniffuser` (`id`, `url`, `user`, `pass`, `email`, `emailon`, `image`, `header`, `headeron`) VALUES
(2, 'POfpg4', 'user', '827ccb0eea8a706c4c34a16891f84e7b', '', 0, '', '', 0);
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
2-номер п\п
POfpg4-случайная приставка к URL'у »
user-логин
827ccb0eea8a706c4c34a16891f84e7b-подозреваю что пароль ....(но в нормальном виде пароль = 12345)
где тут пароль или как сделать что бы он тут отображался(нормально)???
а вот авторизации
<a href="index.php?do=reg"><font color="#6495ED">Регистрация</font></a><br><br>
<form action="" method="post">
<input type="text" name="user" style="width:150px; height:22px; background:#000000; border:1px solid #00cc99; color:#ffffff;" value="<?=htmlspecialchars(strip_tags($_POST['user']))?>"><br><br>
<input type="password" style="width:150px; height:22px; background:#000000; border:1px solid #00cc99; color:#ffffff;" name="pass"><br><br>
<input type="submit" value="войти" style="width:150px; height:25px; border:1px solid #00cc99; color:#ffffff;">
</form>
<?
if (isset($_POST['user']) && isset($_POST['pass'])) {
$user = mysqli_real_escape_string($c,$_POST['user']);
$pass = md5($_POST['pass']);
$query = "SELECT * FROM `sniffuser` WHERE `user`='{$user}' AND `pass`='{$pass}' LIMIT 1";
$sql = mysqli_query($c,$query) or die(mysql_error());
if (mysqli_num_rows($sql) == 1) {
$row = mysqli_fetch_array($sql);
$_SESSION['hash'] = $row['url'];
$_SESSION['user']= $row['user'];
echo '<meta http-equiv="Refresh" content="1; url=index.php?do=set "/>';
} else {
echo 'Проверте правильность запонения полей';
}
Ну очевидно, что в поле pass хранится пароль. Обычно его и хэшируют в md5. Поскольку md5 - односторонняя функция, восстановить можно либо перебором, либо с использованием готовых таблиц паролей, где хранятся пары "пароль" - "хэш" (собственно, из такой онлайновой таблицы я и взял обратное восстановление).
можно по подробнее
восстановить можно либо перебором, либо с использованием готовых таблиц паролей »
где хранятся пары ?
"пароль" - "хэш" »
что такое онлайновой таблицы я и взял обратное восстановление »
Перебор: ставите скрипт что-то в духе
for ($i = 0; ; $i++) {
if (md5($i) == "827ccb0eea8a706c4c34a16891f84e7b")
die("Эврика! Пароль: $i");
}
Естественно, это примитивный вариант перебора и только по числам (не найдёт то, что начинается с нуля). Нужно добавить ещё буквы и т.д.
Пароль длиной до 6 символов вполне реально восстановить. Больше - вряд ли. Можно использовать словари паролей (текстовые файлы, где в строке содержится 1 пароль). Их можно найти на всяких хакерских сайтах. Но, в общем-то, это подходит только для простых паролей.
Если известна длина пароля, можно попробовать метод Монте-Карло (загуглите сами) - должно немного ускорить перебор, хотя математически это выглядит замедлением (но статистически работает).
Но вообще, перебор - бесперспективное дело.
Таблицы пароль-хэш - это по сути те же словари, только для каждого пароля рядом приводится его хэш md5, но поиск на порядки быстрее, чем перебором по словарю. Такие таблицы можно составить самому по словарю, либо воспользоваться онлайновой службой.
Опять же, сработает только для простых и распространённых паролей.
И вообще, нехорошо взламывать чужие пароли. А всё, что я рассказал выше, рассказано лишь из-за малой эффективности этих методов:) Хороший пароль этим не вскрыть.
понял просто перебор, а можно что то изменить в коде чтобы пароль сохранялся в нормальном виде(чтобы сильно не коверкать то помимо хешированного еще нормальный сохранялся) ну или сделать чтобы просто в отдельном текстовике сохранялся логин и пароль???
(2, 'POfpg4', 'user', '827ccb0eea8a706c4c34a16891f84e7b', нормальный пароль, '', 0, '', '', 0);
всем спасибо вроде сам разобрался (теперь сохраняется просто без хеш) :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.