dvwa详解_DVWA--XSS(stored)

XSS

0X01

1、简介

跨站脚本(cross site script)为了避免与样式css混淆,所以简称为XSS。

XSS是一种经常出现在web应用中的计算机安全漏洞,也是web中最主流的攻击方式。那么什么是XSS呢?

XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去。使别的用户访问都会执行相应的嵌入代码。

从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。

XSS攻击的危害包括:

1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号

2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力

3、盗窃企业重要的具有商业价值的资料

4、非法转账

5、强制发送电子邮件

6、网站挂马

7、控制受害者机器向其它网站发起攻击

首先我们先来了解一下什么叫XSS XSS原名CSS 因与htmlcss框架同名 所以后来改名为XSS

2、原因解析

主要原因:过于信任客户端提交的数据!

解决办法:不信任任何客户端提交的数据,只要是客户端提交的数据就应该先进行相应的过滤处理然后方可进行下一步的操作。

进一步分析细节:

客户端提交的数据本来就是应用所需要的,但是恶意攻击者利用网站对客户端提交数据的信任,在数据中插入一些符号以及javascript代码,那么这些数据将会成为应用代码中的一部分了。那么攻击者就可以肆无忌惮地展开攻击啦。

因此我们绝不可以信任任何客户端提交的数据!!!

那么我们今天讲的storedXSS是什么类型的呐?

又称为持久型跨站点脚本,它一般发生在XSS攻击向量(一般指XSS攻击代码)存储在网站数据库,当一个页面被用户打开的时候执行。每当用户打开浏览器,脚本执行。持久的XSS相比非持久性XSS攻击危害性更大,因为每当用户打开页面,查看内容时脚本将自动执行。谷歌的orkut曾经就遭受到XSS。

简单例子:

从名字就可了解到存储型XSS攻击就是将攻击代码存入数据库中,然后客户端打开时就执行这些攻击代码。例如留言板

留言板表单中的表单域:

正常操作:

用户是提交相应留言信息;将数据存储到数据库;其他用户访问留言板,应用去数据并显示。

非正常操作:

攻击者在value填写【或者html其他标签(破坏样式。。。)、一段攻击型代码】;

将数据存储到数据库中;

其他用户取出数据显示的时候,将会执行这些攻击性代码

0X02

LOW.xss

这里我们先来查看一波源码

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( '

' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
' );

//mysql_close();

}

?>

相关函数的介绍http://www.w3school.com.cn

https://www.runoob.com/

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

mysqli_real_escape_string对字符串特殊符号(\x00,\n,\r,\,‘,“,\x1a)等进行转义。

stripslashes函数删除字符串中的反斜杠。\

htmlspecialchars把预定义的字符 ""(大于)转换为 HTML 实体:

boldtext.

以上代码的浏览器输出:

Thisis some bold text.

PDO::prepare — 准备要执行的SQL语句并返回一个 PDOStatement 对象(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)

好了 那我们大概来讲一下这些函数的作用

未对输入数据进行xss检测编码,直接写入到数据库中,存在存储型xss漏洞。

以下是测试代码

https://www.cnblogs.com/baocheng/p/4919691.html

这里前端元素对表单提交的name进行了过滤  我们这里可以用burpsuite绕过

具体绕过方法

0X03爱之深入了解Medium级别

OK 我们来看看源码 多了些什么东西

$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( '

$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( '

' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
');//mysql_close();

}?>

相关的函数介绍

教程来自 http://www.w3school.com.cn/

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

PHP addslashes() 函数

addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。

预定义字符是:

单引号(')

双引号(")

反斜杠(\)

NULL

<?php

$str= addslashes('Shanghai is the "biggest" city in China.');

echo($str);?>

1675852-20190523122320269-477125701.png

PHP htmlspecialchars() 函数 http://www.w3school.com.cn/php/func_string_htmlspecialchars.asp

这里因为message里面有htmlspecialchars函数  所以无法通过message函数进行XSS注入 只有从name处进行

注入 但是name只是简单过滤了

构造语句

<

成功绕过

0X04爱之究极抚摸High

首先来看看源代码

$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( '/

$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( '

' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
');//mysql_close();

}?>

可以看见这里用正则表达式过滤了

展开我们的攻击吧

1675852-20190523124608719-1291592831.png

1675852-20190523125318607-1388819305.png

1675852-20190523124621105-554726156.png

成功绕过

0X05爱的总结

这里XSS当然只是只有绕过 方法 具体利用方法可没有这么简单啊呐

具体的利用方法下次写的详细点吧 😃

少就是多 慢就是快

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值