Би үндэстэн. Линукс үйлдлийн системийн давуу эрхийг нэмэгдүүлэх тухай ойлголт

Би 2020 оны эхний улирлыг OSCP-ийн шалгалтанд бэлдэж өнгөрөөсөн. Google-ээс мэдээлэл хайж, маш олон "харалган" оролдлого миний бүх чөлөөт цагийг зарцуулсан. Ялангуяа давуу эрх нэмэгдүүлэх механизмыг ойлгоход хэцүү байсан. PWK курс нь энэ сэдэвт маш их анхаарал хандуулдаг боловч сургалтын хэрэглэгдэхүүн хэзээ ч хангалттай байдаггүй. Интернетэд хэрэгтэй тушаал бүхий олон гарын авлага байдаг, гэхдээ би зөвлөмжийг юунд хүргэхийг ойлгохгүйгээр сохроор дагаж мөрдөхийг дэмжигч биш юм.

Шалгалтанд бэлдэж, амжилттай тэнцэх явцад олж мэдсэн зүйлээ (Hack The Box-д үе үе довтлох гэх мэт) хуваалцахыг хүсч байна. Илүү ухамсартай алхахад минь тусалсан мэдээлэл бүрд би маш их талархах мэдрэмжийг мэдэрсэн, одоо миний нийгэмд хариу өгөх цаг нь болсон.

Би танд хамгийн түгээмэл векторууд болон холбогдох функцуудын дүн шинжилгээг багтаасан Линукс үйлдлийн систем дэх давуу эрхийг хэрхэн нэмэгдүүлэх тухай гарын авлагыг өгөхийг хүсч байна. Ихэнхдээ давуу эрх нэмэгдүүлэх механизмууд нь өөрөө маш энгийн байдаг; мэдээллийг бүтэцжүүлэх, дүн шинжилгээ хийхэд бэрхшээлтэй тулгардаг. Тиймээс би "үзэгдэх аялал" -аас эхлээд вектор бүрийг тусдаа өгүүллээр авч үзэхээр шийдсэн. Энэ сэдвийг судлах цагийг тань хэмнэсэн гэж найдаж байна.

Би үндэстэн. Линукс үйлдлийн системийн давуу эрхийг нэмэгдүүлэх тухай ойлголт

Хэрэв аргууд нь маш удаан хугацаанд мэдэгдэж байсан бол яагаад 2020 онд давуу эрхийг нэмэгдүүлэх боломжтой вэ? Үнэн хэрэгтээ, хэрэв хэрэглэгч системийг зөв зохицуулдаг бол түүний давуу эрхийг нэмэгдүүлэх боломжгүй болно. Ийм боломжийг бий болгож буй дэлхийн гол асуудал бол найдваргүй тохиргоо. Системийн сул талуудыг агуулсан програм хангамжийн хуучирсан хувилбарууд байгаа нь бас аюултай тохиргооны онцгой тохиолдол юм.

Аюулгүй тохиргоогоор давуу эрх нэмэгдүүлэх

Эхлээд аюулгүй бус тохиргоотой харьцъя. -ээс эхэлье Мэдээллийн технологийн мэргэжилтнүүд ихэвчлэн stackoverflow гэх мэт гарын авлага, нөөцийг ашигладаг, тэдгээрийн ихэнх нь аюултай тушаалууд болон тохиргоонуудыг агуулна. Гайхалтай жишээ - мэдээ stackoverflow-аас хамгийн их хуулсан код нь алдаатай байсан. Туршлагатай админ саатал харах болно, гэхдээ энэ нь хамгийн тохиромжтой ертөнцөд байна. Чадварлаг мэргэжилтнүүд ч гэсэн ажлын ачаалал нэмэгдсэн алдаа гаргах чадвартай. Администратор дараагийн тендерийн баримт бичгийг бэлтгэж, зохицуулахын зэрэгцээ дараагийн улиралд хэрэгжих шинэ технологийн талаар судалж, хэрэглэгчийн дэмжлэгийн асуудлыг үе үе шийдэж байна гэж төсөөлөөд үз дээ. Дараа нь түүнд хэд хэдэн виртуал машиныг хурдан суулгаж, тэдгээрт үйлчилгээ нэвтрүүлэх үүрэг даалгавар өгсөн. Админ зүгээр л сааталыг анзаарахгүй байх магадлал хэр гэж та бодож байна вэ? Дараа нь мэргэжилтнүүд өөрчлөгддөг ч суга таяг үлддэг бол компаниуд мэдээллийн технологийн ажилтнуудыг оролцуулаад зардлыг багасгахыг үргэлж хичээдэг.

