DOM-based xss
这个漏洞往往存在于客户端脚本,如果一个Javascript脚本访问需要参数的URL,且需要将该信息用于写入自己的页面,且信息未被编码,那么就有可能存在这个漏洞。
(一)DOM—based XSS漏洞的产生
DOM—based XSS漏洞是基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM—based XSS漏洞。
(二)DOM—based XSS攻击原理
DOM—based XSS攻击源于DOM相关的属性和方法,被插入用于XSS攻击的脚本。一个典型的例子如下
所述。
H TTP请求http://www.DBXSSed.site/welcome.html?name=zhangsan使用以下的脚本打印出登录用户zhangsan的名字,即
<SCRIPT>
var pos=docmnent.URL.indexOf(”name=”)+5;
document.write (document.URL.substring(pos,document.URL.1ength));
< /SCRIPT>
如果这个脚本用于请求http://www.DBXSSed.site/wPJconle.html?name=<script>alert(‘‘XSS”)</script>时,就
导致XSS攻击的发生。
当用户点击这个链接,服务器返回包含上面脚本的HTML静态文本,用户浏览器把HTML文本解析成DOM,DOM中的document对象URL属性的值就是当前页而的URL。在脚本被解析时,这个URL属性值的一部分被写入HTML文本,而这部分HTML文本却是JavaScript脚本,这使得<script>alert(“XSS”)</script>成为页面最终显示的HTML文本,从而导致DOM—base XSS攻击发生。
DOM—based XSS攻击过程如图l所示。注意(5)黑客提供的URL被页面的JAVASCRIPT使用,生成攻击载荷。
下面是一篇比较易懂的文章,觉得不错,读后对dom xss有比较清晰的认识:
用户可以从一个表单页提交数据,数据提交到服务期端后进行html编码后保存到数据库,然后
有个修改这个提交信息的页面,会把信息从数据库里查询出来,填充到INPUT控件的VALUE属性
里,来达到一个展示现有数据的效果。这里的数据在输出到value之前经过html编码的,所以输
出到value里没有跨站的问题,但是这里程序为了实现一个其他功能,加了段js脚本,脚本取得
前面提到的INPUT控件的VALUE,进行了一系列的动作和条件判断后,符合条件的话就把这个VALUE
值放到一个DIV的INNERHTML里,这一放就放出了一个跨站问题来。可能你比较奇怪,不是VALUE
里的值被HTML编码过了么,为什么这里还有问题呢,其实如果源代码是VALUE="<a>",虽
然经过HTML编码,但是用脚本通过DOM的方式来取得VALUE的值的时候,又会被解码。如果看我语
言描述不太明白的话,下面例子的php语法简单演示:
<?php
// 从数据库取得name
$name = htmlentities(get_name_from_db());
?>
name:
<input id="tb1" type="text" value="<?php echo $name;?>" />
<div id="pnl1"></div>
<script type="text/javascript">
<!–
var tb1 = document.getElementById("tb1");
var pnl1 = document.getElementById("pnl1");
if (…/*一些判断*/…) {
pnl1.innerHTML = tb1.value; // xss
}
//–>
</script>
假设我输入一个<button>,这个修改页面的源代码应该是这样,页面里就会冒出个没有字的按钮:
name:
<input id="tb1" type="text" value="<button>" />
<div id="pnl1"></div>
<script type="text/javascript">
<!–
var tb1 = document.getElementById("tb1");
var pnl1 = document.getElementById("pnl1");
if (…/*一些判断*/…) {
pnl1.innerHTML = tb1.value; // xss
}
//–>
</script>
于是你很容易就会想到写入这样一句:<script>alert(document.cookie);</script>,结果呢?并
没有一个熟悉的对话框弹出来,INNERHTML属性里写入<script>块是不会被执行的,所以呢我们要
用事件来执行我们的代码:
<img src="http://image2.sina.com.cn/home/images/sina_logo2.gif" width="0" height="0" border="0" onload="javascript:alert(document.cookie);">
写完了回头想想,这个例子被我添油加醋后显得不那么合常理了,不过不影响我要表达的意思,所
以合理性大家就不要追究了。
-------------------------------------------------------------------------------------------
luoluo有写过一篇老文章,讲htmldecode dom时的xss,可以参考下,到此dom xss就很容易理解了~
如下:
这个函数是不安全的,如果参数带有用户输入,就可能导致执行JS代码:
function HTMLDecode(strEncodeHTML)
{
var div = document.createElement('div');
div.innerHTML = strEncodeHTML;
return div.innerText;
}
HTMLDecode("<img src=1 onerror=alert(1) />");
有人很傻很天真的以为,这个没有被appendChild到dom树的元素,应该不会执行。
例如,假设应用程序返回的错误页面包含以下脚本:
这段脚本解析 URL,提取出message参数的值,并把这个值写入页面的HTML源代码中。如果按开发者预想的方式调用,它可以和前面的示例中一样,用于创建错误消息。但是,如果攻击者设计出一个 URL,并以JavaScript代码作为message参数,那么这段代码将被动态写入页面中,并像服务器返回代码一样得以执行。在这个示例中,前面示例中利用反射型XSS漏洞的相同URL也可用于生成一个对话框:https://wahh-app.com/error.php?message=<script>alert('xss');</script>
(三)XSS解决方案
常用的防止XSS技术包括:
(1)与SQL注入防护的建议一样,假定所有输入都是可疑的,必须对所有输入中的script、iframe等字样进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括HTTP请求中的Cookie中的变量,HTTP请求头部中的变量等。
(2)不仅要验证数据的类型,还要验证其格式、长度、范围和内容。
(3)不要仅仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。
(4)对输出的数据也要检查,数据库里的值有可能会在一个大网站的多处都有输出,即使在输入做了编码等操作,在各处的输出点时也要进行安全检查。
(5)在发布应用程序之前测试所有已知的威胁。
DOM-based xss的更多相关文章
- DOM based XSS Prevention Cheat Sheet(DOM Based XSS防御检查单)
本文为翻译版本,原文请查看 https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet 介绍 谈到XSS攻击,有三种公认的 ...
- Portswigger web security academy:DOM Based XSS
Portswigger web security academy:DOM Based XSS 目录 Portswigger web security academy:DOM Based XSS DOM ...
- DVWA 黑客攻防演练(十二) DOM型 XSS 攻击 DOM Based Cross Site Scripting
反射型攻击那篇提及到,如何是"数据是否保存在服务器端"来区分,DOM 型 XSS 攻击应该算是 反射型XSS 攻击. DOM 型攻击的特殊之处在于它是利用 JS 的 documen ...
- 基于dom的xss漏洞原理
原文:http://www.anying.org/thread-36-1-1.html转载必须注明原文地址最近看到网络上很多人都在说XSS我就借着暗影这个平台发表下自己对这一块的一些认识.其实对于XS ...
- 小白日记49:kali渗透测试之Web渗透-XSS(三)-存储型XSS、DOM型XSS、神器BEFF
存储型XSS与DOM型XSS [XSS原理] 存储型XSS 1.可长期存储于服务器端 2.每次用户访问都会被执行js脚本,攻击者只需侦听指定端口 #攻击利用方法大体等于反射型xss利用 ##多出现在留 ...
- 基于DOM的XSS注入漏洞简单解析
基于DOM的XSS注入漏洞简单解析http://automationqa.com/forum.php?mod=viewthread&tid=2956&fromuid=21
- 风炫安全WEB安全学习第二十二节课 DOM型XSS讲解
风炫安全WEB安全学习第二十二节课 DOM型XSS讲解 Dom型XSS演示 通过Javascript,可以重构整个HTML文档,你可以添加.移除.改变或重排页面上的项目 要改变页面的某个东西,Java ...
- DOM型XSS
打开漏洞页面,随便输入点东西,发现没有啥东西. 但是我们发现我们输入的11,在面的herf 中 看到这儿就很简单了,我们只需要闭合一下,就可以构造出我们的payload了. '><img ...
- XSS DOM 测试
dvwa DOM XSS DOM Based XSS:是基于DOM文档对象模型的操作,通过前端脚本修改页面的DOM节点形成的XSS,该操作不与服务器端进行交互,而且代码是可见的,从前端获取到DOM中的 ...
- XSS 防御方法总结
1. XSS攻击原理 XSS原称为CSS(Cross-Site Scripting),因为和层叠样式表(Cascading Style Sheets)重名,所以改称为XSS(X一般有未知的含义,还有扩 ...
随机推荐
- TortoiseGIT安装过程及问题
1,安装Git.一路默认 2,安装TortoiseGit,一路安装完毕.重启电脑. 3,配置TortoiseGit.这是最重要一步. 配置 remote,即远程地址,用于以后pull 或 push操作 ...
- JS 之DOM对象(2)
http://www.cnblogs.com/zourong/p/4792394.html 这篇文件介绍了DOM1中的一些属性和方法,下面的内容主要介绍DOM2和DOM3中新增的内容. 框架的变化 框 ...
- 2016科幻惊悚《第五波》HD720P.中英双字
导演: J·布莱克森编剧: 苏珊娜·格兰特 / 阿齐瓦·高斯曼 / 杰夫·皮克纳 / 瑞克·杨西主演: 科洛·莫瑞兹 / 尼克·罗宾森 / 朗·里维斯顿 / 玛姬·丝弗 / 亚历克斯·罗伊 / 更多. ...
- 把字符串添加到HashMap中
&ZhuoTai_Name=205&NoSongDanDish=0&OrderZhuoTai_ID=aca87b77797e4c859a53c228471a2636&Z ...
- c语言自加自减三道题
int x , y,z; x = 0; y = z = -1; x += -z ---y; printf("x=%d\n",x) x = 2 为什么? x + = -z - - ...
- 20145222黄亚奇《Java程序设计》第10周学习总结
20145222 <Java程序设计>第10周学习总结 学习总结 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接 ...
- 【MPI学习5】MPI并行程序设计模式:组通信MPI程序设计
相关章节:第13章组通信MPI程序设计. MPI组通信与点到点通信的一个重要区别就是:组通信需要特定组内所有成员参与,而点对点通信只涉及到发送方和接收方. 由于需要组内所有成员参与,因此也是一种比较复 ...
- 千万不要在JS中使用连等赋值操作
前言 文章标题这句话原本是在国外某JavaScript规范里看到的,当时并没有引起足够的重视,直到最近一次出现了bug发现JS里的连等赋值操作的特色(坑). 网上搜索一番发现一个非常好的连等赋值的(来 ...
- 工作的思考十五:升职前需要做的准备(TeamLeader)
当一个人在公司的工作年限以及经验的积累到达一个程度的时候,升职其实是件高兴的事,但面临角色的转变需要提前做些准备的. 其实如果你对你的职业规划很清楚的话,那么你就应该在升职之前就会开始进行角色的转换. ...
- 工作的思考十七:工作中容易犯的错误 - Delay
其实IT是一个很严谨的行业,不管是从代码角度还是从日常的工作分配都是按计划来的. 从今年年初到现在,在我的工作中出现了两次“Delay”,第一次不以为然,虽然上司也找过我谈话,但没意识到问题的严重性. ...