DVWA V1.9:Reflected Cross Site Scripting(存储型XSS)

  • 存储型 XSS 介绍
  • Low 级别
    • 核心代码
    • 官方提示
    • 漏洞利用
  • Medium 级别
    • 核心代码
    • 官方提示
    • 漏洞利用
  • High 级别
    • 核心代码
    • 官方提示
    • 漏洞利用
  • Impossible 级别
    • 核心代码
    • 官方提示

存储型 XSS 介绍

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

攻击者可以使用XSS向恶意的用户发送恶意脚本。
终端用户的浏览器没有办法知道脚本不应该被信任,并且将执行JavaScript。

因为它认为脚本来自可信来源,恶意脚本可以访问任何cookie、会话令牌或浏览器保留的其他敏感信息,并与该站点一起使用。
这些脚本甚至可以重写HTML页面的内容。

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

Low 级别

核心代码

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

trim(string,charlist)
函数移除字符串两侧的空白字符或其他预定义字符,预定义字符包括、\t、\n、\x0B、\r以及空格,可选参数charlist支持添加额外需要删除的字符。

mysql_real_escape_string(string,connection)
函数会对字符串中的特殊符号(\x00,\n,\r,\,‘,“,\x1a)进行转义。

stripslashes(string)
函数删除字符串中的反斜杠。

可以看到,对输入并没有做XSS方面的过滤与检查,且存储在数据库中,因此这里存在明显的存储型XSS漏洞。

官方提示

低电平将不检查请求输入,然后将其包含在输出文本中使用。

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

漏洞利用

name一栏前端有字数限制,抓包改为<script>alert(/name/)</script>:成功弹框:


message一栏输入<script>alert(/xss/)</script>,成功弹框:


Medium 级别

核心代码

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

strip_tags() 函数剥去字符串中的HTML、XML以及PHP的标签,但允许使用标签。

addslashes() 函数返回在预定义字符(单引号、双引号、反斜杠、NULL)之前添加反斜杠的字符串。

可以看到,由于对message参数使用了htmlspecialchars函数进行编码,因此无法再通过message参数注入XSS代码,但是对于name参数,只是简单过滤了《script》字符串,仍然存在存储型的XSS。

官方提示

开发者已经添加了一些保护,但是并没有以相同的方式完成每一个领域。

Spoiler: name field: <sCriPt>alert("XSS");</sCriPt>.

漏洞利用

双写绕过,大小写绕过,两个方法都行,步骤一样不复述了。

双写:<sc<script>ript>alert(/xss/)</script>
大小写:<Script>alert(/xss/)</script>

High 级别

核心代码

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

可以看到,这里使用正则表达式过滤了

官方提示

开发人员现在相信他们可以通过删除模式 “<scrip*t” 来禁用所有JavaScript

Spoiler: HTML events.

漏洞利用

步骤差不多,就不复述了。

利用格式:<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 = 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();?>High Stored XSS Source
<?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();
}?>Medium Stored XSS Source
<?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();
}?>Low Stored XSS Source
<?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();
}?>

可以看到,通过使用htmlspecialchars函数,解决了XSS,但是要注意的是,如果htmlspecialchars函数使用不当,攻击者就可以通过编码的方式绕过函数进行XSS注入,尤其是DOM型的XSS。

官方提示

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

参考链接:
新手指南:DVWA-1.9全级别教程(完结篇,附实例)之XSS

