2020 թվականի առաջին եռամսյակն անցկացրել եմ OSCP քննությանը նախապատրաստվելով։ Google-ում տեղեկություններ փնտրելը և բազմաթիվ «կույր» փորձերը խլեցին իմ ողջ ազատ ժամանակը: Հատկապես դժվար էր հասկանալ արտոնությունների մեծացման մեխանիզմները: PWK դասընթացը մեծ ուշադրություն է դարձնում այս թեմային, սակայն ուսումնական նյութերը միշտ անբավարար են։ Ինտերնետում կան բազմաթիվ ձեռնարկներ՝ օգտակար հրամաններով, բայց ես առաջարկություններին կուրորեն հետևելու կողմնակից չեմ՝ առանց հասկանալու, թե դա ինչի կհանգեցնի:
Ես կցանկանայի ձեզ հետ կիսվել այն ամենով, ինչ սովորել եմ իմ նախապատրաստման և քննությունը հաջող հանձնելու ընթացքում (ներառյալ երբեմն-երբեմն ներխուժումները Hack The Box-ում): Ես երախտագիտության ուժեղ զգացում էի զգում ամեն մի կտոր տեղեկատվության համար, որն օգնեց ինձ ավելի գիտակցաբար նավարկելու «Դժվար փորձիր» ճանապարհորդությունը, և հիմա իմ ժամանակն է վերադարձնելու համայնքին:
Ես ուզում եմ ձեզ տալ OS Linux-ում արտոնությունների մեծացման ձեռնարկ, որը ներառում է ամենատարածված վեկտորների և հարակից գործառույթների վերլուծությունը, որոնք անպայման օգտակար կլինեն: Հաճախ արտոնությունների մեծացման մեխանիզմներն իրենք բավականին պարզ են. դժվարություններ են առաջանում տեղեկատվության կառուցվածքի և վերլուծության ժամանակ: Հետևաբար, ես որոշեցի սկսել «տեսարժան վայրերի շրջագայությունից», այնուհետև դիտարկել յուրաքանչյուր վեկտոր առանձին հոդվածում: Հուսով եմ, որ կարող եմ ձեզ որոշ ժամանակ խնայել այս թեման սովորելու համար:

