DVWA-XSS (Stored)

article/2025/8/27 2:50:57

目录

  • 简介
  • 安全级别:Low
  • 安全级别:Medium
  • 安全级别:High
  • 安全级别:Impossible

简介

存储型XSS

长期存储于服务器端;

每次用户访问都会执行脚本代码;

安全级别:Low

查看源码

<?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(string,charlist) // 移除string字符两侧的预定义字符。
stripslashes(string) //去除掉string字符的反斜杠\,该函数可用于清理从数据库中或者从 HTML 表单中取回的数据。
mysql_real_escape_string// 转义 SQL 语句中使用的字符串中的特殊字符。
只是对数据库进行了防护,没有考虑到对XSS进行过滤

注入语句

<script>alert('1')</script>

在这里插入图片描述

安全级别:Medium

查看源码

if( isset( $_POST[ 'btnSign' ] ) ) { // Get input $message = trim( $_POST[ 'mtxMessage' ] ); $name    = trim( $_POST[ 'txtName' ] ); // Sanitize message input $message = strip_tags( addslashes( $message ) ); $message = mysql_real_escape_string( $message ); $message = htmlspecialchars( $message ); // Sanitize name input $name = str_replace( '<script>', '', $name ); $name = mysql_real_escape_string( $name ); // Update database $query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );"; $result = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' ); //mysql_close(); 
} 

源码分析

strip_tags() // 函数剥去字符串中的HTML、XML以及PHP的标签,但允许使用<b>标签。
addslashes() // 函数返回在预定义字符(单引号、双引号、反斜杠、NULL)之前添加反斜杠的字符串。
htmlspecialchars(string,flags,character-set,double_encode) // 把预定义的字符转换为 HTML 实体。
由于对message参数使用了htmlspecialchars函数进行编码,因此无法再通过message参数注入XSS代码,但是对于name参数,只是简单过滤了<script>字符串,仍然存在存储型的XSS。
大写绕过,由于输入长度限制,抓包修改name传参(也可以手动审查元素将name的maxlength值调大):

注入语句

<Script>alert('2')</script>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

安全级别:High

查看源码

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

源码分析

message变量依然无法注入,name变量正则过滤更加完善,不区分大小写,且使用通配符匹配,导致嵌套构造的方法也不能成功,但依旧可以使用事件类型标签或伪协议的方法

注入语句

<img src=1 onerror=alert(1) />

在这里插入图片描述
在这里插入图片描述

安全级别:Impossible

查看源码

