dvwa中的xss(跨站脚本)攻击

news2024/11/26 13:26:44

环境:

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漏洞。

三、常用绕过方式

  1. 普通注入:<script>alert('XSS')</script> 或者 <script>alert(document.cookie)</script>

  1. 大小写绕过:<sCript>alert(document.cookie)</scRipt> 或者 <scRipt>alert('lady_killer9')</sCript>

  1. 双写绕过:<scr<script>ipt>alert(document.cookie)</scr<script>ipt> 或者 <scr<script>ipt>aleralertt(document.cookie)</scr<script>ipt>

  1. 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>

  1. 闭合标签绕过:></option></select><img src=x:alert(alt) οnerrοr=eval(src) alt=xss>

  1. 闭合+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后:

注入失败。

方法1Name有长度限制,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注入

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/167721.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2003-2019年各省数据GDP、人均GDP、城镇化率、年末人口数、人口自然增长率

2003-2019年各省数据GDP、人均GDP、城镇化率、年末人口数、人口自然增长率 1、时间&#xff1a;2003-2019年 2、来源整理自统计NJ、各省NJ 3、指标包括&#xff1a;GDP、人均GDP、城镇化率、年末人口数、人口自然增长率 4、包括&#xff1a;31省 5、指标解释&#xff1a; …

2023届计算机专业弄潮儿如何快速找毕业论文文献?

人生苦短&#xff0c;我用Python 一、准备工作 软件选择 Python3.8pycharm 模块 requests #模拟请求 Selenium # 浏览器自动化操作winr打开搜索框&#xff0c;输入cmd按确定打开命令提示符窗口&#xff0c;输入pip install 加上你要安装的模块名&#xff0c; 回车即可安…

uml图 各连接线的含义

目录UML类图六种关系的总结1.泛化&#xff08;Generalization&#xff09;2.实现&#xff08;Realization&#xff09;3.关联&#xff08;Association&#xff09;4.聚合&#xff08;Aggregation&#xff09;5.组合&#xff08;Composition&#xff09;6.依赖&#xff08;Depen…

渗透学习-学习记录-利用浏览器的开发者工具实时修改网页前端JS代码(实现绕过)

文章目录前言一、JS前端的修改前言 最近学习了一些有关于JS脚本搭建网站方面的安全知识。通常来说JS是前端的页面代码&#xff0c;因此我们可以直接修改前端的JS代码来实现绕过&#xff0c;故我试着做了一下利用浏览器的开发者工具进行尝试修改页面&#xff0c;以此来直接进行…

<Python>使用python来控制windows系统音量

使用python可以对windows系统的音量进行读取或者设置。 平台&#xff1a;visual studio code 语言&#xff1a;python 需要的python模块&#xff1a; 1、pyqt5 2、ctypes&#xff1a; ctypes 是 Python 的外部函数库。它提供了与 C 兼容的数据类型&#xff0c;并允许调用 DLL …

中国芯,SNS521系列水燃行业云芯产品获奖

近日&#xff0c;由运营商财经网举办的2023中国财经TMT“领秀榜”盛典召开&#xff0c;天翼物联连获四个奖项&#xff0c;分别是&#xff1a;2022年度优秀物联网企业、2022年度5G最佳实践引领企业、2022年度运营商科技创新引领企业以及“SNS521系列水燃行业云芯产品”获2022年度…

命名空间!C++之路扬帆起航

&#x1f451;专栏内容&#xff1a;C学习笔记⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;日拱一卒&#xff0c;功不唐捐 目录一、前言二、命名空间1、命名空间的定义Ⅰ、正常定义Ⅱ、嵌套定义Ⅲ、不连续定义2、命名空间的使用Ⅰ、域解析操作符Ⅱ、us…

工作流代码

工作流代码目录概述需求&#xff1a;设计思路实现思路分析1.at parata:2.cash20193.cashEntity4.cashFrmTemplate5.chartType:参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make…

分享85个PHP源码,总有一款适合您

PHP源码 分享85个PHP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c;大家下载后可以看到。 源码下载链接&#xff1a;https://pan.baidu.com/s/1606ndyliGtwnjU8vsCLGRg?pwdq0k2 提…

MyBatis -- 参数占位符 #{} 和 ${}

MyBatis -- 参数占位符 #{} 和 ${}一、准备工作二、参数占位符 #{} 和 ${}三、特殊场景3.1 特殊场景 1 -- String3.1.1 使用 #{}3.1.2 使用 ${}3.1.3 分析与解决3.2 特殊场景 2 -- MySQL 关键字3.3 特殊场景 3 -- SQL 注入问题 (重要)3.4 特殊场景 4 -- 模糊查询 like一、准备工…