Pseudo-shell болон jailbreak

Ашиглалтын үе шатанд олж авсан системийн бүрхүүл нь ихэвчлэн хязгаарлагдмал байдаг, ялангуяа та вэб серверийн хэрэглэгчийг хакердах замаар олж авсан бол. Жишээлбэл, бүрхүүлийн хязгаарлалт нь таныг sudo командыг ажиллуулахад саад болж, алдаа гаргаж болзошгүй:

sudo: no tty present and no askpass program specified

Бүрхүүлтэй болсны дараа би бүрэн терминал үүсгэхийг зөвлөж байна, жишээ нь Python ашиглах.

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

Та: "Жишээ нь файл дамжуулахад нэгийг ашиглаж чадвал надад яагаад мянган тушаал хэрэгтэй байна вэ?" гэж асууж магадгүй. Үнэн хэрэгтээ системүүд өөр өөр тохируулагдсан байдаг; тухайн хост Python суулгаагүй байж болох ч Perl байж болно. Ур чадвар нь танил хэрэгсэлгүйгээр системд танил зүйлсийг хийж чаддаг байх явдал юм. Онцлогуудын бүрэн жагсаалтыг олж болно энд.

Бага давуу эрх бүхий бүрхүүлийг ашиглан авч болно багууд 1 и багууд 2 (гайхалтай нь, тэр ч байтугай GIMP).

Командын түүхийг харах

Линукс нь файл дахь бүх гүйцэтгэсэн тушаалуудын түүхийг цуглуулдаг ~ / .bash_history. Хэрэв сервер идэвхтэй ашиглагдаж, түүний түүх арилаагүй бол энэ файлаас итгэмжлэл олох магадлал өндөр байна. Түүхийг цэвэрлэх нь зүгээр л эвгүй юм. Хэрэв администратор дамжуулан арван давхар тушаалуудыг сонгох шаардлагатай бол мэдээжийн хэрэг, энэ командыг дахин оруулахаас илүү түүхээс дуудах нь түүнд илүү тохиромжтой байх болно. Нэмж дурдахад олон хүн энэ "хакер"-ын талаар мэддэггүй. Хэрэв системд 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 команд нь хэрэглэгчдэд өөрийн нууц үгээ ашиглан эсвэл огт нууц үг ашиглахгүйгээр үндсэн контекст командыг гүйцэтгэх боломжийг олгодог. Линукс дээрх олон үйлдлүүд нь root эрх шаарддаг ч root эрхээр ажиллуулах нь маш муу практикт тооцогддог. Үүний оронд үндсэн контекстэд командуудыг гүйцэтгэх сонгомол зөвшөөрлийг ашиглах нь дээр. Гэсэн хэдий ч Линуксийн олон хэрэгслийг, тэр дундаа vi гэх мэт стандарт хэрэгслийг хууль ёсны аргаар давуу эрхийг нэмэгдүүлэхэд ашиглаж болно. Тохиромжтой аргыг олохын тулд би хайхыг зөвлөж байна энд.

Системд нэвтрэх үед хамгийн түрүүнд хийх зүйл бол sudo -l командыг ажиллуулах явдал юм. Энэ нь sudo командыг ашиглах зөвшөөрлийг харуулах болно. Хэрэв нууц үггүй хэрэглэгч (apache эсвэл www-өгөгдөл гэх мэт) авсан бол sudo-ээр дамжуулан эрх нэмэгдүүлэх вектор гарах магадлал багатай. Sudo ашиглах үед систем нууц үг асуух болно. Та passwd командыг ашиглан нууц үгээ тохируулах боломжгүй бөгөөд энэ нь хэрэглэгчийн одоогийн нууц үгийг асуух болно. Гэхдээ хэрэв sudo боломжтой хэвээр байгаа бол үндсэндээ та дараахь зүйлийг хайх хэрэгтэй.

  • ямар ч орчуулагч, хэн ч бүрхүүл үүсгэж болно (PHP, Python, Perl);
  • аливаа текст засварлагч (vim, vi, nano);
  • ямар ч үзэгч (бага, илүү);
  • файлын системтэй ажиллах чадвар (cp, mv);
  • Bash, интерактив эсвэл гүйцэтгэх команд хэлбэрээр гаралттай хэрэгслүүд (awk, find, nmap, tcpdump, man, vi, vim, ansible).

Suid/Sgid

