• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Как взломать сайт?

  • Автор темы abdyla_v
  • Дата начала
A

abdyla_v

Есть два поля и внопка :
Код:
.................................................. ..
.................................................. ..
<table class="wide_table">
<tr>
<td class="side_td"></td>
<td class="lable_td">Введите логин</td>
<td class="form_td"><input type=text name=login></td>
<td class="side_td"></td>
</rt>
<tr>
<td class="side_td"></td>
<td class="lable_td">Введите пароль</td>
<td class="form_td"><input type=password name=passwd></td>
<td class="side_td"></td>
</tr>
</table>
.................................................. ..
.................................................. ..
<p align="center">
<input type=submit value=Войти name=submit id=submit class="button">
.................................................. ..
.................................................. ..
При нажатии на кнопку входа выполняется код:

Код:
if (isset($submit))
{
$query = "SELECT * FROM users WHERE login='$login'";
if ($result = mysql_query($query,db_connect())) 
{ 
if (mysql_num_rows($result) > 0)
{
if ($user=mysql_fetch_array($result)) 
{
$temp_id=$user["id"];
$query2="SELECT * FROM users,groups,user_group WHERE user_group.id_user=$temp_id AND user_group.id_group=groups.id";
$result2=mysql_query($query2,db_connect());
if ($groups=mysql_fetch_array($result2))
{
if ($login === $user["login"]) 
{
if (md5($passwd) === $user["passwd"]) 
{
session_start();
$cur_user=$user["login"];
$cur_group=$groups["groups"];
$cur_user_group_c=gzcompress(serialize($groups));
setcookie("cur_user_group_c",$cur_user_group_c,tim e()+7200);
setcookie("cur_group",$cur_group,time()+7200);
setcookie("cur_user",$cur_user,time()+7200);

//session_register('cur_user_group');
?><script language="javaScript">
document.location.replace("main.php");
</script>
<?
exit;
} 
else {print "<center><font size=5 color=#CC0000>Неправильный пароль!!!</font></center>";}

}
else {print "<center><font size=5 color=#CC0000>Неправильный логин!!!</font></center>";}
}
else {print mysql_error();}
}
}
}
else {die("Couldn't retrieve authorization data, please try again later");}
}

ВОПРОС: Можна ли взломать такую реализацию! Тобиш ввести в поля ввода такие значия чтобы мы смогли перейти на main.php.
 
A

admin

попробуй всякие injection популярные. вот и проверишь.
 
G

Gisma

гг... отсканируй сервер, скан выложи сюда :) будем курить
 
M

MajestiC

Можно, просто ввести main.php в браузере =)

Код:
<script language="javaScript">
document.location.replace("main.php");
</script>
Ужос.

1. Учи функцию header();
2. Учи $_GET, $_POST
3. Учи register_globals
4. Учи mysql_escape_string
5. Вместо cookie используй сессии.
 
M

MajestiC

Что там схвачено? Я куки подделаю и всё, main.php меня воспримет.
 
P

Pasha

Для: abdyla_v
[подправлено]
использование $login в первом запросе позволяет вставить в него что-то вроде:
'; SELECT 1 as UserID, <md5> as passwd; --'
что вообще не есть хорошо.
 
M

MajestiC

abdyla_v
Ну собвственно опять повторюсь:

1. Учи функцию header();
2. Учи $_GET, $_POST
3. Учи register_globals
4. Учи mysql_escape_string
5. Вместо cookie используй сессии
 
A

abdyla_v

Что там схвачено? Я куки подделаю и всё, main.php меня воспримет.
Что значит подделаю там есть такой код:

Код:
if (!isset($cur_user))

{

?><script language="javaScript">

document.location.replace("index.php");  						

</script><?

exit;

}

Товарищи я понимаю что это все не хорошо! Но пожалуйста напишите мне все лиш две строки которое это все доказывает!
Тоесть я так понимаю что можна в поле "Логин" ввести например строку 1' OR '1'='1 и всё выполнится?.
Что мне нужно ввести в поля "Логин" и "Пароль" что бы я смог пройти даную защиту! (Для даного примера!) Можна это зделать или нет!
 
M

MajestiC

Код приведи своего main.php, первый файл который ты скинул ты скинул как назывался? Телепатов тут нет.

