DVWA-XSS (Stored)

news2024/11/15 11:48:18

跨站点脚本 (XSS)”攻击是一种注入问题,其中恶意脚本被注入到原本良性和受信任的网站上。 当攻击者使用 Web 应用程序发送恶意代码(通常以浏览器端脚本的形式)时,就会发生 XSS 攻击, 给其他最终用户。允许这些攻击成功的缺陷非常普遍,并且发生在使用输出中用户输入的Web应用程序的任何地方, 无需验证或编码。

攻击者可以使用 XSS 向毫无戒心的用户发送恶意脚本。最终用户的浏览器无法知道脚本不应该被信任, 并将执行 JavaScript。由于恶意脚本认为脚本来自受信任的来源,因此可以访问任何 Cookie、会话令牌或其他 您的浏览器保留并与该网站一起使用的敏感信息。这些脚本甚至可以重写 HTML 页面的内容。

XSS 存储在数据库中。XSS 是永久性的,直到重置数据库或手动删除有效负载。


目的

将每个人重定向到您选择的网页。


低水平

在将请求的输入包含在输出文本中之前,低级别不会检查该输入。

Spoiler: Either name or message field: <script>alert("XSS");</script>.

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

?>

这是一个用于将用户输入数据插入到数据库中的 PHP 脚本。脚本首先将用户输入数据中的空格和换行符删除,并使用 `stripslashes()` 函数删除可能存在的反斜杠字符。

随后脚本使用 `mysql_real_escape_string()` 函数对用户输入数据进行净化,并将其放入 `$query` 变量中,然后通过 `mysqli_query()` 函数将数据插入到数据库中。

在本脚本中,存在使用 `mysql_real_escape_string()` 函数进行净化,避免SQL注入攻击的风险。但是,它仍然存在一些漏洞,如可能的XSS攻击等。

因此,在处理用户输入数据时,应该采取更多种类的净化方法,并使用适当的权限和限制验证来确保Web应用程序的安全性和可靠性。同时,拒绝对使用过时且易受攻击的 `mysql` 扩展方法,这样可以更安全的使用 PHP 语言。

 

 

输入js,点击sign,显示了alert,攻击成功

 

中级

开发人员添加了一些保护,但是并没有以相同的方式完成每个字段。

Spoiler: name field: <sCriPt>alert("XSS");</sCriPt>.
<?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();
}

?>

这是一个将用户输入数据插入到数据库中的 PHP 脚本,并采用多种净化方法来增强安全性。

与之前的脚本不同,这个脚本使用 `strip_tags()` 函数从用户输入的消息中删除任何HTML标记,避免XSS攻击。同时,将特殊字符添加反斜杠,并使用 `mysqli_real_escape_string()` 函数进行SQL注入攻击的防御。同时,使用 `htmlspecialchars()` 函数转义用户消息中的特殊字符。

对于用户名,脚本使用 `str_replace()` 函数将 `<script>` 标签全部替换为空,从而避免了脚本注入攻击。接着同样采用反斜杠进行转义和`mysqli_real_escape_string()` 函数设置防御。

这种净化方案极大地增强了应用程序的安全性和可靠性,同时,还可以通过权限和限制验证来进一步保护Web应用程序免受恶意攻击。

 

 输入如上脚本,显示了alert,攻击成功

 

高水平

开发人员认为他们已经通过删除模式“<s*c*r*i*p*t”来禁用所有脚本使用。

Spoiler: HTML events.

<?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 = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $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();
}

?>

不可能的水平

使用内置的PHP函数(如“htmlspecialchars()”), 可以转义任何会改变输入行为的值。

 


<?php

if( isset( $_POST[ 'btnSign' ] ) ) {
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

    // 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)) ? "" : ""));
    $message = htmlspecialchars( $message );

    // Sanitize name input
    $name = stripslashes( $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)) ? "" : ""));
    $name = htmlspecialchars( $name );

    // Update database
    $data = $db->prepare( 'INSERT INTO guestbook ( comment, name ) VALUES ( :message, :name );' );
    $data->bindParam( ':message', $message, PDO::PARAM_STR );
    $data->bindParam( ':name', $name, PDO::PARAM_STR );
    $data->execute();
}

// Generate Anti-CSRF token
generateSessionToken();

?>

不可能水平,

这是一个将用户输入数据插入到数据库中的 PHP 脚本,并增加了防范CSRF攻击的安全措施。

