ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

从0开始挖洞:XSS跨站脚本攻击

2022-09-07 16:31:51  阅读:218  来源: 互联网

标签:XSS 跨站 代码 用户 挖洞 mysqli 解析 服务端


一、XSS 简介

XSS(Cross Site Scripting 跨站脚本攻击),指恶意攻击者通过向网站插入恶意payload或恶意脚本,从而盗取cookie、session信息以利用用户身份进行违规操作、盗取用户资料等等。

常见XSS漏洞分类

反射型XSS
存储型XSS
DOM XSS

二、XSS漏洞成因

1、反射型XSS

网站对于用户提交的数据没有进行过滤或转义操作(或者过滤、转义不足),导致攻击者嵌入的恶意代码被提交给服务端,服务端解析后,在相应内容中返回输入的XSS代码,最终由浏览器解释执行。

原型如下:
<?php echo 'your input:' . $_GET['input']; ?>

原理解析

若input为<script>alert(/XSS/)</script>
且input值未经任何过滤便直接输出,则服务端解析后,echo语句会将客户端输入的代码完整地输出到HTTP响应中,浏览器解析并执行,如下图所示

发生弹窗,说明payload被执行。
同理,也可以直接如下图所示构造url,当用户点击该url链接,攻击就发生了
http://localhost/dvwa/vulnerabilities/xss_r/?name=<script>alert(/XSS/)</script>

若将payload替换成恶意脚本,则在用户点击时,发生如上过程,浏览器解析并执行,达到攻击目的。

2、存储型XSS

反射型XSS每次皆需要用户提交代码(也即“点击”)才能进行攻击。而存储型XSS提交的XSS代码会存储在服务器端,下次请求该网页时无需再次提交XSS代码。常见的应用场景有留言板、在线聊天室、邮件服务等,当攻击者提交包含XSS代码的留言后,服务端会将其存储在数据库中,当其他用户访问网页查看留言时,服务端将从数据库中查询已有留言,并将其内容输出在HTTP响应中,由浏览器对包含恶意代码的响应解析并执行。

原型如下:

<?php
if( 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();
}
?> 

原理解析

攻击者提交留言<script>alert(/XSS/)</script>后,XSS代码被保存在 数据库中,如下图所示。

并且立即执行了一次查询,XSS代码直接被触发。
当其他用户访问网页时,服务端都将从数据库中查询到该XSS代码,触发执行,从而被盗取cookie(sessionid)等信息。

3、DOM XSS

标签:XSS,跨站,代码,用户,挖洞,mysqli,解析,服务端
来源: https://www.cnblogs.com/ialoe/p/xss.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有