Այսպիսով, ինչո՞ւ է արտոնությունների սրումը նույնիսկ հնարավոր 2020 թվականին, եթե մեթոդները վաղուց հայտնի են: Իրականում, եթե օգտագործողը ճիշտ վարվի համակարգը, իսկապես հնարավոր չի լինի դրանում արտոնություններ ավելացնել: Հիմնական գլոբալ խնդիրը, որը ծնում է նման հնարավորություններ անապահով կոնֆիգուրացիա. Անվտանգ կոնֆիգուրացիայի հատուկ դեպք է նաև համակարգում խոցելիություններ պարունակող ծրագրաշարի հնացած տարբերակների առկայությունը:
Արտոնությունների ընդլայնում անապահով կոնֆիգուրացիայի միջոցով
Նախ, եկեք զբաղվենք անապահով կոնֆիգուրացիայից: Սկսենք նրանից, որ ՏՏ մասնագետները հաճախ օգտագործում են ձեռնարկներ և ռեսուրսներ, ինչպիսիք են stackoverflow-ը, որոնցից շատերը պարունակում են ոչ անվտանգ հրամաններ և կազմաձևեր: Վառ օրինակ է որ stackoverflow-ից ամենաշատ պատճենված կոդը սխալ է պարունակում: Փորձառու ադմինը կտեսնի խնդիրը, բայց դա իդեալական աշխարհում է: Անգամ իրավասու մասնագետներ ավելացել է ծանրաբեռնվածությունը ընդունակ են սխալվելու. Պատկերացրեք, որ ադմինիստրատորը նախապատրաստում և համակարգում է փաստաթղթերը հաջորդ մրցույթի համար՝ միաժամանակ խորանալով նոր տեխնոլոգիայի մեջ, որը պետք է ներդրվի հաջորդ եռամսյակում՝ պարբերաբար լուծելով օգտատերերի աջակցության խնդիրները: Եվ այնուհետև նրան հանձնարարվում է արագ կարգավորել մի քանի վիրտուալ մեքենաներ և ծառայություններ մատուցել դրանց վրա: Ի՞նչ եք կարծում, որքա՞ն է հավանականությունը, որ ադմինը պարզապես չի նկատի սխալը: Հետո մասնագետները փոխվում են, բայց հենակները մնում են, մինչդեռ ընկերությունները միշտ ձգտում են նվազագույնի հասցնել ծախսերը, այդ թվում՝ ՏՏ մասնագետների համար:
Կեղծ կեղև և jailbreak
Շահագործման ընթացքում ձեռք բերված համակարգի կեղևը հաճախ սահմանափակ է, հատկապես, եթե այն ձեռք եք բերել վեբ սերվերի օգտագործողին կոտրելով: Օրինակ՝ կեղևի սահմանափակումները կարող են կանխել sudo հրամանի օգտագործումը՝ սխալ հաղորդագրությամբ.
sudo: no tty present and no askpass program specifiedԵրբ դուք ունեք shell, ես խորհուրդ եմ տալիս ստեղծել լիարժեք տերմինալ, օրինակ, օգտագործելով Python:
python -c 'import pty;pty.spawn("/bin/bash")'Դուք կարող եք հարցնել. «Ինչու՞ ինձ պետք են հազար հրամաններ, եթե ես կարող եմ օգտագործել մեկը, օրինակ, ֆայլեր փոխանցելու համար»: Բանն այն է, որ համակարգերը կարող են տարբեր կերպ կարգավորվել. Մեկ այլ հոսթ կարող է չունենալ Python-ը տեղադրված, բայց Perl-ը կարող է ներկա լինել: Վարպետությունը համակարգում ծանոթ բաներ անելն է՝ առանց ծանոթ գործիքների: Հատկությունների ամբողջական ցանկը կարելի է գտնել .
Ցածր արտոնությունների պատյան կարելի է ձեռք բերել օգտագործելով и (Զարմանալիորեն, նույնիսկ GIMP):
Դիտեք հրամանների պատմությունը
Linux-ը ֆայլում հավաքում է բոլոր կատարված հրամանների պատմությունը ~ / .բաշ_պատմություն. Եթե սերվերն ակտիվորեն օգտագործվում է, և դրա պատմությունը չի մաքրվում, ապա այս ֆայլում հավատարմագրերը գտնելու մեծ հավանականություն կա: Պատմությունը մաքրելը պարզապես անհարմար է: Եթե ադմինիստրատորը ստիպված լինի ընտրել տասը հարկանի հրամաններ ի միջոցով, իհարկե, նրա համար ավելի հարմար կլինի զանգահարել այս հրամանը պատմությունից, քան նորից մուտքագրել այն։ Բացի այդ, շատերը չգիտեն այս «հաքի» մասին: Եթե համակարգում կան այլընտրանքային կճեպներ, ինչպիսիք են Zsh-ը կամ Fish-ը, նրանք պահպանում են իրենց պատմությունը: Հրամանների պատմությունը ցանկացած վահանակում ցուցադրելու համար պարզապես մուտքագրեք պատմության հրամանը:
cat ~/.bash_history
cat ~/.mysql_history
cat ~/.nano_history
cat ~/.php_history
cat ~/.atftp_historyԿա համօգտագործվող հոսթինգ, որում սերվերն օգտագործվում է մի քանի կայքեր հոսթինգի համար։ Սովորաբար, այս կոնֆիգուրացիայի դեպքում յուրաքանչյուր ռեսուրսին հատկացվում է իր սեփական օգտվողին առանձին տնային գրացուցակ և վիրտուալ հոսթ: Այսպիսով, եթե կոնֆիգուրացիան սխալ է, դուք կարող եք գտնել .bash_history ֆայլ վեբ ռեսուրսի արմատական գրացուցակում:
Ֆայլային համակարգում գաղտնաբառերի որոնում և հարակից համակարգերի վրա հարձակումներ
Տարբեր ծառայությունների համար կազմաձևման ֆայլերը կարող են ընթեռնելի լինել ձեր ընթացիկ օգտագործողի կողմից: Դրանք կարող են պարունակել հավատարմագրեր՝ հստակ տեքստով՝ գաղտնաբառեր տվյալների բազա կամ հարակից ծառայություններ մուտք գործելու համար: Նույն գաղտնաբառը կարող է օգտագործվել ինչպես տվյալների բազա մուտք գործելու, այնպես էլ արմատային օգտատիրոջ թույլտվության համար (հավատարմագրային անձնակազմ):
Պատահում է, որ հայտնաբերված հավատարմագրերը պատկանում են այլ հոստերի ծառայություններին: Վտանգված հոսթի միջոցով ենթակառուցվածքի վրա հարձակում մշակելը ավելի վատ չէ, քան այլ հյուրընկալողներ շահագործելը: Հարակից համակարգերը կարելի է գտնել նաև ֆայլային համակարգում IP հասցեների որոնման միջոցով:
grep -lRi "password" /home /var/www /var/log 2>/dev/null | sort | uniq #Find string password (no cs) in those directories
grep -a -R -o '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' /var/log/ 2>/dev/null | sort -u | uniq #IPs inside logsԵթե վտանգված հոսթն ունի համացանցից հասանելի վեբ հավելված, ապա ավելի լավ է նրա տեղեկամատյանները բացառել IP հասցեի որոնումից: Համացանցից ռեսուրսի օգտատերերի հասցեները դժվար թե օգտակար լինեն մեզ համար, բայց ներքին ցանցի հասցեները (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) և որտեղ են նրանք գնում, դատելով տեղեկամատյաններից, կարող են հետաքրքրություն առաջացնել:
Sudo
Sudo հրամանը թույլ է տալիս օգտվողին կատարել հրաման արմատային համատեքստում՝ օգտագործելով իր սեփական գաղտնաբառը կամ ընդհանրապես առանց դրա: Linux-ում շատ գործողություններ պահանջում են արմատային արտոնություններ, բայց որպես root աշխատելը համարվում է շատ վատ պրակտիկա: Փոխարենը, ավելի լավ է օգտագործել ընտրովի թույլտվություն՝ արմատային համատեքստում հրամաններ կատարելու համար: Այնուամենայնիվ, Linux-ի շատ գործիքներ, ներառյալ ստանդարտները, ինչպիսիք են vi-ն, կարող են օգտագործվել արտոնությունները միանգամայն օրինական ձևերով մեծացնելու համար: Հարմար մեթոդ գտնելու համար խորհուրդ եմ տալիս նայել .
Առաջին բանը, որ դուք պետք է անեք, երբ համակարգ մուտք գործեք, սա sudo -l հրամանն է: Այն կցուցադրի sudo հրամանն օգտագործելու թույլտվությունը: Եթե առանց գաղտնաբառի օգտատեր ձեռք բերվի (օրինակ՝ apache կամ www-data), ապա sudo-ի միջոցով արտոնությունների ընդլայնման վեկտորը քիչ հավանական է։ Sudo-ն օգտագործելիս համակարգը կպահանջի գաղտնաբառ: Դուք նույնպես չեք կարողանա գաղտնաբառ սահմանել passwd հրամանի միջոցով. այն կպահանջի օգտատիրոջ ընթացիկ գաղտնաբառը: Բայց եթե sudo-ն դեռ հասանելի է, ապա, ըստ էության, դուք պետք է փնտրեք.
- ցանկացած թարգմանիչ, բոլորը կարող են ստեղծել կեղև (PHP, Python, Perl);
- ցանկացած տեքստային խմբագրիչներ (vim, vi, nano);
- ցանկացած հեռուստադիտող (ավելի քիչ, ավելի շատ);
- ֆայլային համակարգի հետ աշխատելու ցանկացած հնարավորություն (cp, mv);
- գործիքներ, որոնք ունեն bash, ինտերակտիվ կամ որպես գործարկվող հրաման (awk, find, nmap, tcpdump, man, vi, vim, ansible):
Սուիդ/Սգիդ
Ինտերնետում կան բազմաթիվ ձեռնարկներ, որոնք խորհուրդ են տալիս հավաքել բոլոր suid/sgid հրամանները, սակայն հազվագյուտ հոդվածը տալիս է կոնկրետություններ, թե ինչ անել այս ծրագրերի հետ: Գտնվում են արտոնությունների ընդլայնման տարբերակներ, որոնք չեն ներառում շահագործում . Նաև մի շարք գործարկվող ֆայլեր ունեն հատուկ խոցելիություններ ՕՀ տարբերակի համար, .
Իդեալական աշխարհում դուք կգործարկեիք բոլոր տեղադրված փաթեթները առնվազն Searchsploit-ի միջոցով: Գործնականում արժե նման բան անել ամենահայտնի ծրագրերով, ինչպիսին sudo-ն է: Նաև միշտ կա հնարավորություն օգտագործելու և աջակցելու ավտոմատացված գործիքների մշակմանը, որոնք ընդգծում են հետաքրքիր գործարկվող ֆայլերը՝ suid/sgid բիթերով սահմանված արտոնությունների ընդլայնման տեսանկյունից: Նման գործիքների ցանկը կներկայացնեմ հոդվածի համապատասխան բաժնում։
Cron-ի կամ Init-ի կողմից գործարկվող գրավոր սցենարներ Root համատեքստում
Cron-ի աշխատանքները կարող են աշխատել տարբեր օգտատերերի, այդ թվում՝ root-ի համատեքստում: Եթե cron-ի աշխատանքը ստեղծվել է գործարկվող ֆայլի հղումով, և այն գրելի է ձեր կողմից, այն հեշտությամբ կարող է փոխարինվել վնասակարով և արտոնությունների ընդլայնում կարող է իրականացվել: Լռելյայնորեն, cron առաջադրանքներով ֆայլերը ընթեռնելի են ցանկացած օգտագործողի կողմից:
ls -la /etc/cron.d # show cron jobs Իրավիճակը նույնն է սկզբում. Տարբերությունն այն է, որ cron-ում առաջադրանքները կատարվում են պարբերաբար, իսկ init-ում դրանք կատարվում են համակարգի գործարկման ժամանակ: Գործելու համար ձեզ հարկավոր է վերաբեռնել համակարգը, և որոշ ծառայություններ կարող են չգործարկվել (եթե դրանք գրանցված չեն եղել գործարկման մեջ):
ls -la /etc/init.d/ # show init scripts Կարող եք նաև որոնել ցանկացած օգտատիրոջ կողմից գրվող ֆայլեր:
find / -perm -2 -type f 2>/dev/null # find world writable filesՄեթոդը բավականին հայտնի է. փորձառու համակարգի ադմինիստրատորները զգուշորեն օգտագործում են chmod հրամանը: Այնուամենայնիվ, ինտերնետի ձեռնարկների ճնշող մեծամասնությունը նկարագրում է առավելագույն իրավունքները սահմանելը: Համակարգի անփորձ ադմինիստրատորների «ուղղակի այն գործելու համար» մոտեցումը սկզբունքորեն հնարավորություններ է ստեղծում արտոնությունների ընդլայնման համար: Հնարավորության դեպքում ավելի լավ է որոնել ձեր հրամանների պատմությունը՝ chmod-ի ոչ անվտանգ օգտագործման համար:
chmod +w /path
chmod 777 /pathՄատչելիություն այլ օգտվողների պատյաններ
Մենք նայում ենք օգտվողների ցանկին /etc/passwd-ում: Մենք ուշադրություն ենք հրավիրում նրանց վրա, ովքեր ունեն կեղև: Հնարավոր է բիրտ ուժի ենթարկել այս օգտատերերին՝ հնարավոր է, որ արդյունքում ստացված օգտատիրոջ միջոցով հնարավոր լինի ավելացնել արտոնությունները։
Անվտանգությունը բարելավելու համար խորհուրդ եմ տալիս միշտ հետևել նվազագույն արտոնության սկզբունքին։ Նաև իմաստ ունի ժամանակ հատկացնել խնդիրների լուծումից հետո մնացած ցանկացած անապահով կոնֆիգուրացիա ստուգելու համար. սա համակարգի ադմինիստրատորի «տեխնիկական պարտքն» է։
Ինքնագրված կոդ
Արժե ուշադիր նայել գործարկվող ֆայլերը օգտագործողի գլխավոր գրացուցակում և վեբ սերվերում (/var/www/, եթե այլ բան նախատեսված չէ): Այս ֆայլերը կարող են լինել բոլորովին անապահով լուծում և պարունակում են անհավանական հաքեր: Իհարկե, եթե դուք ունեք որոշակի շրջանակ վեբ սերվերի գրացուցակում, իմաստ չունի դրանում զրոյական օր փնտրել որպես pentest-ի մաս, բայց խորհուրդ է տրվում գտնել և ուսումնասիրել մաքսային փոփոխությունները, պլագինները և բաղադրիչները:
Անվտանգությունը բարելավելու համար ավելի լավ է հնարավորինս խուսափել հատուկ սկրիպտներում հավատարմագրերի օգտագործումից, ինչպես նաև պոտենցիալ վտանգավոր գործառույթներից, ինչպիսիք են /etc/shadow-ը կարդալը կամ id_rsa-ի շահարկումը:
Արտոնությունների մեծացում՝ խոցելիության շահագործման միջոցով
Նախքան շահագործման միջոցով արտոնությունները մեծացնելու փորձը, կարևոր է հասկանալ ֆայլերի փոխանցում թիրախային հյուրընկալողին. Բացի սովորական գործիքներից, ինչպիսիք են ssh, ftp, http (wget, curl), կա մի ամբողջություն. .
Ձեր համակարգի անվտանգությունը բարելավելու համար պարբերաբար թարմացրեք այն մինչև վերջին տարբերակները: կայուն տարբերակները, ինչպես նաև փորձեք օգտագործել Enterprise-ի համար նախատեսված բաշխումներ: Հակառակ դեպքում, հազվադեպ, բայց կան իրավիճակներ, երբ apt upgrade-ը համակարգը դարձնում է անգործունակ:
Ծառայությունների շահագործում, որոնք գործում են արմատային օգտվողի համատեքստում
Linux-ի որոշ ծառայություններ աշխատում են որպես արտոնյալ արմատական օգտվող: Դրանք կարելի է գտնել՝ օգտագործելով ps aux | հրամանը grep արմատ. Այս դեպքում ծառայությունը կարող է չհայտարարվել ինտերնետում և հասանելի լինել տեղական մակարդակում: Եթե այն ունի հանրային շահագործում, դրանք կարող են ապահով օգտագործվել. ծառայության խափանումը ձախողման դեպքում շատ ավելի քիչ կարևոր է, քան ՕՀ-ի խափանումը:
ps -aux | grep root # LinuxԱմենահաջող դեպքը կարելի է համարել կոտրված ծառայության շահագործումը root օգտագործողի համատեքստում։ SMB ծառայության շահագործումը SYSTEM-ին տալիս է արտոնյալ մուտք Windows համակարգերում (օրինակ՝ ms17-010-ի միջոցով): Այնուամենայնիվ, սա հազվադեպ է Linux համակարգերում, այնպես որ դուք կարող եք շատ ժամանակ ծախսել արտոնությունների մեծացման վրա:
Linux միջուկի խոցելիության շահագործում
Սա վերջին ճանապարհն է: Անհաջող շահագործումը կարող է հանգեցնել համակարգի խափանման, իսկ վերագործարկման դեպքում որոշ ծառայություններ (ներառյալ այն ծառայությունները, որոնց միջոցով հնարավոր է եղել ստանալ սկզբնական կեղևը) կարող են չգործարկվել: Պատահում է, որ ադմինիստրատորը պարզապես մոռացել է օգտագործել systemctl enable հրամանը։ Բացի այդ, դա մեծ դժգոհություն կառաջացնի ձեր աշխատանքից, եթե շահագործումը համաձայնեցված չլիներ:
Եթե որոշել եք օգտագործել exploitdb-ի աղբյուրի կոդերը, համոզվեք, որ կարդացեք սկրիպտի սկզբի մեկնաբանությունները։ Ի թիվս այլ բաների, այն սովորաբար նկարագրում է, թե ինչպես ճիշտ կազմել տվյալ շահագործումը: Եթե դուք չափազանց ծույլ եք կամ դրա կարիքն ունեք «երեկ» ժամկետների պատճառով, կարող եք որոնել պահեստներ արդեն կազմված շահագործումներով, . Այնուամենայնիվ, դուք պետք է հասկանաք, որ այս դեպքում դուք կստանաք խոզի խոզուկ: Մյուս կողմից, եթե ծրագրավորողը մինչև վերջին բայթը հասկանար, թե ինչպես են կառուցված համակարգիչը և դրա օգտագործած ծրագրաշարը, նա երբեք իր ողջ կյանքի ընթացքում ոչ մի տող կոդ չէր գրի:
cat /proc/version
uname -a
searchsploit "Linux Kernel" Մետփպոլիտ
Կապը բռնելու և կարգավորելու համար միշտ ավելի լավ է օգտագործել exploit/multi/handler մոդուլը: Հիմնական բանը ճիշտ բեռնվածություն սահմանելն է, օրինակ՝ generic/shell/reverce_tcp կամ generic/shell/bind_tcp։ Metasploit-ում ստացված կեղևը կարող է թարմացվել Meterpreter-ի՝ օգտագործելով post/multi/manage/shell_to_meterpreter մոդուլը: Meterpreter-ի միջոցով դուք կարող եք ավտոմատացնել հետշահագործման գործընթացը: Օրինակ՝ post/multi/recon/local_exploit_suggester մոդուլը ստուգում է պլատֆորմը, ճարտարապետությունը և շահագործման համար անհրաժեշտ օբյեկտները և առաջարկում Metasploit մոդուլներ՝ նպատակային համակարգի արտոնությունները մեծացնելու համար: Meterpreter-ի շնորհիվ արտոնությունների մեծացումը երբեմն կարող է լինել նույնքան պարզ, որքան ճիշտ մոդուլը գործարկելը, բայց կոտրելն առանց հասկանալու, թե ինչ է կատարվում գլխարկի տակ, «ճշմարիտ» չէ (դուք դեռ պետք է հաշվետվություն գրեք):
Գործիքներ
Տեղական տեղեկատվության հավաքման ավտոմատացման գործիքները ձեզ շատ ժամանակ և ջանք կխնայեն, բայց դրանք միայնակ չեն կարող լիովին բացահայտել արտոնությունների ընդլայնման ուղին, հատկապես միջուկի խոցելիության դեպքում: Ավտոմատացման գործիքները կկատարեն բոլոր անհրաժեշտ հրամանները, որպեսզի դուք հավաքեք տեղեկատվություն համակարգի մասին, բայց նաև կարևոր է, որ կարողանաք վերլուծել ստացված տվյալները: Հուսով եմ, որ իմ հոդվածը օգտակար կլինի ձեզ այս առումով: Իհարկե, շատ ավելի շատ գործիքներ կան, քան ես կթվարկեմ ստորև, բայց դրանք բոլորն էլ մոտավորապես նույն բանն են անում՝ դա ավելի շատ ճաշակի խնդիր է:
Բավականին թարմ գործիք, առաջին commit-ը թվագրվում է 2019 թվականի հունվարին: Այս պահին իմ սիրելի գործիքը: Բանն այն է, որ այն ընդգծում է արտոնությունների սրման ամենահետաքրքիր վեկտորները։ Համաձայնեք, այս մակարդակում փորձագիտական գնահատական ստանալն ավելի հարմար է, քան մոնոլիտ չմշակված տվյալները վերլուծելը։
Իմ երկրորդ սիրելի գործիքը, այն նաև հավաքում և կազմակերպում է տեղական թվարկումից ստացված տվյալները:
Այս շահագործումը կվերլուծի համակարգը շահագործման համար հարմար պայմանների համար: Ըստ էության, այն կկատարի նույն աշխատանքը, ինչ Metasploit local_exploit_suggester մոդուլը, բայց կառաջարկի ոչ թե Metasploit մոդուլներ, այլ հղումներ դեպի exploit-db աղբյուրի կոդերը։
Այս սցենարը կհավաքի և կհամակարգի մեծ քանակությամբ տեղեկատվություն ըստ բաժինների, ինչը կարող է օգտակար լինել արտոնությունների ավելացման վեկտոր ձևավորելու համար:
Հաջորդ անգամ կմանրամասնեմ: .
Source: www.habr.com
