在IE中javascript的字符串可以被NULL字符截断,不过仅仅是getValue的时候截断.

测试代码:

alert('abc\0 def')

如果只是这样最多就是spoofing,但配合IE(<=8)的一个解析bug和php的[魔术引号]就是一个DOM XSS了.

IE解析bug:

<a href="<body/onload=alert(1)>click</a>

在前面的我分享过的XSS向量里有提到过,就是当解析器不能匹配到一个标签里属性值的结束界定符的时候会认为这是个无效的标签,将其当成文本.

<a href=" 变成 &lt;a href=&quot; 
<body/onload=alert(1)>被解析成html.

PHP的转义问题

在5.3.0之前,php默认开启了magic_quotes_gpc.

它不但会转换" ' 之类的字符,还会将转义%00转换成\0

在javascript的字符串中\0又会被转义回去.

注:即便关闭了魔术引号,开发者一般也会实用addslashes之类的函数,这些函数同样会将%00转换成\0

So

document.write('<img src="<iframe/onload=alert(1)>\0">')

转自:http://zone.wooyun.org/content/463

相关评论:


Xhm1n9 | 2012-06-29 01:34

实用的技巧:)

horseluke (微碌) | 2012-06-29 01:53

PHP的输出转义一般用htmlspecialchars的...addslashes只是数据库相关转义,输出转义用addslashes肯定不能通过代码审计的。

但是............有没有人研究过绕过strip_tags?见到有人用这个来做输出转义,觉得不安全,但又说不出所以然,更试不出所以然...

 

Sogili (-_-)Web疯狂科学家//mmme.me(-_-) | 2012-06-29 01:58

@horseluke 嗯,不过htmlspecialchars不会转换%00,如果真的没处理%00就更好玩了.

 

horseluke (微碌) | 2012-06-29 02:03

@Sogili 不明白,对XSS不熟悉,求详解...

 

Sogili (-_-)Web疯狂科学家//mmme.me(-_-) | 2012-06-29 02:09

@horseluke IE可以解析<[0x00]i[0x00]0m[0x00]0g src=xx:x o[0x00]nerror=alert(1)> 可以绕过很多filter,所以不处理[0x00]是很危险的.我了解的只是XSS的方面,我想对服务端安全影响也不小.

 

_Evil (性趣是最好的老师.) | 2012-06-29 06:44

web科学家这个不错 不过范围小了的 只能ie

 

gainover (">_< ' / & \ 看啥,没见过跨站字符么) | 2012-06-29 07:53

可以在自己电脑上写个利用场景试一试

 

[点此查看更多评论]

留言评论(旧系统):

晴天小铸 @ 2012-06-29 09:54:37

嘿嘿 我是你忠诚的粉丝 这个截断 %00 \0 对于用c语言代码基本通用截断(在没过滤的情况下).. 以前gainover给我几个测试代码,好像能过其他浏览器的迟点研究下wooyun讨论 不见不散

本站回复:

%00 截断是 Windows 系统的通病,并不是和语言有关系,PHP %00 截断也是因为这个,也是 PHP 迟迟不修复的原因,因为根本不是PHP自身的问题,后来 PHP 扛起了这个重担,于是“第三方修复了”,当初谁知道 Windows 碰到 %00 就会终止呢?蛋疼的 Windows……