Интернет дээр бүх suid/sgid командуудыг цуглуулахыг зөвлөдөг олон гарын авлага байдаг боловч ховор нийтлэлд эдгээр программуудыг юу хийх талаар тодорхой бичсэн байдаг. Ашиглалтын ашиглалтыг тооцдоггүй давуу эрхүүдийг нэмэгдүүлэх сонголтуудыг олж болно. энд. Мөн хэд хэдэн гүйцэтгэгдэх файлууд нь үйлдлийн системийн хувилбарт зориулсан тодорхой сул талуудтай байдаг. Жишээ нь.

Тохиромжтой ертөнцөд та суулгасан бүх багцаа ядаж searchsploit-ээр ажиллуулна. Практикт үүнийг sudo гэх мэт хамгийн алдартай програмуудаар хийх хэрэгтэй. Мөн давуу эрх нэмэгдүүлэх талаас нь авч үзвэл suid/sgid битийн тохируулсан гүйцэтгэгдэх боломжтой файлуудыг онцлон харуулах автоматжуулсан хэрэгслүүдийг ашиглах, хөгжүүлэхэд дэмжлэг үзүүлэх сонголт үргэлж байдаг. Би нийтлэлийн холбогдох хэсэгт ийм хэрэгслийн жагсаалтыг өгөх болно.

Root-ийн контекст дээр Cron эсвэл Init-ээр ажиллуулдаг бичих боломжтой скриптүүд

Cron ажлуудыг root зэрэг өөр өөр хэрэглэгчийн контекст дор ажиллуулж болно. Хэрэв cron даалгаврыг гүйцэтгэх боломжтой файлын линкээр тохируулсан бөгөөд энэ нь танд бичих боломжтой бол түүнийг амархан хорлонтойгоор сольж, давуу эрхээ нэмэгдүүлэх боломжтой. Гэсэн хэдий ч, анхдагч байдлаар, cron даалгавартай файлуудыг ямар ч хэрэглэгч унших боломжтой.

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

Нөхцөл байдал init-тэй төстэй байна. Үүний ялгаа нь 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-д зориулагдсан түгээлтүүдийг ашиглахыг хичээ. Үгүй бол энэ нь ховор боловч оновчтой шинэчлэлт нь системийг ажиллах боломжгүй болгодог нөхцөл байдал байдаг.

Үндсэн хэрэглэгчийн контекст дор ажиллаж байгаа үйлчилгээг ашиглаж байна

Зарим Линуксийн үйлчилгээнүүд root хэлбэрээр ажилладаг. Тэдгээрийг ps aux | командыг ашиглан олж болно grep үндэс. Энэ тохиолдолд үйлчилгээг интернетээр сурталчлахгүй, орон нутагт ашиглах боломжтой. Хэрэв энэ нь нийтийн мөлжлөгтэй бол тэдгээрийг аюулгүй ашиглаж болно: алдаа гарсан тохиолдолд үйлчилгээний осол нь үйлдлийн системийн эвдрэлээс хамаагүй бага ач холбогдолтой юм.

ps -aux | grep root # Linux

Хамгийн амжилттай тохиолдол бол үндсэн хэрэглэгчийн контекст дэх хакердсан үйлчилгээний үйл ажиллагаа гэж үзэж болно. SMB үйлчилгээний үйл ажиллагаа нь Windows системүүд дээр СИСТЕМ-д давуу эрх олгодог (жишээлбэл, ms17-010-ээр дамжуулан). Гэсэн хэдий ч, энэ нь Линукс системд нийтлэг байдаггүй тул та давуу эрхээ нэмэгдүүлэхэд маш их цаг зарцуулж болно.

Линуксийн цөмийн эмзэг байдлыг ашиглаж байна

Энэ бол таны хамгийн сүүлд явах ёстой зам юм. Амжилтгүй ажиллагаа нь системийн эвдрэлд хүргэж болзошгүй бөгөөд дахин ачаалах тохиолдолд зарим үйлчилгээ (анхны бүрхүүлийг олж авсан үйлчилгээг оруулаад) эхлэхгүй байж магадгүй юм. Администратор зүгээр л systemctl enable командыг ашиглахаа мартсан байдаг. Дээрээс нь мэс засал хийхээр тохиролцоогүй бол таны ажилд сэтгэл дундуур байх болно.
Хэрэв та exploitdb-ийн эх кодыг ашиглахаар шийдсэн бол скриптийн эхэнд байгаа тайлбарыг заавал уншаарай. Бусад зүйлсийн дотор өгөгдсөн мөлжлөгийг хэрхэн зөв эмхэтгэхийг ихэвчлэн хэлдэг. Хэрэв та хэтэрхий залхуу байгаа эсвэл эцсийн хугацаанаас болж "өчигдөр" хийх шаардлагатай болсон бол аль хэдийн эмхэтгэсэн мөлжлөгүүдтэй хадгалах санг хайж болно. Жишээ нь. Гэсэн хэдий ч, энэ тохиолдолд та гахайг нудрах болно гэдгийг ойлгох хэрэгтэй. Нөгөөтэйгүүр, програмист хүн компьютер хэрхэн ажилладаг, ямар программ хангамжийг байт хүртэл ойлгодог байсан бол амьдралынхаа туршид ганц мөр код бичихгүй байх байсан.

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

