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

9 篇文章 0 订阅
4 篇文章 0 订阅

前言:

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

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

登录靶场:BUUCTF在线评测

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

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

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

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

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

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

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

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

getQueryVariable('autosubmit') !== false){  //如果出错就会执行getQueryVariable函数

autoForm.action = (getQueryVariable('action') == false) ? location.href : getQueryVariable('action');
    		//变量action执行getQueryVariable函数

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值