Взломайте эту авторизацию

Greendrake

Новичок
Взломайте эту авторизацию

Юзаю вот такой способ авторизации в своих проектах, хотелось бы узнать насколько он уязвим. Вобщем, слабо взломать? ;)
Может, кто сразу скажет что тут и взламывать нечего... :eek:

Содержимое базы:
[SQL]
CREATE TABLE `pages` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(255) NOT NULL default '',
`access` varchar(255) NOT NULL default '1,2,3,4,5',
KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=76 ;

INSERT INTO `pages` VALUES (1, 'Авторизация', '1,2'),
(2, 'Админка', '1');

CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`group_id` int(11) NOT NULL default '0',
`login` varchar(255) NOT NULL default '',
`password` varchar(255) NOT NULL default '',
KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=17631 ;

INSERT INTO `users` VALUES (1, 1, 'admin', 'adminpass'),
(2, 2, 'user', 'userpass');[/SQL]

Собственно, сам скрипт:

PHP:
<?php

mysql_pconnect("localhost","dbUser","dbPassword");mysql_select_db("db");
session_start();

// Авторизация
if (isset($_POST['login'])&&isset($_POST['password']))
{
  $r=mysql_query("select * from users where login='".$_POST['login']."' and password='".$_POST['password']."'");
  if ($r) {$_SESSION['user']=mysql_fetch_assoc($r);};
};

// Группа юзверя и страница по умолчанию
if (!isset($_SESSION['user']['group_id'])) {$_SESSION['user']['group_id']=2;};
if (!isset($_GET['page'])) {$_GET['page']=1;};

// Проверка прав доступа
if (in_array($_SESSION['user']['group_id'],explode(",",mysql_result(mysql_query("select access from pages where id=".$_GET['page']),0,0))))
{
  switch($_GET['page'])
  {
    case 1:
      form();
    break;  
    case 2: 
      print "Admin Panel"; // Вот сюда нужно попасть
    break;  
  };
}
else
{
  print "Acces denied<hr/>";
  form();
};

function form()
{
  print "
  <form action=\"?page=2\" method=\"post\">
    Login: <input type=\"text\" name=\"login\"><br/>
    Password: <input type=\"password\" name=\"password\"><br/>
    <input type=\"submit\" value=\"Login\"/>
  </form>";
};

?>
 

Tor

Новичок
а почему ты решил, что нам это интересно?
в часности, читать туеву хучу кода
 

Greendrake

Новичок
Автор оригинала: Tor
а почему ты решил, что нам это интересно?
в часности, читать туеву хучу кода
Потому что народ здесь занимается подобными задачами, и им самим не безразлична уязвимость их проектов. Вдруг выяснится, что такой способ использует кто-то ещё, а он легко уязвим?

Вообще-то я сначала хотел в двух словах описать суть методы, но потом решил что лучше предоставить весь рабочий код в минимальном объёме. Потом, неужели для тебя 50-70 строк - это туева хуча??


Автор оригинала: Frol SQL Injection
Я так и думал что с этого начнётся. Можно конкретный рецепт для данного случая?
 

Лисю

Guest
// Авторизация
if (isset($_POST['login'])&&isset($_POST['password']))
{
$r=mysql_query("select * from users where login='".$_POST['login']."' and password='".$_POST['password']."'");
if ($r) {$_SESSION['user']=mysql_fetch_assoc($r);};
}; .....

Угадай, что будет, если я передам в $_POST['login'] строку вида 1'"; ?
 

Greendrake

Новичок
Автор оригинала: Tor
ведь в правилах, которые ты не читал, написано русским языком, что приводить надо не более 10
Виноват. Каюсь. Готов сбросить эту туеву хучу отсюда и просто дать ссылку. Так пойдёт?


Автор оригинала: Лисю
Угадай, что будет, если я передам в $_POST['login'] строку вида 1'"; ?
Вообще-то, для $_POST автоматом работают magic quotes, поэтому что тут страшного. Проверил, - просто не пускает и всё.
 

Сергей123

Новичок
Так как зависимости от включённости этой опции можно не очень сложно избежать, обычно так и делают.
 

Greendrake

Новичок
Автор оригинала: Бресь Сергей
Так как зависимости от включённости этой опции можно не очень сложно избежать, обычно так и делают.
То есть если magic_quotes_gpc = On то взломать можно разве что перехватом PHPSESSID?
 
Сверху