<?phpif( isset( $_POST[ 'btnSign' ] ) ) {// Check Anti-CSRF tokencheckToken( $_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();?> 

源码分析

​ message和name变量都进行了严格的过滤,而且还添加了用户的token验证机制,有效地防止了CSRF攻击


http://chatgpt.dhexx.cn/article/05JutDjU.shtml

相关文章

Oracle中的存储过程【Stored Procedure】和存储函数【Stored Function】

一、存储过程 1.1、存储过程的介绍 存储过程&#xff08;Stored Procedure&#xff09;是在大型数据库系统中&#xff0c;一组为了完成特定功能的SQL 语句集&#xff0c;经编译后直接存储在数据库中&#xff0c;用户调用指定存储过程的名字和传递对应的参数&#xff08;如果该…

DVWA指点迷津-XSS(Stored)

XSS(Stored) 特点 又名“存储型XSS”。攻击者的“恶意语句”会存储在服务器端数据库&#xff0c;具有很强的稳定性。每次前端调用数据库内容&#xff0c;则会触发语句。一般出现在留言板、上传资料等与数据库有交互的模块。相比反射型XSS&#xff0c;该类型的XSS带来的危害更…

XSS(Stored)

XSS(Stored) 前言 看了一个web的安全视频&#xff0c;里面有说说有的web漏洞都是输入输出的控制问题&#xff0c;虽然感觉说的太笼统了。但确实没什么毛病。sql注入来说&#xff0c;对用户的输入做好处理&#xff0c;对服务端的输出做好处理&#xff0c;对于我这样的菜鸡来说…

linux重启java项目

1.java项目占用的8888端口&#xff0c; 首先查看该进程的进程号&#xff1a; netstat -tunlp|grep 88882.占用8888端口的进程id为4179&#xff0c;杀死该进程&#xff1a; kill -9 41793.启动java项目&#xff1a; nohup java -jar demo-0.0.1-SNAPSHOT.jar &nohup 意思…

linux 如何重启oracle,Linux重启oracle数据库的三大技巧

Linux系统下网站出现问题的时候,可通过重启oracle数据库进行处理,而重启oracle数据库的方法有好多种,可登陆数据库进行操作,也可在终端操作,具体的随小编一起来了解下吧。 网站的服务中断了,重启下发现是oralce服务不存在,又不想重启机器,就重新启动下oralce,再重启服…

Linux重启nginx服务

1.方法一 到nginx下面的sbin目录下执行 ./nginx -s reload2.方法二 如果第一种不生效&#xff0c;&#xff08;项目背景&#xff09;实际项目不生效&#xff0c;也即部署到nginx下面的vue项目&#xff0c;已经更换为最新版本&#xff0c;但是仍然没有生效&#xff0c;可以使用…

linux重启程序

今天在Linux上部署程序出错&#xff0c;经检查最后是linux上的程序原来的该程序未停止&#xff0c;又重新启动该程序导致&#xff08;相当与Linux上有两个该程序同时运行导致的错误&#xff09; 解决方法&#xff1a; 1. 查看linux 上的线程 ps -ef | grep java2.运行结果 其…

pjax理解

注&#xff1a; http://www.itkee.cn/topic-info-75.html https://fly.layui.com/jie/10956/ http://bsify.admui.com/jquery-pjax/?idpjax-pushstate-ajax

thymeleaf 整合 pjax 无刷新跳转

原文地址&#xff1a; http://www.linzichen.cn/article/1577881001718185984 在一些需要做 seo 优化的应用里&#xff0c;比如门户网站、博客论坛网站、商城商品页网站等&#xff0c;我们的数据常常采用 服务端渲染的方式来展现&#xff0c;目的是为了让爬虫更好的抓取到&…

php pjax案例,jQuery pjax简单示例汇总

pjax 是一个jQuery插件&#xff0c;它使用 ajax 和 pushState 来实现快速的浏览体验&#xff0c;包括真正的固定链接&#xff0c;页面标题和工作返回按钮。本文主要和大家分享jQuery pjax简单示例汇总&#xff0c;希望能帮助到大家。 ajax缺点是破坏了浏览器的前进后退&#xf…

pjax php,php整合pjax(pushstate+ajax)实现无刷新页面

PJAX效果 通过url可以跟踪ajax的动态加载内容。这种技术尤其在two step view布局的视图中有很大的好处。无刷新加载页面&#xff0c;意味着响应速度和用户体验得到了极大的提升&#xff0c;在静态脚本和通用模块比较多的情况下&#xff0c;最大程度上节省了重用部分的开销。应用…

html5 pjax,pjax——页面无刷新跳转

pjax虽然不是什么新的技术&#xff0c;然而本人是最近才发现这个比较牛叉的技术。下面是对pjax的介绍&#xff1a; pjax是在HTML5里面引用的新技术&#xff0c;是对ajax pushState的封装&#xff0c;是实现无刷新ajax加载并解决浏览器前进和后退问题的一个开源实现。同时支持了…

java pjax_(转)PJAX的实现与应用

一、前言 web发展经历了一个漫长的周期&#xff0c;最开始很多人认为Javascript这们语言是前端开发的累赘&#xff0c;是个鸡肋&#xff0c;那个时候人们还享受着从一个a链接蹦到另一个页面的web神奇魔术。后来随着JavaScript的不断更新换代&#xff0c;他的功能不仅仅是为网页…

html5 pjax,关于PJAX局部刷新

前言部分 本教程最先来自鬼少博客&#xff0c;后论坛有人补充搜索和评论&#xff0c;然后又被各种转载&#xff0c;转完甚至还有阉割现象&#xff0c;导致会出现各种问题,于是&#xff0c;我这里再重发一次。虽然注释很清楚&#xff0c;但是&#xff0c;还有很多人看不懂&#…

java pjax_pjax简单实例

ajax缺点是破坏了浏览器的前进后退&#xff0c;因为ajax的请求不会留在历史记录中。pjax就不一样了&#xff0c;pjax被解释成ajaxpushState的封装&#xff0c;因为它把ajax的请求写入历史记录&#xff0c;并反映在地址栏&#xff0c;这样用户就能愉快地使用前进后退了。pjax有好…

Typecho开启全站Pjax

原文地址&#xff1a;Typecho开启全站Pjax 前言 因为上次更新后加入民音乐插件&#xff0c;但是有个问题就是在页面跳转的时候由于页面已经刷新了&#xff0c;所以音乐就不会继续播放了&#xff0c;就想着去引入Pjax来解决这个问题&#xff0c;同时引入pjax后比较直观的改变就…

pjax使用小结

前言 上周看到一篇文章在分析简书 我的主页 页面 3 个 tab 页切换的 bug&#xff0c;起先以为是寻常的样式 bug 而已没怎么在意&#xff0c;后来在文章中看到 pjax 这个术语&#xff0c;长得和 ajax 有点像&#xff0c;遂去了解了下。 简介 虽然传统的 ajax 方式可以异步无刷新…

网站访问速度优化之pjax

pjax 是 ajax 和 pushState 的结合&#xff0c;它是一个 jQuery 插件。它通过 ajax 从服务器端获取 HTML 文件&#xff0c;在页面中用获取到的HTML替换指定容器元素中的内容。然后使用 pushState 技术更新浏览器地址栏中的当前地址&#xff0c;并且保持了真实的地址、网页标题&…

idea热更新

配置idea热更新 第一步&#xff1a;下载插件 JRebel idea-file-settings-plugins搜JRebel 点击installed下载 我这里已经下载好。 第二步&#xff1a;配置GUID 点击jrebel Activation&#xff0c;开始配置 第一行是服务器地址&#xff1a;https://jrebel.qekang.com/{GUID} G…

webpack和vue热更新

目录 webpack一些概念介绍 webpack热更新流程 1. 启动阶段 ①->②->A->B 2. 更新阶段 ①->②->③->④ vue的组件热更新模块 总结 提到热更新&#xff0c;首先我们要有一个概念&#xff1a;Vue有热更新模块&#xff0c;而webpack也有它的HRM模块&#x…