Medium

XSS (Stored) level Medium on DVWA

Di bawah ini adalah source-code dari XSS (Stored) level medium di DVWA.

vulnerabilities/xss_s/source/medium.php
<?php

if( isset( $_POST[ 'btnSign' ] ) ) {
    // Get input
    $message = trim( $_POST[ 'mtxMessage' ] );
    $name    = trim( $_POST[ 'txtName' ] );

    // Sanitize message input
    $message = strip_tags( addslashes( $message ) );
    $message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
    $message = htmlspecialchars( $message );

    // Sanitize name input
    $name = str_replace( '<script>', '', $name );
    $name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

    // Update database
    $query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
    $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

    //mysql_close();
}

?> 

Mencari Informasi

Setelah saya coba-coba dan melihat source code pada form Name, tag <script> tidak diizinkan. Sedangkan pada form Message awalan tag (yang mengandung <) juga tidak diizinkan.

Sepertinya celah XSS terdapat pada form Name, karena kita bisa saja memanggil JavaScript tanpa menggunakan tag <script>. Tetapi maksimal inputan pada form Name ini hanya 10 karakter. Untuk mengatasi hal tersebut kita bisa merubah nilai maxlength nya dengan menggunakan inspect element.

Sekarang kita bisa menyisipkan XSS pada form Name.

Melakukan Serangan

Pertama-tama, kita buat terlebih dahulu agar form Name-nya bisa diinputkan oleh banyak karakter.

Kedua, kita inputkan payload yang tidak menggunakan tag <script>, seperti berikut:

<body onload="alert(document.cookie)">

Dan yup! Kita berhasil menyelesaikan Stored XSS pada level medium ini.

Tetap Semangat! Happy Hacking! 🍻

Last updated