脚本首先使用 `checkToken()` 函数验证用户提交的token是否与当前session中的token相同,以避免CSRF攻击的风险。

随后,脚本使用多种净化方法来加强安全性,包括:

- 使用 `strip_slashes()` 函数删除用户输入消息和用户名中可能存在的反斜杠字符。
- 使用 `mysqli_real_escape_string()` 函数对用户输入数据进行SQL注入攻击的防御。
- 使用 `htmlspecialchars()` 函数转义用户输入消息和用户名中的特殊字符。

此外,脚本还使用了PDO数据库抽象层来执行对数据库的操作,避免了使用原生SQL语句时,出现的SQL注入漏洞。

最后,脚本调用 `generateSessionToken()` 函数生成新的Session token。

使用这些净化方法和安全措施可以大大增强Web应用程序的安全性和可靠性,并避免恶意攻击。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/638047.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

腾讯云数据库mysql报错sql_mode=only_full_group_by的解决方法

原因:mysql5.6和5.7兼容问题 解决方法: sql_mode“ONLY_FULL_GROUP_BY” 把这个去掉

如何优雅的自动修改node_modules 中的依赖包内容?

使用 patch-package 自动修改 项目中node_modules中内容 背景简介&#xff1a;我们在使用第三方依赖包时如果遇到了 bug&#xff0c;通常解决的方式都是绕过这个问题&#xff0c;使用其他方式解决&#xff0c;较为麻烦。或者给作者提个 issue 或者 PR&#xff0c;然后等待作者的…

真有无限流量上网设备吗?必须是那种真无限流量、不限速的

提到无限流量&#xff0c;七八年前确实有这种说法&#xff0c;而且是官方说法&#xff0c;三大运营商卡套餐都有无限流量这一说。比如当时电信推出过一款99元/月流量无限用的手机卡套餐&#xff0c;移动运营商出过一款89元/月的类似产品&#xff0c;都是打着无限流量的标语&…

Android 13-SystemUI 屏幕左上角或者左上交显示绿色亮点,去掉该亮点

packages/SystemUI/src/com/android/systemui/privacy/PrivacyConfig.kt private const val DEFAULT_MIC_CAMERA false 改成false就好了

Randoop随机测试自动生成测试用例

什么是Randoop&#xff1a; Randoop是一个为JAVA单元测试生成测试用例的框架&#xff08;生成器&#xff09;&#xff0c;它基于Junit格式为编译后JAVA字节码&#xff08;classes&#xff09;自动生成测试用例. Randoop通过反馈式的随机测试来生成测试用例&#xff0c;由于测…

工程项目管理常用的软件有哪些?

工程项目管理常用的软件有哪些&#xff1f; 市面上的项目管理工具各种类型的都有&#xff0c;各自也有各自的优势和特点&#xff0c;但是“一千个人眼里有一千个哈姆雷特”&#xff0c;A企业觉得好用的项目管理工具不一定适合B企业。 一般来说&#xff0c;企业在进行系统工具…

蚁群优化算法

目录 蚁群优化 Quadratic Assignment Problem (QAP) 主要代码 create model Cost RouletteWheelSelection Plot 结果 蚁群优化 蚁群优化&#xff08;ACO&#xff09;是一套概率元启发法和智能优化算法&#xff0c;其灵感来源于蚂蚁的社会行为。ACO算法也被归类为群集智能…

电脑系统可以直接备份到其它硬盘上吗

在日常使用电脑的过程中&#xff0c;我们都希望能够保护好重要的系统数据&#xff0c;以防止意外数据丢失或系统崩溃。那么&#xff0c;能否将电脑系统直接备份到其他硬盘上呢&#xff1f;本文将为您解答这个问题&#xff0c;并探讨备份系统的方法和注意事项。 工具/原料&…

Kubernetes通过滚动更新deployment实现金丝雀发布

如果要使用 Deployment 向用户子集或服务器子集上线版本&#xff0c; 则可以遵循资源管理所描述的金丝雀模式&#xff0c; 创建多个 Deployment&#xff0c;每个版本一个。 所谓金丝雀发布&#xff08;Canary Release&#xff09;&#xff0c;就是第一个新的 Pod 创建完成后立…

高考落榜,误打误撞学习了软件测试现在月薪30k成为了班上人人羡慕的对象