Маргааш

Холболтыг барьж, зохицуулахын тулд exploit/multi/handler модулийг ашиглах нь үргэлж дээр байдаг. Хамгийн гол нь зөв ачааллыг тохируулах явдал юм, жишээлбэл, generic/shell/reverse_tcp эсвэл generic/shell/bind_tcp. Metasploit-ийн үйлдвэрлэсэн бүрхүүлийг post/multi/manage/shell_to_meterpreter модулийг ашиглан Meterpreter болгон сайжруулж болно. Meterpreter-ийн тусламжтайгаар та ашиглалтын дараах үйл явцыг автоматжуулах боломжтой. Жишээ нь, post/multi/recon/local_exploit_suggester модуль нь ашиглахад шаардлагатай платформ, архитектур болон аж ахуйн нэгжүүдийг шалгаж, зорилтот систем дээрх давуу эрхийг нэмэгдүүлэхийн тулд Metasploit модулиудыг санал болгодог. Meterpreter-ийн ачаар эрх ямба ахих нь заримдаа шаардлагатай модулийг эхлүүлэхэд хүргэдэг боловч бүрээсний доор юу болж байгааг ойлгохгүйгээр хакердах нь "үнэн" биш юм (та тайлан бичих шаардлагатай хэвээр байна).

арга хэрэгсэл

Орон нутгийн мэдээлэл цуглуулах ажлыг автоматжуулах хэрэгсэл нь танд маш их хүчин чармайлт, цаг хугацаа хэмнэх болно, гэхдээ тэдгээр нь ялангуяа цөмийн сул талыг ашиглах тохиолдолд давуу эрхээ нэмэгдүүлэх замыг бүрэн тодорхойлж чадахгүй. Автоматжуулалтын хэрэгслүүд нь системийн талаарх мэдээллийг цуглуулахад шаардлагатай бүх тушаалуудыг гүйцэтгэх боловч үүнийг хийх чадвартай байх нь бас чухал юм. дүн шинжилгээ хийх хүлээн авсан өгөгдөл. Энэ талаар миний нийтлэл танд хэрэг болно гэж найдаж байна. Мэдээжийн хэрэг, миний доор жагсаахаас илүү олон хэрэгсэл байгаа боловч бүгд ижил төстэй зүйлийг хийдэг - энэ бол амтанд хамаарах асуудал юм.

Linpeas

Тула хотод саяхан болсон бөгөөд анхны амлалт нь 2019 оны XNUMX-р сараас эхэлсэн. Одоогоор миний хамгийн дуртай хэрэгсэл. Гол нь давуу эрх нэмэгдүүлэх хамгийн сонирхолтой векторуудыг онцолсон явдал юм. Зөвшөөрч байна, цул түүхий өгөгдлийг задлан шинжлэхээс илүү энэ түвшинд шинжээчийн үнэлгээ авах нь илүү тохиромжтой.

LinEnum

Миний хоёр дахь дуртай хэрэгсэл, энэ нь орон нутгийн тооллогын үр дүнд олж авсан өгөгдлийг цуглуулж, зохион байгуулдаг.

Линукс ашиглах санал болгогч (1,2)

Энэ ашиглалт нь системийг ашиглахад тохиромжтой нөхцөлд дүн шинжилгээ хийх болно. Үнэн хэрэгтээ энэ нь Metasploit модулийн local_exploit_suggester-тэй адилхан ажлыг гүйцэтгэх боловч Metasploit модулиудаас илүү exploit-db эх кодын холбоосыг санал болгоно.

Linuxprivchecker

Энэ скрипт нь давуу эрх нэмэгдүүлэх вектор үүсгэхэд хэрэг болохуйц их хэмжээний мэдээллийг цуглуулж, хэсэг болгон зохион байгуулах болно.

Өөр нэг удаа би дэлгэрэнгүй ярих болно suid/sgid-ээр дамжуулан Линукс үйлдлийн системд давуу эрх олгох.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх