XSS(Stored)
界面
源代码
<?phpif( isset( $_POST[ 'btnSign' ] ) ) {
// Get input$message = trim( $_POST[ 'mtxMessage' ] );$name = trim( $_POST[ 'txtName' ] );// Sanitize message input$message = stripslashes( $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)) ? "" : ""));// Sanitize name input$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();
}?>
代码分析
trim() 方法用于删除字符串的头尾空白符,空白符包括:空格、制表符 tab、换行符等其他空白符等;
stripslashes() 函数删除由 addslashes() 函数添加的反斜杠;
可以看到代码并未对html标签进行过滤,可以构建等标签进行XSS攻击。
渗透步骤
第一步:在name一栏输入<script>alert(‘qwe’)</script>
,发现name一栏有字数限制。
第二步:在name一栏随便输入,点击sign,使用burp suit抓包,修改name的参数,提交修改后的数据包,发现弹窗,注入成功。
第三步:在message一栏输入,发现弹窗,证明name以及message都可以进行XSS。