目录

  • 简介
  • 安全级别: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攻击

DVWA-XSS (Stored)相关推荐

  1. 【Kali渗透全方位实战】利用Beef进行XSS会话劫持(XSS Stored)

    文章目录 1 会话劫持 2 kali中beef的使用 3 开始渗透 2.1 修改dvwa xss stored等级为low 2.2 script 标签 2.3 过程演示 2.4 会话劫持 2.5 换一 ...

  2. OWASP DVWA XSS reflectedstored全系列

    DVWA XSS reflected 测试目标网址:http://192.168.247.150/dvwa/vulnerabilities/xss_r/ low安全级别 直接输入 <script ...

  3. DVWA——XSS(Reflected)——多种方法实现+详细步骤图解+获取cookie的利用过程演示

    一)XSS(Reflected)介绍: 反射型xss(非持久型):需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面.特点:弹窗警告.广告:javas ...

  4. XSS跨站脚本攻击(DVWA XSS攻击详解、XSS平台搭建)

    一.跨站脚本攻击过程 二.XSS攻击定义及危害 三.XSS攻击常见分类 例:反射型 例:存储型 例:DOM型 四.XSS攻击常见编码 例: 编码后: 五.XSS常见测试语句 Script 标签 Scr ...

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

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

  6. DVWA之Stored XSS(存储型XSS)代码审计

    目录 Low Medium Hight Impossible Low 关键源码 trim(string,charlist) : 移除string字符两侧的预定义字符,预定义字符包括\t . \n .\ ...

  7. DVWA——XSS(Dom lowmedium)

    此文章只用于学习,请勿用作其他违法犯罪行为! 以下部分文字内容以图片形式展示,因为JS代码打不上去. 目录 前言 XSS攻击流程 XSS的危害 XSS的漏洞类型 JS基本语句 XSS Dom Low ...

  8. PHP代码审计DVWA[XSS (DOM)]

    XSS (DOM 靶场搭建可用蓝易云服务器

  9. PHP代码审计DVWA[XSS (Reflected)]

    XSS (Reflected)反射型XSS 靶场搭建可用蓝易云服务器

  10. [Root-me]XSS - Stored 1

    个人博客地址 http://www.darkerbox.com 欢迎大家学习交流 Root-me网址: https://www.root-me.org/en/Challenges/Web-Client ...

最新文章

  1. DecimalFormat格式化输出带小数的数字类型
  2. 哈工大威海c语言实验报告 第八章 无法运行程序,哈工大威海c语言实验报告.doc...
  3. 《T-SQL性能调优秘笈——基于SQL Server 2012 窗口函数》——1.2 使用窗口函数的解决方案简介...
  4. 经济危机拒绝穷潇洒 试水充电战危机
  5. uva 756—— Biorhythms
  6. 地球上最神奇的10种物质,打赌你都没见过!
  7. 单基因gsea_这篇3+分核心基因筛选,点个在看,我们复现这篇文章!
  8. JAVA 枚举类的初步理解
  9. Spring的国际化(转载)
  10. JVM优化系列-Stop-The-World实战
  11. 数据中台是什么?数据中台应包含什么?来听听袋鼠云合伙人张旭的回答!
  12. 电子工业出版社博文视点在2010年系统架构师大会上集锦
  13. 【sklearn第九讲】支持向量机之分类篇
  14. JDK版本切换——JDK1.1.1
  15. FPGA芯片内两种存储器资源
  16. CentOS_7环境搭建L2TP服务器
  17. ThinkPHP 微信支付及退款
  18. 【luogu P5055】【模板】可持久化文艺平衡树
  19. 动听的“教育之歌”,消费金融们的演奏响而不悦耳
  20. VOD (Video On Demand),视频点播技术

热门文章

  1. 全网最全开源数据集 | 资源
  2. Android逆向之分析某锁机恶意软件
  3. linux中man命令的基本用法,linux中的man命令的详细解释
  4. DEM: 诊断事件管理 (Diagnostic Event Manager)
  5. 个人陈述怎么写计算机专业自招,高三自主招生个人陈述范文(最新)
  6. 基于单片机的超市储物柜设计_基于单片机的超市储物柜控制系统设计.docx
  7. Python AutoCAD 修改
  8. Toshiba转换芯片-TC358778XBG:RGB转MIPI DSI芯片资料
  9. 淘宝关键词API接口
  10. EDCF阅读笔记:Reinforced Representation Learning for High Performance Visual Tracking