实训作业day04

一、反射型、存储型、DOM型XSS特点和区别)

  • 反射型XSS

    攻击者构造一个参数包含恶意js代码的URL,诱骗用户点击,用户访问后向服务器发送请求,服务器响应包含恶意代码的页面,并在客户端执行。例如服务器后端存在PHP代码

echo ‘

Hello ’ .$_GET[ ‘name’ ] .’
';

参数name传入js代码后,则会在服务器生成恶意页面,然后返回给客户端执行。

  • 存储型XSS

    攻击者通过网页的留言、评论等交互处将恶意代码注入到服务器数据库中,用户请求后响应包含恶意代码的页面。存储型XSS漏洞跟反射型形成的原因一样,不同的是存储型XSS下攻击者可以将脚本注入到后台存储起来,构成更加持久的危害,因此存储型XSS也称“永久型”XSS。

  • DOM型XSS

    攻击者构造一个参数包含恶意js代码的URL,诱骗用户点击,用户访问后向服务器发送请求,服务器的响应并不包含恶意代码,而是URL中的代码直接在本地浏览器由js执行。DOM型XSS是一种前端js渲染造成的反射性XSS,不需要与服务器交互,难以被抓包检测。DOM型XSS和别的XSS最大的区别就是它不经过服务器,仅仅是通过网页本身的JavaScript进行渲染触发。例如下面的html代码,当URL的参数a传入js恶意代码后,会直接被html内嵌的js代码写入到html中,并不需要经过服务器的处理。

    <html>
    	<head>
        	<title>DOM-XSS test</title>
        </head>
        <body>
        	<script>
          		var a=document.URL;
      	  		document.write(a.substring(a.indexOf("a=")+2,a.length));
        	</script>
      	</body>
    </html>
    

对比来看反射型:经过后端,不经过数据库。存储型:经过后端,经过数据库。DOM:不经过后端,DOM型XSS漏洞是基于文档对象模型)的一种漏洞,通过url传入参数去控制触发的。

二、XSS 的fuzz字典

在https://github.com/HackAllSec/FuzzDict或者https://github.com/oldboot/FuzzDicts下载fuzz字典。
在这里插入图片描述
在这里插入图片描述

三、XSS挑战靶场打靶(https://xss.tesla-space.com/)

第一关

  • 在url中把“name=test”中的test改为

< script>alert(‘1’)< /script> //需要删去空格

在这里插入图片描述
在这里插入图片描述

第二关

  • 先输入keyword为弹窗命令“< script>alert(‘1’)< /script>”,按F12后发现其在input标签里,只要在前面加上“>即可闭合input。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

第三关

  • 输入后检查源码发现和第二关很像,输入的内容都被放进了Input标签里,尝试用"<闭合input,但双引号和尖括号都被编码。
    在这里插入图片描述

  • 将双引号改为单引号发现能闭合标签,但是后边的内容也被编码。
    在这里插入图片描述

  • 使用html表单的onblur事件,输入:'οnblur=’alert(1)’”(元素失去焦点时弹窗)。
    在这里插入图片描述

  • 点击搜索后移开鼠标,出现弹窗。
    在这里插入图片描述

第四关

  • 尝试第二关闭合标签(‘>< script>alert(‘1’)< /script>),通关成功。
    在这里插入图片描述

第五关

  • 尝试输入‘>< script>alert(‘1’)</ script>,发现单引号和尖括号都没有被过滤,而script变成“scr_ipt“。可以通过javascript伪协议来解决。
    在这里插入图片描述

  • 输入”>< a href=“javascript:alert(‘1’)”>1< /a>,点击产生的超链接“1“弹窗成功。
    在这里插入图片描述
    在这里插入图片描述

第六关

  • 输入第五关的答案,查看源码发现input标签已闭合但“href”变成了“hr_ef”。
    在这里插入图片描述
    在这里插入图片描述

  • 尝试将“href”变成了“hRef”绕过检查,点击超链接,弹窗成功。
    在这里插入图片描述
    在这里插入图片描述

第七关

  • 输入第五关的答案,发现href和script被去掉了。
    在这里插入图片描述

  • 将href和scipt嵌入语句,输入”>< a hrhrefef=“javascrcriptipt:alert(‘1’)”>1< /a>,点击产生的超链接“1“弹窗成功。
    在这里插入图片描述

第八关

  • 输入第5关答案,发现双引号被编码,替换成单引号也一样。
    在这里插入图片描述

  • 将javascript:alert(‘1’)改成html编码输入(在burpsuite使用html编码工具),弹窗成功。
    在这里插入图片描述
    在这里插入图片描述

四、总结浏览器解析机制(或分析《XSS注入》执行成功/不成功的原因)

  • 一个HTML解析器作为一个状态机,它从输入流中获取字符并按照转换规则转换到另一种状>态。在解析过程中,任何时候它只要遇到一个’<‘符号(后面没有跟’/'符号)就会进入“标签开始状态”。然后转变到“标签名状态”,“前属性名状态(”…最后进入“数据状态(Data state)”并释放当前标签的token。>当解析器处于“数据状态(Data state)”时,它会继续解析,每当发现一个完整的标签,就会释放出一个token。

  • url解析:URL资源类型必须是ASCII字母(U+0041-U+005A || U+0061-U+007A),不然就会进入“无类型”状态。在URL解析器的时候不能被URL编码,不能对协议类型进行任何的编码操作,不然URL解析器会认为它无类型。

    javascript解析:“script”块有个有趣的属性:在块中的字符引用并不会被解析和解码。unicode不可以对特殊符号进行编码,例如:’ " \n。

  • 解析流: 在网页中有很多地方需要多个解析器来协同工作。浏览器从网络堆栈中获得一段内容后,触发HTML解析器来对这篇文档进行词法解析。由于URL位置不同,URL解析器可能会在JavaScript解析器之前或之后进行解析。如果解析器正在解析一个函数调用语句,圆括号部分必须为“(”和“)”,而不能是\u0028和\u0029。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值