# Web shell upload via obfuscated file extension

Description:

This lab contains a vulnerable image upload function. Certain file extensions are blacklisted, but this defense can be bypassed using a classic obfuscation technique.

To solve the lab, upload a basic PHP web shell, then use it to exfiltrate the contents of the file `/home/carlos/secret`. Submit this secret using the button provided in the lab banner.

You can log in to your own account using the following credentials: `wiener:peter`

Proof of concept:

1. Analisa fitur-fitur pada web target menggunakan akun testing
2. Dari hasil analisa terdapat fitur upload file pada halaman `My Account`<br>

   <figure><img src="https://lh7-rt.googleusercontent.com/slidesz/AGV_vUcQX2JXdoc_ZbONhG5EI4mMDsvE65Go5aZhB3qGPpkDkikq1SMIt4F-uECihXjM44Qk5GoYzYFj5XDRBLyvclXI2tFFgE3cZkJsvxhLR2iRv3PsHxKoYqfGhhY8sgpFGvdVnSVLIQ=s2048?key=XgQ7Gy-anouEkhLF15jZCA" alt=""><figcaption></figcaption></figure>
3. Dari analisa, pada fitur file upload tersebut hanya mengizinkan file `JPG` dan `PNG` yang dapat diupload<br>

   <figure><img src="https://261650435-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdAiS2nxqUmGSg5rZoOOl%2Fuploads%2FkfDxNexJrzhG0rEUu7Ez%2Fimage.png?alt=media&#x26;token=8fcd95fc-9ffd-4696-a8c6-57af3c97047f" alt=""><figcaption></figcaption></figure>
4. Ketika file dengan ekstension `.php` dipaksa untuk di upload, maka file tersebut akan ditolak dan akan menampilkan pesan kesalahan yang dimana hanya file `JPG` dan `PNG` yang diizinkan

   <figure><img src="https://261650435-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdAiS2nxqUmGSg5rZoOOl%2Fuploads%2FJbafE3Vlpyke3iBY3ZFV%2Fimage.png?alt=media&#x26;token=018d0590-2750-4b97-b7ed-c43c8c01bcc0" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://261650435-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdAiS2nxqUmGSg5rZoOOl%2Fuploads%2F75hl0c3EW2tTkbx8SDjc%2Fimage.png?alt=media&#x26;token=6beae832-a500-447b-8acb-63754394679b" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://261650435-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdAiS2nxqUmGSg5rZoOOl%2Fuploads%2FAZ8W5CPAVyJNlp8m5jec%2Fimage.png?alt=media&#x26;token=e3f13286-fc50-4bbc-b80a-8f477441c2bc" alt=""><figcaption></figcaption></figure>
5. Kirim request tersebut ke `burp suite repeater`. Jika sudah coba lakukan perubahan ekstension file menjadi `.php5`, `.phtml` dan lain sebagainya untuk melakukan bypass validasi/filterisasi ekstension pada fitur file upload tersebut<br>

   <figure><img src="https://261650435-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdAiS2nxqUmGSg5rZoOOl%2Fuploads%2F9TARfvXOOSbkIWkwRJIv%2Fimage.png?alt=media&#x26;token=849530be-c4a9-4159-aa4c-84441731c039" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://261650435-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdAiS2nxqUmGSg5rZoOOl%2Fuploads%2FeIsJce3NbTVRQfyZeW32%2Fimage.png?alt=media&#x26;token=d442b8df-a9e2-4247-836f-0fac87a19800" alt=""><figcaption></figcaption></figure>
