Mimi ni mzizi. Kuelewa Ukuzaji wa Hakimiliki ya Mfumo wa Uendeshaji wa Linux

Nilitumia robo ya kwanza ya 2020 kujiandaa kwa mtihani wa OSCP. Kutafuta habari kwenye Google na majaribio mengi "ya kipofu" yalichukua wakati wangu wote wa bure. Ilikuwa ngumu sana kuelewa taratibu za kuongeza marupurupu. Kozi ya PWK inazingatia sana mada hii, lakini nyenzo za kufundishia hazitoshi kamwe. Kuna miongozo mingi kwenye Mtandao iliyo na amri muhimu, lakini mimi si shabiki wa kufuata kwa upofu mapendekezo bila kuelewa itasababisha nini.

Ningependa kushiriki nawe yale niliyojifunza wakati wa kutayarisha na kufaulu kwa mafanikio mtihani (ikiwa ni pamoja na kuingia mara kwa mara kwenye Hack The Box). Nilihisi shukrani nyingi kwa kila taarifa iliyonisaidia kutembea katika njia ya Jaribu Zaidi kwa uangalifu zaidi, sasa ni wakati wangu wa kurejea kwa jumuiya.

Ninataka kukupa mwongozo wa jinsi ya kuongeza marupurupu katika OS Linux, ambayo ni pamoja na uchambuzi wa vekta za kawaida na vipengele vinavyohusiana ambavyo hakika vitakuwa na manufaa kwako. Mara nyingi njia za kuongeza marupurupu zenyewe ni rahisi sana; ugumu huibuka wakati wa kuunda na kuchambua habari. Kwa hiyo, niliamua kuanza na "ziara ya kuona" na kisha kuzingatia kila vector katika makala tofauti. Natumai nitaokoa muda katika kutafiti mada.

Mimi ni mzizi. Kuelewa Ukuzaji wa Hakimiliki ya Mfumo wa Uendeshaji wa Linux

Kwa hivyo kwa nini kuongezeka kwa upendeleo kunawezekana hata mnamo 2020 ikiwa njia zimejulikana kwa muda mrefu sana? Kwa kweli, ikiwa mtumiaji anashughulikia mfumo kwa usahihi, haitawezekana kuongeza marupurupu ndani yake. Shida kuu ya ulimwengu ambayo hutoa fursa kama hizo ni usanidi usio salama. Uwepo wa matoleo ya zamani ya programu yaliyo na udhaifu katika mfumo pia ni kesi maalum ya usanidi usio salama.

Ukuaji wa fursa kupitia usanidi usio salama

Kwanza, hebu tushughulike na usanidi usio salama. Hebu tuanze na Wataalamu wa IT mara nyingi hutumia miongozo na rasilimali kama vile stackoverflow, nyingi ambazo zina amri na usanidi usio salama. Mfano wa kuvutia - habari kwamba msimbo ulionakiliwa zaidi kutoka kwa stackoverflow ulikuwa na hitilafu. Msimamizi mwenye uzoefu ataona jamb, lakini hii ni katika ulimwengu bora. Hata wataalamu wenye uwezo kuongezeka kwa mzigo wa kazi uwezo wa kufanya makosa. Fikiria kuwa msimamizi anatayarisha na kuratibu nyaraka za zabuni inayofuata, wakati huo huo akichunguza teknolojia mpya ambayo itatekelezwa katika robo inayofuata, huku akisuluhisha mara kwa mara matatizo ya usaidizi wa watumiaji. Na kisha anapewa jukumu la kusanidi haraka mashine kadhaa za kawaida na kusambaza huduma juu yao. Je, unafikiri kuna uwezekano gani kwamba msimamizi hataona jamb? Kisha wataalamu hubadilika, lakini mikongojo inabaki, wakati makampuni daima hujitahidi kupunguza gharama, ikiwa ni pamoja na wafanyakazi wa IT.

Shell ya uwongo na mapumziko ya jela

Ganda la mfumo lililopatikana wakati wa hatua ya unyonyaji mara nyingi huwa na kikomo, haswa ikiwa uliipata kwa kumnasa mtumiaji wa seva ya wavuti. Kwa mfano, vizuizi vya ganda vinaweza kukuzuia kutekeleza amri ya sudo, ikitoa kosa:

sudo: no tty present and no askpass program specified

Mara tu ukiwa na ganda, ninapendekeza kuunda terminal kamili, kwa mfano kutumia Python.

python -c 'import pty;pty.spawn("/bin/bash")'

Unaweza kuuliza: "Kwa nini ninahitaji amri elfu ikiwa naweza kutumia moja, kwa mfano, kuhamisha faili?" Ukweli ni kwamba mifumo imeundwa tofauti; mwenyeji aliyepewa anaweza kuwa hana Python iliyosanikishwa, lakini anaweza kuwa na Perl. Ujuzi ni kuwa na uwezo wa kufanya mambo ya kawaida katika mfumo bila zana zinazojulikana. Orodha kamili ya vipengele inaweza kupatikana hapa.

Ganda la upendeleo wa chini linaweza kupatikana kwa kutumia timu 1 ΠΈ timu 2 (kwa kushangaza, hata GIMP).

Tazama historia ya amri

Linux hukusanya historia ya amri zote zilizotekelezwa kwenye faili ~ / .bash_historia. Ikiwa seva inatumika kikamilifu na historia yake haijafutwa, kuna uwezekano mkubwa wa kupata vitambulisho katika faili hii. Kufuta historia sio rahisi. Ikiwa msimamizi analazimika kuchagua amri za hadithi kumi kupitia , bila shaka, itakuwa rahisi zaidi kwake kuita amri hii kutoka kwa historia kuliko kuingia tena. Zaidi ya hayo, watu wengi hawajui kuhusu "udukuzi" huu. Ikiwa kuna ganda mbadala kama Zsh au Samaki kwenye mfumo, wana historia yao wenyewe. Ili kuonyesha historia ya amri kwenye ganda lolote, chapa tu historia ya amri.

cat ~/.bash_history
cat ~/.mysql_history
cat ~/.nano_history
cat ~/.php_history
cat ~/.atftp_history

Kuna upangishaji wa pamoja, ambapo seva hutumiwa kupangisha tovuti kadhaa. Kwa kawaida, kwa usanidi huu, kila rasilimali ina mtumiaji wake mwenyewe na saraka tofauti ya nyumbani na mwenyeji wa kawaida. Kwa hivyo, ikiwa imesanidiwa vibaya, unaweza kupata faili ya .bash_history kwenye saraka ya mizizi ya rasilimali ya wavuti.

Kutafuta nywila katika mfumo wa faili na mashambulizi kwenye mifumo iliyo karibu

Faili za usanidi za huduma mbalimbali zinaweza kusomeka na mtumiaji wako wa sasa. Ndani yao unaweza kupata sifa katika maandishi wazi - nywila za kufikia hifadhidata au huduma zinazohusiana. Nenosiri sawa linaweza kutumika kufikia hifadhidata na kuidhinisha mtumiaji wa mizizi (utumishi wa kitambulisho).
Inatokea kwamba vitambulisho vilivyopatikana ni vya huduma kwa wapangishaji wengine. Kuendeleza shambulio la miundombinu kupitia mwenyeji aliyeathiriwa sio mbaya zaidi kuliko kuwanyonya wenyeji wengine. Mifumo ya karibu pia inaweza kupatikana kwa kutafuta anwani za IP katika mfumo wa faili.

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

Ikiwa mwenyeji aliyeathiriwa ana programu ya wavuti inayopatikana kutoka kwa Mtandao, ni bora kuwatenga kumbukumbu zake kutoka kwa utafutaji wa anwani za IP. Anwani za watumiaji wa rasilimali kutoka kwa Mtandao haziwezekani kuwa na manufaa kwetu, lakini anwani za mtandao wa ndani (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) na wapi wanaenda, kwa kuzingatia kumbukumbu. , inaweza kuwa ya riba.

Sudo