DVWA V1.9:Reflected Cross Site Scripting(存储型XSS)相关推荐

  1. Reflected Cross Site Scripting (XSS)

    前言 反射型XSS, 即 Reflected Cross Site Scripting (XSS),  攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的 页 ...

  2. DVWA关卡11:Reflected Cross Site Scripting (XSS)(反射型XSS)

    目录 Low Medium High Impossible 反射型XSS:恶意脚本未经转义被直接输入并作为HTML输出的一部分,恶意脚本不在后台存储,直接在前端浏览器被执行. 攻击者可以使用XSS向恶 ...

  3. XSS(Cross Site Scripting)攻击简介

    环境 Ubuntu 22.04 IntelliJ IDEA 2022.1.3 JDK 17.0.3.1 Spring Boot 3.0.1 Firefox 108.0.2 问题和分析 在Intelli ...

  4. XSSF - Cross Site Scripting Framework

    2019独角兽企业重金招聘Python工程师标准>>> 跨站脚本框架 (XSSF) 是一个设计用来快速发现网站存在XSS漏洞的一个安全工具集. 该项目是为了验证网站存在的XSS漏洞及 ...

  5. Xss-reflected/stored跨站脚本分析(Cross site scripting)

    Xss-reflected/stored跨站脚本分析(Cross site scripting) 基础知识 针对Dom - dochtml Url概念:协议+网址/dns+端口+路径 XSS原理:对U ...

  6. 【常见Web应用安全问题】---1、Cross Site Scripting

    Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里不准备介绍所有的,只介绍常见的一些.  常见Web应用安全问题安全性问题的列表: 1.跨站脚本攻击(CSS or XSS, Cross Si ...

  7. Cross Site Scripting DOM攻击jQuery append() 的处理方法

    做安全红线使用Fortify工具进行扫描时,jquery append会报Cross Site Scripting DOM风险.解决该问题有两种办法. 一.原生dom方式 使用JavaScript原生 ...

  8. xss(Cross Site Scripting)

    目录 xss 跨站脚本攻击 原理: 反射型XSS 存储型XSS xss 跨站脚本攻击 原理: 恶意攻击者在web页面中会插入一些恶意的script代码.当用户浏览该页面的时候,那么嵌入到web页面中s ...

  9. DVWA通关--存储型XSS(XSS (Stored))

    目录 LOW 通关步骤 源码分析 MEDIUM 通关步骤 源码分析 HIGH 通关步骤 源码分析 IMPOSSIBLE 源码分析 存储型XSS也叫持久型XSS,从名字就知道特征是攻击代码会被存储在数据 ...

最新文章

  1. html圆角边框只有左边,border-radius以外的CSS圆角边框制作方法
  2. php5.2 zengd,大对杀狗狗再犯低级错误 ZEN狂输200目笑翻棋友
  3. jni中native通过adb输出
  4. VLC详细的使用说明以及配置说明综合示范实例精通VLC开发
  5. DCP(Deep Closest Point)论文阅读笔记以及详析
  6. jpsnamenode和不显示_hadoop启动后jps查不到namenode的解决办法
  7. 万年历单片机课程设计百度文库_单片机课程设计电子万年历设计
  8. CPC系统在win10上的安装,1小时快速安装
  9. 汇总站外seo方法和做法?
  10. 微信支付/支付宝指纹支付原理
  11. 用Python 统计、分析2020年江苏省事业单位招聘岗位 Excel 表格信息
  12. 广告行业中富媒体的概念
  13. CVPR2021 MotionRNN: A Flexible Model for Video Prediction with Spacetime-Varying Motions
  14. 分享《生死狙击2》的大场景草渲染
  15. exls下载后显示jsp_jsp页面点击连接,生成excel文件,然后下载
  16. 思科光传输功率查询_各厂家查收发光功率命令整理
  17. 蓝松AE模板SDK使用介绍.
  18. 宇龙数控仿真安装后连接服务器失败解决方法
  19. 【华为认证】HCIP 数通笔记—BGP路由反射器
  20. Windows 7 更新补丁(解决无法安装Axure RP 9)亲测可用

热门文章

  1. 倾情奉献:我的公众号矩阵之路
  2. iOS10新特性,适配教程,XCode8新特性
  3. Forge 发布倒计时三天:陈天写下他加入 ArcBlock 一周年的感慨 | ArcBlock 博客
  4. 看完让你彻底理解 WebSocket 原理
  5. Android开发——Android中的二维码生成与扫描
  6. python中如何引入π_python如何计算π
  7. Vue实例中生命周期created和mounted的区别(具体细节分析)。
  8. wps自动图文集 重新编号_如何使用自动图文集在Microsoft Word中快速插入文本块
  9. html利用百度地图查找路线,html调用百度地图API实现查找路线
  10. Facebook 秘钥散列