首页 > 其他分享 >DVWA靶场实战(十二)——XSS(Stored)

DVWA靶场实战(十二)——XSS(Stored)

时间:2023-02-03 12:33:05浏览次数:49  
标签:XSS name DVWA ston Stored mysqli ___ GLOBALS

DVWA靶场实战(十二)

五、XSS(Stored):

1.漏洞原理:

  XSS的Stored被称作存储型XSS漏洞,漏洞的原理为语句被保存到服务器上,显示到HTML页面中,经常出现在用户评论的页面,攻击者将XSS代码保存到数据库中,当用户在此访问这个页面时,就会触发XSS代码,窃取用户敏感信息。

2.漏洞特点:

  危害性为XSS三种类型中最大的,因为他是存储在服务器上,持久型的XSS漏洞,JS代码不在某个参数中,而是被写进了数据库或文件可以永久保存数据的介质中,如留言板等。

3.实战:

(1)Low:

  代码分析:

<?php
 
if( isset( $_POST[ 'btnSign' ] ) ) {
    // Get input
// trim(string,charlist)
函数移除字符串两侧的空白字符或其他预定义字符,预定义字符包括、\t、\n、\x0B、\r以及空格,可选参数charlist支持添加额外需要删除的字符。
    $message = trim( $_POST[ 'mtxMessage' ] );
    $name    = trim( $_POST[ 'txtName' ] );
 
    // Sanitize message input
// stripslashes(string)
函数删除字符串中的反斜杠。
    $message = stripslashes( $message );
// mysql_real_escape_string(string,connection)
函数会对字符串中的特殊符号(\x00,\n,\r,\,‘,“,\x1a)进行转义。
    $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();
}
 
?>

  此处name是做了长度限制的,不过也仅此而已,所以我们在Message处可以使用语句进行尝试。

  我们开始攻击,使用语句<script>alert(“Hello”)</script>进行尝试,发现才成功,可以进行尝试攻击。

(2)Medium:

  代码分析:

<?php
 
if( isset( $_POST[ 'btnSign' ] ) ) {
    // Get input
    $message = trim( $_POST[ 'mtxMessage' ] );
    $name    = trim( $_POST[ 'txtName' ] );
 
    // Sanitize message input
// strip_tags() 函数剥去字符串中的HTML、XML以及PHP的标签,但允许使用<b>标签
// addslashes() 函数返回在预定义字符(单引号、双引号、反斜杠、NULL)之前添加反斜杠的字符串
    $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();
}
 
?>

  这里的代码,我们可以看见Message处使用htmlspecialchars()函数,这个函数的作用是将字符全部转为了HTML实体,因此Message处无法使用XSS形成攻击。Name处也做了长度限制,因此考虑使用抓包在BP中修改Name值,考虑使用双写或者大小写绕过。

  我们开始攻击,首先尝试使用大小写进行绕过使用语句“<scRIPt>alert(123)</scRIPt>”,注意前后大小写要一致。

 

  同时,第二种解法也可以采用双写注入的方式,使用语句“<sc<script>ript>alert(“Hello”)</script>”。 

 

(3)High:

  代码分析:

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

  同上一个XSS中相同。Script是被过滤了,所以用BP修改Name,然后修改img等参数即可。

  我们开始攻击,利用语句“<img scr=1 one rror=alert(“whoami”)>”。

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

  作为防御模板,对Name和Message都使用了htmlspecialchars()函数做了过滤,还加了token值,进一步提高了安全性。

标签:XSS,name,DVWA,ston,Stored,mysqli,___,GLOBALS
From: https://www.cnblogs.com/wybsignal/p/17088750.html

相关文章

  • Google XSS Game
    XSSgame(xss-game.appspot.com)这是一款谷歌的XSS游戏,总共有6个级别Level1无需转义,直接编辑URL栏或者搜索框中都可以执行<script>alert(1)</script>Leve......
  • 分享两个好用的XSS漏扫工具(工具)
    =================免责声明:希望大家以遵守《网络安全法》相关法律,本团队发表此文章仅用于研究学习,切勿用于非法犯罪活动,对于恶意使用该工具造成的损失,和本团队无关。=======......
  • DVWA系列3:CSRF
    DVWA系列3:CSRF前言CSRF(Cross-siterequestforgery),即跨站请求伪造,是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。比如说,用户之前登录了网银网......
  • vue.js客服系统实时聊天项目开发(十)过滤xss字符内容-防止xss攻击
    我们在发送消息给用户的时候,都要进行过滤xss字符,xss是跨站脚本攻击,实质上就是发送了html或js代码,现在我们在vue项目中对内容进行一下过滤在vue中安装如下:npminstallxs......
  • XSS
    原理前端代码注入,拼接恶意的html,真正执行恶意代码的是js语句常见业务场景:重灾区:评论区、留言区、个人信息、订单信息等针对型:站内信、网页即时通讯、私信、意见反馈存......
  • [转]dvwa安装、配置、使用教程(Linux)
    本文转自:https://www.cnblogs.com/lsdb/p/6826519.html一、搭建LAMP环境首先搭建好LAMP环境,如没配好参见“Linux+Apache+MySQL+PHP配置教程”或者使用官方推荐的XAMPP:h......
  • DVWA靶场实战(十一)——XSS(Reflected)
    DVWA靶场实战(十一)十一、XSS(Reflected):1.漏洞原理:XSS被称为跨站脚本攻击(CrossSiteScript),而Reflected被称作反射型XSS。不同于DOM和Stored,Reflected反射型无法存储......
  • XSS攻击是什么
    攻击者可以通过向Web页面里面插入script代码,当用户浏览这个页面时,就会运行被插入的script代码,达到攻击者的目的。XSS的危害一般是泄露用户的登录信息cookie,攻击者可以通过c......
  • NodeJS - XSS-Attribute
    参考:https://owasp-skf.gitbook.io/asvs-write-ups/cross-site-scripting-attribute-xss-attribute/kbid-3-xss-attributef12看看修改color的值,英文句子就会改变颜色,这......
  • NodeJS - XSS-href
    参考:https://owasp-skf.gitbook.io/asvs-write-ups/cross-site-scripting-href-xss-href/kbid-3-xss-url输入https://www.baidu.com再点击visit,会跳转至百度页面,这里可能......