Amri ya sudo inampa mtumiaji uwezo wa kutekeleza amri katika muktadha wa mizizi kwa kutumia nywila zao wenyewe au bila kutumia nywila hata kidogo. Shughuli nyingi katika Linux zinahitaji haki za mizizi, lakini kukimbia kama mzizi huchukuliwa kuwa mazoea mabaya sana. Badala yake, ni bora kutumia ruhusa ya kuchagua kutekeleza amri katika muktadha wa mizizi. Walakini, zana nyingi za Linux, pamoja na zile za kawaida kama vi, zinaweza kutumika kuongeza upendeleo kwa njia halali. Ili kupata njia inayofaa, napendekeza kutazama hapa.

Jambo la kwanza unahitaji kufanya unapopata ufikiaji wa mfumo ni kuendesha sudo -l amri. Itaonyesha ruhusa ya kutumia sudo amri. Ikiwa mtumiaji asiye na nenosiri atapatikana (kama vile apache au www-data), vekta ya upanuzi wa fursa kupitia sudo haiwezekani. Unapotumia sudo, mfumo utauliza nywila. Hutaweza pia kuweka nenosiri kwa kutumia passwd amri; itauliza nenosiri la sasa la mtumiaji. Lakini ikiwa sudo bado inapatikana, basi kimsingi unahitaji kutafuta:

  • mkalimani wowote, mtu yeyote anaweza kutoa ganda (PHP, Python, Perl);
  • wahariri wowote wa maandishi (vim, vi, nano);
  • watazamaji wowote (chini, zaidi);
  • uwezo wowote wa kufanya kazi na mfumo wa faili (cp, mv);
  • Zana ambazo zina pato katika bash, ingiliani au kama amri inayoweza kutekelezwa (awk, find, nmap, tcpdump, man, vi, vim, ansible).

Suid/Sgid

Kuna miongozo mingi kwenye Mtandao ambayo inashauri kukusanya amri zote za suid/sgid, lakini nakala adimu inatoa mahususi juu ya nini cha kufanya na programu hizi. Chaguzi za upendeleo zinazoongezeka ambazo hazizingatii matumizi ya ushujaa zinaweza kupatikana hapa. Pia, faili kadhaa zinazoweza kutekelezwa zina udhaifu maalum kwa toleo la OS, kwa mfano.

Katika ulimwengu bora, ungeendesha vifurushi vyote vilivyosakinishwa kupitia angalau utafutaji wa utafutaji. Kwa mazoezi, hii inapaswa kufanywa na programu maarufu kama sudo. Pia kuna chaguo la kutumia na kusaidia uundaji wa zana za kiotomatiki ambazo zitaangazia kuvutia, kutoka kwa mtazamo wa upandaji wa upendeleo, faili zinazoweza kutekelezwa na seti ya biti za suid/sgid. Nitatoa orodha ya zana kama hizo katika sehemu inayolingana ya kifungu hicho.

Hati zinazoweza kuandikwa zinazoendeshwa na Cron au Init katika muktadha wa Root

Kazi za Cron zinaweza kuendeshwa chini ya muktadha tofauti wa watumiaji, pamoja na mzizi. Ikiwa kazi ya cron imeundwa na kiunga cha faili inayoweza kutekelezwa, na inapatikana kwako kuandika, inaweza kubadilishwa kwa urahisi na ile mbaya na kuongezeka kwa upendeleo. Walakini, kwa chaguo-msingi, faili zilizo na kazi za cron zinaweza kusomwa na mtumiaji yeyote.

ls -la /etc/cron.d  # show cron jobs 

Hali ni sawa na init. Tofauti ni kwamba kazi katika cron zinatekelezwa mara kwa mara, na kwa init - wakati wa kuanzisha mfumo. Uendeshaji utahitaji kuwasha upya mfumo, na baadhi ya huduma huenda zisianze (ikiwa hazijasajiliwa katika uanzishaji).

ls -la /etc/init.d/  # show init scripts 

Unaweza pia kutafuta faili ambazo zinaweza kuandikwa na mtumiaji yeyote.

find / -perm -2 -type f 2>/dev/null # find world writable files

Njia hiyo inajulikana sana; wasimamizi wa mfumo wenye uzoefu hutumia kwa uangalifu amri ya chmod. Hata hivyo, kwenye mtandao, idadi kubwa ya miongozo inaelezea kuweka haki za juu zaidi. Mbinu ya "ifanye tu ifanye kazi" ya wasimamizi wa mfumo wasio na uzoefu hutengeneza fursa za kuongezeka kwa marupurupu kimsingi. Ikiwezekana, ni bora kuangalia katika historia ya amri kwa matumizi yasiyo salama ya chmod.