PS. Твой код выглядел бы хорошо во времена PHP 3, а сейчас уже пора писать нормально и отказатся от register_globals, а использовать $_GET и $_POST, ты еще естественно рассчитываешь на magic_quotes_gpc, а надо бы использовать mysql_escape_string. Зачем использовать javascript для перехода, если для этого люди придумали HTTP заголовки, реализуемые через header в php. 21 век на дворе как-никак.
 
P

Pasha

<!--QuoteBegin-abdyla_v+23:07:2007, 14:32 -->
<span class="vbquote">(abdyla_v @ 23:07:2007, 14:32 )</span><!--QuoteEBegin-->Что значит подделаю там есть такой код:
[snapback]73057" rel="nofollow" target="_blank[/snapback]​
[/quote]Мегакод. ломается нажатием кнопки escape при заходе на "защищенную" страницу.
 
P

Pasha

Для: MajestiC
Зато я учел, что создать cookie с именем "cur_user" - это очень просто.
 
M

MajestiC

Ну вот для этого я и хотел увидеть код main.php =)
 
A

abdyla_v

Код который я привел в первый раз из файла - Index.php
Теперь привожу - main.php :
Код:
<?
include "header.php";
include("options.php");
?>
<body class='main_page'>

<table width="100%" border="0">

<tr valign="top">

<td align="left">

<fieldset class=fieldset_left_class title='tasks'><legend class=main_caption><?=msg('project_menu_name')?></legend>
<?	

if ($cur_user_group["cr_del_projects"]==1)

{

print "<a href='add_projects.php' class='A_table'>".msg('main_menu_create_project')."</a><br>";

}

print "<a href='show_projects.php' class='A_table'>".msg('main_menu_view_projects')."</a><br>";

?>



</fieldset>

</td>

<td align='left'>



<?

if ($cur_user_group["cr_del_users"]==1 || $cur_user_group["cr_del_groups"]==1 || $cur_user_group["cr_del_tasks"]==1) 

{

print "<fieldset class=fieldset_right_class title='tasks'>";

print "<legend class=main_caption>".msg('header_menu_tasks')."</legend>";

if ($cur_user_group["cr_del_users"]==1) print "<a href='add_users.php' class='A_table'>".msg('main_menu_create_user')."</a><br>";

if ($cur_user_group["cr_del_groups"]==1) print "<a href='add_group.php' class='A_table'>".msg('main_menu_create_group')."</a><br>";

if ($cur_user_group["cr_del_tasks"]==1) print "<a href='add_tasks.php' class='A_table'>".msg('main_menu_create_task')."</a><br>";

print "</fieldset>";

}

?>



</td>

</tr>

<tr align='top'>

<td>

<fieldset class=fieldset_left_class title='tasks'><legend class=main_caption><?=msg('condition_menu_external')?></legend>



<?

if($cur_user_group['cr_del_tasks']==1)

{

print "<a href='add_conditions.php' class='A_table'>".msg('main_menu_create_condition')."</a><br>";

}

print "<a href='show_conditions.php' class='A_table'>".msg('main_menu_view_conditions')."</a><br>";

?>
</fieldset>

</td>

<td align='left'>

</td>

</tr>

</table>

<?

footer();

?>

Также привожу код header.php

Код:
<?

if (!isset($cur_user))

{

?><script language="javaScript">

document.location.replace("index.php");  						

</script><?

exit;

}



include("options.php");

include("functions.php");

include("localisation.php");



session_start();



//--- Определение языки

$result=mysql_query("SELECT * FROM users WHERE login='$cur_user'",db_connect());

if ($user=mysql_fetch_array($result))

{

switch ($user['lang'])

{

case 'Русский':

$LANGUAGE='Русский';

break;

case 'English':

$LANGUAGE='English';

break;

case 'Українська':

$LANGUAGE='Українська';

break;

}

}

else {print mysql_error();}

//---



//**********--ВЫБОР ПРОЕКТА--*******************************************************

if (isset($project))

{

$result=mysql_query("SELECT * FROM projects WHERE projects='$project'",db_connect());

$cur_project=mysql_fetch_array($result);

session_register('cur_project');

}

if (!isset($cur_project)) 

{

$result=mysql_query("SELECT* FROM projects",db_connect());

$cur_project=mysql_fetch_array($result);

session_register('cur_project');

}

//********************************************************************************
*



//**************--Опреднление группы пользователя--*********************************

if (isset($cur_group)) 

{

$result2=mysql_query("SELECT * FROM groups WHERE groups='$cur_group'",db_connect());

$cur_user_group = mysql_fetch_array($result2);

session_register('cur_user_group');

}

//********************************************************************************
*

?>

<html>



<head>

<link rel=stylesheet type=text/css href=styles.css>

<meta http-equiv="Content-Language" content="ru">

<meta http-equiv="Content-Type" content="text/html; charset=<?=$charset?>">

<title>Task Manager</title>



<script src="scripts/clock.js" type="text/javascript" Language="JavaScript">

</SCRIPT>



<script Language="JavaScript">

<!-- hide from old browsers

function loadPage(pageURL){

location.href = pageURL.options[pageURL.selectedIndex].value;

}

//-->

</SCRIPT>



<script SRC="scripts/sortTable.js">

</SCRIPT>



<script SRC="scripts/alert.js">

</SCRIPT>



<script language="JavaScript1.2">

var head="display:''"

function doit(header){

var head=header.style

if (head.display=="none")

head.display=""

else

head.display="none"

}

</script>



</head>



<body class="main_page" onload="myclock(); initTable('table0');">

<div id="clockexam" style="position:absolute;right:10px;top:10px;text-align:right"></div>

<table width="100%" align=center border=0 cellspacing=0 cellpadding=0>

<tr background='img/list.gif'>

<td class="header_td" colspan="2">

<img alt="Project Homepage" src="img/logo2.gif" class="img">

</td>

</tr>

<tr>

<td class="menu_td_left">

<?

echo msg('header_menu_user')."<b>".$cur_user."</b> (<b>".$cur_group."</b>)";

echo "<br>".msg('header_menu_project')."<b>".$cur_project['projects']."</b>";

?>

</td>

<td class="menu_td" height="48">

<?

print "<a href='main.php' class='A_menu_selected'>".msg('header_menu_main')."</a> : : ";

//if ($cur_user_group['cr_del_tasks']==1)

print "<a href='show_tasks.php' class='A_menu_selected'>".msg('header_menu_tasks')."</a> : : ";

//print "<a href='graph_project.php' target='_blank' class='A_menu_selected'>".msg('header_menu_graph')."</a> : : ";

//print "<a href='tree.php' class='A_menu'>".msg('header_menu_tree')."</a> : :";

if ($cur_user_group['cr_del_users']==1)

print "<a href='show_users.php' class='A_menu_selected'>".msg('header_menu_admin')."</a> : : ";

else 

print "<a href='privat_user.php?curuser=".$cur_user."' class='A_menu_selected'>".msg('header_menu_privat')."</a> : : ";

print "<a href='index.php?logout=t
rue' target='_top' class='A_menu_selected'>".msg('header_menu_logout')."</a>";

?>

</td>

</tr>

</table>
[/code]
 
M

MajestiC

http://твойхост/main.php?cur_user=1&cur_group=3
например (желательно поставить нормальные цифры)...

Можно еще побаловаться с $cur_user_group["cr_del_users"]
http://твойхост/main.php?cur_user=1&cur_group=3&cur_user_group[cr_del_users]=1

только куки очисти на всякий пожарный =)
 
O

Oflashp

Мне кажется, что человек имеет н-го знакомого, который поставил скрипт слитый с нета. Человек знает, что за скрипт, скачал и выложил сюда, чтоб ему помогли сломать знакомому.
Собственно обычно спрашивают, что поправить, а не как сломать.
Не благородное это дело.
 
A

abdyla_v

Мне кажется, что человек имеет н-го знакомого, который поставил скрипт слитый с нета. Человек знает, что за скрипт, скачал и выложил сюда, чтоб ему помогли сломать знакомому.
Собственно обычно спрашивают, что поправить, а не как сломать.
Не благородное это дело.

В дело в том что сайт написал друг! А я начинающий програмист и он мне дал исходники что бы я с помощю их учился! Вот я решил проверить как это то что он написал работает! И мне в голову пришла мысль можна ли эту писанину как то обойти! Вот и все! Хотел убедится в правельности пасаного и сразу увидить ошибки которые не нужно допускать!
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!