dvwa中的xss(跨站脚本)攻击
环境:
dvwa: 192.168.11.135 dvwa版本: Version 1.9 (Release date: 2015-09-19)
kail机器:192.168.11.156
一、XSS是什么
XSS(Cross Site Scripting,跨站脚本攻击),是指恶意攻击者往web页面里插入恶意script代码,当用户浏览该页面时,嵌入其中web里面的script代码会被执行,从而达到恶意攻击用户的目的。
xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。
二、跨站脚本攻击XSS分类
反射型XSS:<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
存储型XSS:<持久化> 代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)。
DOM型XSS:基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。
三、常用绕过方式
普通注入:<script>alert('XSS')</script> 或者 <script>alert(document.cookie)</script>
大小写绕过:<sCript>alert(document.cookie)</scRipt> 或者 <scRipt>alert('lady_killer9')</sCript>
双写绕过:<scr<script>ipt>alert(document.cookie)</scr<script>ipt> 或者 <scr<script>ipt>aleralertt(document.cookie)</scr<script>ipt>
html标签绕过:<img src=x οnerrοr=alert('XSS');> 或者 <A HREF=http://192.168.11.135:81/phpinfo.php>link</A> 或者 <img src=x:alert(alt) οnerrοr=eval(src) alt=xss>
闭合标签绕过:></option></select><img src=x:alert(alt) οnerrοr=eval(src) alt=xss>
闭合+html标签绕过:></option></select><img src=x:alert(alt) οnerrοr=eval(src) alt=xss>
四、XSS(Reflected)
4.1、XSS(Reflected) LOW级别
代码:
主要步骤:array_key_exists函数判断name变量是否存在,并判断是否非空。若存在且非空,直接输出。
漏洞原因:
输入未过滤
输出未改变编码
普通注入:<script>alert('XSS')</script>
弹出:
4.2、XSS(Reflected) Medium级别
代码:
主要步骤:array_key_exists函数判断name变量是否存在,并判断是否非空。若存在且非空,使用str_replace函数替换<script>为空字符串,然后输出。
漏洞原因:
输入过滤不到位,尝试使用str_replace函数进行过滤,此函数区分大小写,对替换后的字符串不会再检查,可被双写、大小写等绕过
输出未改变编码
普通注入:<script>alert(document.cookie)</script>
大小写绕过:<sCript>alert(document.cookie)</scRipt>
弹出:
双写绕过:<scr<script>ipt>alert(document.cookie)</scr<script>ipt>
弹出:
1.3、XSS(Reflected) High级别
代码:
主要步骤:array_key_exists函数判断name变量是否存在,并判断是否非空。若存在且非空,使用preg_replace函数进行正则表达式匹配,且大小写都会匹配到,替换为空字符串,然后输出。
漏洞原因:
输入过滤不到位,尝试使用preg_replace函数进行正则表达式匹配过滤,但仅匹配了<script>相关,未匹配html标签
输出未改变编码
普通注入:<script>alert('XSS')</script>
注入失败,仅剩余了>,其他全部没有了,再尝试大小写或双写绕过。
大小写绕过:<sCript>aleRt(document.cookie)</scRipt>
注入失败。
双写绕过:<scr<script>ipt>aleralertt(document.cookie)</scr<script>ipt>
注入失败。可能使用了正则表达式,尝试不使用js标签
html标签绕过:<img src=x οnerrοr=alert('XSS');>
<A HREF=http://192.168.11.135:81/phpinfo.php>link</A>
五、XSS(Stored)
5.1、XSS(Stored) LOW级别
正常输出:
代码:
主要步骤:
isset函数判断btnSign是否提交,即是否点击了Sign Guessbook按钮;
使用trim函数去除提交的mtxMesssage、txtName前后导空格,分别给message、name变量;
使用stripslashes函数对message删除反斜杠,使用mysqli_real_escape_string函数对name、message变量中的特殊字符转义;
使用mysqli_query函数插入数据库。
漏洞原因:
未过滤输入,使用post方式增加难度
输出未改变编码
使用前端限制长度
通过阅读后端代码,我们发现name、message长度的判断并不在后端,按F12查看前端代码:
普通注入:分别在Name与Message输入框输入 <script>alert('lady_killer9')</script>
点击Sign Guestbook后:
注入失败。
方法1:Name有长度限制,Message注入失败,应该是Name可以注入,但是被限制了。尝试抓包进行注入:
注入成功,弹出:
方法2:前端页面中删除maxlength="10"
改成
5.2、XSS(Stored) Medium级别
正常输出:
前端限制Name、Message的长度。
代码:
主要步骤:
isset函数判断btnSign是否提交,即是否点击了Sign Guessbook按钮;
使用trim函数去除提交的mtxMesssage、txtName前后导空格,分别给message、name变量;
使用strip_tags函数对 使用函数addslashes添加反斜杠的message变量 剥去heml、xml、php标签,使用mysqli_real_escape_string函数对message变量中的特殊字符转义
使用str_replace函数将name中的<script>标签替换为空字符串,使用mysqli_real_escape_string函数对name变量中的特殊字符转义
使用mysqli_query函数插入数据库
漏洞原因:
输入过滤不到位,尝试使用str_replace函数进行过滤,此函数区分大小写,对替换后的字符串不会再检查,可被双写、大小写等绕过
输出未改变编码
使用前端限制长度
普通注入:前端删除输入长度限制,分别在Name与Message输入框输入 <script>alert('lady_killer9')</script>
标签被删除
标签没了,尝试大小写绕过。
大小写绕过:<scRipt>alert('lady_killer9')</sCript>
注入成功。
5.3、XSS(Stored) High级别
post方式,前端检查长度,直接删除,然后Html标签绕过。
代码:
主要步骤:
isset函数判断btnSign是否提交,即是否点击了Sign Guessbook按钮;
使用trim函数去除提交的mtxMesssage、txtName前后导空格,分别给message、name变量;
使用strip_tags函数对 使用函数addslashes添加反斜杠的message变量 剥去heml、xml、php标签,使用mysqli_real_escape_string函数对message变量中的特殊字符转义
使用preg_replace函数进行正则表达式匹配,然后替换为空字符串,使用mysqli_real_escape_string函数对name变量中的特殊字符转义
使用mysqli_query函数插入数据库
漏洞原因:
输入过滤不到位,尝试使用preg_replace函数进行正则表达式匹配过滤,但仅匹配了<script>相关,未匹配html标签
输出未改变编码
使用前端限制长度
html标签绕过:<img src=x οnerrοr=alert('XSS');>
注入成功。
六、参考
跨站脚本漏洞(XSS)基础讲解 - 简书 (jianshu.com)
网络安全-靶机dvwa之XSS注入Low到High详解(含代码分析)_lady_killer9的博客-CSDN博客_dvwa xss注入
dvwa中的xss(跨站脚本)攻击相关推荐
- 安全漏洞中的倚天剑——XSS跨站脚本攻击
one.概念 XSS跨站脚本攻击(Cross-Site Scripting)就是网站将用户输入的内容输出到页面上,在这个过程中可能有恶意代码被浏览器执行,XSS属于被动式的攻击,因为其被动且不好利用, ...
- vue 如何防止xss攻击 框架_LearningNotes-1/Vue/Vue中防止XSS脚本攻击 at master · axuu/LearningNotes-1 · GitHub...
Vue中防止XSS脚本攻击 最近写了一个博客评论模块,因为引入了表情包,所以就将原来的v-text的形式,改成了v-html,也就是渲染html标签,但是这样不可不免的会带来问题,就是XSS跨站脚本攻 ...
- 渗透知识-XSS跨站脚本攻击
XSS跨站脚本攻击:两种情况.一种通过外部输入然后直接在浏览器端触发,即反射型XSS:还有一种则是先把利用代码保存在数据库或文件中,当web程序读取利用代码并输出在页面上时触发漏洞,即存储型XSS.D ...
- xss跨站脚本攻击_网络安全xss跨站脚本攻击原理
以下在未经授权的网站操作均为违法行为 XSS跨站脚本攻击 xss的危害 网络钓鱼,盗取各类账号密码 我们先来看一下下面的案例:先来记住一下下面中的表 我们来做一个转发 上面页面显示已经登录,但是突然页 ...
- 遭遇 XSS 跨站脚本攻击?稳住,这些方法可保你渡劫 | 附代码、图解
作者 | 杨秀璋 责编 | 夕颜 出品 | CSDN博客 本文将详细讲解XSS跨站脚本攻击,从原理.示例.危害到三种常见类型(反射型.存储型.DOM型),并结合代码示例进行详细讲解,最后分享了如何预防 ...
- 《XSS跨站脚本攻击剖析与防御》—第6章6.1节参 考 文 献
本节书摘来自异步社区<XSS跨站脚本攻击剖析与防御>一书中的第6章6.1节参 考 文 献,作者邱永华,更多章节内容可以访问云栖社区"异步社区"公众号查看. 参 考 文 ...
- XSS(跨站脚本攻击)相关内容总结整理
XSS的攻击相关资料整理 文章目录 XSS的攻击相关资料整理 跨站脚本攻击(XSS) XSS 简介 XSS 危害 XSS 原理 XSS 分类 XSS 防御总结 XSS 问答 参考资料 跨站脚本攻击(X ...
- XSS跨站脚本攻击与CSRF跨站请求伪造攻击的学习总结。
之前就了解过这方面的知识,但是没有系统地总结.今天在这总结一下,也让自己在接下来的面试有个清晰的概念. XSS跨站脚本攻击: xss 跨站脚本攻击(Cross Site Scripting),为了不和 ...
- XSS跨站脚本攻击与CSRF跨站请求伪造攻击的学习总结
转载:https://blog.csdn.net/baidu_24024601/article/details/51957270 XSS跨站脚本攻击与CSRF跨站请求伪造攻击的学习总结. <di ...
- XSS(跨站脚本)漏洞详解之XSS跨站脚本攻击漏洞的解决
XSS(跨站脚本)漏洞详解 XSS的原理和分类 跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆, ...
最新文章
- Java中山脉的绘制---递归方法
- 有关“双重检查锁定失效”的说明
- 省吃俭用 ,究竟祸害了多少人 ?
- hdu 2553 N皇后问题【dfs】
- linux上很方便的上传下载文件工具rz和sz
- [VC++]菜鸟问与答(指针)
- python机器学习乳腺癌细胞模型
- c语言坐标画图,C语言中绘图的函数库
- Prince和学生们2
- halcon19.11深度学习关于分类入门案例
- python小游戏——俄罗斯方块
- C#+Appium+Nunit demo
- 事件监听 ActionListener
- 数据结构与算法-栈与队列
- 数字图像处理:视觉概述
- 机载计算机系统教材,机载计算机系统故障诊断.pdf
- 最新Git 版本在Windows系统中的安装详解过程
- [结论] LibreOJ #520. 「LibreOJ β Round #3」绯色 IOI(开端)
- 国产源代码扫描工具DMSCA扫描出的报告优秀吗?
- TCPDF:html文件转pdf格式
热门文章
- iOS 格式化输出 位数不足补0
- 网盘搜索工具2019
- 正则表达式 REGEXP_REPLACE
- 繁易MQTT简单操作说明
- IntelliJ IDEA注释字体形式修改
- word隐藏段落标记,回车三角
- 渲染效果图哪家好?2022最新实测(三)
- AttributeError: ‘FigureCanvasTkAgg‘ object has no attribute ‘set_window_title‘
- SMETA验厂辅导,对于已经通过了审核公司的ETI标准验厂,如何将验厂结果上传到SEDEX上
- 如何使用UCI数据集