PHP-Proxy sebenarnya adalah project yang sudah tidak dikembangkan lagi, tapi disini saya melihat masih ada banyak orang yang menggunakan PHP-Proxy sebagai Web Proxy.

/img/broken-crypto/1.png

PHP-Proxy Overview

Url yang disubmit di form, akan di-encrypt dan dilakukan redirect ke /?q=<ENCRYPTED_URL>. /img/broken-crypto/4.png

add_http adalah fungsi yang akan menambahkan http:// apabila $url tidak diawali dengan https:// atau http://

/img/broken-crypto/5.png

Apabila yang disubmit adalah file:///etc/passwd, oleh fungsi add_http akan me-return http://file:///etc/passwd sehingga kita tidak bisa exploit dengan cara men-submit URL lewat form.

proxify_url adalah fungsi yang digunakan untuk membuild redirect URL, lalu bisa dilakukan proxying /img/broken-crypto/6.png

Setelah form url disubmit, akan masuk ke logic ini, dimana disini proses fetch remote resource dilakukan. /img/broken-crypto/7.png

Method fordward dari class Proxy secara internal menggunakan curl sebagai Requester nya. /img/broken-crypto/8.png

Conclusion

Dari hasil overview tersebut, tidak ditemukan adanya filter apapun dalam url, sehingga ada kemungkinan kita bisa meng-abuse url untuk SSRF Attack. Agar bisa melakukan SSRF Attack, Payload harus di submit melalui GET /?q=, karena apabila lewat form submit URL, fungsi add_http akan menambahkan http:// sebagai schemal dari URL yang disubmit. Jadi agar bisa melakukan SSRF dengan memanfaatkan file:// ataupun gopher://, kita harus men-generate Encrypted_URL dengan payload SSRF kita.

Broken Cryptography

Key yang digunakan untuk proses enkripsi adalah dari Config::get("encryption_key").

/img/broken-crypto/9.png

encryption_key key di set dari md5(app_key + URL_MODE) , yang dimana app_key ini digenerate menggunakan fungsi openssl_random_pseudo_bytes(100) sehingga tidak dapat ditebak.

/img/broken-crypto/2.png

Algoritma Crypto yang digunakan untuk meng-enkripsi URL adalah Caesar Cipher, dimana Caesar Cipher adalah algoritma Crypto classic dan Key nya sangat mudah didapatkan dengan cara Brute Force atau dengan Known Plaintext.

/img/broken-crypto/10.png

Agar bisa membuat URL yang digunakan untuk SSRF, pertama harus didapatkan terlebih dahulu encryption_key. encryption_key bisa didapatkan dari menggunakan fungsi str_rot_pass dengan parameter $str=ENCRYPTED_URL dan key=KNOWN_URL.

/img/broken-crypto/3.png

$ php exploit.php                                                           
KEY : c96442dc36b61ebce28b02c537b9ad7c   

Dengan memanfaatkan Known Plaintext kita dengan mudah bisa mendapatkan encryption_key.

SSRF

PHP-Proxy menggunakan curl sebagai Requester nya, seperti yang diketahui curl support berbagai macam protokol termasuk file:// dan gopher:// yang biasa dimanfaatkan untuk SSRF Attack.

Local File Read

Local File Read sangat memungkinkan dengan memanfaatkan schema file://, sebagai contoh disini saya mencoba membaca isi file dari /etc/passwd

❯ php exploit.php read '/etc/passwd'
KEY : c96442dc36b61ebce28b02c537b9ad7c
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

SSRF FastCGI RCE

Mendapatkan RCE dengan me-forge protokol FastCGI hanya bisa dilakukan apabila fastcgi menggunakan TCP Socket.

❯ php exploit.php fastcgi 'id'
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Note : Detail mengenai SSRF FastCGI akan saya jelaskan pada postingan lain.

PHP-Proxy

https://www.php-proxy.com/