Skip to content

Commit

Permalink
add module
Browse files Browse the repository at this point in the history
  • Loading branch information
DJumanto committed Jun 1, 2024
1 parent 21f710f commit 651a854
Show file tree
Hide file tree
Showing 8 changed files with 1,723 additions and 0 deletions.
62 changes: 62 additions & 0 deletions Directory Traversal/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
## Directory Traversal Vulnerabilities

### Deskripsi

Directory Traversal merupakan kerentanan dimana aplikasi web memperbolehkan client untuk mengakses file yang tidak seharusnya diakses dan tidak sewajarnya diakses melalui interface web diluar root directory website. Sebagai contoh, client dapat mengakses informsi/dokumen pada server yang seharusnya tidak ditampilkan di website.

### Contoh:

Kode php dan html dibawah, berfungsi sebagai pengubah warna background dari website kita dengan memberikan kode php berdasarkan warna yang dipilih pada parameter COLOR di GET request.
<br>
<br>

![image](https://github.com/arsitektur-jaringan-komputer/Modul-Web-App-Security/assets/100863813/82ed8a67-ee1b-4b92-958f-5291d4c0b395)

<br>
<br>

Menurut anda, apa yang akan anda lakukan sebagai penyerang untuk dapat mengakses file lain yang ada pada server?

### Cara Mengidentifikasi Kerentanan Directory Traversal

- Identifikasi request parameter yang dapat dimanipulasi
- Lakukan percobaan dengan memasukkan payload supaya website memuat informasi yang tidak seharusnya bisa diakses
- Lihat error

### Contoh serangan Directory Traversal

Input yang tidak tersanitasi dan cara menampilkan file dengan cara yang kurang baik dapat menyebabkan munculnya kelemahan Directory Traversal, sebagai contoh pada kasus di DVWA berikut

![File Inclusion Section](https://github.com/arsitektur-jaringan-komputer/Modul-Web-App-Security/blob/master/src/FileInclusionSection.png?raw=true)

bila kita lihat dari kode sumbernya:

![Alt text](https://github.com/arsitektur-jaringan-komputer/Modul-Web-App-Security/blob/master/src/FI_Source_Code.png?raw=true)

Input parameter 'page' dari user tidak disanitasi dengan baik, sehingga apabila kita memasukkan input seperti:

```
../../../../../etc/passwd
```

Akan menampilkan file seperti berikut:

![Alt text](https://github.com/arsitektur-jaringan-komputer/Modul-Web-App-Security/blob/master/src/DirTraverse.png?raw=true)

File tersebut menampilkan siapa saja user yang beroperasi dalam sistem, terlihat tidak terlalu berbahaya bukan? Bagaimana apabila kasusnya kita ganti menjadi seperti ini:

- contoh kalian menyimpan file berupa catatan pribadi perusahaan atau informasi rahasia seperti pada sebuah file email_pass.txt di server seperti berikut:

```
user pass
[email protected] Djum4nt0sup3r
```

- Apabila hacker bisa menemukan lokasi dari file tersebut dan menggunakan cara diatas

```
/var/www/dvwa/email_pass.txt
```
Hasilnya bisa seperti berikut:

![Cred Leak](https://github.com/arsitektur-jaringan-komputer/Modul-Web-App-Security/blob/master/src/DirTravCredLeak.png?raw=true)
126 changes: 126 additions & 0 deletions File Inclusion & Upload/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
# File Inclusion dan File Upload

## **&#9888;** Sebelum Lanjut Membaca ....
Segala bentuk kegiatan **File Inclusion** atau **File Upload** tanpa ada persetujuan dan izin dari pemilik sistem/aplikasi merupakan **illegal**.

Materi yang dipaparkan dalam modul ini untuk keperluan edukasi/pembelajaran, sehingga tidak membenarkan segala aktivitas **illegal**.

## Definisi File Inclusion
Local File Inclusin (LFI) merupakan kerentanan pada aplikasi web, yang dimana kerentanan ini memungkinkan penyerang untuk `menyertakan`, `membaca` atau `mendownload` file lokal yang tersimpan pada server.

Kerentanan ini terjadi ketika aplikasi web menerima parameter file dari pengguna tanpa adanya validasi di parameter tersebut.

### Cara Kerja Local File Inclusion
Local File Inclusion memanipulasi parameter yang ada aplikasi web untuk mengekspos file sensitif yang terdapat pada server.

![lfi](https://miro.medium.com/v2/resize:fit:644/1*UPMlwBWgKMSUzSvY5mt5uw.png)

Berikut adalah contoh sebuah code yang rentan terhadap **Local File Inclusion**

```php
<?php
if (isset($_GET['page'])) {
$page = $_GET['page'];
include($page);
} else {
echo "Page not found.";
}
?>
```

Contoh eksploitasi pada kerentanan LFI:
```
# request parameter
http://localhost:3000/lfi.php?page=apcb.php
# response
Hello World!
# request parameter
http://localhost:3000/lfi.php?page=/etc/passwd
#response
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
_apt:x:42:65534::/nonexistent:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
```

### Mitigasi pada Local File Inclusion
Untuk melakukan mitigasi pada kerentanan **Local File Inclusion** kita bisa menggunakan input validation atau sanitization.

Contoh kode yang telah menerapkan `whitelisting`:
```php
<?php
$whitelist = ['apcb.php', 'secret.txt'];

if (isset($_GET['page'])) {
$page = $_GET['page'];
if (in_array($page, $whitelist)) {
include($page);
} else {
echo "Page not found.";
}
} else {
echo "Page not found.";
}
?>
```

## Definisi File Upload
File Upload Vulnerability merupakan kerentanan yang dimana web server memperbolehkan user untuk mengunggah file tanpa adanya validasi seperti **nama file, tipe file, konten file,** dan **ukuran file**.

### Cara Kerja File Upload
File Upload terjadi karena pada web server tidak adanya pembatasan file yang akan diupload oleh user, disisi lain pihak developer merasa fiturnya aman yang sebenarnya dapat mudah untuk dilakukan **bypass**.

![file-upload](https://www.cobalt.io/hs-fs/hubfs/file-upload-vulnerabilities-example.png)

Contoh cara exploitasi pada kerentanan File Upload:

- Menggunakan double extension
```
file.jpg.php
```
- Menggunakan null byte
```
file.php%00.gif
```
- Manipulasi konten dengan `GIF89a;`
```
POST /images/upload/ HTTP/1.1
Host: target.com
...
---------------------------829348923824
Content-Disposition: form-data; name="uploaded"; filename="setya404.php"
Content-Type: image/gif
GIF89a; <?php system("id") ?>
```

![chaining](https://pbs.twimg.com/media/F-FZQHabYAAqUhW.jpg:large)

### Mitigasi File Upload
1. Memperbolehkan spesifik tipe file
2. Melakukan verifikasi pada tipe file
3. Set panjang nama file dan besar ukuran file
4. Simpan file yang terupload diluar web folder

## Referensi
- [Understanding Local File Inclusion](https://brightsec.com/blog/local-file-inclusion-lfi/)
- [Understanding File Upload Vulnerability](https://cyberw1ng.medium.com/understanding-file-upload-vulnerabilities-in-web-app-penetration-testing-6de583fba63f)
- [Payload Local File Inclusion & Arbitary File Upload](https://github.com/daffainfo/AllAboutBugBounty/)
114 changes: 114 additions & 0 deletions Pentesting/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
# Pengantar Penetration Testing

## Definisi Penetration Testing
Penetration Testing (pentest) adalah percobaan serangan yang terorganisir, terarah, dan terotorisasi untuk menguji infrastruktur TI dan para pertahanannya (dalam bentuk sumber daya sistem dan manusia) untuk menentukan kerentanan mereka keamanan TI.

Penetration Testers menerapkan berbagai teknik dan analisis untuk mengukur dampak dari kerentanan tertentu terhadap **confidentiality**, **integrity**, and **availability** suatu sistem dan data organisasi.

Pentest bertujuan untuk mengungkap dan mengidentifikasi **SEMUA** kerentanan dalam sistem yang sedang diselidiki dan meningkatkan keamanan sistem yang diuji.

Peran pentest adalah sebagai penasihat tepercaya untuk melaporkan kerentanan, langkah-langkah reproduksi yang terperinci, dan memberikan rekomendasi perbaikan yang sesuai, tetapi tidak ikut serta dalam menerapkan patch atau membuat perubahan kode, dll.

### Klasifikasi Penetration Testing
| Tipe Pentest | Akses Awal |
| :--: | :-- |
| External Pentest | Pentest dari sudut pandang eksternal atau sebagai pengguna anonim di internet yang bertujuan untuk mensimulasikan serangan yang terjadi secara nyata. |
| Internal Pentest | Pentest internal adalah ketika kita melakukan pengujian dari dalam jaringan organisasi. Tahap ini dilakukan setelah melakukan pentest eksternal ataupun tanpa pentest eksternal dengan mengasumsikan suatu penyusupan/penembusan telah terjadi. |

| Tipe Pentest | Informasi yang diberikan |
| :--: | :-- |
| Blackbox | **Minimal.** Hanya informasi penting, seperti IP address dan domain. |
| Greybox | **Extended.** diberikan informasi tambahan, seperti URL tertentu, nama host, subnet, dan sejenisnya |
| Whitebox | **Maximum.** Semua Informasi diberikan, Mendapat wawasan internal dari seluruh struktur sistem, memungkinkan untuk mempersiapkan serangan menggunakan informasi internal. Informasi yang diberikan dapat berupa konfigurasi terperinci, kredensial admin, kode sumber aplikasi web, dll. |

<h2> ⚠ Sebelum melanjutkan </h2>

Bagian penting dari pentest adalah **legal** dan **ethical**.

Penetration Testing adalah salah satu profesi di mana Anda diizinkan, untuk sementara waktu (selama periode pengujian yang diotorisasi), melakukan tindakan terhadap sebuah perusahaan yang akan melanggar hukum apabila dalam kondisi lainnya.

Melakukan pemindaian atau aktivitas apapun yang berinteraksi dengan **SEMUA** sistem organisasi tanpa persetujuan tertulis yang eksplisit dalam bentuk Lingkup Kerja yang ditandatangani oleh kedua belah pihak adalah melanggar hukum dan dapat mengakibatkan tindakan hukum bahkan pidana.

Jangan menjalankan tools yang berpotensi **merusak jaringan** dan menyebabkan gangguan yang dapat menyebabkan waktu **downtime** dan **kerugian pendapatan**. Lakukan dengan hati-hati dan terukur.

## Penetration Testing Phases
![image](https://github.com/lab-kcks/Modul_Ethical-Hacking/assets/106898320/c5f426b2-3a2d-438f-bab2-f6ea864ee9b9)

### Pre-Engagement
Pre-engagement adalah tahap di mana tugas, _scope_ (ruang lingkup), _limitations_ (batasan), dan perjanjian terkait akan didiskusikan dan didokumentasikan secara tertulis.

jika terdapat pihak ketiga yang terlibat dalam suatu sistem, misal hosting situs web atau infrastruktur lainnya menggunakan AWS, mereka juga perlu mendapatkan persetujuan tertulis secara eksplisit dari pihak ketiga tersebut di hampir semua kasus.

Dalam pertemuan tatap muka atau panggilan secara online, akan ada banyak hal yang ditetapkan, seperti:

- Non-Disclosure Agreement
- Goals
- Scope
- Time Estimation
- Rules of Engagement

### Information Gathering
Information gathering adalah proses memperoleh informasi tentang komponen suatu target. Informasi dapat berupa perangkat lunak atau perangkat keras yang digunakan guna menemukan celah keamanan potensial yang mungkin dimanfaatkan sebagai pijakan awal.

Tahap ini penting karena informasi, pengetahuan yang diperoleh, kesimpulan, dan langkah yang akan diambil didasarkan pada informasi yang didapatkan. Waktu, kesabaran, dan komitmen pribadi memainkan peran penting dalam Information gathering. Banyak Pentester cenderung langsung mengeksploitasi suatu potensi kerentanan. Hal ini sering kali gagal dan dapat menyebabkan hilangnya waktu yang signifikan.

Sebelum melanjutkan ke tahap selanjutnya, Information gathering harus diselesaikan secara menyeluruh. pentest dilakukan dalam suatu jangka waktu yang terbatas, sehingga tidak ingin adanya waktu waktu yang terbuang yang dapat menyebabkan kita melewatkan sesuatu yang penting.

### Vulnerability Assesment
Vulnerability Assessment adalah proses evaluasi hasil dari tahap Information gathering, mencari kerentanan yang diketahui dalam sistem, dan aplikasi untuk menemukan kemungkinan vektor serangan. Vulnerability Assessment dapat dilakukan baik secara manual maupun otomatis.

Kemampuan ini datang dengan waktu dan pengalaman. Namun, kemampuan ini juga perlu dilatih karena analisis yang tepat membuat hubungan antara berbagai titik dan informasi. Menghubungkan informasi tentang jaringan target atau sistem target dan pengalaman kita akan memungkinkan kita untuk mengenali pola-pola tertentu.

### Exploitation
Pada tahap Exploitasi, Pentester akan menggunakan informasi dan hasil analisis pada tahap sebelumnya, untuk menguji serangan terhadap vektor potensial dan mengeksekusinya terhadap sistem target untuk mendapatkan akses awal ke sistem tersebut.

### Post-Exploitation
Ketika Pentester mengeksploitasi layanan tertentu untuk tujuan kita mendapatkan akses ke suatu sistem, akses yang didapatkan biasanya tidak mendapatkan _privileges_ (hak) setinggi mungkin. Karena layanan tersebut biasanya dikonfigurasikan dengan cara tertentu yang "diisolasi" untuk menghentikan potensi penyerang, menembus restriksi ini adalah tujuan utama dari tahap ini.

Selama Penetration Testing, klien sering kali ingin mengetahui seberapa jauh penyerang dapat masuk ke jaringan mereka untuk menunjukkan kepada klien dampak dari akses yang dapat diakibatkan oleh sebuah kerentanan.

### Lateral Movement
Lateral movement menggambarkan pergerakan di dalam jaringan internal organisasi target untuk mengakses sistem lainnya pada tingkat _privileges_ (hak) yang sama atau lebih tinggi. Proses ini sering dilakukan berulang kali yang dikombinasikan dengan Post-Exploitation.

Sebagai contoh, seorang Pentester telah mendapatkan pijakan di sebuah webserver, dan telah meningkatkan _privileges_ (hak) dengan menemukan kata sandi. Lalu ditemui bahwa kata sandi tersebut juga dapat digunakan pada sebuah Database yang mana terdapat kredensial lain untuk melanjutkan akses ke sistem lainnya.

### Proof-of-Concept
Pada tahap ini, pentester akan mendokumentasikan langkah-langkah yang diambil untuk berhasil mengeksploitasi suatu kerentanan. Tujuannya adalah untuk memberikan gambaran tentang bagaimana pontesial kelemahan yang ditemukan dapat dieksploitasi sehingga mereka dapat melihat gambaran yang jelas tentang bagaimana kerentanan dapat terjadi guna membantu upaya perbaikan mereka.

Jika kita tidak mendokumentasikan langkah-langkah kita dengan baik, akan sulit bagi klien untuk memahami apa yang dapat kita lakukan dengan demikian, membuat upaya remediasi mereka menjadi lebih sulit. Jaringan yang besar mungkin memiliki banyak sistem yang saling beroperasi dan ketergantungan yang harus diperiksa. Hanya karena Pentester menemukan kerentanan tertentu, bukan berarti organisasi dapat dengan mudah memperbaikinya hanya dengan mengubah satu sistem, karena hal ini dapat berdampak negatif pada bisnis.

### Post-Engagement
Selama Post-Engagement, dokumentasi terperinci disiapkan kepada klien untuk memahami tingkat keparahan kerentanan yang ditemukan dalam bentuk mengadakan rapat dan terkadang memberikan presentasi eksekutif.

Pada tahap ini, Pentester juga harus membersihkan semua jejak tindakan yang telah dilakukan sehingga tidak ada sistem yang dapat dieksploitasi. Sebagai contoh, meninggalkan webshell yang mudah ditemukan, kecerobohan ini akan membahayakan karena dapat di lain waktu akan ditemukan oleh aktor jahat yang memiliki niat-niat yang tidak baik. Oleh karena itu, sangat penting untuk menghapus semua konten yang telah kita transfer ke sistem selama pentest sehingga jaringan perusahaan dibiarkan dalam kondisi yang sama seperti sebelum pentest.

Pentester umumnya juga akan testing pasca-remediasi untuk menguji apakah perbaikan yang dilakukan telah dilakukan dengan benar atau masih dapat di eksploitasi kembali dengan cara-cara lainnya.

## Penetration Testing Methodologies
Metodologi pentest secara sederhana adalah suatu kerangka bekerja untuk memandu pentester pada alat dan metodologi yang tepat untuk digunakan dalam melakukan kerjanya, sesuai pada jenis pentest dan cakupan pengujian yang direncanakan untuk dijalankan.

Setelah pentester memulai pekerjaanya, mereka harus mengacu pada metodologi tersebut selama pengujian. Setelah pentest selesai, pentester juga harus terus menggunakan metodologi tersebut untuk membantu mereka mengevaluasi lebih lanjut dan melaporkan temuannya.

## Common Frameworks
Beberapa dari Framework/Methodology yang paling popular dan sering digunakan:

1. Open-Source Security Testing Methodology Manual
Open-Source Security Testing Methodology Manual (OSSTMM) dibuat oleh Institute for Security and Open Methodologies (ISECOM). Framework ini dimaksudkan bagi pentester dan juga klien untuk menemukan dan menyelesaikan kerentanan, seperti yg melingkupi data sensitif dan masalah seputar otentikasi.

2. Open Web Application Security Project
OWASP adalah sebuah organisasi sumber terbuka yang didedikasikan untuk keamanan aplikasi web. Metodologi ini dapat digunakan secara terpisah atau sebagai bagian dari framework untuk pengujian Web, Mobile, API, atapun IoT.

3. Penetration Testing Execution Standard
PTES adalah metode pengujian penetrasi yang komprehensif. Beberapa fitur utama PTES ada pada tahap exploitation dan post-exploitation.

4. Information System Security Assessment Framework
ISSAF adalah framework pentest yang didukung oleh Grup Information Systems Security Group (OISSG). Metodologi ini tidak lagi dipertahankan dan kemungkinan besar bukan sumber terbaik untuk informasi yang paling baru. Namun, salah satu daya tarik utamanya adalah bahwa metodologi ini menghubungkan langkah-langkah pentesting individual.

5. National Institute of Standards and Technology
NIST adalah framework keamanan siber yang menyediakan seperangkat standar pengujian bawah Departemen Perdagangan AS dan dianggap sebagai standar minimum yang harus diikuti.

## Referensi
- [HTB Academy - Penetration Testing Process](https://academy.hackthebox.com/module/details/90)
- [OWASP Testing Framework](https://owasp.org/www-project-web-security-testing-guide/latest/3-The_OWASP_Testing_Framework/1-Penetration_Testing_Methodologies)
- [TCM Academy - Ethical Hacking](https://academy.tcm-sec.com/courses/1152300/lectures/24747397)
- [IBM Pentest Methodology Blog](https://www.ibm.com/blog/pen-testing-methodology/)
Loading

0 comments on commit 651a854

Please sign in to comment.