pXSS в аторизации (часть представления!).
класс Сontroller в
system/engine/controller.php
PHP код:
PHP:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#FF8000"]/*...*/
[/COLOR][COLOR="#007700"]protected function[/COLOR][COLOR="#0000BB"]redirect[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$url[/COLOR][COLOR="#007700"]) {
[/COLOR][COLOR="#0000BB"]header[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'Location: '[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]str_replace[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'&'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'&'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$url[/COLOR][COLOR="#007700"]));
exit();
}
[/COLOR][COLOR="#FF8000"]/*...*/[/COLOR][/COLOR]
controller/account/login.php
PHP код:
PHP:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]class[/COLOR][COLOR="#0000BB"]ControllerAccountLogin[/COLOR][COLOR="#007700"]extends[/COLOR][COLOR="#0000BB"]Controller[/COLOR][COLOR="#007700"]{
private[/COLOR][COLOR="#0000BB"]$error[/COLOR][COLOR="#007700"]= array();
public function[/COLOR][COLOR="#0000BB"]index[/COLOR][COLOR="#007700"]() {
if ([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]customer[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]isLogged[/COLOR][COLOR="#007700"]()) {
[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]redirect[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]HTTPS_SERVER[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]'index.php?route=account/account'[/COLOR][COLOR="#007700"]);
}
[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]language[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]load[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'account/login'[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]document[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]title[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]language[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]get[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'heading_title'[/COLOR][COLOR="#007700"]);
if (([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]server[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'REQUEST_METHOD'[/COLOR][COLOR="#007700"]] ==[/COLOR][COLOR="#DD0000"]'POST'[/COLOR][COLOR="#007700"])) {
if (isset([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'account'[/COLOR][COLOR="#007700"]])) {
[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]session[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]data[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'account'[/COLOR][COLOR="#007700"]] =[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'account'[/COLOR][COLOR="#007700"]];
if ([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'account'[/COLOR][COLOR="#007700"]] ==[/COLOR][COLOR="#DD0000"]'register'[/COLOR][COLOR="#007700"]) {
[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]redirect[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]HTTPS_SERVER[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]'index.php?route=account/create'[/COLOR][COLOR="#007700"]);
}
if ([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'account'[/COLOR][COLOR="#007700"]] ==[/COLOR][COLOR="#DD0000"]'guest'[/COLOR][COLOR="#007700"]) {
[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]redirect[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]HTTPS_SERVER[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]'index.php?route=checkout/guest_step_1'[/COLOR][COLOR="#007700"]);
}
}
if (isset([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'email'[/COLOR][COLOR="#007700"]]) && isset([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'password'[/COLOR][COLOR="#007700"]]) &&[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]validate[/COLOR][COLOR="#007700"]()) {
unset([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]session[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]data[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'guest'[/COLOR][COLOR="#007700"]]);
if (isset([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'redirect'[/COLOR][COLOR="#007700"]])) {
[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]redirect[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]str_replace[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'&'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'&'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'redirect'[/COLOR][COLOR="#007700"]]));
} else {
[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]redirect[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]HTTPS_SERVER[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]'index.php?route=account/account'[/COLOR][COLOR="#007700"]);
}
}
}
[/COLOR][COLOR="#FF8000"]/*...*/
[/COLOR][COLOR="#007700"]private function[/COLOR][COLOR="#0000BB"]validate[/COLOR][COLOR="#007700"]() {
if (![/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]customer[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]login[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'email'[/COLOR][COLOR="#007700"]],[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'password'[/COLOR][COLOR="#007700"]])) {
[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]error[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'message'[/COLOR][COLOR="#007700"]] =[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]language[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]get[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'error_login'[/COLOR][COLOR="#007700"]);
}
if (![/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]error[/COLOR][COLOR="#007700"]) {
return[/COLOR][COLOR="#0000BB"]TRUE[/COLOR][COLOR="#007700"];
} else {
return[/COLOR][COLOR="#0000BB"]FALSE[/COLOR][COLOR="#007700"];
}
}
[/COLOR][/COLOR]
Чтоб попасть на
account/login.php надо установить переменную
?route=account/login
Еще надо иметь на целевом ресурсе созданный акаунт чтоб пройти авторизацию, после которой редирект, в который пихаетцо жаба!
Интересный момент что пытались защитить функцией которая упоминалась в посте выше -
htmlspecialchars, но она не все сущности преобразовывает, тоесть можно обойти:
data:text/html;base64,PHNjcmlwdD5hbGVydCgnaGFja2VkIScpPC9zY3 JpcHQ+
Експлоит:
Код HTML:
HTML:
гуд
плохо
Как жизнь?
зы
?route=account/login - только гет!
Раскрытие путей
http://www.hellomydream.com/admin/controller/common/header.php
http://garmata.net/admin/controller/payment/alertpay.php
http://localhost/opencart_1.4.8b_rus_0.1/admin/controller/localisation/length_class.php
http://localhost/opencart_1.4.8b_rus_0.1/admin/model/localisation/geo_zone.php
http://localhost/opencart_1.4.8b_rus_0.1/admin/model/sale/customer_group.php
и другие.