- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
漏洞详解.
DOM XSS(Cross-site scripting)是一种Web安全漏洞,它利用了浏览器的DOM(文档对象模型)解析机制,通过注入恶意代码来攻击用户.
DOM XSS与传统的反射型或存储型XSS有所不同。在传统的XSS攻击中,攻击者通常在网页的URL或表单字段中注入恶意代码,用户访问网页时恶意代码就会被执行。而在DOM XSS攻击中,恶意代码被注入到网页的DOM中,当用户与网页交互时,恶意代码就会被执行.
DOM XSS攻击的危害可能比传统的XSS攻击更加严重,因为它不需要将恶意脚本传递给服务器,因此很难检测和防止。攻击者可以利用DOM XSS来窃取用户的敏感信息、执行钓鱼攻击、劫持用户会话等.
DOM XSS漏洞的原因在于,浏览器在解析HTML和JavaScript时,将HTML和JavaScript混合在一起处理,因此恶意代码可以通过修改DOM节点或属性来注入到网页中。攻击者可以通过各种方式来实现DOM XSS攻击,例如修改URL参数、修改表单数据、使用可编辑的HTML元素等.
下面将演示一个DOM的操作实例:
<! DOCTYPE html > < html > < head > < title > DOM示例 </ title > </ head > < body > < h1 id ="title" > Hello, World! </ h1 > < p > This is a paragraph. </ p > </ body > </ html > JavaScript代码: // 获取标题元素 var titleElement = document.getElementById("title"); // 修改标题文本 titleElement.innerHTML = "Hello, DOM!"; // 创建一个新段落元素 var newParagraph = document.createElement("p"); newParagraph.innerHTML = "This is a new paragraph."; // 将新元素插入文档 document.body.appendChild(newParagraph);
这段代码首先获取具有ID“title”的元素,并使用 innerHTML 属性将该元素的文本内容更改为“Hello,DOM!”然后,它创建一个新的段落元素,并使用 createElement() 方法和 innerHTML 属性将新元素的文本内容设置为“This is a new paragraph.”最后,它使用 appendChild() 方法将新元素添加到文档中.
下面我们将对四个等级的代码分别进行分析.
LOW
代码审计:
Unknown Vulnerability Source vulnerabilities /xss_d/source/low. php <? php # No protections, anything goes ?>
发现没有任何信息,直接查看网页源代码(这里截取的是我们要分析的部分).
< form name ="XSS" method ="GET" > < select name ="default" > < script > if (document.location.href.indexOf( " default= " ) >= 0 ) { var lang = document.location.href.substring(document.location.href.indexOf( " default= " ) + 8 ); document.write( " <option value=' " + lang + " '> " + decodeURI(lang) + " </option> " ); document.write( " <option value='' disabled='disabled'>----</option> " ); } document.write( " <option value='English'>English</option> " ); document.write( " <option value='French'>French</option> " ); document.write( " <option value='Spanish'>Spanish</option> " ); document.write( " <option value='German'>German</option> " ); </ script > </ select >
这段代码是一个HTML表单,其中包含一个下拉菜单( <select> 元素),名为 default ,并使用GET方法提交数据。当页面URL中存在 default= 参数时,该参数的值将被添加到下拉菜单中作为默认选项.
下拉菜单的选项内容由JavaScript代码动态生成。如果URL中存在 default= 参数,JavaScript将读取该参数的值并将其添加到下拉菜单中作为第一个选项。如果没有该参数,JavaScript将添加默认的四个选项:English、French、Spanish和German.
这里漏洞的产生,是因为JavaScript代码使用了 document.write 方法来将HTML代码动态写入到页面中。 document.write() 是一个JavaScript方法,它可以将文本、HTML代码或JavaScript代码写入到文档中。这里他没有对用户的输入做任何的过滤和验证.
漏洞利用:
http://127.0.0.1/DVWA-master/DVWA-master/vulnerabilities/xss_d/?default=<script>alert('XSS');</script>
在利用漏洞时我们只要在url中直接构建即可.
Medium:
代码审计:
Unknown Vulnerability Source vulnerabilities /xss_d/source/medium. php <? php // Is there any input? if ( array_key_exists ( "default", $_GET ) && ! is_null ( $_GET [ 'default' ]) ) { $default = $_GET ['default' ]; # Do not allow script tags if ( stripos ( $default , "<script") !== false ) { header ("location: ?default=English" ); exit ; } } ?>
default
参数从HTTP GET请求中传递过来,如果有,则将其存到变量 $default
中。 stripos()
函数判断 $default
字符串中是否包含 <script
字符串,如果包含,则说明用户尝试注入脚本代码,这时候就将请求重定向到 ?default=English
页面,并终止代码的执行。 $default
字符串中不包含 <script
字符串,则说明用户的请求是安全的,可以继续在后续代码中使用。 那么通过代码审计我们可以得知对<script>标签进行了过滤,那么我们使用其他标签进行攻击.
漏洞利用:
http: // 127.0.0.1/DVWA-master/DVWA-master/vulnerabilities/xss_d/?default=</option></select><img src=x onerror=alert(1)>
<img> 标签的 onerror 事件属性是一种常见的XSS攻击方式,在原本加载图片的过程中,如果这个图片无法正常加载,浏览器就会自动执行 onerror 事件属性中的JavaScript代码。攻击者可以利用这一点,将恶意代码放置在 onerror 事件属性中,一旦图片加载失败,该代码就会在用户浏览器中执行。除此之外,还有一些标签能进行XSS攻击.
onload
属性的 <img>
标签,当该标签加载时,它可能会执行一个JavaScript函数,该函数会尝试从浏览器中获取敏感信息。
< img src= "hack.gif" onload= "stealInfo()">
iframe标签。攻击者可以向一个 iframe 标签中引用一个恶意网站,该网站可能包含一个恶意脚本,该脚本可能会执行跨源攻击.
a标签。攻击者可以在一个 <a> 标签中插入一个恶意的 href 属性,该属性将指向一个恶意网站,当用户点击该链接时,它可能会导致跨站点脚本攻击.
High:
代码审计:
Unknown Vulnerability Source vulnerabilities /xss_d/source/high. php <? php // Is there any input? if ( array_key_exists ( "default", $_GET ) && ! is_null ( $_GET [ 'default' ]) ) { # White list the allowable languages switch ( $_GET ['default' ]) { case "French": case "English": case "German": case "Spanish": # ok break ; default : header ("location: ?default=English" ); exit ; } } ?>
这里进行了白名单验证。代码首先检查 GET 请求是否具有名为 'default' 的参数,并且该参数的值不为空。如果存在该参数,则使用 switch 语句对该参数进行检查,检查是否包含在允许列表中(指定为 "French", "English", "German" 或 "Spanish")。如果在允许列表中,则不进行任何操作,否则,将网页重定向到同一页面,但将 'default' 参数设置为英语("English").
漏洞利用:
http: // 127.0.0.1/DVWA-master/DVWA-master/vulnerabilities/xss_d/?default=English#</option></select><BODY ONLOAD=alert(document.cookie)>
可以看到我们在default参数值后加上了#,需要注意的是,#号注释掉的原有代码并不会影响新插入的代码的执行,因为#号会把其后面的内容都注释掉,而不会对其前面的代码造成影响.
Impossible:
代码审计:
Unknown Vulnerability Source vulnerabilities /xss_d/source/impossible. php <? php # Don't need to do anything, protection handled on the client side ?>
< form name ="XSS" method ="GET" > < select name ="default" > < script > if (document.location.href.indexOf( " default= " ) >= 0 ) { var lang = document.location.href.substring(document.location.href.indexOf( " default= " ) + 8 );
// 这里的语句变了,并没有对我们输入的内容进行URL解码,所以我们输入的任何内容都是经过URL编码,然后直接赋值。因此不存在XSS漏洞。 document.write( " <option value=' " + lang + " '> " + (lang) + " </option> " ); document.write( " <option value='' disabled='disabled'>----</option> " ); } document.write( " <option value='English'>English</option> " ); document.write( " <option value='French'>French</option> " ); document.write( " <option value='Spanish'>Spanish</option> " ); document.write( " <option value='German'>German</option> " ); </ script > </ select >
防御方法:
对用户输入进行过滤和验证:在客户端和服务器端都需要对用户输入进行正则表达式匹配和过滤,以确保用户输入不包含任何可疑字符或代码.
使用CSP:Content Security Policy (CSP)可以限制从哪些源加载资源(如脚本、图像、CSS等),以及哪些动作允许执行(如eval()、setTimeout()等)。通过在HTTP响应头设置CSP策略,可以防止XSS攻击.
消除DOM XSS源:通过使用框架或库提供的API,可以有效地避免DOM型XSS攻击。例如,使用jQuery的.text()和.html()方法来插入文本和HTML,而不是使用.innerHTML属性,可以避免一些DOM XSS攻击.
对JavaScript API进行限制:在某些情况下,为了保护网站免受XSS攻击,可以通过限制JavaScript API的访问来实现。例如,可以对document.cookie进行限制,可以使用HttpOnly标志来防止JavaScript访问cookie.
对输入进行编码:将用户输入作为HTML、CSS或JavaScript的字符串进行编码,以确保任何用户输入都不会被执行为恶意代码.
总之,防止DOM型XSS攻击需要综合使用上述措施,特别是对用户输入进行过滤和验证,并使用CSP限制恶意资源的加载和动作的执行.
。
最后此篇关于DVWA-XSS(DOM)的文章就讲到这里了,如果你想了解更多关于DVWA-XSS(DOM)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
SQL Injection,是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的。结构,从而达到执行恶意SQL语句的目的。 LOW: 代码审计:
Insecure CAPTCHA(不安全的验证码) 加载验证码需要向Google申请验证码API。由于大陆地区访问不了Google,所以无法获取到验证码,所以需要耐心等待访问Google超时时间才能做
File Upload(文件上传) 一句话木马的构成 常见的一句话木马: 最外层的是 这是php文件的起始和结束标记, php会解析执行 里面的代码。 然后是eval函数,eval()函数把字符串
File Inclusion(文件包含) 前言 本地文件包含:输入相对路径和文件名即可 远程文件包含:输入远程地址,会自动解析php代码 PHP伪协议 file://——访问本地文件系统 http:/
SQL Injection(SQL回显注入) 注入思路: 是否有注入?是字符型还是数字型?查看回显位 1. Low 源码关键语句 $query = "SELECT first_name, last_
我已经配置了DVWA ,但该工具无法访问,因为它抛出错误: Fatal error: Uncaught Error: Call to undefined function mysql_connect(
漏洞详解。 DOM XSS(Cross-site scripting)是一种Web安全漏洞,它利用了浏览器的DOM(文档对象模型)解析机制,通过注入恶意代码来攻击用户。 DOM XSS与
我正在尝试设置 Damn Vulnerable Web App (DVWA) (www.dvwa.co.uk)。 我根据这些说明安装了 XAMPP:http://www.apachefriends.o
SQL Injection(blind)(盲注) 1. Low 手工注入方法 服务端只会返回不会显示搜索值,此类无回显的SQL注入称作SQL盲注。 本题只会返回用户存在与否,即真假,此类盲注成为布尔(
我试图在kali linux上安装DVWA 1.9。一切都运行正常,但是当我尝试连接数据库时,发生设置错误,显示: PHP function allow_url_include: Disabled 我
CSRF:Cross-site request forgery(跨站请求伪造) 本章使用的浏览器是Firefox63,由于浏览器和版本不同,复现结果可能不同 1.Low 这是一个修改用户密码的界面,查
DVWA_XSS(Stored) 存储性XSS 一句话概括:操纵用户客户端执行任意js脚本.脚本能实现什么功能,xss就可以怎样 可以和CSRF联用 1.Low 在Message中插入alert(/x
这个问题已经有答案了: Fatal error: Call to undefined function mysql_connect() [duplicate] (17 个回答) 已关闭 3 年前。 当
我无法使用 DVWA、apache2 在我的 kali 虚拟机上启动本地服务器。DVWA 中显示的错误消息是 - Could not connect to the MySQL service. Ple
我遵循了几组说明,包括一个在线录制的讲座,它显示只需将 dvwa 文件夹复制到/opt/lampp/htdocs 并在启动 Xampp 服务的浏览器中访问 localhost/dvwa。我试过了,但这
我正在通过 XAMPP 在 Windows 上设置 DVWA,我在 Google 中搜索了大约 24 小时 - 我似乎找不到答案。 我的问题是设置服务器: PHP function `allow_ur
我正在试验有关 SQLi 的 DVWA。 (低的)到目前为止,我现在可以看到位于数据库“dvwa”的“用户”表中的用户名和密码。我现在想知道为什么我无法使用以下方法修改/更改/更新特定用户的密码: ;
我正在尝试使用 jsoup 发送带有手动插入 cookie 的请求,以检测 SQL 注入(inject)漏洞。问题似乎是只有一个 cookie 有效,我不明白为什么。我首先手动验证自己并获取 cook
我是一名优秀的程序员,十分优秀!