6. Namun cara tersebut gagal. Dari hasil analisa, didapati untuk melakukan bypass adalah dengan cara menambahkan layer ekstension baru seperti informasi yang didapati dari [Hacktricks](https://book.hacktricks.xyz/pentesting-web/file-upload). Yaitu dengan menggunakan atau menambahkan `%00.png%00.jpg` setelah ekstension file `.php`<br>

   <figure><img src="https://261650435-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdAiS2nxqUmGSg5rZoOOl%2Fuploads%2FA2xR6hD7EKaYLzMhlXCF%2Fimage.png?alt=media&#x26;token=7f4f60df-e1c0-4752-99d2-a9056c9ae212" alt=""><figcaption></figcaption></figure>
7. Dan terlihat seperti gambar diatas, menunjukan terdapat response file tersebut berhasil diupload dengan ekstension file `.php`. Setelah itu, akses file tersebut dengan cara `klik kanan` pada gambar profile dan pilih `“Buka Gambar di Tab Baru”`<br>

   <figure><img src="https://261650435-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdAiS2nxqUmGSg5rZoOOl%2Fuploads%2FIsajh9HH13KyJKAA8ZCh%2Fimage.png?alt=media&#x26;token=3ae5c2eb-931b-487d-89f1-4e7240099f1f" alt=""><figcaption></figcaption></figure>
8. Namun ketika diakses file tersebut terdapat keterangan error file not found. Itu dikarenakan masih mengakses file yang `%00.png%00.jpg`. Maka hapus `%00.png%00.jpg` sisakan ekstension file `.php` untuk dapat mengakses file tersebut. Hal itupun telah diinformasikan pada response dari request di langkah nomor 6 sebelumnya<br>

   <figure><img src="https://261650435-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdAiS2nxqUmGSg5rZoOOl%2Fuploads%2FJKzV4DyxV6oxwUo0Edl5%2Fimage.png?alt=media&#x26;token=301a303c-60d2-4779-b75f-d060f5fc6976" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://261650435-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdAiS2nxqUmGSg5rZoOOl%2Fuploads%2F03w3Q4nkMYaN4oW7xgmi%2Fimage.png?alt=media&#x26;token=03e659c3-0a38-4bf8-b772-8b3fdf370481" alt=""><figcaption></figcaption></figure>
9. File phpinfo.php pun berhasil tereksekusi ditandai dengan ditampilkannya informasi mengenai php dari sistem target. Dari kerentanan ini juga memungkinkan untuk membaca atau mendapatkan informasi sensitif. Sebagai contoh disini menggunakan script dibawah untuk mendapatkan informasi pada file `/etc/passwd`\
   `<?php`\
   `echo readfile("/etc/passwd")`\
   `?>`

   <figure><img src="https://261650435-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdAiS2nxqUmGSg5rZoOOl%2Fuploads%2F8kDDNALzhQkpwlXBiSF9%2Fimage.png?alt=media&#x26;token=9f65b62a-db6e-436c-8ac5-58cf49887415" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://261650435-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdAiS2nxqUmGSg5rZoOOl%2Fuploads%2Fzvn7OpS1UxevBv7xRma5%2Fimage.png?alt=media&#x26;token=b755c178-af8c-43ca-92a5-c8bc1e7a0106" alt=""><figcaption></figcaption></figure>
10. Untuk menyelesaikan tangtangan lab ini, baca file `secret` pada direktori `/home/carlos` dengan menggunakan script atau syntax php berikut ini\
    `<?php`\
    `echo readfile("/home/carlos/secret")`\
    `?>`<br>

    <figure><img src="https://261650435-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdAiS2nxqUmGSg5rZoOOl%2Fuploads%2Fdwc4Fj9xw92iHR0UmJLB%2Fimage.png?alt=media&#x26;token=d93e2b56-e129-49d3-bf82-2fd6fc643b34" alt=""><figcaption></figcaption></figure>

    <figure><img src="https://261650435-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdAiS2nxqUmGSg5rZoOOl%2Fuploads%2Fs4kDTlAWOCogDW54ODEb%2Fimage.png?alt=media&#x26;token=37d2d178-5f3f-4903-b87b-dfcbc9911044" alt=""><figcaption></figcaption></figure>
11. Seperti yang dapat dilihat pada gambar diatas, ditampilkan isi dari file secret tersebut. Salin isi dari file secret tersebut dan lakukan submit untuk menyelesaikan tangtangan lab ini. Untuk angka terakhir tidak perlu disalin, dikarenakan itu merupakan nilai bytes dari file tersebut bukan isi dari konten file tersebut<br>

    <figure><img src="https://261650435-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdAiS2nxqUmGSg5rZoOOl%2Fuploads%2FkjUPhH76r63UNkk2vCk4%2Fimage.png?alt=media&#x26;token=0ca036de-11f6-49ad-827f-1c8e515a0f41" alt=""><figcaption></figcaption></figure>

    <figure><img src="https://261650435-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdAiS2nxqUmGSg5rZoOOl%2Fuploads%2Fh8MFV5m15VilN5c74XA4%2Fimage%20(47).png?alt=media&#x26;token=b94f1559-a1c9-4598-8483-3492fa6bbb76" alt=""><figcaption></figcaption></figure>

Thanks, Stay Ethical & Happy Hacking! 🍻
