PDA

Просмотр полной версии : Как обойти фильтры [SQL INJECTION]


Krist_ALL
27.08.2009, 17:22
играюсь с http://forum.antichat.ru/thread130070-damn.html

не могу придумать как провести инекцию...

<?php
// Retrieve data

$id = $_GET['id'];
$id = stripslashes($id);
$id = mysql_real_escape_string($id);

if (is_numeric($id)){

$getid="SELECT first_name, last_name FROM users WHERE user_id = '$id'";
$result=mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' );

$num=mysql_numrows($result);

$i=0;

while ($i < $num) {

$first=mysql_result($result,$i,"first_name");
$last=mysql_result($result,$i,"last_name");

echo "<pre>ID: $id<br>First name: $first<br>Surname: $last</pre>";

$i++;
}
}
?>

регистр глобалс офф.
хелп

pento
27.08.2009, 17:25
А оно здесь точно есть? 0_о

S00pY
27.08.2009, 17:27
Это можно как-то обойти?0o

Krist_ALL
27.08.2009, 17:28
да. это высший уровень. и он както обходится....

Qwazar
27.08.2009, 17:35
да. это высший уровень. и он както обходится.... Выкладывай тогда весь код.

Krist_ALL
27.08.2009, 17:38
<?php
// Retrieve data

$id = $_GET['id'];
$id = stripslashes($id);
$id = mysql_real_escape_string($id);

if (is_numeric($id)){

$getid="SELECT first_name, last_name FROM users WHERE user_id = '$id'";
$result=mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' );

$num=mysql_numrows($result);

$i=0;

while ($i < $num) {

$first=mysql_result($result,$i,"first_name");
$last=mysql_result($result,$i,"last_name");

echo "<pre>ID: $id<br>First name: $first<br>Surname: $last</pre>";

$i++;
}
}
?>

S00pY
27.08.2009, 17:42
Мне кажеться что хрен тут чё обойдёшь... если я не прав то я ударюсь головою в стену.

BlackSun
27.08.2009, 17:45
Это не обходится.

Krist_ALL
27.08.2009, 17:47
Это не обходится.

скачай и глянь. э не я выдумал код этот. вон написана хак тренировачная площадка....я глянул исходник и офигел сам.

razb
27.08.2009, 17:55
на то уровень защиты и максимальный что бы его не обойти )

Qwazar
27.08.2009, 18:12
Можно попробовать поиграться с мультибайтовыми кодировками.

[Raz0r]
27.08.2009, 18:25
Это тоже не прокатит, так как используется mysql_real_escape_string(), а не addslashes()

S00pY
27.08.2009, 18:27
is_numeric() смущает само больше((

eLWAux
27.08.2009, 18:33
в \sqli_low.php (самый легкий) никакой защити:
>> $id=$_GET['id'];
>>$getid="SELECT first_name, last_name FROM users WHERE user_id = '$id'";

в \sqli_med.php (средный) уже защита:
>> $id = mysql_real_escape_string($id);

в \sqli_high.php защита stripslashes и mysql_real_escape_string.

все уровни надо проходить по очереди.
пройди сначало \sqli_med.php.. попробуй-ка обойти mysql_real_escape_string

eLWAux
27.08.2009, 18:41
да они хакеры, хуле

предлагают провести xss , обойти htmlspecialchars
>>echo '<pre>Hello ', htmlspecialchars($_GET['name']), '</pre>';

lfi в $file:

switch($file){
default:
include("fi_content.php");
break;
}

Krist_ALL
27.08.2009, 18:50
какой-то бредовый скрипт...
eLWAux, я сразу смореть исходники)

ElteRUS
27.08.2009, 19:21
пройди сначало \sqli_med.php.. попробуй-ка обойти mysql_real_escape_string

sqli_med.php

$id = $_GET['id'];
$id = mysql_real_escape_string($id);

$getid="SELECT first_name, last_name FROM users WHERE user_id = $id";

$result=mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' );


Здесь переменная $id не обрамляется кавычками в запросе. Тобишь mysql_real_escape_string до фени )) Я находил такую скулю в реальном движке http://forum.antichat.ru/showpost.php?p=1279348


Что касается sqli_high.php

$id = $_GET['id'];
$id = stripslashes($id);
$id = mysql_real_escape_string($id);


Возможно из-за stripslashes+mysql_real_escape_string и при меджик_квотес=вкл а так же при правильно составленном значении переменной $id (ну там ////') получится так что некоторые слэши\кавычки заэкранируют друг друга, а некоторые нет ((; <= Вероятно я написал бред, просто строю предположения в какую сторону копать. А вот как они хотят обойти is_numeric - действительно интересно.