chmod +w /path 
chmod 777 /path

Kupata ufikiaji wa ganda kwa watumiaji wengine

Tunaangalia orodha ya watumiaji katika /etc/passwd. Tunazingatia wale ambao wana ganda. Unaweza kuwadhulumu watumiaji hawa - inawezekana kwamba kupitia mtumiaji anayesababisha hatimaye itawezekana kuongeza marupurupu.

Ili kuboresha usalama, ninapendekeza kwamba daima uzingatie kanuni ya upendeleo mdogo. Pia inaeleweka kutumia muda kuangalia usanidi usio salama ambao unaweza kubaki baada ya utatuzi - hii ni "jukumu la kiufundi" la msimamizi wa mfumo.

Msimbo wa kujiandikia

Inafaa kuangalia kwa karibu faili zinazoweza kutekelezwa kwenye saraka ya nyumbani ya mtumiaji na seva ya wavuti (/var/www/, isipokuwa ikiwa imeainishwa vinginevyo). Faili hizi zinaweza kuwa suluhu isiyo salama kabisa na zina vigongo vya ajabu. Kwa kweli, ikiwa una aina fulani ya mfumo kwenye saraka ya seva ya wavuti, haina maana kutafuta siku sifuri ndani yake kama sehemu ya pentest, lakini inashauriwa kupata na kusoma marekebisho maalum, programu-jalizi na vijenzi.

Ili kuongeza usalama, ni bora, ikiwezekana, kuepuka kutumia vitambulisho katika hati zinazojiandika, pamoja na utendaji unaoweza kuwa hatari, kama vile kusoma /etc/shadow au kuchezea id_rsa.

Kuinua marupurupu kupitia unyonyaji wa udhaifu

Kabla ya kujaribu kuongeza marupurupu kupitia unyonyaji, ni muhimu kuelewa kuhamisha faili kwa seva pangishi inayolengwa. Mbali na zana za kawaida kama ssh, ftp, http (wget, curl) kuna nzima "zoo" ya uwezekano.

Ili kuboresha usalama wa mfumo, isasishe mara kwa mara hadi ya hivi punde zaidi imara matoleo, na pia jaribu kutumia usambazaji iliyoundwa kwa Enterprise. Vinginevyo, ni nadra lakini kuna hali ambapo uboreshaji unaofaa hufanya mfumo usifanye kazi.

Kutumia huduma zinazoendeshwa chini ya muktadha wa mtumiaji wa mizizi

Baadhi ya huduma za Linux huendesha kama mzizi. Wanaweza kupatikana kwa kutumia amri ps aux | mizizi ya grep. Katika kesi hii, huduma haiwezi kutangazwa kwenye mtandao na inapatikana ndani ya nchi. Ikiwa ina matumizi ya umma, yanaweza kutumika kwa usalama: ajali ya huduma ikiwa itashindwa ni muhimu sana kuliko ajali ya OS.

ps -aux | grep root # Linux

Kesi iliyofanikiwa zaidi inaweza kuzingatiwa utendakazi wa huduma iliyodukuliwa katika muktadha wa mtumiaji wa mizizi. Uendeshaji wa huduma ya SMB hutoa ufikiaji wa SYSTEM wa upendeleo kwenye mifumo ya Windows (kwa mfano, kupitia ms17-010). Walakini, hii sio kawaida kwenye mifumo ya Linux, kwa hivyo unaweza kutumia muda mwingi kuongeza marupurupu.

Kutumia Athari za Linux Kernel

