Di bawah ini adalah source-code dari file upload level high di DVWA.
vulnerabilities/upload/source/high.php<?phpif( isset( $_POST[ 'Upload' ] ) ) {// Where are we going to be writing to? $target_path = DVWA_WEB_PAGE_TO_ROOT ."hackable/uploads/"; $target_path .=basename( $_FILES[ 'uploaded' ][ 'name' ] );// File information $uploaded_name = $_FILES[ 'uploaded' ][ 'name' ]; $uploaded_ext =substr( $uploaded_name,strrpos( $uploaded_name,'.')+1); $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ]; $uploaded_tmp = $_FILES[ 'uploaded' ][ 'tmp_name' ];// Is it an image? if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ) &&
( $uploaded_size <100000 ) &&getimagesize( $uploaded_tmp ) ) {// Can we move the file to the upload folder?if( !move_uploaded_file( $uploaded_tmp, $target_path ) ) {// Noecho'<pre>Your image was not uploaded.</pre>'; }else {// Yes!echo"<pre>{$target_path} succesfully uploaded!</pre>"; } }else {// Invalid fileecho'<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>'; }}?>
Mencari Informasi
Kali ini terdapat tambahan fungsi getimagesize() pada validasi yang digunakan untuk memastikan bahwa file yang di-upload user memang lah gambar.
Menurut sepengetahuan saya saat ini, kali ini kita tidak bisa mem-bypass file non-image lagi.
Setelah berhari-hari mencari solusi, akhirnya saya menemukan jawabannya, yaitu dengan menyisipkan script PHP ke dalam EXIF data dari file gambar. Lalu gambar tersebut di-upload ke server target, dan selanjutnya script tersebut dijalankan melalui celah local file inclusion.
Melakukan Serangan
Pertama-tama, siapkan gambar apa pun lalu sisipkan script menggunakan EXIFTOOL seperti berikut:
Pastikan komputer kita (sebagai peretas) telah menjadi listener dari backconnect tersebut. Lalu, upload file gambar tersebut dan akses melalui celah local file inclusion.
Jika berhasil, akan tampak seperti gambar di atas. Selamat! 😁
Huft! Banyak pengalaman yang menarik bagi saya di sini. Tetap semangat!