记得我刚高考结束时&#xff0c;并没有想象中的狂欢&#xff0c;反而是一种处于一种坐立不安的焦虑中&#xff0c;因为那时单纯地认为&#xff1a;这张试卷&#xff0c;将决定我的一生。对于将信仰寄托于高考的学生来说&#xff0c;当网页上高考成绩弹出的一瞬间&#xff0c;世…

数据在内存中的存储--浮点数

那么好了好了&#xff0c;宝子们&#xff0c;今天给大家介绍一下 “数据在内存中储存” 的来龙去脉---浮点数&#xff0c;来吧&#xff0c;开始整活&#xff01;⛳️ 一、数据类型家族&#xff08;浮点数&#xff09; 家族成员&#xff1a;float&#xff0c;double&#xf…

通过 docker-compose 快速部署 Kafka 保姆级教程

一、概述 Kafka是由Apache基金会开发的分布式流处理平台&#xff0c;采用发布-订阅模式&#xff0c;支持高吞吐量、低延迟的数据传输。主要用于处理实时数据管道、数据存储和数据分析等大数据应用场景。Kafka采用高效的数据压缩算法&#xff0c;可以在集群中存储大量的数据&am…

相约未名湖畔,百度商业AI技术创新大赛携手北大学子共探AI发展

火热六月&#xff0c;百度商业AI技术创新大赛正在如火如荼的进行&#xff0c;百度商业与高校合作展开全国巡回宣讲会&#xff0c;吸引高校学子参与&#xff0c;激发创新思维&#xff0c;为科技发展注入源源不断的新生力量。6月6日&#xff0c;百度商业AI技术创新大赛走进北京大…

CSPM项目管理专业人员能力等级评价各级考试题目由什么构成?

2021年10月&#xff0c;中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系&#xff0c;开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会&#xff08;CAS&#xff09;组织开展的项…

智能存储柜的种类和特点分析

近年来随着网络技术的发展和人们对社会发展服务水平的需求不断提高&#xff0c;智能产品越来越普及&#xff0c;生活中也出现了越来越多的智能存储柜&#xff0c;应用于商场、超市、企业、工厂等场景&#xff0c;使用方便、保密性强、可靠性高。 智能存储柜种类非常多&#xff…

TIOBE 6月榜单出炉!AI影响到Python第一的位置?

TIOBE 6月榜单已经发布了&#xff0c;一起来看看这个月编程语言排行榜有什么变化吧&#xff01; Python第一宝座岌岌可危 在过去的几年中&#xff0c;Python已经5次获得TIOBE指数年度奖项。由于数据科学和人工智能领域的推动&#xff0c;它越来越受欢迎。自 2021 年 10 月起&a…

大模型热潮来袭,AI基础软件深度赋能金融行业数智化升级

近日&#xff0c;由中国金融电子化集团有限公司、南京市建邺区人民政府主办的“2023 中国金融业数字化转型发展大会暨第十三届中国城市商业银行信息化发展创新座谈会”在南京盛大举办。九章云极DataCanvas公司副总裁周晓凌受邀出席会议&#xff0c;并发表“大模型时代的银行AI中…

前端必须掌握的HTML知识

前端开发者必须掌握的HTML知识包括&#xff1a; HTML基础语法&#xff1a;HTML标签、属性、值等基础语法。 HTML文档结构&#xff1a;HTML文档的基本结构&#xff0c;包括、、等标签的使用。 HTML元素&#xff1a;常用的HTML元素&#xff0c;如文本元素、图像元素、链接元素、…

【有奖调研】互联网新型社交,华为在找“元服务搭子”,快来集合!

“聊技术无话不谈&#xff0c;一起来吹吹元服务&#xff01;畅聊你对元服务的想法&#xff0c;说不定&#xff0c;你就能撬动元服务的爆发增长&#xff01;” 元服务&#xff08;即原子化服务&#xff09;是华为“轻量化”服务的新物种&#xff0c;可提供全新的服务和交互方式…

【C++】 STL(上)STL简述、STL容器

文章目录 简述STL容器list链表vector向量deque双端队列map映射表set集合hash_map哈希表 简述 STL是“Standard Template Library”的缩写&#xff0c;中文译为“标准模板库”。STL是C标准库的一部分&#xff0c;位与各个C的头文件中&#xff0c;即他并非以二进制代码的形式提供…