Անվտանգության սխալ ձեւավորում RCE
Այսօր մենք կքննարկենք հյուրընկալողին փոխզիջման ճանապարհը, մենք կօգտագործենք մի քանի անվտանգության սխալներ եւ խթանելու SQL վարակը MySQL- ում RCE- ին.
Որոնել մուտքի կետը
Ենթադրենք, դուք գտել եք բլոգի էջ եւ օգտագործելով Whatweb- ը պարզել է, որ այն աշխատում է CMS WordPress- ի վրա:
Դուք անցնում եք դրան եւ բավարարում նման գեղեցիկ բովանդակությունը:
Ձեզ բախվում են հասկանալու խնդիրը, թե ինչ եղանակներ կարող եք փոխզիջել սերվերը.
Առաջին հերթին, քանի որ մենք աշխատում ենք CMS WordPress- ի հետ, իմաստ ունի օգտագործել մասնագիտացված գործիք wpscan, Կանխվել է Kali Linux- ում: Օգտագործելուց առաջ առաջարկվում է գրանցել պրոֆիլը Պաշտոնական կայք, Ձեր API ստեղնը ստանալու համար, ինչը մեծապես ընդլայնում է հավաքվածը wpscan տեղեկություն.
wpscan --url http://host/wp_uri/ -e vp,vt,dbe,cb,u1-20 --api-token TOKEN
Ես չեմ տա աշխատանքի ամբողջ արդյունքը, բայց ես ցույց կտամ ամենահետաքրքիր արդյունքները:
Առաջին հերթին, WPScan- ը ստուգում է խոցելիության վարկածը, եւ արդեն կա, որ ուշադրություն դարձնի: Մեզ հետաքրքրում է նաեւ խոցելի plugins, թեմաներ, կազմաձեւման կրկնօրինակում եւ օգտվողներ:
Մենք չենք գտել ակնհայտ խոցելիություններ plugins- ում եւ թեմաներով, չի գտել կրկնօրինակումներ, բայց պարզեցինք, որ դիմումում կա 2 օգտվող, ադմինիստրատոր: Ներկայիս փուլում մենք ունենք մի քանի ենթադրություններ հետագա հարձակման վեկտորի մասին:
Օգտագործողի գաղտնաբառերի գաղտնաբառերը կարող են օգտագործվել նույն WPScan Next հրամանի միջոցով:
wpscan --url http://host/wp_uri/ -U users.txt -P passwords.txt
Ես թողնում եմ, որ կաշառքները տեսարանների փորձերը թողնում են, քանի որ դրանք չեն հանգեցրել արդյունքի: Բայց այնտեղ կա խոցելիության մեջ, որոնց համար բռնել.
Եթե մենք դիմում ենք փնտրում, կտեսնենք, որ բլոգն ունի գաղտնաբառով պաշտպանված գրառումներ:
Հնարավոր չէ դրանից գաղտնաբառն փակցնել, այնպես որ դուք պետք է այլ կերպ վարվեք: Եկեք վերադառնանք WPScan- ի արդյունքներին: Այնտեղ, հնարավոր խոցելիության մեջ հայտնաբերվել է մի շատ հետաքրքրասեր, որը կարող է խաղալ մեր ձեռքերում:
Խոցելիության հետ կապված հղումներում կա նրա թեւը, 2019-17671: Իրականացնելով պարզ որոնման հարցում, գտնում ենք Գործառնական ցուցումներ:
So far we know that adding `?static=1` to a wordpress URL should leak its secret content
Եկեք ստուգենք, արդյոք դա կաշխատի:
Եվ մեզ հաջողվեց գտնել բովանդակություն, որը թաքնված է մեր աչքերից: Ես չեմ բացահայտի մասնավոր գրառման ամբողջական պարունակությունը, ես միայն կասեմ, որ այն գտավ երկուական հաջորդականություն, որը տեքստի ներկայացուցչություն փոխանցելիս, հավանաբար մեզ գաղտնաբառ է ասում նախկինում փակ բովանդակությունից: Փորձենք այն ներկայացնել `ստուգելով մեր ենթադրությունը:
Ես թաքցրել եմ գրառման բովանդակությունը, ինչպես գաղտնաբառերը, որպեսզի չբացահայտեմ զգայուն տեղեկատվությունը մյուս մասնակիցներին.
Մենք անցնում ենք նոր ENTP- ին եւ բացահայտում ենք հետեւյալ ձեւը:
Մուտքի կետ
Մենք սկսում ենք ուսումնասիրել հայտնաբերված ձեւը: Առաջին բանը, որ գալիս է մտքում, SQLI է: Մենք սկսում ենք տարբեր մեջբերումներ տեղադրել եւ արդյունք ստանալ:
Մենք ունենք առավել հաճելի SQLI, որը ցուցադրում է էկրանին բոլոր սխալները: Փորձենք կայունացնել հարցումը եւ ցուցադրել տեղեկատվությունը:
Մենք ստացանք համարժեք արդյունք: Բայց ինչ անել դրա հետ հաջորդը?
Այս դեպքում դուք պետք է ստուգեք, թե ինչպիսի SQLI է մեր առջեւ: Տրամաբանորեն սխալ արտահայտություն փոխանցելով, ես գտա, որ դիմումը չի վերադարձրել տվյալները:
Եվ այս միտքը կույր բուլյան հիմք է հանդիսանում: Ես վերլուծեցի նման ներարկում Նրա անցած հոդվածներից մեկը. Եկեք հանուն ցուցադրման, եւ այստեղ մենք կքննարկենք առաջին փուլը:
ffuf -u "http://host/sqli_uri.php" -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "question='+or+ASCII(substring((select+schema_name+from+information_schema.schemata+limit+0,1),WFUZZ,1))=HFUZZ;--+-" -w ASCII.txt:HFUZZ -w length.txt:WFUZZ -fs 430
0.1 սահմանի սահմանի փոփոխությամբ 1.1 սահմանաչափի սահմանափակում 2.1-ը եւ այլն, մենք ստանում ենք առկա բոլոր տվյալների բազաները:
Հեշտ է կռահել, թե ինչն է մեզ հետաքրքրում վերջին տվյալների բազայում, քանի որ դա, ամենայն հավանականությամբ, մեր դիմումի տվյալների բազան է: Հաջորդը, նման ներարկումը թեքեք բավականին որոշ ժամանակ, այնպես որ բեմը ավտոմատացնելու համար կարող եք օգտագործել SQLMAP: Ես նախընտրում եմ դա անել, քանի որ հատուկ հետաքրքրություն կա SQLI- ի ձեռքերով շրջելու համար: Այնուամենայնիվ, կույր ներարկման դեպքում դա շատ ժամանակ կպահանջի.
Բայց մենք հաջողակ էինք: Ստացվում է, որ ներարկումն ամենեւին էլ կույր է, բայց իրական միության բասը: Կույր ներարկման ենթադրությունը արվել է կղզու աշխատանքի տրամաբանության անբավարար ուսումնասիրության շնորհիվ, չնայած կույր ներարկումը պետք է լինի: Բայց քանի որ մենք ունենք միության վրա հիմնված, մենք գործում ենք այն.
Այժմ մենք պետք է ընտրենք ճիշտ բեռներ, կարող եք գտնել դրանք Այս պահոցը.
Երբ տվյալների բազայից տեղեկատվություն ընտրեք, ես վազեցի հաջորդ սխալի մեջ:
Collece սխալի սխալը MySQL- ում տեղի է ունենում այն դեպքում, երբ հարցում օգտագործված համեմատությունների (հավաքագրման) միջեւ բախման (անհամապատասխանության) միջեւ տեղի է ունենում.
Այս դեպքում հնարավոր պատճառը անհամատեղելի կոլաժ է: Օրինակ, եթե Unicode համեմատության փլուզումը նշված է մեկ սյունակի համար, եւ նշվում է ASCII- ի համեմատությունը մեկ այլ սյունակի համար: Այս դեպքում անհրաժեշտ է փոխել կամ սյունը կամ սյունը, որպեսզի դրանք համատեղելի լինեն: Դա ինձ օգնեց այստեղ Սա տեսանյութ է, Եւ արդյունքում ստացված հարցումը այսպես է թվում:
Գործողության արդյունքում մենք տեղեկություններ ենք գտնում օգտագործողների մասին, մասնավորապես նրանց մուտքի եւ հեշ գաղտնաբառերի մասին: Մենք ճանաչում էինք անունները, բայց հեսին կարող է փորձել թալանել:
admin:$P$B6VX9EIH8trwq9VERmD1oGR5d6NS6W user:$P$BO5rq5jZcx0JngpLR5mInB8XjsIV9t/
Անհաջող: Հետեւաբար, գաղտնաբառերը բառապաշար չեն, ուստի անհրաժեշտ է մեկ այլ վեկտոր փնտրել: Եվ ահա մենք կրկին մենք փնտրում ենք սխալ.
Shell բեռնում
Ստուգեք, թե որ պարտատոմսեր են աշխատում:
Քանի որ տվյալների բազան աշխատում է արտոնյալ օգտագործողի տակ եւ մենք ունենք SQLI, դուք կարող եք փորձել լցնել էջում կճեպ: Հասկանալու համար, թե ինչպես լրացնել այն, դուք կարող եք կրկին կապվել ծանրաբեռնվածությամբ բոլոր բաների հետ (հղումը վերեւում):
[...] UNION SELECT "<?php system($_GET['cmd']); ?>" into outfile "C:\\xampp\\htdocs\\backdoor.php" [...] UNION SELECT '' INTO OUTFILE '/var/www/html/x.php' FIELDS TERMINATED BY '<?php phpinfo();?>' [...] UNION SELECT 1,2,3,4,5,0x3c3f70687020706870696e666f28293b203f3e into outfile 'C:\\wamp\\www\\pwnd.php'-- - [...] union all select 1,2,3,4,"<?php echo shell_exec($_GET['cmd']);?>",6 into OUTFILE 'c:/inetpub/wwwroot/backdoor.php'
Մենք կօգտագործենք այս ռազմավարությունը `փոխելով օգտակար բեռը:
Այժմ, դիմելով Shella- ին, մենք կարող ենք հաջողությամբ կատարել հրամաններ:
Հաջորդ քայլը կարող է լինել հակառակ սլայդի, կեղեւի կայունացման, կայուն հետեւի սարք, արտոնությունների աճ եւ այլն: Բայց սա գերազանցում է այսօրվա հոդվածի շրջանակը.
Այս ամենը, հուսով եմ, որ ինքներդ ձեզ համար նոր բան եք սովորել: Մինչեւ նոր հանդիպումներ!