模拟存储型XSS跨站漏洞偷取Cookie-八月猫博客【小白】

声明 :

严禁读者利用以下介绍知识点对网站进行非法操作 , 本文仅用于技术交流和学习 , 如果您利用文章中介绍的知识对他人造成损失 , 后果由您自行承担 , 如果您不能同意该约定 , 请您务必不要阅读该文章 , 感谢您的配合 !


攻击者要偷取Cookie , 就要让他们精心构造的恶意代码在受害者的计算机上运行 , 一般来说 , 是在用户访问一个网页的时候执行一段JavaScript代码 , 这段代码会获取用户在当前页面的Cookie , 然后利用Http请求将这些数据发送到接收者的地址 , 这样就完成了一个Cookie的盗取过程 , 这里 , 要解决的问题有两个 :

  1. 如何能让用户在访问网页的同时下载并执行攻击者的恶意代码
  2. 如何来接受用户发送给我们的Cookie

一般来说 , 解决方案如下 :

  1. 要在一个网站上寻找有用户交互的地方 , 最常见的就是留言版 , 如果恶意攻击者拥有了留言的能力 , 而且网站不能检测出我们的留言的合法性 , 这样就给了恶意攻击者插入恶意代码的机会 , 这样 , 如果恶意攻击者插入的留言可以被管理员看到的话 , 那么管理员的Cookie就极有可能被攻击者拿到 , 或者如果这个留言是公开的 , 任何访客都可以进行浏览 , 那么任何浏览攻击者留言的人 , 他们的Cookie都可以被攻击者恶意代码获取到 , 并发送到攻击者的后台 . 如果这些Cookie是和用户的登陆状态相关联的 , 那么拥有了这些Cookie , 在Cookie有效的时间内 , 恶意攻击者就可以通过在HTTP请求头中添加这些Cookie以达到不使用身份认证也可以获取到授权的效果 . 恶意攻击者一般是要将自己精心构造的留言发送到服务器 , 这次攻击成功与否主要就在于这个精心构造的留言会不会被安全防护措施过滤掉 .
  2. 一旦攻击者的恶意代码成功插入到 , 必须得有一个接收Cookie的地方 , 一般来说攻击者会使用一台云服务器 , 在云服务器上运行一个Web服务器 , 这个Web服务器就是攻击者Cookie发送的地址 , Web服务器在接收到客户端(浏览了具有攻击者跨站漏洞脚本的用户)发送来的Cookie(一般来说就是GET/POST参数)之后 , 对参数进行储存 , 然后攻击者就可以对这些Cookie进行分析和利用

分为三步 :

  1. 搭建用于接收Cookie的Web服务器 , 这里测试的时候使用了笔者购置的一台虚拟主机 , 保证虚拟主机的Web服务正常开启 , 任何接入互联网的用户都可以正常访问以后 , 我们这里需要编写一个接收恶意脚本传递的参数的PHP文件 , 用于接受Cookie并把Cookie保存起来 , 这里我们暂时将Cookie保存在本地的一个文件中 , 以后我们可以将脚本进行优化 , 将Cookie数据保存在数据库中

发现的确是可以正常运行的
现在攻击者接收Cookie的服务器已经搭建完成 , 现在我们就需要来模拟攻击者进行的最重要的一步 , 也就是将攻击者自己构造的代码插入被入侵的网站
这里恶意攻击选取了一个具有留言板功能的网站进行测试 :
由于安全问题 , 这里就只进行截图 , 会对网站的地址进行隐藏
这里经过恶意攻击者不懈的努力和测试 , 发现了该网站没有过滤
<body onload=></body>这个标签 , 因此恶意代码就可以插入到onload这里
这里恶意攻击者为了不让自己的恶意代码暴露地特别明显 , 因此对恶意代码进行了一定的加密
恶意攻击者使用了Base64对恶意代码进行了编码 , 这样一般情况下 , 网站的管理员是很难这段代码是恶意代码的
恶意代码的大概逻辑是 :
利用JavaScript动态地向DOM中添加一个IMG标签 , 将这个标签的src属性设置为攻击者接收cookie参数的地址 , 这样浏览器在解析DOM的时候就会去访问攻击者的那个接收Cookie的地址 , 并且把自身的Cookie以参数的形式传递
在JavaScript中 , 要动态添加DOM节点 , 可以利用以下语句 :

然后攻击者要让这段代码执行 , 而且还要让其足够隐蔽 , 因此这里攻击者要将这段JavaScript代码进行Base64编码 , 然后再利用JavaScript的window.atob()进行Base64解码 , 最后再使用eval()函数进行执行 , 这样的话 , 攻击者最终插入的恶意代码为 :

然后因为是留言系统 , 这里再写一些留言来掩人耳目