Hii ndio njia unayopaswa kuchukua mwisho. Uendeshaji usiofanikiwa unaweza kusababisha ajali ya mfumo, na katika tukio la kuanzisha upya, baadhi ya huduma (ikiwa ni pamoja na zile ambazo shell ya awali ilipatikana) haiwezi kuanza. Inatokea kwamba msimamizi alisahau tu kutumia amri ya kuwezesha systemctl. Zaidi itasababisha kutoridhika sana na kazi yako ikiwa operesheni haikukubaliwa.
Ukiamua kutumia misimbo ya chanzo kutoka exploitdb, hakikisha umesoma maoni mwanzoni mwa hati. Miongoni mwa mambo mengine, kawaida husema jinsi ya kukusanya kwa usahihi unyonyaji fulani. Ikiwa wewe ni mvivu sana au ulilazimika kuifanya "jana" kwa sababu ya tarehe za mwisho, unaweza kutafuta hazina zilizo na ushujaa uliokusanywa tayari, kwa mfano. Hata hivyo, unapaswa kuelewa kwamba katika kesi hii utapata nguruwe katika poke. Kwa upande mwingine, ikiwa mtengenezaji wa programu angeelewa jinsi kompyuta inavyofanya kazi na programu inayoitumia, hataandika mstari mmoja wa msimbo katika maisha yake yote.

cat /proc/version
uname -a
searchsploit "Linux Kernel" 

Metasploit

Ili kukamata na kushughulikia muunganisho, daima ni bora kutumia moduli ya kunyonya / nyingi / kushughulikia. Jambo kuu ni kuweka mzigo sahihi wa malipo, kwa mfano, generic/shell/reverse_tcp au generic/shell/bind_tcp. Ganda linalozalishwa na Metasploit linaweza kuboreshwa hadi Meterpreter kwa kutumia moduli ya post/multi/manage/shell_to_meterpreter. Ukitumia Meterpreter, unaweza kufanyia kazi mchakato wa baada ya unyonyaji otomatiki. Kwa mfano, sehemu ya post/multi/recon/local_exploit_suggester hukagua jukwaa, usanifu na huluki zinazohitajika kwa ajili ya unyonyaji na kupendekeza moduli za Metasploit ili kuongeza upendeleo kwenye mfumo lengwa. Shukrani kwa Meterpreter, marupurupu yanayoongezeka wakati mwingine huja hadi kuzindua moduli inayohitajika, lakini utapeli bila kuelewa kinachotokea chini ya kofia sio "kweli" (bado unapaswa kuandika ripoti).

Zana

Zana za kukusanyia taarifa za ndani kiotomatiki zitakuokoa juhudi na wakati mwingi, lakini wao wenyewe hawawezi kutambua kikamilifu njia ya kuongezeka kwa marupurupu, hasa katika kesi ya unyonyaji wa udhaifu wa kernel. Zana za otomatiki zitafanya maagizo yote muhimu kwako kukusanya habari kuhusu mfumo, lakini ni muhimu pia kuweza kuchambua data iliyopokelewa. Natumaini makala yangu itakuwa na manufaa kwako katika suala hili. Kwa kweli, kuna zana nyingi zaidi kuliko nitakavyoorodhesha hapa chini, lakini zote hufanya takriban kitu sawa - hii ni suala la ladha.

Linpea

Tula ya hivi majuzi, ahadi ya kwanza ilianza Januari 2019. Chombo ninachokipenda kwa sasa. Jambo ni kwamba inaangazia vekta zinazovutia zaidi za upandaji wa upendeleo. Kukubaliana, ni rahisi zaidi kupata tathmini ya mtaalam katika ngazi hii kuliko kuchanganua data ghafi ya monolithic.

LineEnum

Chombo changu cha pili ninachopenda, pia hukusanya na kupanga data iliyopatikana kama matokeo ya hesabu ya ndani.

Mshauri wa kutumia Linux (1,2)

Unyonyaji huu utachambua mfumo kwa hali zinazofaa za unyonyaji. Kwa kweli, itafanya kazi sawa na moduli ya Metasploit local_exploit_suggester, lakini itatoa viungo vya kutumia misimbo ya chanzo-db badala ya moduli za Metasploit.

Linuxprivchecker

Hati hii itakusanya na kupanga katika sehemu kiasi kikubwa cha habari ambacho kinaweza kuwa muhimu kwa kuunda vekta kwa upendeleo unaoongezeka.

Wakati mwingine nitaingia kwa undani mwinuko wa marupurupu katika Linux OS kupitia suid/sgid.

Chanzo: mapenzi.com

Kuongeza maoni