测试开发 | 想测试入门就必须要懂的软件开发流程

本文节选自霍格沃兹测试学院内部教材 从事软件测试行业&#xff0c;每天面对的被测对象都是软件。如果想要更好的去完成测试工作&#xff0c;首先需要对被测对象&#xff0c;也就是对软件要有基本的了解。 软件 与计算机系统操作有关的计算机程序、可能有的文件、文档及数据。…

多轮对话(二):多轮对话理解的研究进展和主流方法

本文是基于 Advances in Multi-turn Dialogue Comprehension: A Survey。这是一篇综述论文&#xff0c;我也顺便总结一下像我一样的小白&#xff0c;怎么读综述好一些。我读综述是为了快速切入某领域&#xff0c;比如我以前做的是跨模态检索&#xff0c;现在要进入对话系统&…

C++STL-stackqueue的实现

文章目录1. deque的简单介绍1.1 deque的原理介绍1.2 deque的优缺点1.3 为什么选择deque作为底层默认容器2. stack的实现3. queue的实现1. deque的简单介绍 在前面已经介绍过&#xff0c;stack和queue这两个容器适配器&#xff0c;是由deque这个容器封装的。现在我们就需要先学…

易观千帆 | 11月用户体验GX评测:银行APP用户体验稳定提升,从流量竞争逐渐转向用户体验竞争

易观&#xff1a;随着银行行业对用户体验的重视&#xff0c;手机银行APP用户体验稳定提升&#xff0c;竞争也从注重MAU的流量竞争逐渐转移为用户体验竞争。11月易观千帆用户体验GX评测显示&#xff0c;平安口袋银行、中国工商银行、招商银行仍是AAAAA级&#xff0c;在用户体验维…

对于搞钱我们是认真的

前言 大家好&#xff0c;我是xiezhr。一提到搞钱&#xff0c;想必大家都非常非常感兴趣&#xff0c;立马就精神抖擞了。说实话&#xff0c;在这疫情爆发这几年里&#xff0c;赚点钱真不容易。 不知道你是不是也跟我一样&#xff0c;一个人在夜深人静的时候就在想怎么才能通过自…

十三.动态内存管理

目录 一.为什么存在动态内存分配 二.动态内存函数的介绍 1.malloc函数 2.free函数 3.calloc函数 4.reallco函数 三.常见的动态内存错误 1.对NULL空指针的解引用操作 2.对动态开辟空间的越界访问 3.对非动态开辟的内存使用free释放 4.使用free释放一块动态开辟内存的一…

HTML实现除夕最美烟花,2023春节倒计时,新年不可没有烟花,最炫烟花代码分享

&#x1f4cb; 前言 &#x1f5b1; 博客主页&#xff1a;在下马农的碎碎念✍ 本文由在下马农原创&#xff0c;首发于CSDN&#x1f4c6; 首发时间&#xff1a;2023/01/17&#x1f4c5; 最近更新时间&#xff1a;2023/01/17&#x1f935; 此马非凡马&#xff0c;房星本是星。向前…

Android入门第58天-真机调试

开篇 随着我们的Android开始慢慢往后面涉及到设备、网络、通讯内容的开发。我们开始要把真机调试提上日程来了。 比如说&#xff1a;我们用Android扫描barcode、二维码都需要使用到Android的摄像头。而在Android Studio的AVP&#xff08;模拟器&#xff09;里&#xff0c;它的摄…

【树莓派4B】搭建HomeAssistant服务端(二)(systemd配置开机自启动,cpolar内网穿透)

设置开机自启动 创建home-assistanthomeassistant.service服务&#xff1a; sudo nano /etc/systemd/system/home-assistanthomeassistant.service复制以下内容&#xff0c;定义服务&#xff0c;其中After定义先行服务&#xff0c;ExecStart执行启动脚本&#xff1a; [Unit]…

程序跑起来数据总是关闭及丢失?保存进文件里面美滋滋

文章目录前言文件是什么&#xff1f;程序文件数据文件文件名C语言中的文件打开和关闭文件指针文件的打开和关闭fopenfclose文件的顺序读写文件的随机读写fseekftellrewind文件读取结束的判定feof&#xff1a;我们之间可能有误会文件缓冲总结前言 我们或许都有这样的苦恼&#…